ngx-dev-toolbar 2.0.0 → 2.0.2

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.
@@ -1,6 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, computed, Injectable, Component, ChangeDetectionStrategy, input, inject, ElementRef, output, ViewEncapsulation, ViewChild, ContentChild, model, DestroyRef } from '@angular/core';
3
- import { trigger, state, style, transition, animate } from '@angular/animations';
2
+ import { signal, computed, Injectable, ChangeDetectionStrategy, Component, input, inject, ElementRef, output, viewChild, contentChild, model, DestroyRef, effect, ViewEncapsulation } from '@angular/core';
3
+ import { CommonModule, DOCUMENT } from '@angular/common';
4
+ import { trigger, state, transition, style, animate } from '@angular/animations';
4
5
  import * as i1 from '@angular/cdk/overlay';
5
6
  import { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
6
7
  import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
@@ -10,7 +11,6 @@ import * as i1$1 from '@angular/forms';
10
11
  import { FormsModule } from '@angular/forms';
11
12
  import * as i2 from '@angular/cdk/menu';
12
13
  import { CdkMenuModule } from '@angular/cdk/menu';
13
- import { CommonModule } from '@angular/common';
14
14
 
15
15
  class DevToolbarStateService {
16
16
  constructor() {
@@ -21,6 +21,7 @@ class DevToolbarStateService {
21
21
  delay: 3000,
22
22
  error: null,
23
23
  theme: 'dark',
24
+ config: {},
24
25
  });
25
26
  // Selectors
26
27
  this.isVisible = computed(() => !this.state().isHidden || this.hasActiveTool());
@@ -33,6 +34,7 @@ class DevToolbarStateService {
33
34
  * The delay to hide the toolbar
34
35
  */
35
36
  this.delay = computed(() => this.state().delay);
37
+ this.config = computed(() => this.state().config);
36
38
  }
37
39
  // State updates
38
40
  setVisibility(isVisible) {
@@ -82,10 +84,16 @@ class DevToolbarStateService {
82
84
  isHidden: !state.isHidden,
83
85
  }));
84
86
  }
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
+ setConfig(config) {
88
+ this.state.update((state) => ({
89
+ ...state,
90
+ config,
91
+ }));
92
+ }
93
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
94
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarStateService, providedIn: 'root' }); }
87
95
  }
88
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarStateService, decorators: [{
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarStateService, decorators: [{
89
97
  type: Injectable,
90
98
  args: [{
91
99
  providedIn: 'root',
@@ -93,8 +101,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
93
101
  }] });
94
102
 
95
103
  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: `
104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: AngularIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
105
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.7", type: AngularIconComponent, isStandalone: true, selector: "ndt-angular-icon", ngImport: i0, template: `
98
106
  <svg width="24" height="24" viewBox="0 0 24 24" fill="none">
99
107
  <defs>
100
108
  <linearGradient
@@ -122,7 +130,7 @@ class AngularIconComponent {
122
130
  </svg>
123
131
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
124
132
  }
125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AngularIconComponent, decorators: [{
133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: AngularIconComponent, decorators: [{
126
134
  type: Component,
127
135
  args: [{
128
136
  selector: 'ndt-angular-icon',
@@ -162,8 +170,8 @@ class BoltIconComponent {
162
170
  constructor() {
163
171
  this.fill = input('#FFFF');
164
172
  }
165
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BoltIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
166
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: BoltIconComponent, isStandalone: true, selector: "ndt-bolt-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
173
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: BoltIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
174
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: BoltIconComponent, isStandalone: true, selector: "ndt-bolt-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
167
175
  <svg
168
176
  [attr.fill]="fill()"
169
177
  xmlns="http://www.w3.org/2000/svg"
@@ -181,7 +189,7 @@ class BoltIconComponent {
181
189
  </svg>
182
190
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
183
191
  }
184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BoltIconComponent, decorators: [{
192
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: BoltIconComponent, decorators: [{
185
193
  type: Component,
186
194
  args: [{
187
195
  selector: 'ndt-bolt-icon',
@@ -211,8 +219,8 @@ class BugIconComponent {
211
219
  constructor() {
212
220
  this.fill = input('#FFFF');
213
221
  }
214
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BugIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
215
- 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: `
222
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: BugIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
223
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: BugIconComponent, isStandalone: true, selector: "ndt-bug-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
216
224
  <svg
217
225
  [attr.fill]="fill()"
218
226
  xmlns="http://www.w3.org/2000/svg"
@@ -226,7 +234,7 @@ class BugIconComponent {
226
234
  </svg>
227
235
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
228
236
  }
229
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BugIconComponent, decorators: [{
237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: BugIconComponent, decorators: [{
230
238
  type: Component,
231
239
  args: [{
232
240
  selector: 'ndt-bug-icon',
@@ -252,8 +260,8 @@ class CodeIconComponent {
252
260
  constructor() {
253
261
  this.fill = input('#FFFF');
254
262
  }
255
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: CodeIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
256
- 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: `
263
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: CodeIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
264
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: CodeIconComponent, isStandalone: true, selector: "ndt-code-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
257
265
  <svg
258
266
  [attr.fill]="fill()"
259
267
  xmlns="http://www.w3.org/2000/svg"
@@ -268,7 +276,7 @@ class CodeIconComponent {
268
276
  </svg>
269
277
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
270
278
  }
271
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: CodeIconComponent, decorators: [{
279
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: CodeIconComponent, decorators: [{
272
280
  type: Component,
273
281
  args: [{
274
282
  selector: 'ndt-code-icon',
@@ -295,8 +303,8 @@ class DatabaseIconComponent {
295
303
  constructor() {
296
304
  this.fill = input('#FFFF');
297
305
  }
298
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DatabaseIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
299
- 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: `
306
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DatabaseIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
307
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: DatabaseIconComponent, isStandalone: true, selector: "ndt-database-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
300
308
  <svg
301
309
  [attr.fill]="fill()"
302
310
  xmlns="http://www.w3.org/2000/svg"
@@ -314,7 +322,7 @@ class DatabaseIconComponent {
314
322
  </svg>
315
323
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
316
324
  }
317
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DatabaseIconComponent, decorators: [{
325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DatabaseIconComponent, decorators: [{
318
326
  type: Component,
319
327
  args: [{
320
328
  selector: 'ndt-database-icon',
@@ -344,8 +352,8 @@ class DiscordIconComponent {
344
352
  constructor() {
345
353
  this.fill = input('#000000');
346
354
  }
347
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DiscordIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
348
- 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: `
355
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DiscordIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
356
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: DiscordIconComponent, isStandalone: true, selector: "ndt-discord-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
349
357
  <svg
350
358
  [attr.fill]="fill()"
351
359
  xmlns="http://www.w3.org/2000/svg"
@@ -359,7 +367,7 @@ class DiscordIconComponent {
359
367
  </svg>
360
368
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
361
369
  }
362
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DiscordIconComponent, decorators: [{
370
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DiscordIconComponent, decorators: [{
363
371
  type: Component,
364
372
  args: [{
365
373
  selector: 'ndt-discord-icon',
@@ -385,8 +393,8 @@ class DocsIconComponent {
385
393
  constructor() {
386
394
  this.fill = input('#FFFF');
387
395
  }
388
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DocsIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
389
- 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: `
396
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DocsIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
397
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: DocsIconComponent, isStandalone: true, selector: "ndt-docs-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
390
398
  <svg
391
399
  [attr.fill]="fill()"
392
400
  xmlns="http://www.w3.org/2000/svg"
@@ -400,7 +408,7 @@ class DocsIconComponent {
400
408
  </svg>
401
409
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
402
410
  }
403
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DocsIconComponent, decorators: [{
411
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DocsIconComponent, decorators: [{
404
412
  type: Component,
405
413
  args: [{
406
414
  selector: 'ndt-docs-icon',
@@ -426,8 +434,8 @@ class ExportIconComponent {
426
434
  constructor() {
427
435
  this.fill = input('#FFFF');
428
436
  }
429
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ExportIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
430
- 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: `
437
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ExportIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
438
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: ExportIconComponent, isStandalone: true, selector: "ndt-export-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
431
439
  <svg
432
440
  [attr.fill]="fill()"
433
441
  xmlns="http://www.w3.org/2000/svg"
@@ -441,7 +449,7 @@ class ExportIconComponent {
441
449
  </svg>
442
450
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
443
451
  }
444
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ExportIconComponent, decorators: [{
452
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ExportIconComponent, decorators: [{
445
453
  type: Component,
446
454
  args: [{
447
455
  selector: 'ndt-export-icon',
@@ -467,8 +475,8 @@ class FilterIconComponent {
467
475
  constructor() {
468
476
  this.fill = input('#FFFF');
469
477
  }
470
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FilterIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
471
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: FilterIconComponent, isStandalone: true, selector: "ndt-filter-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
478
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: FilterIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
479
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: FilterIconComponent, isStandalone: true, selector: "ndt-filter-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
472
480
  <svg
473
481
  [attr.fill]="fill()"
474
482
  xmlns="http://www.w3.org/2000/svg"
@@ -486,7 +494,7 @@ class FilterIconComponent {
486
494
  </svg>
487
495
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
488
496
  }
489
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FilterIconComponent, decorators: [{
497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: FilterIconComponent, decorators: [{
490
498
  type: Component,
491
499
  args: [{
492
500
  selector: 'ndt-filter-icon',
@@ -516,8 +524,8 @@ class GaugeIconComponent {
516
524
  constructor() {
517
525
  this.fill = input('#FFFF');
518
526
  }
519
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GaugeIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
520
- 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: `
527
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GaugeIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
528
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: GaugeIconComponent, isStandalone: true, selector: "ndt-gauge-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
521
529
  <svg
522
530
  [attr.fill]="fill()"
523
531
  xmlns="http://www.w3.org/2000/svg"
@@ -535,7 +543,7 @@ class GaugeIconComponent {
535
543
  </svg>
536
544
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
537
545
  }
538
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GaugeIconComponent, decorators: [{
546
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GaugeIconComponent, decorators: [{
539
547
  type: Component,
540
548
  args: [{
541
549
  selector: 'ndt-gauge-icon',
@@ -565,8 +573,8 @@ class GearIconComponent {
565
573
  constructor() {
566
574
  this.fill = input('#FFFF');
567
575
  }
568
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GearIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
569
- 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: `
576
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GearIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
577
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: GearIconComponent, isStandalone: true, selector: "ndt-gear-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
570
578
  <svg
571
579
  [attr.fill]="fill()"
572
580
  xmlns="http://www.w3.org/2000/svg"
@@ -584,7 +592,7 @@ class GearIconComponent {
584
592
  </svg>
585
593
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
586
594
  }
587
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GearIconComponent, decorators: [{
595
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GearIconComponent, decorators: [{
588
596
  type: Component,
589
597
  args: [{
590
598
  selector: 'ndt-gear-icon',
@@ -614,8 +622,8 @@ class GitBranchIconComponent {
614
622
  constructor() {
615
623
  this.fill = input('#FFFF');
616
624
  }
617
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GitBranchIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
618
- 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: `
625
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GitBranchIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
626
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: GitBranchIconComponent, isStandalone: true, selector: "ndt-git-branch-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
619
627
  <svg
620
628
  [attr.fill]="fill()"
621
629
  xmlns="http://www.w3.org/2000/svg"
@@ -633,7 +641,7 @@ class GitBranchIconComponent {
633
641
  </svg>
634
642
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
635
643
  }
636
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GitBranchIconComponent, decorators: [{
644
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GitBranchIconComponent, decorators: [{
637
645
  type: Component,
638
646
  args: [{
639
647
  selector: 'ndt-git-branch-icon',
@@ -663,8 +671,8 @@ class ImportIconComponent {
663
671
  constructor() {
664
672
  this.fill = input('#FFFF');
665
673
  }
666
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ImportIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
667
- 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: `
674
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ImportIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
675
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: ImportIconComponent, isStandalone: true, selector: "ndt-import-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
668
676
  <svg
669
677
  [attr.fill]="fill()"
670
678
  xmlns="http://www.w3.org/2000/svg"
@@ -678,7 +686,7 @@ class ImportIconComponent {
678
686
  </svg>
679
687
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
680
688
  }
681
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ImportIconComponent, decorators: [{
689
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ImportIconComponent, decorators: [{
682
690
  type: Component,
683
691
  args: [{
684
692
  selector: 'ndt-import-icon',
@@ -704,8 +712,8 @@ class LayoutIconComponent {
704
712
  constructor() {
705
713
  this.fill = input('#FFFF');
706
714
  }
707
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LayoutIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
708
- 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: `
715
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LayoutIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
716
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: LayoutIconComponent, isStandalone: true, selector: "ndt-layout-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
709
717
  <svg
710
718
  [attr.fill]="fill()"
711
719
  xmlns="http://www.w3.org/2000/svg"
@@ -720,7 +728,7 @@ class LayoutIconComponent {
720
728
  </svg>
721
729
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
722
730
  }
723
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LayoutIconComponent, decorators: [{
731
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LayoutIconComponent, decorators: [{
724
732
  type: Component,
725
733
  args: [{
726
734
  selector: 'ndt-layout-icon',
@@ -747,8 +755,8 @@ class LightbulbIconComponent {
747
755
  constructor() {
748
756
  this.fill = input('#FFFF');
749
757
  }
750
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LightbulbIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
751
- 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: `
758
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LightbulbIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
759
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: LightbulbIconComponent, isStandalone: true, selector: "ndt-lightbulb-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
752
760
  <svg
753
761
  [attr.fill]="fill()"
754
762
  xmlns="http://www.w3.org/2000/svg"
@@ -762,7 +770,7 @@ class LightbulbIconComponent {
762
770
  </svg>
763
771
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
764
772
  }
765
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LightbulbIconComponent, decorators: [{
773
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LightbulbIconComponent, decorators: [{
766
774
  type: Component,
767
775
  args: [{
768
776
  selector: 'ndt-lightbulb-icon',
@@ -788,8 +796,8 @@ class LightingIconComponent {
788
796
  constructor() {
789
797
  this.fill = input('#FFFF');
790
798
  }
791
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LightingIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
792
- 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: `
799
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LightingIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
800
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: LightingIconComponent, isStandalone: true, selector: "ndt-lighting-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
793
801
  <svg
794
802
  [attr.fill]="fill()"
795
803
  xmlns="http://www.w3.org/2000/svg"
@@ -804,7 +812,7 @@ class LightingIconComponent {
804
812
  </svg>
805
813
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
806
814
  }
807
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LightingIconComponent, decorators: [{
815
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LightingIconComponent, decorators: [{
808
816
  type: Component,
809
817
  args: [{
810
818
  selector: 'ndt-lighting-icon',
@@ -831,8 +839,8 @@ class LockIconComponent {
831
839
  constructor() {
832
840
  this.fill = input('#FFFF');
833
841
  }
834
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LockIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
835
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: LockIconComponent, isStandalone: true, selector: "ndt-lock-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
842
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LockIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
843
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: LockIconComponent, isStandalone: true, selector: "ndt-lock-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
836
844
  <svg
837
845
  [attr.fill]="fill()"
838
846
  xmlns="http://www.w3.org/2000/svg"
@@ -846,7 +854,7 @@ class LockIconComponent {
846
854
  </svg>
847
855
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
848
856
  }
849
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LockIconComponent, decorators: [{
857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LockIconComponent, decorators: [{
850
858
  type: Component,
851
859
  args: [{
852
860
  selector: 'ndt-lock-icon',
@@ -872,8 +880,8 @@ class MoonIconComponent {
872
880
  constructor() {
873
881
  this.fill = input('#FFFF');
874
882
  }
875
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: MoonIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
876
- 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: `
883
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: MoonIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
884
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: MoonIconComponent, isStandalone: true, selector: "ndt-moon-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
877
885
  <svg
878
886
  [attr.fill]="fill()"
879
887
  xmlns="http://www.w3.org/2000/svg"
@@ -891,7 +899,7 @@ class MoonIconComponent {
891
899
  </svg>
892
900
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
893
901
  }
894
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: MoonIconComponent, decorators: [{
902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: MoonIconComponent, decorators: [{
895
903
  type: Component,
896
904
  args: [{
897
905
  selector: 'ndt-moon-icon',
@@ -921,8 +929,8 @@ class NetworkIconComponent {
921
929
  constructor() {
922
930
  this.fill = input('#FFFF');
923
931
  }
924
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NetworkIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
925
- 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: `
932
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NetworkIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
933
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: NetworkIconComponent, isStandalone: true, selector: "ndt-network-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
926
934
  <svg
927
935
  [attr.fill]="fill()"
928
936
  xmlns="http://www.w3.org/2000/svg"
@@ -940,7 +948,7 @@ class NetworkIconComponent {
940
948
  </svg>
941
949
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
942
950
  }
943
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NetworkIconComponent, decorators: [{
951
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NetworkIconComponent, decorators: [{
944
952
  type: Component,
945
953
  args: [{
946
954
  selector: 'ndt-network-icon',
@@ -970,8 +978,8 @@ class PuzzleIconComponent {
970
978
  constructor() {
971
979
  this.fill = input('#FFFF');
972
980
  }
973
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PuzzleIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
974
- 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: `
981
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: PuzzleIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
982
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: PuzzleIconComponent, isStandalone: true, selector: "ndt-puzzle-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
975
983
  <svg
976
984
  [attr.fill]="fill()"
977
985
  xmlns="http://www.w3.org/2000/svg"
@@ -989,7 +997,7 @@ class PuzzleIconComponent {
989
997
  </svg>
990
998
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
991
999
  }
992
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PuzzleIconComponent, decorators: [{
1000
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: PuzzleIconComponent, decorators: [{
993
1001
  type: Component,
994
1002
  args: [{
995
1003
  selector: 'ndt-puzzle-icon',
@@ -1019,8 +1027,8 @@ class RefreshIconComponent {
1019
1027
  constructor() {
1020
1028
  this.fill = input('#FFFF');
1021
1029
  }
1022
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: RefreshIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1023
- 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: `
1030
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: RefreshIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1031
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: RefreshIconComponent, isStandalone: true, selector: "ndt-refresh-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1024
1032
  <svg
1025
1033
  [attr.fill]="fill()"
1026
1034
  xmlns="http://www.w3.org/2000/svg"
@@ -1038,7 +1046,7 @@ class RefreshIconComponent {
1038
1046
  </svg>
1039
1047
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1040
1048
  }
1041
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: RefreshIconComponent, decorators: [{
1049
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: RefreshIconComponent, decorators: [{
1042
1050
  type: Component,
1043
1051
  args: [{
1044
1052
  selector: 'ndt-refresh-icon',
@@ -1068,8 +1076,8 @@ class StarIconComponent {
1068
1076
  constructor() {
1069
1077
  this.fill = input('#FFFF');
1070
1078
  }
1071
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: StarIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1072
- 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: `
1079
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: StarIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1080
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: StarIconComponent, isStandalone: true, selector: "ndt-star-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1073
1081
  <svg
1074
1082
  [attr.fill]="fill()"
1075
1083
  xmlns="http://www.w3.org/2000/svg"
@@ -1087,7 +1095,7 @@ class StarIconComponent {
1087
1095
  </svg>
1088
1096
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1089
1097
  }
1090
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: StarIconComponent, decorators: [{
1098
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: StarIconComponent, decorators: [{
1091
1099
  type: Component,
1092
1100
  args: [{
1093
1101
  selector: 'ndt-star-icon',
@@ -1117,8 +1125,8 @@ class SunIconComponent {
1117
1125
  constructor() {
1118
1126
  this.fill = input('#FFFF');
1119
1127
  }
1120
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SunIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1121
- 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: `
1128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: SunIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1129
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: SunIconComponent, isStandalone: true, selector: "ndt-sun-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1122
1130
  <svg
1123
1131
  [attr.fill]="fill()"
1124
1132
  xmlns="http://www.w3.org/2000/svg"
@@ -1136,7 +1144,7 @@ class SunIconComponent {
1136
1144
  </svg>
1137
1145
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1138
1146
  }
1139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SunIconComponent, decorators: [{
1147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: SunIconComponent, decorators: [{
1140
1148
  type: Component,
1141
1149
  args: [{
1142
1150
  selector: 'ndt-sun-icon',
@@ -1166,8 +1174,8 @@ class TerminalIconComponent {
1166
1174
  constructor() {
1167
1175
  this.fill = input('#FFFF');
1168
1176
  }
1169
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TerminalIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1170
- 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: `
1177
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TerminalIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1178
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: TerminalIconComponent, isStandalone: true, selector: "ndt-terminal-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1171
1179
  <svg
1172
1180
  [attr.fill]="fill()"
1173
1181
  xmlns="http://www.w3.org/2000/svg"
@@ -1185,7 +1193,7 @@ class TerminalIconComponent {
1185
1193
  </svg>
1186
1194
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1187
1195
  }
1188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TerminalIconComponent, decorators: [{
1196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TerminalIconComponent, decorators: [{
1189
1197
  type: Component,
1190
1198
  args: [{
1191
1199
  selector: 'ndt-terminal-icon',
@@ -1215,8 +1223,8 @@ class ToggleLeftIconComponent {
1215
1223
  constructor() {
1216
1224
  this.fill = input('#FFFF');
1217
1225
  }
1218
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ToggleLeftIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1219
- 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: `
1226
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ToggleLeftIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1227
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: ToggleLeftIconComponent, isStandalone: true, selector: "ndt-toggle-left-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1220
1228
  <svg
1221
1229
  [attr.fill]="fill()"
1222
1230
  xmlns="http://www.w3.org/2000/svg"
@@ -1234,7 +1242,7 @@ class ToggleLeftIconComponent {
1234
1242
  </svg>
1235
1243
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1236
1244
  }
1237
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ToggleLeftIconComponent, decorators: [{
1245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ToggleLeftIconComponent, decorators: [{
1238
1246
  type: Component,
1239
1247
  args: [{
1240
1248
  selector: 'ndt-toggle-left-icon',
@@ -1264,8 +1272,8 @@ class TranslateIconComponent {
1264
1272
  constructor() {
1265
1273
  this.fill = input('#FFFF');
1266
1274
  }
1267
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TranslateIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1268
- 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: `
1275
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TranslateIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1276
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: TranslateIconComponent, isStandalone: true, selector: "ndt-translate-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1269
1277
  <svg
1270
1278
  [attr.fill]="fill()"
1271
1279
  xmlns="http://www.w3.org/2000/svg"
@@ -1279,7 +1287,7 @@ class TranslateIconComponent {
1279
1287
  </svg>
1280
1288
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1281
1289
  }
1282
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TranslateIconComponent, decorators: [{
1290
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TranslateIconComponent, decorators: [{
1283
1291
  type: Component,
1284
1292
  args: [{
1285
1293
  selector: 'ndt-translate-icon',
@@ -1305,8 +1313,8 @@ class TrashIconComponent {
1305
1313
  constructor() {
1306
1314
  this.fill = input('#FFFF');
1307
1315
  }
1308
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TrashIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1309
- 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: `
1316
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TrashIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1317
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: TrashIconComponent, isStandalone: true, selector: "ndt-trash-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1310
1318
  <svg
1311
1319
  [attr.fill]="fill()"
1312
1320
  xmlns="http://www.w3.org/2000/svg"
@@ -1320,7 +1328,7 @@ class TrashIconComponent {
1320
1328
  </svg>
1321
1329
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1322
1330
  }
1323
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TrashIconComponent, decorators: [{
1331
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TrashIconComponent, decorators: [{
1324
1332
  type: Component,
1325
1333
  args: [{
1326
1334
  selector: 'ndt-trash-icon',
@@ -1346,8 +1354,8 @@ class UsersIconComponent {
1346
1354
  constructor() {
1347
1355
  this.fill = input('#FFFF');
1348
1356
  }
1349
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: UsersIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1350
- 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: `
1357
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: UsersIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1358
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", type: UsersIconComponent, isStandalone: true, selector: "ndt-users-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1351
1359
  <svg
1352
1360
  [attr.fill]="fill()"
1353
1361
  xmlns="http://www.w3.org/2000/svg"
@@ -1365,7 +1373,7 @@ class UsersIconComponent {
1365
1373
  </svg>
1366
1374
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1367
1375
  }
1368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: UsersIconComponent, decorators: [{
1376
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: UsersIconComponent, decorators: [{
1369
1377
  type: Component,
1370
1378
  args: [{
1371
1379
  selector: 'ndt-users-icon',
@@ -1397,8 +1405,8 @@ class DevToolbarIconComponent {
1397
1405
  this.name = input.required();
1398
1406
  this.fill = computed(() => this.stateService.theme() === 'dark' ? '#FFFFFF' : '#000000');
1399
1407
  }
1400
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1401
- 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: `
1408
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1409
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarIconComponent, isStandalone: true, selector: "ndt-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
1402
1410
  @switch (name()) { @case ('angular') {
1403
1411
  <ndt-angular-icon />
1404
1412
  } @case ('bolt') {
@@ -1458,7 +1466,7 @@ class DevToolbarIconComponent {
1458
1466
  } }
1459
1467
  `, isInline: true, dependencies: [{ kind: "component", type: AngularIconComponent, selector: "ndt-angular-icon" }, { kind: "component", type: BoltIconComponent, selector: "ndt-bolt-icon", inputs: ["fill"] }, { 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: FilterIconComponent, selector: "ndt-filter-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: LockIconComponent, selector: "ndt-lock-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 }); }
1460
1468
  }
1461
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarIconComponent, decorators: [{
1469
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarIconComponent, decorators: [{
1462
1470
  type: Component,
1463
1471
  args: [{
1464
1472
  selector: 'ndt-icon',
@@ -1556,6 +1564,206 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
1556
1564
  }]
1557
1565
  }] });
1558
1566
 
1567
+ /**
1568
+ * Container component for displaying lists of items with consistent scrolling,
1569
+ * empty states, and layout across all tools.
1570
+ *
1571
+ * @example
1572
+ * ```html
1573
+ * <ndt-list
1574
+ * [hasItems]="items().length > 0"
1575
+ * [hasResults]="filteredItems().length > 0"
1576
+ * emptyMessage="No items found"
1577
+ * noResultsMessage="No items match your filter"
1578
+ * >
1579
+ * @for (item of filteredItems(); track item.id) {
1580
+ * <ndt-list-item ... />
1581
+ * }
1582
+ * </ndt-list>
1583
+ * ```
1584
+ */
1585
+ class DevToolbarListComponent {
1586
+ constructor() {
1587
+ /**
1588
+ * Whether the list has any items at all (before filtering).
1589
+ * When false, shows the emptyMessage.
1590
+ */
1591
+ this.hasItems = input(true);
1592
+ /**
1593
+ * Whether the list has any results after filtering.
1594
+ * When false (but hasItems is true), shows the noResultsMessage.
1595
+ */
1596
+ this.hasResults = input(true);
1597
+ /**
1598
+ * Message to display when there are no items at all.
1599
+ * @example "No feature flags found"
1600
+ */
1601
+ this.emptyMessage = input('No items found');
1602
+ /**
1603
+ * Optional hint text to display below the empty message.
1604
+ * @example "Call setAvailableOptions() to configure features"
1605
+ */
1606
+ this.emptyHint = input(undefined);
1607
+ /**
1608
+ * Message to display when items exist but none match the current filter.
1609
+ * @example "No flags match your filter"
1610
+ */
1611
+ this.noResultsMessage = input('No results match your filter');
1612
+ }
1613
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1614
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarListComponent, isStandalone: true, selector: "ndt-list", inputs: { hasItems: { classPropertyName: "hasItems", publicName: "hasItems", isSignal: true, isRequired: false, transformFunction: null }, hasResults: { classPropertyName: "hasResults", publicName: "hasResults", isSignal: true, isRequired: false, transformFunction: null }, emptyMessage: { classPropertyName: "emptyMessage", publicName: "emptyMessage", isSignal: true, isRequired: false, transformFunction: null }, emptyHint: { classPropertyName: "emptyHint", publicName: "emptyHint", isSignal: true, isRequired: false, transformFunction: null }, noResultsMessage: { classPropertyName: "noResultsMessage", publicName: "noResultsMessage", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1615
+ @if (!hasItems()) {
1616
+ <div class="empty-state">
1617
+ <p>{{ emptyMessage() }}</p>
1618
+ @if (emptyHint()) {
1619
+ <p class="hint">{{ emptyHint() }}</p>
1620
+ }
1621
+ </div>
1622
+ } @else if (!hasResults()) {
1623
+ <div class="empty-state">
1624
+ <p>{{ noResultsMessage() }}</p>
1625
+ </div>
1626
+ } @else {
1627
+ <div class="list-container">
1628
+ <ng-content />
1629
+ </div>
1630
+ }
1631
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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);display:flex;flex-direction:column;flex:1;min-height:0}.empty-state{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)}.empty-state p{margin:0}.empty-state .hint{font-size:var(--ndt-font-size-xs)}.list-container{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)}.list-container::-webkit-scrollbar{width:8px;height:8px}.list-container::-webkit-scrollbar-track{background:transparent}.list-container::-webkit-scrollbar-thumb{background-color:var(--ndt-border-primary);border-radius:4px;border:2px solid var(--ndt-bg-primary)}.list-container::-webkit-scrollbar-thumb:hover{background-color:var(--ndt-text-secondary)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1632
+ }
1633
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarListComponent, decorators: [{
1634
+ type: Component,
1635
+ args: [{ selector: 'ndt-list', standalone: true, imports: [CommonModule], template: `
1636
+ @if (!hasItems()) {
1637
+ <div class="empty-state">
1638
+ <p>{{ emptyMessage() }}</p>
1639
+ @if (emptyHint()) {
1640
+ <p class="hint">{{ emptyHint() }}</p>
1641
+ }
1642
+ </div>
1643
+ } @else if (!hasResults()) {
1644
+ <div class="empty-state">
1645
+ <p>{{ noResultsMessage() }}</p>
1646
+ </div>
1647
+ } @else {
1648
+ <div class="list-container">
1649
+ <ng-content />
1650
+ </div>
1651
+ }
1652
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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);display:flex;flex-direction:column;flex:1;min-height:0}.empty-state{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)}.empty-state p{margin:0}.empty-state .hint{font-size:var(--ndt-font-size-xs)}.list-container{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)}.list-container::-webkit-scrollbar{width:8px;height:8px}.list-container::-webkit-scrollbar-track{background:transparent}.list-container::-webkit-scrollbar-thumb{background-color:var(--ndt-border-primary);border-radius:4px;border:2px solid var(--ndt-bg-primary)}.list-container::-webkit-scrollbar-thumb:hover{background-color:var(--ndt-text-secondary)}\n"] }]
1653
+ }] });
1654
+
1655
+ /**
1656
+ * List item component with consistent layout, dot badge indicator,
1657
+ * and forced state highlighting.
1658
+ *
1659
+ * @example
1660
+ * ```html
1661
+ * <ndt-list-item
1662
+ * title="Analytics Dashboard"
1663
+ * description="Advanced reporting tools"
1664
+ * [isForced]="false"
1665
+ * [currentValue]="true"
1666
+ * [originalValue]="undefined"
1667
+ * >
1668
+ * <ndt-select ... />
1669
+ * </ndt-list-item>
1670
+ * ```
1671
+ */
1672
+ class DevToolbarListItemComponent {
1673
+ constructor() {
1674
+ /**
1675
+ * Display title for the list item
1676
+ * @example "Analytics Dashboard"
1677
+ */
1678
+ this.title = input.required();
1679
+ /**
1680
+ * Optional description text
1681
+ * @example "Advanced reporting and data visualization tools"
1682
+ */
1683
+ this.description = input(undefined);
1684
+ /**
1685
+ * Whether this item's state is forced via the dev toolbar
1686
+ */
1687
+ this.isForced = input(false);
1688
+ /**
1689
+ * Current enabled/granted state of the item
1690
+ */
1691
+ this.currentValue = input.required();
1692
+ /**
1693
+ * Original value before forcing (only present when isForced is true)
1694
+ */
1695
+ this.originalValue = input(undefined);
1696
+ /**
1697
+ * Value to display in the dot indicator.
1698
+ * For forced items: shows originalValue
1699
+ * For non-forced items: shows currentValue
1700
+ */
1701
+ this.displayValue = computed(() => {
1702
+ const originalValue = this.originalValue();
1703
+ return this.isForced() && originalValue !== undefined
1704
+ ? originalValue
1705
+ : this.currentValue();
1706
+ });
1707
+ /**
1708
+ * Tooltip text explaining the indicator state
1709
+ */
1710
+ this.tooltipText = computed(() => {
1711
+ const value = this.displayValue();
1712
+ const state = value ? 'enabled' : 'disabled';
1713
+ if (this.isForced() && this.originalValue() !== undefined) {
1714
+ return `Originally: ${state}`;
1715
+ }
1716
+ return `Current state: ${state}`;
1717
+ });
1718
+ }
1719
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1720
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarListItemComponent, isStandalone: true, selector: "ndt-list-item", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, isForced: { classPropertyName: "isForced", publicName: "isForced", isSignal: true, isRequired: false, transformFunction: null }, currentValue: { classPropertyName: "currentValue", publicName: "currentValue", isSignal: true, isRequired: true, transformFunction: null }, originalValue: { classPropertyName: "originalValue", publicName: "originalValue", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1721
+ <div class="list-item" [class.list-item--forced]="isForced()">
1722
+ <div class="info">
1723
+ <h3>{{ title() }}</h3>
1724
+ @if (description()) {
1725
+ <div class="description-wrapper">
1726
+ <span
1727
+ class="dot-indicator"
1728
+ [class.dot-indicator--on]="displayValue()"
1729
+ [class.dot-indicator--off]="!displayValue()"
1730
+ [title]="tooltipText()"
1731
+ ></span>
1732
+ <p>{{ description() }}</p>
1733
+ </div>
1734
+ }
1735
+ </div>
1736
+ <div class="actions">
1737
+ <ng-content />
1738
+ </div>
1739
+ </div>
1740
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.list-item{display:flex;flex-direction:row;gap:var(--ndt-spacing-sm);background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium);transition:background-color .2s ease}.list-item.list-item--forced{background:#3b82f60d;border-left:2px solid rgba(59,130,246,.3);padding-left:calc(var(--ndt-spacing-md) - 2px)}.list-item .info{flex:0 0 65%}.list-item .info h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary)}.list-item .info .description-wrapper{display:flex;align-items:center;gap:8px;margin-top:4px}.list-item .info .dot-indicator{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0;cursor:help;transition:all .2s ease}.list-item .info .dot-indicator.dot-indicator--on{background:#22c55e;box-shadow:0 0 0 2px #22c55e33}.list-item .info .dot-indicator.dot-indicator--off{background:#ef4444;box-shadow:0 0 0 2px #ef444433}.list-item .info p{margin:0;font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted);flex:1}.list-item .actions{flex:0 0 35%;display:flex;align-items:flex-start}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1741
+ }
1742
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarListItemComponent, decorators: [{
1743
+ type: Component,
1744
+ args: [{ selector: 'ndt-list-item', standalone: true, imports: [CommonModule], template: `
1745
+ <div class="list-item" [class.list-item--forced]="isForced()">
1746
+ <div class="info">
1747
+ <h3>{{ title() }}</h3>
1748
+ @if (description()) {
1749
+ <div class="description-wrapper">
1750
+ <span
1751
+ class="dot-indicator"
1752
+ [class.dot-indicator--on]="displayValue()"
1753
+ [class.dot-indicator--off]="!displayValue()"
1754
+ [title]="tooltipText()"
1755
+ ></span>
1756
+ <p>{{ description() }}</p>
1757
+ </div>
1758
+ }
1759
+ </div>
1760
+ <div class="actions">
1761
+ <ng-content />
1762
+ </div>
1763
+ </div>
1764
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.list-item{display:flex;flex-direction:row;gap:var(--ndt-spacing-sm);background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium);transition:background-color .2s ease}.list-item.list-item--forced{background:#3b82f60d;border-left:2px solid rgba(59,130,246,.3);padding-left:calc(var(--ndt-spacing-md) - 2px)}.list-item .info{flex:0 0 65%}.list-item .info h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary)}.list-item .info .description-wrapper{display:flex;align-items:center;gap:8px;margin-top:4px}.list-item .info .dot-indicator{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0;cursor:help;transition:all .2s ease}.list-item .info .dot-indicator.dot-indicator--on{background:#22c55e;box-shadow:0 0 0 2px #22c55e33}.list-item .info .dot-indicator.dot-indicator--off{background:#ef4444;box-shadow:0 0 0 2px #ef444433}.list-item .info p{margin:0;font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted);flex:1}.list-item .actions{flex:0 0 35%;display:flex;align-items:flex-start}\n"] }]
1765
+ }] });
1766
+
1559
1767
  class DevToolbarToolButtonComponent {
1560
1768
  constructor() {
1561
1769
  // Injects
@@ -1596,8 +1804,8 @@ class DevToolbarToolButtonComponent {
1596
1804
  onBlur() {
1597
1805
  this.isFocused.set(false);
1598
1806
  }
1599
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarToolButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1600
- 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: `
1807
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarToolButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1808
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", 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: `
1601
1809
  <button
1602
1810
  class="tool-button"
1603
1811
  [class.tool-button--active]="isActive()"
@@ -1618,7 +1826,7 @@ class DevToolbarToolButtonComponent {
1618
1826
  }
1619
1827
  <ng-content />
1620
1828
  </button>
1621
- `, isInline: true, styles: [".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: [
1829
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.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: [
1622
1830
  trigger('tooltipAnimation', [
1623
1831
  state('hidden', style({
1624
1832
  opacity: 0,
@@ -1633,7 +1841,7 @@ class DevToolbarToolButtonComponent {
1633
1841
  ]),
1634
1842
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1635
1843
  }
1636
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarToolButtonComponent, decorators: [{
1844
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarToolButtonComponent, decorators: [{
1637
1845
  type: Component,
1638
1846
  args: [{ selector: 'ndt-tool-button', standalone: true, template: `
1639
1847
  <button
@@ -1669,20 +1877,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
1669
1877
  transition('hidden => visible', [animate('200ms ease-out')]),
1670
1878
  transition('visible => hidden', [animate('150ms ease-in')]),
1671
1879
  ]),
1672
- ], changeDetection: ChangeDetectionStrategy.OnPush, styles: [".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"] }]
1880
+ ], changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.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"] }]
1673
1881
  }] });
1674
1882
 
1675
1883
  class DevToolbarWindowComponent {
1676
1884
  constructor() {
1677
1885
  this.devToolbarStateService = inject(DevToolbarStateService);
1678
1886
  this.config = input.required();
1679
- this.close = output();
1887
+ this.closed = output();
1680
1888
  this.maximize = output();
1681
1889
  this.minimize = output();
1682
1890
  this.theme = computed(() => this.devToolbarStateService.theme());
1683
1891
  }
1684
1892
  onClose() {
1685
- this.close.emit();
1893
+ this.closed.emit();
1686
1894
  }
1687
1895
  onMaximize() {
1688
1896
  this.maximize.emit();
@@ -1690,9 +1898,9 @@ class DevToolbarWindowComponent {
1690
1898
  onMinimize() {
1691
1899
  this.minimize.emit();
1692
1900
  }
1693
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1694
- 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: `
1695
- <div class="window dev-toolbar" [attr.data-theme]="theme()">
1901
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1902
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarWindowComponent, isStandalone: true, selector: "ndt-window", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { closed: "closed", maximize: "maximize", minimize: "minimize" }, ngImport: i0, template: `
1903
+ <div class="ndt-window" [attr.data-theme]="theme()">
1696
1904
  <div class="header">
1697
1905
  <div class="header__content">
1698
1906
  <div class="header__title">
@@ -1729,12 +1937,12 @@ class DevToolbarWindowComponent {
1729
1937
  <ng-content></ng-content>
1730
1938
  </div>
1731
1939
  </div>
1732
- `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-window-padding: 16px;--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);display:block;width:100%;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\"}:host[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)}.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 h1{font-size:var(--ndt-font-size-lg);line-height:1.2;margin:0}.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);word-wrap:break-word;overflow-wrap:break-word;max-width:100%;line-height:1.4;margin:0}.header__content{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs)}.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"], encapsulation: i0.ViewEncapsulation.ShadowDom }); }
1940
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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);display:block;width:100%;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\"}.ndt-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 h1{font-size:var(--ndt-font-size-lg);line-height:1.2;margin:0}.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);word-wrap:break-word;overflow-wrap:break-word;max-width:100%;line-height:1.4;margin:0}.header__content{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs)}.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"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1733
1941
  }
1734
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarWindowComponent, decorators: [{
1942
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarWindowComponent, decorators: [{
1735
1943
  type: Component,
1736
- args: [{ selector: 'ndt-window', standalone: true, encapsulation: ViewEncapsulation.ShadowDom, template: `
1737
- <div class="window dev-toolbar" [attr.data-theme]="theme()">
1944
+ args: [{ selector: 'ndt-window', standalone: true, template: `
1945
+ <div class="ndt-window" [attr.data-theme]="theme()">
1738
1946
  <div class="header">
1739
1947
  <div class="header__content">
1740
1948
  <div class="header__title">
@@ -1771,12 +1979,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
1771
1979
  <ng-content></ng-content>
1772
1980
  </div>
1773
1981
  </div>
1774
- `, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-window-padding: 16px;--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);display:block;width:100%;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\"}:host[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)}.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 h1{font-size:var(--ndt-font-size-lg);line-height:1.2;margin:0}.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);word-wrap:break-word;overflow-wrap:break-word;max-width:100%;line-height:1.4;margin:0}.header__content{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs)}.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"] }]
1982
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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);display:block;width:100%;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\"}.ndt-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 h1{font-size:var(--ndt-font-size-lg);line-height:1.2;margin:0}.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);word-wrap:break-word;overflow-wrap:break-word;max-width:100%;line-height:1.4;margin:0}.header__content{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs)}.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"] }]
1775
1983
  }] });
1776
1984
 
1777
1985
  class DevToolbarToolComponent {
1778
1986
  constructor() {
1779
1987
  this.state = inject(DevToolbarStateService);
1988
+ this.buttonContainer = viewChild.required('buttonContainer');
1989
+ this.buttonComponent = contentChild(DevToolbarToolButtonComponent);
1780
1990
  this.options = input.required();
1781
1991
  this.icon = input.required();
1782
1992
  this.title = input.required();
@@ -1832,14 +2042,14 @@ class DevToolbarToolComponent {
1832
2042
  this.state.setActiveTool(null);
1833
2043
  }
1834
2044
  getButtonContainerXPosition() {
1835
- const buttonContainerRect = this.buttonContainer?.nativeElement?.getBoundingClientRect();
2045
+ const buttonContainerRect = this.buttonContainer()?.nativeElement?.getBoundingClientRect();
1836
2046
  return buttonContainerRect?.left ?? 0;
1837
2047
  }
1838
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1839
- 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: `
1840
- <div #trigger="cdkOverlayOrigin" class="dev-toolbar-tool" cdkOverlayOrigin>
2048
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2049
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", 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, isSignal: true }], viewQueries: [{ propertyName: "buttonContainer", first: true, predicate: ["buttonContainer"], descendants: true, isSignal: true }], ngImport: i0, template: `
2050
+ <div #trigger="cdkOverlayOrigin" class="ndt-toolbar-tool" cdkOverlayOrigin>
1841
2051
  <div
1842
- class="dev-toolbar-tool__icon"
2052
+ class="ndt-toolbar-tool__icon"
1843
2053
  (click)="onOpen()"
1844
2054
  (keydown.enter)="onOpen()"
1845
2055
  (keydown.space)="onOpen()"
@@ -1864,15 +2074,16 @@ class DevToolbarToolComponent {
1864
2074
  [cdkConnectedOverlayPositions]="positions()"
1865
2075
  [cdkConnectedOverlayWidth]="width()"
1866
2076
  [cdkConnectedOverlayHeight]="height()"
2077
+ [cdkConnectedOverlayPanelClass]="['ndt-overlay-panel', 'ndt-tool-overlay']"
1867
2078
  cdkConnectedOverlay
1868
2079
  >
1869
- <ndt-window [@slideAnimation] [config]="options()" (close)="onClose()">
2080
+ <ndt-window [@slideAnimation] [config]="options()" (closed)="onClose()">
1870
2081
  <ng-content />
1871
2082
  </ndt-window>
1872
2083
  </ng-template>
1873
2084
  }
1874
2085
  </div>
1875
- `, isInline: true, styles: [".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: [
2086
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.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: ["closed", "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: [
1876
2087
  trigger('slideAnimation', [
1877
2088
  transition(':enter', [
1878
2089
  style({
@@ -1897,7 +2108,7 @@ class DevToolbarToolComponent {
1897
2108
  ]),
1898
2109
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1899
2110
  }
1900
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarToolComponent, decorators: [{
2111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarToolComponent, decorators: [{
1901
2112
  type: Component,
1902
2113
  args: [{ selector: 'ndt-toolbar-tool', standalone: true, imports: [
1903
2114
  CdkConnectedOverlay,
@@ -1906,9 +2117,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
1906
2117
  DevToolbarToolButtonComponent,
1907
2118
  DevToolbarIconComponent,
1908
2119
  ], template: `
1909
- <div #trigger="cdkOverlayOrigin" class="dev-toolbar-tool" cdkOverlayOrigin>
2120
+ <div #trigger="cdkOverlayOrigin" class="ndt-toolbar-tool" cdkOverlayOrigin>
1910
2121
  <div
1911
- class="dev-toolbar-tool__icon"
2122
+ class="ndt-toolbar-tool__icon"
1912
2123
  (click)="onOpen()"
1913
2124
  (keydown.enter)="onOpen()"
1914
2125
  (keydown.space)="onOpen()"
@@ -1933,9 +2144,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
1933
2144
  [cdkConnectedOverlayPositions]="positions()"
1934
2145
  [cdkConnectedOverlayWidth]="width()"
1935
2146
  [cdkConnectedOverlayHeight]="height()"
2147
+ [cdkConnectedOverlayPanelClass]="['ndt-overlay-panel', 'ndt-tool-overlay']"
1936
2148
  cdkConnectedOverlay
1937
2149
  >
1938
- <ndt-window [@slideAnimation] [config]="options()" (close)="onClose()">
2150
+ <ndt-window [@slideAnimation] [config]="options()" (closed)="onClose()">
1939
2151
  <ng-content />
1940
2152
  </ndt-window>
1941
2153
  </ng-template>
@@ -1964,14 +2176,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
1964
2176
  })),
1965
2177
  ]),
1966
2178
  ]),
1967
- ], styles: [".tool{position:relative}.trigger{cursor:pointer}\n"] }]
1968
- }], propDecorators: { buttonContainer: [{
1969
- type: ViewChild,
1970
- args: ['buttonContainer']
1971
- }], buttonComponent: [{
1972
- type: ContentChild,
1973
- args: [DevToolbarToolButtonComponent]
1974
- }] } });
2179
+ ], styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.tool{position:relative}.trigger{cursor:pointer}\n"] }]
2180
+ }] });
1975
2181
 
1976
2182
  class DevToolbarInputComponent {
1977
2183
  constructor() {
@@ -1981,8 +2187,8 @@ class DevToolbarInputComponent {
1981
2187
  this.ariaLabel = input('');
1982
2188
  this.inputClass = input('input');
1983
2189
  }
1984
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1985
- 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: `
2190
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2191
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", 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: `
1986
2192
  <input
1987
2193
  [attr.aria-label]="ariaLabel()"
1988
2194
  [type]="type()"
@@ -1991,9 +2197,9 @@ class DevToolbarInputComponent {
1991
2197
  [placeholder]="placeholder()"
1992
2198
  (ngModelChange)="value.set($event)"
1993
2199
  />
1994
- `, 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;min-height:36px}.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 }); }
2200
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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);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;min-height:36px}.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 }); }
1995
2201
  }
1996
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInputComponent, decorators: [{
2202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInputComponent, decorators: [{
1997
2203
  type: Component,
1998
2204
  args: [{ selector: 'ndt-input', standalone: true, imports: [FormsModule], template: `
1999
2205
  <input
@@ -2004,7 +2210,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
2004
2210
  [placeholder]="placeholder()"
2005
2211
  (ngModelChange)="value.set($event)"
2006
2212
  />
2007
- `, 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;min-height:36px}.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"] }]
2213
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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);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;min-height:36px}.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"] }]
2008
2214
  }] });
2009
2215
 
2010
2216
  class DevToolbarSelectComponent {
@@ -2051,10 +2257,10 @@ class DevToolbarSelectComponent {
2051
2257
  this.value.set(option.value);
2052
2258
  this.close();
2053
2259
  }
2054
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2055
- 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: `
2260
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2261
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", 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: `
2056
2262
  <div
2057
- class="dev-toolbar select"
2263
+ class="ndt-select"
2058
2264
  [class.small]="size() === 'small'"
2059
2265
  [class.open]="isOpen()"
2060
2266
  [attr.aria-label]="ariaLabel()"
@@ -2078,11 +2284,12 @@ class DevToolbarSelectComponent {
2078
2284
  [cdkConnectedOverlayOrigin]="trigger"
2079
2285
  [cdkConnectedOverlayOpen]="isOpen()"
2080
2286
  [cdkConnectedOverlayPositions]="positions"
2287
+ [cdkConnectedOverlayPanelClass]="['ndt-overlay-panel', 'ndt-select-overlay']"
2081
2288
  (overlayOutsideClick)="close()"
2082
2289
  >
2083
2290
  <div
2084
2291
  [id]="selectMenuId"
2085
- class="dev-toolbar select-menu"
2292
+ class="ndt-select-menu"
2086
2293
  cdkMenu
2087
2294
  role="listbox"
2088
2295
  [attr.data-theme]="theme()"
@@ -2101,13 +2308,13 @@ class DevToolbarSelectComponent {
2101
2308
  }
2102
2309
  </div>
2103
2310
  </ng-template>
2104
- `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-window-padding: 16px;--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);display:inline-block;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\"}:host[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)}.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;min-height:36px;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.4;margin-right:var(--ndt-spacing-sm);min-width:0;display:flex;align-items:center}.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, encapsulation: i0.ViewEncapsulation.ShadowDom }); }
2311
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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);display:inline-block;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\"}.ndt-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;min-height:36px;box-sizing:border-box;box-shadow:0 1px 2px #0000000d}.ndt-select:hover{background-color:var(--ndt-hover-bg);border-color:var(--ndt-primary);box-shadow:0 1px 3px #0000001a}.ndt-select:focus-visible{outline:none;border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2),0 1px 3px #0000001a}.ndt-select.small{padding:var(--ndt-spacing-xs) var(--ndt-spacing-sm);font-size:var(--ndt-font-size-sm);height:24px}.ndt-select.open{border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2),0 1px 3px #0000001a}.ndt-select.open .select__arrow{transform:rotate(180deg)}.ndt-select__value{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4;margin-right:var(--ndt-spacing-sm);min-width:0;display:flex;align-items:center}.ndt-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}.ndt-select-menu{display:inline-flex;flex-direction:column;min-width:180px;background-color:var(--ndt-bg-primary);padding:var(--ndt-spacing-sm) 0;border:2px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-large);box-shadow:0 4px 12px #00000026,0 2px 4px #0000001a;color:var(--ndt-text-primary);max-height:min(400px,70vh);overflow-y:auto;backdrop-filter:blur(8px);z-index:1000}.ndt-select-menu::-webkit-scrollbar{width:8px;height:8px}.ndt-select-menu::-webkit-scrollbar-track{background:transparent}.ndt-select-menu::-webkit-scrollbar-thumb{background-color:var(--ndt-border-primary);border-radius:4px;border:2px solid var(--ndt-bg-primary)}.ndt-select-menu::-webkit-scrollbar-thumb:hover{background-color:var(--ndt-text-secondary)}.select-menu-item{background-color:transparent;cursor:pointer;border:none;color:var(--ndt-text-primary);-webkit-user-select:none;user-select:none;min-width:64px;padding:var(--ndt-spacing-sm) var(--ndt-spacing-md) var(--ndt-spacing-sm) var(--ndt-spacing-lg);display:flex;align-items:center;flex-direction:row;flex:1;font-size:var(--ndt-font-size-xs);font-family:inherit;position:relative;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;font-weight:400;line-height:1.5;transition:background-color .15s ease}.select-menu-item:hover{background-color:#0000000f}.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),.08);font-weight:400}.select-menu-item.selected:hover{background-color:rgba(var(--ndt-primary-rgb),.12)}.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:#0000000f}.select-menu-item:first-child{margin-top:var(--ndt-spacing-xs)}.select-menu-item:last-child{margin-bottom:var(--ndt-spacing-xs)}.select-overlay{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 }); }
2105
2312
  }
2106
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarSelectComponent, decorators: [{
2313
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarSelectComponent, decorators: [{
2107
2314
  type: Component,
2108
- args: [{ selector: 'ndt-select', standalone: true, encapsulation: ViewEncapsulation.ShadowDom, imports: [CommonModule, FormsModule, OverlayModule, CdkMenuModule], template: `
2315
+ args: [{ selector: 'ndt-select', standalone: true, imports: [CommonModule, FormsModule, OverlayModule, CdkMenuModule], template: `
2109
2316
  <div
2110
- class="dev-toolbar select"
2317
+ class="ndt-select"
2111
2318
  [class.small]="size() === 'small'"
2112
2319
  [class.open]="isOpen()"
2113
2320
  [attr.aria-label]="ariaLabel()"
@@ -2131,11 +2338,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
2131
2338
  [cdkConnectedOverlayOrigin]="trigger"
2132
2339
  [cdkConnectedOverlayOpen]="isOpen()"
2133
2340
  [cdkConnectedOverlayPositions]="positions"
2341
+ [cdkConnectedOverlayPanelClass]="['ndt-overlay-panel', 'ndt-select-overlay']"
2134
2342
  (overlayOutsideClick)="close()"
2135
2343
  >
2136
2344
  <div
2137
2345
  [id]="selectMenuId"
2138
- class="dev-toolbar select-menu"
2346
+ class="ndt-select-menu"
2139
2347
  cdkMenu
2140
2348
  role="listbox"
2141
2349
  [attr.data-theme]="theme()"
@@ -2154,7 +2362,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
2154
2362
  }
2155
2363
  </div>
2156
2364
  </ng-template>
2157
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-window-padding: 16px;--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);display:inline-block;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\"}:host[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)}.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;min-height:36px;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.4;margin-right:var(--ndt-spacing-sm);min-width:0;display:flex;align-items:center}.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"] }]
2365
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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);display:inline-block;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\"}.ndt-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;min-height:36px;box-sizing:border-box;box-shadow:0 1px 2px #0000000d}.ndt-select:hover{background-color:var(--ndt-hover-bg);border-color:var(--ndt-primary);box-shadow:0 1px 3px #0000001a}.ndt-select:focus-visible{outline:none;border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2),0 1px 3px #0000001a}.ndt-select.small{padding:var(--ndt-spacing-xs) var(--ndt-spacing-sm);font-size:var(--ndt-font-size-sm);height:24px}.ndt-select.open{border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2),0 1px 3px #0000001a}.ndt-select.open .select__arrow{transform:rotate(180deg)}.ndt-select__value{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4;margin-right:var(--ndt-spacing-sm);min-width:0;display:flex;align-items:center}.ndt-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}.ndt-select-menu{display:inline-flex;flex-direction:column;min-width:180px;background-color:var(--ndt-bg-primary);padding:var(--ndt-spacing-sm) 0;border:2px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-large);box-shadow:0 4px 12px #00000026,0 2px 4px #0000001a;color:var(--ndt-text-primary);max-height:min(400px,70vh);overflow-y:auto;backdrop-filter:blur(8px);z-index:1000}.ndt-select-menu::-webkit-scrollbar{width:8px;height:8px}.ndt-select-menu::-webkit-scrollbar-track{background:transparent}.ndt-select-menu::-webkit-scrollbar-thumb{background-color:var(--ndt-border-primary);border-radius:4px;border:2px solid var(--ndt-bg-primary)}.ndt-select-menu::-webkit-scrollbar-thumb:hover{background-color:var(--ndt-text-secondary)}.select-menu-item{background-color:transparent;cursor:pointer;border:none;color:var(--ndt-text-primary);-webkit-user-select:none;user-select:none;min-width:64px;padding:var(--ndt-spacing-sm) var(--ndt-spacing-md) var(--ndt-spacing-sm) var(--ndt-spacing-lg);display:flex;align-items:center;flex-direction:row;flex:1;font-size:var(--ndt-font-size-xs);font-family:inherit;position:relative;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;font-weight:400;line-height:1.5;transition:background-color .15s ease}.select-menu-item:hover{background-color:#0000000f}.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),.08);font-weight:400}.select-menu-item.selected:hover{background-color:rgba(var(--ndt-primary-rgb),.12)}.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:#0000000f}.select-menu-item:first-child{margin-top:var(--ndt-spacing-xs)}.select-menu-item:last-child{margin-bottom:var(--ndt-spacing-xs)}.select-overlay{backdrop-filter:blur(8px)}\n"] }]
2158
2366
  }] });
2159
2367
 
2160
2368
  class DevToolsStorageService {
@@ -2222,10 +2430,10 @@ class DevToolsStorageService {
2222
2430
  getToolKey(key) {
2223
2431
  return key.includes(this.PREFIX) ? key : this.PREFIX + key;
2224
2432
  }
2225
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolsStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2226
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolsStorageService, providedIn: 'root' }); }
2433
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolsStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2434
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolsStorageService, providedIn: 'root' }); }
2227
2435
  }
2228
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolsStorageService, decorators: [{
2436
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolsStorageService, decorators: [{
2229
2437
  type: Injectable,
2230
2438
  args: [{ providedIn: 'root' }]
2231
2439
  }] });
@@ -2398,6 +2606,7 @@ class DevToolbarInternalAppFeaturesService {
2398
2606
  ...feature,
2399
2607
  isEnabled: isInEnabled ? true : isInDisabled ? false : feature.isEnabled,
2400
2608
  isForced,
2609
+ originalValue: isForced ? feature.isEnabled : undefined,
2401
2610
  };
2402
2611
  });
2403
2612
  }
@@ -2452,10 +2661,10 @@ class DevToolbarInternalAppFeaturesService {
2452
2661
  this.saveForcedFeatures(cleanedState);
2453
2662
  }
2454
2663
  }
2455
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalAppFeaturesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2456
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalAppFeaturesService, providedIn: 'root' }); }
2664
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalAppFeaturesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2665
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalAppFeaturesService, providedIn: 'root' }); }
2457
2666
  }
2458
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalAppFeaturesService, decorators: [{
2667
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalAppFeaturesService, decorators: [{
2459
2668
  type: Injectable,
2460
2669
  args: [{ providedIn: 'root' }]
2461
2670
  }], ctorParameters: () => [] });
@@ -2484,7 +2693,7 @@ class DevToolbarAppFeaturesToolComponent {
2484
2693
  this.features = this.appFeaturesService.features;
2485
2694
  this.hasNoFeatures = computed(() => this.features().length === 0);
2486
2695
  this.filteredFeatures = computed(() => {
2487
- return this.features().filter((feature) => {
2696
+ const filtered = this.features().filter((feature) => {
2488
2697
  const searchTerm = this.searchQuery().toLowerCase();
2489
2698
  const featureName = feature.name.toLowerCase();
2490
2699
  const featureDescription = feature.description?.toLowerCase() ?? '';
@@ -2497,6 +2706,8 @@ class DevToolbarAppFeaturesToolComponent {
2497
2706
  (this.activeFilter() === 'disabled' && !feature.isEnabled);
2498
2707
  return matchesSearch && matchesFilter;
2499
2708
  });
2709
+ // Sort alphabetically by name
2710
+ return filtered.sort((a, b) => a.name.localeCompare(b.name));
2500
2711
  });
2501
2712
  this.hasNoFilteredFeatures = computed(() => this.filteredFeatures().length === 0);
2502
2713
  // Other properties
@@ -2514,7 +2725,7 @@ class DevToolbarAppFeaturesToolComponent {
2514
2725
  { value: 'disabled', label: 'Disabled' },
2515
2726
  ];
2516
2727
  this.featureValueOptions = [
2517
- { value: '', label: 'Not Forced' },
2728
+ { value: 'not-forced', label: 'Not Forced' },
2518
2729
  { value: 'off', label: 'Disabled' },
2519
2730
  { value: 'on', label: 'Enabled' },
2520
2731
  ];
@@ -2532,13 +2743,13 @@ class DevToolbarAppFeaturesToolComponent {
2532
2743
  }
2533
2744
  /**
2534
2745
  * Handle feature value change from 3-state dropdown.
2535
- * - 'not-forced' (empty string): Remove forced override
2746
+ * - 'not-forced': Remove forced override
2536
2747
  * - 'on': Force feature to enabled
2537
2748
  * - 'off': Force feature to disabled
2538
2749
  */
2539
2750
  onFeatureChange(featureId, value) {
2540
2751
  switch (value) {
2541
- case '':
2752
+ case 'not-forced':
2542
2753
  this.appFeaturesService.removeFeatureOverride(featureId);
2543
2754
  break;
2544
2755
  case 'on':
@@ -2568,8 +2779,8 @@ class DevToolbarAppFeaturesToolComponent {
2568
2779
  return '';
2569
2780
  return feature.isEnabled ? 'on' : 'off';
2570
2781
  }
2571
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarAppFeaturesToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2572
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarAppFeaturesToolComponent, isStandalone: true, selector: "ndt-app-features-tool", ngImport: i0, template: `
2782
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarAppFeaturesToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2783
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarAppFeaturesToolComponent, isStandalone: true, selector: "ndt-app-features-tool", ngImport: i0, template: `
2573
2784
  <ndt-toolbar-tool
2574
2785
  [options]="options"
2575
2786
  title="App Features"
@@ -2593,42 +2804,36 @@ class DevToolbarAppFeaturesToolComponent {
2593
2804
  </div>
2594
2805
  </div>
2595
2806
 
2596
- @if (hasNoFeatures()) {
2597
- <div class="empty">
2598
- <p>No app features found</p>
2599
- <small>Call setAvailableOptions() to configure features</small>
2600
- </div>
2601
- } @else if (hasNoFilteredFeatures()) {
2602
- <div class="empty">
2603
- <p>No features match your filter</p>
2604
- </div>
2605
- } @else {
2606
- <div class="feature-list">
2807
+ <ndt-list
2808
+ [hasItems]="!hasNoFeatures()"
2809
+ [hasResults]="!hasNoFilteredFeatures()"
2810
+ emptyMessage="No app features found"
2811
+ [emptyHint]="'Call setAvailableOptions() to configure features'"
2812
+ noResultsMessage="No features match your filter"
2813
+ >
2607
2814
  @for (feature of filteredFeatures(); track feature.id) {
2608
- <div class="feature">
2609
- <div class="info">
2610
- <h3>{{ feature.name }}</h3>
2611
- @if (feature.description) {
2612
- <p>{{ feature.description }}</p>
2613
- }
2614
- </div>
2615
-
2616
- <ndt-select
2617
- [value]="getFeatureValue(feature)"
2618
- [options]="featureValueOptions"
2619
- [ariaLabel]="'Set value for ' + feature.name"
2620
- (valueChange)="onFeatureChange(feature.id, $event ?? '')"
2621
- size="small"
2622
- />
2623
- </div>
2815
+ <ndt-list-item
2816
+ [title]="feature.name"
2817
+ [description]="feature.description"
2818
+ [isForced]="feature.isForced"
2819
+ [currentValue]="feature.isEnabled"
2820
+ [originalValue]="feature.originalValue"
2821
+ >
2822
+ <ndt-select
2823
+ [value]="getFeatureValue(feature)"
2824
+ [options]="featureValueOptions"
2825
+ [ariaLabel]="'Set value for ' + feature.name"
2826
+ (valueChange)="onFeatureChange(feature.id, $event ?? '')"
2827
+ size="small"
2828
+ />
2829
+ </ndt-list-item>
2624
2830
  }
2625
- </div>
2626
- }
2831
+ </ndt-list>
2627
2832
  </div>
2628
2833
  </ndt-toolbar-tool>
2629
- `, 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:1}.header .filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md)}.header .filter-wrapper .filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}.header .filter-wrapper ndt-select{flex:0 0 auto;min-width:180px}.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)}.empty p{margin:0;font-size:var(--ndt-font-size-md)}.empty small{font-size:var(--ndt-font-size-xs);opacity:.8}.feature-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)}.feature-list::-webkit-scrollbar{width:8px}.feature-list::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}.feature-list::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px}:is():hover{background:var(--ndt-hover-bg)}.feature{display:flex;flex-direction:row;gap:var(--ndt-spacing-sm);background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium)}.feature .info{flex:0 0 65%}.feature .info h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary)}.feature .info p{margin:var(--ndt-spacing-xs) 0 0 0;font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted)}.feature 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"] }, { kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2834
+ `, 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);ndt-input{flex:1}.filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md);.filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}ndt-select{flex:0 0 auto;min-width:180px}}}\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"] }, { kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }, { kind: "component", type: DevToolbarListComponent, selector: "ndt-list", inputs: ["hasItems", "hasResults", "emptyMessage", "emptyHint", "noResultsMessage"] }, { kind: "component", type: DevToolbarListItemComponent, selector: "ndt-list-item", inputs: ["title", "description", "isForced", "currentValue", "originalValue"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2630
2835
  }
2631
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarAppFeaturesToolComponent, decorators: [{
2836
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarAppFeaturesToolComponent, decorators: [{
2632
2837
  type: Component,
2633
2838
  args: [{ selector: 'ndt-app-features-tool', standalone: true, imports: [
2634
2839
  FormsModule,
@@ -2636,6 +2841,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
2636
2841
  DevToolbarInputComponent,
2637
2842
  DevToolbarSelectComponent,
2638
2843
  DevToolbarIconComponent,
2844
+ DevToolbarListComponent,
2845
+ DevToolbarListItemComponent,
2639
2846
  ], template: `
2640
2847
  <ndt-toolbar-tool
2641
2848
  [options]="options"
@@ -2660,40 +2867,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
2660
2867
  </div>
2661
2868
  </div>
2662
2869
 
2663
- @if (hasNoFeatures()) {
2664
- <div class="empty">
2665
- <p>No app features found</p>
2666
- <small>Call setAvailableOptions() to configure features</small>
2667
- </div>
2668
- } @else if (hasNoFilteredFeatures()) {
2669
- <div class="empty">
2670
- <p>No features match your filter</p>
2671
- </div>
2672
- } @else {
2673
- <div class="feature-list">
2870
+ <ndt-list
2871
+ [hasItems]="!hasNoFeatures()"
2872
+ [hasResults]="!hasNoFilteredFeatures()"
2873
+ emptyMessage="No app features found"
2874
+ [emptyHint]="'Call setAvailableOptions() to configure features'"
2875
+ noResultsMessage="No features match your filter"
2876
+ >
2674
2877
  @for (feature of filteredFeatures(); track feature.id) {
2675
- <div class="feature">
2676
- <div class="info">
2677
- <h3>{{ feature.name }}</h3>
2678
- @if (feature.description) {
2679
- <p>{{ feature.description }}</p>
2680
- }
2681
- </div>
2682
-
2683
- <ndt-select
2684
- [value]="getFeatureValue(feature)"
2685
- [options]="featureValueOptions"
2686
- [ariaLabel]="'Set value for ' + feature.name"
2687
- (valueChange)="onFeatureChange(feature.id, $event ?? '')"
2688
- size="small"
2689
- />
2690
- </div>
2878
+ <ndt-list-item
2879
+ [title]="feature.name"
2880
+ [description]="feature.description"
2881
+ [isForced]="feature.isForced"
2882
+ [currentValue]="feature.isEnabled"
2883
+ [originalValue]="feature.originalValue"
2884
+ >
2885
+ <ndt-select
2886
+ [value]="getFeatureValue(feature)"
2887
+ [options]="featureValueOptions"
2888
+ [ariaLabel]="'Set value for ' + feature.name"
2889
+ (valueChange)="onFeatureChange(feature.id, $event ?? '')"
2890
+ size="small"
2891
+ />
2892
+ </ndt-list-item>
2691
2893
  }
2692
- </div>
2693
- }
2894
+ </ndt-list>
2694
2895
  </div>
2695
2896
  </ndt-toolbar-tool>
2696
- `, 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:1}.header .filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md)}.header .filter-wrapper .filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}.header .filter-wrapper ndt-select{flex:0 0 auto;min-width:180px}.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)}.empty p{margin:0;font-size:var(--ndt-font-size-md)}.empty small{font-size:var(--ndt-font-size-xs);opacity:.8}.feature-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)}.feature-list::-webkit-scrollbar{width:8px}.feature-list::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}.feature-list::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px}:is():hover{background:var(--ndt-hover-bg)}.feature{display:flex;flex-direction:row;gap:var(--ndt-spacing-sm);background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium)}.feature .info{flex:0 0 65%}.feature .info h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary)}.feature .info p{margin:var(--ndt-spacing-xs) 0 0 0;font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted)}.feature ndt-select{flex:0 0 35%}\n"] }]
2897
+ `, 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);ndt-input{flex:1}.filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md);.filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}ndt-select{flex:0 0 auto;min-width:180px}}}\n"] }]
2697
2898
  }] });
2698
2899
 
2699
2900
  class DevToolbarInternalFeatureFlagService {
@@ -2710,15 +2911,19 @@ class DevToolbarInternalFeatureFlagService {
2710
2911
  this.appFlags$,
2711
2912
  this.forcedFlags$,
2712
2913
  ]).pipe(map(([appFlags, { enabled, disabled }]) => {
2713
- return appFlags.map((flag) => ({
2714
- ...flag,
2715
- isForced: enabled.includes(flag.id) || disabled.includes(flag.id),
2716
- isEnabled: enabled.includes(flag.id)
2717
- ? true
2718
- : disabled.includes(flag.id)
2719
- ? false
2720
- : flag.isEnabled,
2721
- }));
2914
+ return appFlags.map((flag) => {
2915
+ const isForced = enabled.includes(flag.id) || disabled.includes(flag.id);
2916
+ return {
2917
+ ...flag,
2918
+ isForced,
2919
+ isEnabled: enabled.includes(flag.id)
2920
+ ? true
2921
+ : disabled.includes(flag.id)
2922
+ ? false
2923
+ : flag.isEnabled,
2924
+ originalValue: isForced ? flag.isEnabled : undefined,
2925
+ };
2926
+ });
2722
2927
  }));
2723
2928
  this.flags = toSignal(this.flags$, { initialValue: [] });
2724
2929
  this.loadForcedFlags();
@@ -2776,10 +2981,10 @@ class DevToolbarInternalFeatureFlagService {
2776
2981
  getCurrentForcedState() {
2777
2982
  return this.forcedFlagsSubject.value;
2778
2983
  }
2779
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalFeatureFlagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2780
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalFeatureFlagService, providedIn: 'root' }); }
2984
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalFeatureFlagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2985
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalFeatureFlagService, providedIn: 'root' }); }
2781
2986
  }
2782
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalFeatureFlagService, decorators: [{
2987
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalFeatureFlagService, decorators: [{
2783
2988
  type: Injectable,
2784
2989
  args: [{ providedIn: 'root' }]
2785
2990
  }], ctorParameters: () => [] });
@@ -2794,7 +2999,7 @@ class DevToolbarFeatureFlagsToolComponent {
2794
2999
  this.flags = this.featureFlags.flags;
2795
3000
  this.hasNoFlags = computed(() => this.flags().length === 0);
2796
3001
  this.filteredFlags = computed(() => {
2797
- return this.flags().filter((flag) => {
3002
+ const filtered = this.flags().filter((flag) => {
2798
3003
  const searchTerm = this.searchQuery().toLowerCase();
2799
3004
  const flagName = flag.name.toLowerCase();
2800
3005
  const flagDescription = flag.description?.toLowerCase() ?? '';
@@ -2807,6 +3012,8 @@ class DevToolbarFeatureFlagsToolComponent {
2807
3012
  (this.activeFilter() === 'disabled' && !flag.isEnabled);
2808
3013
  return matchesSearch && matchesFilter;
2809
3014
  });
3015
+ // Sort alphabetically by name
3016
+ return filtered.sort((a, b) => a.name.localeCompare(b.name));
2810
3017
  });
2811
3018
  this.hasNoFilteredFlags = computed(() => this.filteredFlags().length === 0);
2812
3019
  // Other properties
@@ -2859,8 +3066,8 @@ class DevToolbarFeatureFlagsToolComponent {
2859
3066
  return '';
2860
3067
  return flag.isEnabled ? 'on' : 'off';
2861
3068
  }
2862
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarFeatureFlagsToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2863
- 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: `
3069
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarFeatureFlagsToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3070
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarFeatureFlagsToolComponent, isStandalone: true, selector: "ndt-feature-flags-tool", ngImport: i0, template: `
2864
3071
  <ndt-toolbar-tool
2865
3072
  [options]="options"
2866
3073
  title="Feature Flags"
@@ -2884,39 +3091,35 @@ class DevToolbarFeatureFlagsToolComponent {
2884
3091
  </div>
2885
3092
  </div>
2886
3093
 
2887
- @if (hasNoFlags()) {
2888
- <div class="empty">
2889
- <p>No flags found</p>
2890
- </div>
2891
- } @else if (hasNoFilteredFlags()) {
2892
- <div class="empty">
2893
- <p>No flags found matching your filter</p>
2894
- </div>
2895
- } @else {
2896
- <div class="flag-list">
3094
+ <ndt-list
3095
+ [hasItems]="!hasNoFlags()"
3096
+ [hasResults]="!hasNoFilteredFlags()"
3097
+ emptyMessage="No flags found"
3098
+ noResultsMessage="No flags found matching your filter"
3099
+ >
2897
3100
  @for (flag of filteredFlags(); track flag.id) {
2898
- <div class="flag">
2899
- <div class="info">
2900
- <h3>{{ flag.name }}</h3>
2901
- <p>{{ flag?.description }}</p>
2902
- </div>
2903
-
2904
- <ndt-select
2905
- [value]="getFlagValue(flag)"
2906
- [options]="flagValueOptions"
2907
- [ariaLabel]="'Set value for ' + flag.name"
2908
- (valueChange)="onFlagChange(flag.id, $event ?? '')"
2909
- size="small"
2910
- />
2911
- </div>
3101
+ <ndt-list-item
3102
+ [title]="flag.name"
3103
+ [description]="flag.description"
3104
+ [isForced]="flag.isForced"
3105
+ [currentValue]="flag.isEnabled"
3106
+ [originalValue]="flag.originalValue"
3107
+ >
3108
+ <ndt-select
3109
+ [value]="getFlagValue(flag)"
3110
+ [options]="flagValueOptions"
3111
+ [ariaLabel]="'Set value for ' + flag.name"
3112
+ (valueChange)="onFlagChange(flag.id, $event ?? '')"
3113
+ size="small"
3114
+ />
3115
+ </ndt-list-item>
2912
3116
  }
2913
- </div>
2914
- }
3117
+ </ndt-list>
2915
3118
  </div>
2916
3119
  </ndt-toolbar-tool>
2917
- `, 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:1}.header .filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md)}.header .filter-wrapper .filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}.header .filter-wrapper ndt-select{flex:0 0 auto;min-width:180px}.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"] }, { kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3120
+ `, 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);ndt-input{flex:1}.filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md);.filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}ndt-select{flex:0 0 auto;min-width:180px}}}\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"] }, { kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }, { kind: "component", type: DevToolbarListComponent, selector: "ndt-list", inputs: ["hasItems", "hasResults", "emptyMessage", "emptyHint", "noResultsMessage"] }, { kind: "component", type: DevToolbarListItemComponent, selector: "ndt-list-item", inputs: ["title", "description", "isForced", "currentValue", "originalValue"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2918
3121
  }
2919
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarFeatureFlagsToolComponent, decorators: [{
3122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarFeatureFlagsToolComponent, decorators: [{
2920
3123
  type: Component,
2921
3124
  args: [{ selector: 'ndt-feature-flags-tool', standalone: true, imports: [
2922
3125
  FormsModule,
@@ -2924,6 +3127,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
2924
3127
  DevToolbarInputComponent,
2925
3128
  DevToolbarSelectComponent,
2926
3129
  DevToolbarIconComponent,
3130
+ DevToolbarListComponent,
3131
+ DevToolbarListItemComponent,
2927
3132
  ], template: `
2928
3133
  <ndt-toolbar-tool
2929
3134
  [options]="options"
@@ -2948,37 +3153,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
2948
3153
  </div>
2949
3154
  </div>
2950
3155
 
2951
- @if (hasNoFlags()) {
2952
- <div class="empty">
2953
- <p>No flags found</p>
2954
- </div>
2955
- } @else if (hasNoFilteredFlags()) {
2956
- <div class="empty">
2957
- <p>No flags found matching your filter</p>
2958
- </div>
2959
- } @else {
2960
- <div class="flag-list">
3156
+ <ndt-list
3157
+ [hasItems]="!hasNoFlags()"
3158
+ [hasResults]="!hasNoFilteredFlags()"
3159
+ emptyMessage="No flags found"
3160
+ noResultsMessage="No flags found matching your filter"
3161
+ >
2961
3162
  @for (flag of filteredFlags(); track flag.id) {
2962
- <div class="flag">
2963
- <div class="info">
2964
- <h3>{{ flag.name }}</h3>
2965
- <p>{{ flag?.description }}</p>
2966
- </div>
2967
-
2968
- <ndt-select
2969
- [value]="getFlagValue(flag)"
2970
- [options]="flagValueOptions"
2971
- [ariaLabel]="'Set value for ' + flag.name"
2972
- (valueChange)="onFlagChange(flag.id, $event ?? '')"
2973
- size="small"
2974
- />
2975
- </div>
3163
+ <ndt-list-item
3164
+ [title]="flag.name"
3165
+ [description]="flag.description"
3166
+ [isForced]="flag.isForced"
3167
+ [currentValue]="flag.isEnabled"
3168
+ [originalValue]="flag.originalValue"
3169
+ >
3170
+ <ndt-select
3171
+ [value]="getFlagValue(flag)"
3172
+ [options]="flagValueOptions"
3173
+ [ariaLabel]="'Set value for ' + flag.name"
3174
+ (valueChange)="onFlagChange(flag.id, $event ?? '')"
3175
+ size="small"
3176
+ />
3177
+ </ndt-list-item>
2976
3178
  }
2977
- </div>
2978
- }
3179
+ </ndt-list>
2979
3180
  </div>
2980
3181
  </ndt-toolbar-tool>
2981
- `, 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:1}.header .filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md)}.header .filter-wrapper .filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}.header .filter-wrapper ndt-select{flex:0 0 auto;min-width:180px}.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"] }]
3182
+ `, 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);ndt-input{flex:1}.filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md);.filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}ndt-select{flex:0 0 auto;min-width:180px}}}\n"] }]
2982
3183
  }] });
2983
3184
 
2984
3185
  class DevToolbarButtonComponent {
@@ -2990,8 +3191,8 @@ class DevToolbarButtonComponent {
2990
3191
  this.ariaLabel = input();
2991
3192
  this.isActive = input(false);
2992
3193
  }
2993
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2994
- 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: `
3194
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3195
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", 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: `
2995
3196
  <button
2996
3197
  class="button"
2997
3198
  [attr.aria-label]="ariaLabel()"
@@ -3007,9 +3208,9 @@ class DevToolbarButtonComponent {
3007
3208
  }
3008
3209
  <ng-content />
3009
3210
  </button>
3010
- `, isInline: true, styles: [".button{display:inline-flex;align-items:center;gap:var(--ndt-spacing-xs);padding:var(--ndt-spacing-sm) var(--ndt-spacing-md);min-height:36px;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 }); }
3211
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.button{display:inline-flex;align-items:center;gap:var(--ndt-spacing-xs);padding:var(--ndt-spacing-sm) var(--ndt-spacing-md);min-height:36px;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 }); }
3011
3212
  }
3012
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarButtonComponent, decorators: [{
3213
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarButtonComponent, decorators: [{
3013
3214
  type: Component,
3014
3215
  args: [{ selector: 'ndt-button', standalone: true, imports: [DevToolbarIconComponent], template: `
3015
3216
  <button
@@ -3027,7 +3228,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3027
3228
  }
3028
3229
  <ng-content />
3029
3230
  </button>
3030
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".button{display:inline-flex;align-items:center;gap:var(--ndt-spacing-xs);padding:var(--ndt-spacing-sm) var(--ndt-spacing-md);min-height:36px;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"] }]
3231
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.button{display:inline-flex;align-items:center;gap:var(--ndt-spacing-xs);padding:var(--ndt-spacing-sm) var(--ndt-spacing-md);min-height:36px;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"] }]
3031
3232
  }] });
3032
3233
 
3033
3234
  class DevToolbarCardComponent {
@@ -3038,8 +3239,8 @@ class DevToolbarCardComponent {
3038
3239
  onClick() {
3039
3240
  this.click.set();
3040
3241
  }
3041
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3042
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: DevToolbarCardComponent, isStandalone: true, selector: "ndt-card", ngImport: i0, template: `
3242
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3243
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.7", type: DevToolbarCardComponent, isStandalone: true, selector: "ndt-card", ngImport: i0, template: `
3043
3244
  <div
3044
3245
  class="card"
3045
3246
  role="button"
@@ -3053,9 +3254,9 @@ class DevToolbarCardComponent {
3053
3254
  >
3054
3255
  <ng-content></ng-content>
3055
3256
  </div>
3056
- `, 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"] }); }
3257
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.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"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3057
3258
  }
3058
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarCardComponent, decorators: [{
3259
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarCardComponent, decorators: [{
3059
3260
  type: Component,
3060
3261
  args: [{ selector: 'ndt-card', standalone: true, template: `
3061
3262
  <div
@@ -3071,7 +3272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3071
3272
  >
3072
3273
  <ng-content></ng-content>
3073
3274
  </div>
3074
- `, 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"] }]
3275
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.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"] }]
3075
3276
  }] });
3076
3277
 
3077
3278
  class DevToolbarClickableCardComponent {
@@ -3084,8 +3285,8 @@ class DevToolbarClickableCardComponent {
3084
3285
  onClick() {
3085
3286
  this.click.set();
3086
3287
  }
3087
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarClickableCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3088
- 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: `
3288
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarClickableCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3289
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", 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: `
3089
3290
  <ndt-card (clicked)="onClick()">
3090
3291
  <div class="clickable-card">
3091
3292
  <div class="clickable-card__icon">
@@ -3097,9 +3298,9 @@ class DevToolbarClickableCardComponent {
3097
3298
  </div>
3098
3299
  </div>
3099
3300
  </ndt-card>
3100
- `, isInline: true, styles: [".clickable-card{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs);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"] }] }); }
3301
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.clickable-card{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs);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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3101
3302
  }
3102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarClickableCardComponent, decorators: [{
3303
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarClickableCardComponent, decorators: [{
3103
3304
  type: Component,
3104
3305
  args: [{ selector: 'ndt-clickable-card', standalone: true, imports: [DevToolbarCardComponent, DevToolbarIconComponent], template: `
3105
3306
  <ndt-card (clicked)="onClick()">
@@ -3113,7 +3314,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3113
3314
  </div>
3114
3315
  </div>
3115
3316
  </ndt-card>
3116
- `, styles: [".clickable-card{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs);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"] }]
3317
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.clickable-card{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs);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"] }]
3117
3318
  }] });
3118
3319
 
3119
3320
  class DevToolbarLinkButtonComponent {
@@ -3121,8 +3322,8 @@ class DevToolbarLinkButtonComponent {
3121
3322
  this.url = input.required();
3122
3323
  this.icon = input.required();
3123
3324
  }
3124
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLinkButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3125
- 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: `
3325
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLinkButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3326
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.7", 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: `
3126
3327
  <a
3127
3328
  [href]="url()"
3128
3329
  target="_blank"
@@ -3136,9 +3337,9 @@ class DevToolbarLinkButtonComponent {
3136
3337
  <ng-content></ng-content>
3137
3338
  </span>
3138
3339
  </a>
3139
- `, 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"] }] }); }
3340
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3140
3341
  }
3141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLinkButtonComponent, decorators: [{
3342
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLinkButtonComponent, decorators: [{
3142
3343
  type: Component,
3143
3344
  args: [{ selector: 'ndt-link-button', standalone: true, imports: [DevToolbarIconComponent], template: `
3144
3345
  <a
@@ -3154,7 +3355,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3154
3355
  <ng-content></ng-content>
3155
3356
  </span>
3156
3357
  </a>
3157
- `, 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"] }]
3358
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.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"] }]
3158
3359
  }] });
3159
3360
 
3160
3361
  class SettingsService {
@@ -3170,10 +3371,10 @@ class SettingsService {
3170
3371
  setSettings(settings) {
3171
3372
  this.storageService.set(this.STORAGE_KEY, settings);
3172
3373
  }
3173
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SettingsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3174
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SettingsService, providedIn: 'root' }); }
3374
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: SettingsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3375
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: SettingsService, providedIn: 'root' }); }
3175
3376
  }
3176
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SettingsService, decorators: [{
3377
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: SettingsService, decorators: [{
3177
3378
  type: Injectable,
3178
3379
  args: [{ providedIn: 'root' }]
3179
3380
  }] });
@@ -3221,11 +3422,6 @@ class DevToolbarHomeToolComponent {
3221
3422
  },
3222
3423
  ];
3223
3424
  }
3224
- onToggleTheme() {
3225
- const newTheme = this.state.isDarkTheme() ? 'light' : 'dark';
3226
- this.settingsService.setSettings({ isDarkMode: newTheme === 'dark' });
3227
- this.state.setTheme(newTheme);
3228
- }
3229
3425
  onExportSettings() {
3230
3426
  const settings = this.storageService.getAllSettings();
3231
3427
  const blob = new Blob([JSON.stringify(settings, null, 2)], {
@@ -3268,34 +3464,10 @@ class DevToolbarHomeToolComponent {
3268
3464
  this.storageService.clearAllSettings();
3269
3465
  window.location.reload();
3270
3466
  }
3271
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarHomeToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3272
- 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: `
3467
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarHomeToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3468
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarHomeToolComponent, isStandalone: true, selector: "ndt-home-tool", inputs: { badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
3273
3469
  <ndt-toolbar-tool [options]="options" title="Home" icon="angular">
3274
3470
  <section class="settings">
3275
- <div class="instruction">
3276
- <div class="instruction__label">
3277
- <span class="instruction__label-text">Theme</span>
3278
- <span class="instruction__label-description">
3279
- Switch between light and dark mode
3280
- </span>
3281
- </div>
3282
- <div class="instruction__control">
3283
- <div class="instruction__control-button">
3284
- <ndt-button
3285
- [isActive]="true"
3286
- (click)="onToggleTheme()"
3287
- variant="icon"
3288
- [ariaLabel]="
3289
- state.isDarkTheme()
3290
- ? 'Switch to light theme'
3291
- : 'Switch to dark theme'
3292
- "
3293
- [icon]="state.isDarkTheme() ? 'sun' : 'moon'"
3294
- />
3295
- </div>
3296
- </div>
3297
- </div>
3298
-
3299
3471
  <div class="settings-container">
3300
3472
  <div class="instruction">
3301
3473
  <div class="instruction__label">
@@ -3340,9 +3512,9 @@ class DevToolbarHomeToolComponent {
3340
3512
  </div>
3341
3513
  </section>
3342
3514
  </ndt-toolbar-tool>
3343
- `, isInline: true, styles: [".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-sm)}.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-sm)}.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 }); }
3515
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.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-sm)}.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-sm)}.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 }); }
3344
3516
  }
3345
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarHomeToolComponent, decorators: [{
3517
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarHomeToolComponent, decorators: [{
3346
3518
  type: Component,
3347
3519
  args: [{ selector: 'ndt-home-tool', standalone: true, imports: [
3348
3520
  DevToolbarToolComponent,
@@ -3353,30 +3525,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3353
3525
  ], template: `
3354
3526
  <ndt-toolbar-tool [options]="options" title="Home" icon="angular">
3355
3527
  <section class="settings">
3356
- <div class="instruction">
3357
- <div class="instruction__label">
3358
- <span class="instruction__label-text">Theme</span>
3359
- <span class="instruction__label-description">
3360
- Switch between light and dark mode
3361
- </span>
3362
- </div>
3363
- <div class="instruction__control">
3364
- <div class="instruction__control-button">
3365
- <ndt-button
3366
- [isActive]="true"
3367
- (click)="onToggleTheme()"
3368
- variant="icon"
3369
- [ariaLabel]="
3370
- state.isDarkTheme()
3371
- ? 'Switch to light theme'
3372
- : 'Switch to dark theme'
3373
- "
3374
- [icon]="state.isDarkTheme() ? 'sun' : 'moon'"
3375
- />
3376
- </div>
3377
- </div>
3378
- </div>
3379
-
3380
3528
  <div class="settings-container">
3381
3529
  <div class="instruction">
3382
3530
  <div class="instruction__label">
@@ -3421,7 +3569,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3421
3569
  </div>
3422
3570
  </section>
3423
3571
  </ndt-toolbar-tool>
3424
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".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-sm)}.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-sm)}.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"] }]
3572
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.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-sm)}.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-sm)}.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"] }]
3425
3573
  }] });
3426
3574
 
3427
3575
  class DevToolbarInternalLanguageService {
@@ -3482,10 +3630,10 @@ class DevToolbarInternalLanguageService {
3482
3630
  getCurrentForcedLanguage() {
3483
3631
  return this.forcedLanguage$.value?.id ?? null;
3484
3632
  }
3485
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalLanguageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3486
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalLanguageService, providedIn: 'root' }); }
3633
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalLanguageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3634
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalLanguageService, providedIn: 'root' }); }
3487
3635
  }
3488
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalLanguageService, decorators: [{
3636
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalLanguageService, decorators: [{
3489
3637
  type: Injectable,
3490
3638
  args: [{ providedIn: 'root' }]
3491
3639
  }], ctorParameters: () => [] });
@@ -3521,8 +3669,8 @@ class DevToolbarLanguageToolComponent {
3521
3669
  this.languageService.setForcedLanguage(selectedLanguage);
3522
3670
  }
3523
3671
  }
3524
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLanguageToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3525
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: DevToolbarLanguageToolComponent, isStandalone: true, selector: "ndt-language-tool", ngImport: i0, template: `
3672
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLanguageToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3673
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.7", type: DevToolbarLanguageToolComponent, isStandalone: true, selector: "ndt-language-tool", ngImport: i0, template: `
3526
3674
  <ndt-toolbar-tool title="Languages" icon="translate" [options]="options">
3527
3675
  <div class="language-select">
3528
3676
  <label for="language-select">Language</label>
@@ -3535,9 +3683,9 @@ class DevToolbarLanguageToolComponent {
3535
3683
  />
3536
3684
  </div>
3537
3685
  </ndt-toolbar-tool>
3538
- `, 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"] }] }); }
3686
+ `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.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"] }] }); }
3539
3687
  }
3540
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLanguageToolComponent, decorators: [{
3688
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLanguageToolComponent, decorators: [{
3541
3689
  type: Component,
3542
3690
  args: [{ selector: 'ndt-language-tool', standalone: true, imports: [DevToolbarToolComponent, DevToolbarSelectComponent], template: `
3543
3691
  <ndt-toolbar-tool title="Languages" icon="translate" [options]="options">
@@ -3552,7 +3700,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3552
3700
  />
3553
3701
  </div>
3554
3702
  </ndt-toolbar-tool>
3555
- `, styles: [".language-select{display:flex;flex-direction:row;gap:.5rem;align-items:center;justify-content:space-between}\n"] }]
3703
+ `, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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)}.language-select{display:flex;flex-direction:row;gap:.5rem;align-items:center;justify-content:space-between}\n"] }]
3556
3704
  }] });
3557
3705
 
3558
3706
  class DevToolbarInternalPermissionsService {
@@ -3569,15 +3717,19 @@ class DevToolbarInternalPermissionsService {
3569
3717
  this.appPermissions$,
3570
3718
  this.forcedState$,
3571
3719
  ]).pipe(map(([appPermissions, { granted, denied }]) => {
3572
- return appPermissions.map((permission) => ({
3573
- ...permission,
3574
- isForced: granted.includes(permission.id) || denied.includes(permission.id),
3575
- isGranted: granted.includes(permission.id)
3576
- ? true
3577
- : denied.includes(permission.id)
3578
- ? false
3579
- : permission.isGranted,
3580
- }));
3720
+ return appPermissions.map((permission) => {
3721
+ const isForced = granted.includes(permission.id) || denied.includes(permission.id);
3722
+ return {
3723
+ ...permission,
3724
+ isForced,
3725
+ isGranted: granted.includes(permission.id)
3726
+ ? true
3727
+ : denied.includes(permission.id)
3728
+ ? false
3729
+ : permission.isGranted,
3730
+ originalValue: isForced ? permission.isGranted : undefined,
3731
+ };
3732
+ });
3581
3733
  }));
3582
3734
  this.permissions = toSignal(this.permissions$, { initialValue: [] });
3583
3735
  this.loadForcedState();
@@ -3645,10 +3797,12 @@ class DevToolbarInternalPermissionsService {
3645
3797
  }
3646
3798
  }
3647
3799
  isValidForcedState(state) {
3648
- return (state &&
3649
- typeof state === 'object' &&
3650
- Array.isArray(state.granted) &&
3651
- Array.isArray(state.denied));
3800
+ if (!state || typeof state !== 'object') {
3801
+ return false;
3802
+ }
3803
+ const candidate = state;
3804
+ return (Array.isArray(candidate['granted']) &&
3805
+ Array.isArray(candidate['denied']));
3652
3806
  }
3653
3807
  validateAndCleanForcedState(permissions) {
3654
3808
  const currentState = this.forcedStateSubject.value;
@@ -3673,10 +3827,10 @@ class DevToolbarInternalPermissionsService {
3673
3827
  }
3674
3828
  }
3675
3829
  }
3676
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalPermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3677
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalPermissionsService, providedIn: 'root' }); }
3830
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3831
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPermissionsService, providedIn: 'root' }); }
3678
3832
  }
3679
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalPermissionsService, decorators: [{
3833
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPermissionsService, decorators: [{
3680
3834
  type: Injectable,
3681
3835
  args: [{ providedIn: 'root' }]
3682
3836
  }], ctorParameters: () => [] });
@@ -3691,7 +3845,7 @@ class DevToolbarPermissionsToolComponent {
3691
3845
  this.permissions = this.permissionsService.permissions;
3692
3846
  this.hasNoPermissions = computed(() => this.permissions().length === 0);
3693
3847
  this.filteredPermissions = computed(() => {
3694
- return this.permissions().filter((permission) => {
3848
+ const filtered = this.permissions().filter((permission) => {
3695
3849
  const searchTerm = this.searchQuery().toLowerCase();
3696
3850
  const permissionName = permission.name.toLowerCase();
3697
3851
  const permissionDescription = permission.description?.toLowerCase() ?? '';
@@ -3704,6 +3858,8 @@ class DevToolbarPermissionsToolComponent {
3704
3858
  (this.activeFilter() === 'denied' && !permission.isGranted);
3705
3859
  return matchesSearch && matchesFilter;
3706
3860
  });
3861
+ // Sort alphabetically by name
3862
+ return filtered.sort((a, b) => a.name.localeCompare(b.name));
3707
3863
  });
3708
3864
  this.hasNoFilteredPermissions = computed(() => this.filteredPermissions().length === 0);
3709
3865
  // Other properties
@@ -3756,8 +3912,8 @@ class DevToolbarPermissionsToolComponent {
3756
3912
  return '';
3757
3913
  return permission.isGranted ? 'granted' : 'denied';
3758
3914
  }
3759
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarPermissionsToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3760
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarPermissionsToolComponent, isStandalone: true, selector: "ndt-permissions-tool", ngImport: i0, template: `
3915
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPermissionsToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3916
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarPermissionsToolComponent, isStandalone: true, selector: "ndt-permissions-tool", ngImport: i0, template: `
3761
3917
  <ndt-toolbar-tool
3762
3918
  [options]="options"
3763
3919
  title="Permissions"
@@ -3783,40 +3939,36 @@ class DevToolbarPermissionsToolComponent {
3783
3939
  </div>
3784
3940
  </div>
3785
3941
 
3786
- @if (hasNoPermissions()) {
3787
- <div class="empty">
3788
- <p>No permissions found</p>
3789
- <p class="hint">Call setAvailableOptions() to configure permissions</p>
3790
- </div>
3791
- } @else if (hasNoFilteredPermissions()) {
3792
- <div class="empty">
3793
- <p>No permissions match your filter</p>
3794
- </div>
3795
- } @else {
3796
- <div class="permission-list">
3942
+ <ndt-list
3943
+ [hasItems]="!hasNoPermissions()"
3944
+ [hasResults]="!hasNoFilteredPermissions()"
3945
+ emptyMessage="No permissions found"
3946
+ [emptyHint]="'Call setAvailableOptions() to configure permissions'"
3947
+ noResultsMessage="No permissions match your filter"
3948
+ >
3797
3949
  @for (permission of filteredPermissions(); track permission.id) {
3798
- <div class="permission">
3799
- <div class="info">
3800
- <h3>{{ permission.name }}</h3>
3801
- <p>{{ permission?.description }}</p>
3802
- </div>
3803
-
3804
- <ndt-select
3805
- [value]="getPermissionValue(permission)"
3806
- [options]="permissionValueOptions"
3807
- [ariaLabel]="'Override state for ' + permission.name"
3808
- (valueChange)="onPermissionChange(permission.id, $event ?? '')"
3809
- size="small"
3810
- />
3811
- </div>
3950
+ <ndt-list-item
3951
+ [title]="permission.name"
3952
+ [description]="permission.description"
3953
+ [isForced]="permission.isForced"
3954
+ [currentValue]="permission.isGranted"
3955
+ [originalValue]="permission.originalValue"
3956
+ >
3957
+ <ndt-select
3958
+ [value]="getPermissionValue(permission)"
3959
+ [options]="permissionValueOptions"
3960
+ [ariaLabel]="'Override state for ' + permission.name"
3961
+ (valueChange)="onPermissionChange(permission.id, $event ?? '')"
3962
+ size="small"
3963
+ />
3964
+ </ndt-list-item>
3812
3965
  }
3813
- </div>
3814
- }
3966
+ </ndt-list>
3815
3967
  </div>
3816
3968
  </ndt-toolbar-tool>
3817
- `, 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:1}.header .filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md)}.header .filter-wrapper .filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}.header .filter-wrapper ndt-select{flex:0 0 auto;min-width:180px}.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)}.empty p{margin:0}.empty .hint{font-size:var(--ndt-font-size-xs)}.permission-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)}.permission-list::-webkit-scrollbar{width:8px}.permission-list::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}.permission-list::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px}:is():hover{background:var(--ndt-hover-bg)}.permission{display:flex;flex-direction:row;gap:var(--ndt-spacing-sm);background:var(--ndt-background-secondary)}.permission .info{flex:0 0 65%}.permission .info h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary)}.permission .info p{font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted)}.permission 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"] }, { kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3969
+ `, 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);ndt-input{flex:1}.filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md);.filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}ndt-select{flex:0 0 auto;min-width:180px}}}\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"] }, { kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }, { kind: "component", type: DevToolbarListComponent, selector: "ndt-list", inputs: ["hasItems", "hasResults", "emptyMessage", "emptyHint", "noResultsMessage"] }, { kind: "component", type: DevToolbarListItemComponent, selector: "ndt-list-item", inputs: ["title", "description", "isForced", "currentValue", "originalValue"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3818
3970
  }
3819
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarPermissionsToolComponent, decorators: [{
3971
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPermissionsToolComponent, decorators: [{
3820
3972
  type: Component,
3821
3973
  args: [{ selector: 'ndt-permissions-tool', standalone: true, imports: [
3822
3974
  FormsModule,
@@ -3824,6 +3976,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3824
3976
  DevToolbarInputComponent,
3825
3977
  DevToolbarSelectComponent,
3826
3978
  DevToolbarIconComponent,
3979
+ DevToolbarListComponent,
3980
+ DevToolbarListItemComponent,
3827
3981
  ], template: `
3828
3982
  <ndt-toolbar-tool
3829
3983
  [options]="options"
@@ -3850,38 +4004,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
3850
4004
  </div>
3851
4005
  </div>
3852
4006
 
3853
- @if (hasNoPermissions()) {
3854
- <div class="empty">
3855
- <p>No permissions found</p>
3856
- <p class="hint">Call setAvailableOptions() to configure permissions</p>
3857
- </div>
3858
- } @else if (hasNoFilteredPermissions()) {
3859
- <div class="empty">
3860
- <p>No permissions match your filter</p>
3861
- </div>
3862
- } @else {
3863
- <div class="permission-list">
4007
+ <ndt-list
4008
+ [hasItems]="!hasNoPermissions()"
4009
+ [hasResults]="!hasNoFilteredPermissions()"
4010
+ emptyMessage="No permissions found"
4011
+ [emptyHint]="'Call setAvailableOptions() to configure permissions'"
4012
+ noResultsMessage="No permissions match your filter"
4013
+ >
3864
4014
  @for (permission of filteredPermissions(); track permission.id) {
3865
- <div class="permission">
3866
- <div class="info">
3867
- <h3>{{ permission.name }}</h3>
3868
- <p>{{ permission?.description }}</p>
3869
- </div>
3870
-
3871
- <ndt-select
3872
- [value]="getPermissionValue(permission)"
3873
- [options]="permissionValueOptions"
3874
- [ariaLabel]="'Override state for ' + permission.name"
3875
- (valueChange)="onPermissionChange(permission.id, $event ?? '')"
3876
- size="small"
3877
- />
3878
- </div>
4015
+ <ndt-list-item
4016
+ [title]="permission.name"
4017
+ [description]="permission.description"
4018
+ [isForced]="permission.isForced"
4019
+ [currentValue]="permission.isGranted"
4020
+ [originalValue]="permission.originalValue"
4021
+ >
4022
+ <ndt-select
4023
+ [value]="getPermissionValue(permission)"
4024
+ [options]="permissionValueOptions"
4025
+ [ariaLabel]="'Override state for ' + permission.name"
4026
+ (valueChange)="onPermissionChange(permission.id, $event ?? '')"
4027
+ size="small"
4028
+ />
4029
+ </ndt-list-item>
3879
4030
  }
3880
- </div>
3881
- }
4031
+ </ndt-list>
3882
4032
  </div>
3883
4033
  </ndt-toolbar-tool>
3884
- `, 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:1}.header .filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md)}.header .filter-wrapper .filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}.header .filter-wrapper ndt-select{flex:0 0 auto;min-width:180px}.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)}.empty p{margin:0}.empty .hint{font-size:var(--ndt-font-size-xs)}.permission-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)}.permission-list::-webkit-scrollbar{width:8px}.permission-list::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}.permission-list::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px}:is():hover{background:var(--ndt-hover-bg)}.permission{display:flex;flex-direction:row;gap:var(--ndt-spacing-sm);background:var(--ndt-background-secondary)}.permission .info{flex:0 0 65%}.permission .info h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary)}.permission .info p{font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted)}.permission ndt-select{flex:0 0 35%}\n"] }]
4034
+ `, 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);ndt-input{flex:1}.filter-wrapper{flex:0 0 auto;display:flex;align-items:center;gap:var(--ndt-spacing-md);.filter-icon{width:18px;height:18px;flex-shrink:0;opacity:.6}ndt-select{flex:0 0 auto;min-width:180px}}}\n"] }]
3885
4035
  }] });
3886
4036
 
3887
4037
  /**
@@ -3905,14 +4055,14 @@ class DevToolbarInternalPresetsService {
3905
4055
  /**
3906
4056
  * Capture current toolbar state as a new preset
3907
4057
  */
3908
- saveCurrentAsPreset(name, description) {
4058
+ saveCurrentAsPreset(name, description, categoryOptions) {
3909
4059
  const preset = {
3910
4060
  id: this.generateId(),
3911
4061
  name,
3912
4062
  description,
3913
4063
  createdAt: new Date().toISOString(),
3914
4064
  updatedAt: new Date().toISOString(),
3915
- config: this.captureCurrentConfig(),
4065
+ config: this.captureCurrentConfig(categoryOptions),
3916
4066
  };
3917
4067
  const presets = [...this.presetsSubject.value, preset];
3918
4068
  this.presetsSubject.next(presets);
@@ -3982,12 +4132,42 @@ class DevToolbarInternalPresetsService {
3982
4132
  /**
3983
4133
  * Capture current configuration from all tools
3984
4134
  */
3985
- captureCurrentConfig() {
4135
+ captureCurrentConfig(categoryOptions) {
4136
+ // Default to including all categories if not specified
4137
+ const options = {
4138
+ includeFeatureFlags: categoryOptions?.includeFeatureFlags ?? true,
4139
+ includePermissions: categoryOptions?.includePermissions ?? true,
4140
+ includeAppFeatures: categoryOptions?.includeAppFeatures ?? true,
4141
+ includeLanguage: categoryOptions?.includeLanguage ?? true,
4142
+ };
4143
+ // Get current forced states
4144
+ const currentFlags = this.featureFlagsService.getCurrentForcedState();
4145
+ const currentPerms = this.permissionsService.getCurrentForcedState();
4146
+ const currentFeatures = this.appFeaturesService.getCurrentForcedState();
4147
+ // Filter by selected IDs if provided
4148
+ const filterById = (ids, selected) => selected && selected.length > 0 ? ids.filter((id) => selected.includes(id)) : ids;
3986
4149
  return {
3987
- featureFlags: this.featureFlagsService.getCurrentForcedState(),
3988
- language: this.languageService.getCurrentForcedLanguage(),
3989
- permissions: this.permissionsService.getCurrentForcedState(),
3990
- appFeatures: this.appFeaturesService.getCurrentForcedState(),
4150
+ featureFlags: options.includeFeatureFlags
4151
+ ? {
4152
+ enabled: filterById(currentFlags.enabled, categoryOptions?.selectedFlagIds),
4153
+ disabled: filterById(currentFlags.disabled, categoryOptions?.selectedFlagIds),
4154
+ }
4155
+ : { enabled: [], disabled: [] },
4156
+ language: options.includeLanguage
4157
+ ? this.languageService.getCurrentForcedLanguage()
4158
+ : null,
4159
+ permissions: options.includePermissions
4160
+ ? {
4161
+ granted: filterById(currentPerms.granted, categoryOptions?.selectedPermissionIds),
4162
+ denied: filterById(currentPerms.denied, categoryOptions?.selectedPermissionIds),
4163
+ }
4164
+ : { granted: [], denied: [] },
4165
+ appFeatures: options.includeAppFeatures
4166
+ ? {
4167
+ enabled: filterById(currentFeatures.enabled, categoryOptions?.selectedFeatureIds),
4168
+ disabled: filterById(currentFeatures.disabled, categoryOptions?.selectedFeatureIds),
4169
+ }
4170
+ : { enabled: [], disabled: [] },
3991
4171
  };
3992
4172
  }
3993
4173
  /**
@@ -4010,10 +4190,10 @@ class DevToolbarInternalPresetsService {
4010
4190
  generateId() {
4011
4191
  return `preset-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
4012
4192
  }
4013
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalPresetsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4014
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalPresetsService, providedIn: 'root' }); }
4193
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPresetsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4194
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPresetsService, providedIn: 'root' }); }
4015
4195
  }
4016
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalPresetsService, decorators: [{
4196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPresetsService, decorators: [{
4017
4197
  type: Injectable,
4018
4198
  args: [{ providedIn: 'root' }]
4019
4199
  }], ctorParameters: () => [] });
@@ -4026,11 +4206,20 @@ class DevToolbarPresetsToolComponent {
4026
4206
  this.permissionsService = inject(DevToolbarInternalPermissionsService);
4027
4207
  this.appFeaturesService = inject(DevToolbarInternalAppFeaturesService);
4028
4208
  this.languageService = inject(DevToolbarInternalLanguageService);
4209
+ this.state = inject(DevToolbarStateService);
4029
4210
  // Signals
4030
4211
  this.viewMode = signal('list');
4031
4212
  this.searchQuery = signal('');
4032
4213
  this.presetName = signal('');
4033
4214
  this.presetDescription = signal('');
4215
+ this.includeFeatureFlags = signal(true);
4216
+ this.includePermissions = signal(true);
4217
+ this.includeAppFeatures = signal(true);
4218
+ this.includeLanguage = signal(true);
4219
+ // Track selected individual items
4220
+ this.selectedFlagIds = signal(new Set());
4221
+ this.selectedPermissionIds = signal(new Set());
4222
+ this.selectedFeatureIds = signal(new Set());
4034
4223
  this.presets = this.presetsService.presets;
4035
4224
  this.filteredPresets = computed(() => {
4036
4225
  const query = this.searchQuery().toLowerCase();
@@ -4039,6 +4228,21 @@ class DevToolbarPresetsToolComponent {
4039
4228
  });
4040
4229
  this.hasNoPresets = computed(() => this.presets().length === 0);
4041
4230
  this.hasNoFilteredPresets = computed(() => this.filteredPresets().length === 0);
4231
+ // Tool availability (based on config)
4232
+ this.isFeatureFlagsEnabled = computed(() => this.state.config().showFeatureFlagsTool ?? true);
4233
+ this.isPermissionsEnabled = computed(() => this.state.config().showPermissionsTool ?? true);
4234
+ this.isAppFeaturesEnabled = computed(() => this.state.config().showAppFeaturesTool ?? true);
4235
+ this.isLanguageEnabled = computed(() => this.state.config().showLanguageTool ?? true);
4236
+ // Forced items details
4237
+ this.forcedFlags = computed(() => {
4238
+ return this.featureFlagsService.flags().filter((flag) => flag.isForced);
4239
+ });
4240
+ this.forcedPermissions = computed(() => {
4241
+ return this.permissionsService.permissions().filter((perm) => perm.isForced);
4242
+ });
4243
+ this.forcedAppFeatures = computed(() => {
4244
+ return this.appFeaturesService.features().filter((feat) => feat.isForced);
4245
+ });
4042
4246
  // Other properties
4043
4247
  this.options = {
4044
4248
  title: 'Presets',
@@ -4057,6 +4261,16 @@ class DevToolbarPresetsToolComponent {
4057
4261
  this.viewMode.set('create');
4058
4262
  this.presetName.set('');
4059
4263
  this.presetDescription.set('');
4264
+ // Reset checkboxes - only enable categories that have forced items
4265
+ this.includeFeatureFlags.set(this.getCurrentFlagsCount() > 0);
4266
+ this.includePermissions.set(this.getCurrentPermissionsCount() > 0);
4267
+ this.includeAppFeatures.set(this.getCurrentAppFeaturesCount() > 0);
4268
+ const currentLang = this.getCurrentLanguage();
4269
+ this.includeLanguage.set(!!currentLang && currentLang !== 'Not Forced');
4270
+ // Initialize selected items - select all by default
4271
+ this.selectedFlagIds.set(new Set(this.forcedFlags().map((f) => f.id)));
4272
+ this.selectedPermissionIds.set(new Set(this.forcedPermissions().map((p) => p.id)));
4273
+ this.selectedFeatureIds.set(new Set(this.forcedAppFeatures().map((f) => f.id)));
4060
4274
  }
4061
4275
  onSwitchToListMode() {
4062
4276
  this.viewMode.set('list');
@@ -4065,7 +4279,15 @@ class DevToolbarPresetsToolComponent {
4065
4279
  event.preventDefault();
4066
4280
  if (!this.presetName())
4067
4281
  return;
4068
- this.presetsService.saveCurrentAsPreset(this.presetName(), this.presetDescription());
4282
+ this.presetsService.saveCurrentAsPreset(this.presetName(), this.presetDescription(), {
4283
+ includeFeatureFlags: this.includeFeatureFlags(),
4284
+ includePermissions: this.includePermissions(),
4285
+ includeAppFeatures: this.includeAppFeatures(),
4286
+ includeLanguage: this.includeLanguage(),
4287
+ selectedFlagIds: Array.from(this.selectedFlagIds()),
4288
+ selectedPermissionIds: Array.from(this.selectedPermissionIds()),
4289
+ selectedFeatureIds: Array.from(this.selectedFeatureIds()),
4290
+ });
4069
4291
  this.onSwitchToListMode();
4070
4292
  }
4071
4293
  onApplyPreset(presetId) {
@@ -4111,8 +4333,27 @@ class DevToolbarPresetsToolComponent {
4111
4333
  formatDate(isoString) {
4112
4334
  return new Date(isoString).toLocaleDateString();
4113
4335
  }
4114
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarPresetsToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4115
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarPresetsToolComponent, isStandalone: true, selector: "ndt-presets-tool", ngImport: i0, template: `
4336
+ /**
4337
+ * Toggle selection of an individual item
4338
+ */
4339
+ toggleItemSelection(signal, itemId) {
4340
+ const current = new Set(signal());
4341
+ if (current.has(itemId)) {
4342
+ current.delete(itemId);
4343
+ }
4344
+ else {
4345
+ current.add(itemId);
4346
+ }
4347
+ signal.set(current);
4348
+ }
4349
+ /**
4350
+ * Check if an item is selected
4351
+ */
4352
+ isItemSelected(selectedSet, itemId) {
4353
+ return selectedSet.has(itemId);
4354
+ }
4355
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPresetsToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4356
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarPresetsToolComponent, isStandalone: true, selector: "ndt-presets-tool", ngImport: i0, template: `
4116
4357
  <ndt-toolbar-tool [options]="options" title="Presets" icon="layout">
4117
4358
  <div class="container">
4118
4359
  <!-- Mode Toggle -->
@@ -4160,15 +4401,122 @@ class DevToolbarPresetsToolComponent {
4160
4401
  [ariaLabel]="'Preset description'"
4161
4402
  />
4162
4403
 
4163
- <!-- Summary of what will be saved -->
4404
+ <!-- Category selection checkboxes -->
4164
4405
  <div class="preset-summary">
4165
- <h4>Configuration to Save:</h4>
4166
- <ul>
4167
- <li>Feature Flags: {{ getCurrentFlagsCount() }} forced</li>
4168
- <li>Permissions: {{ getCurrentPermissionsCount() }} forced</li>
4169
- <li>App Features: {{ getCurrentAppFeaturesCount() }} forced</li>
4170
- <li>Language: {{ getCurrentLanguage() }}</li>
4171
- </ul>
4406
+ <h4>Select what to include:</h4>
4407
+
4408
+ @if (isFeatureFlagsEnabled()) {
4409
+ <div class="category-section">
4410
+ <label class="checkbox-option">
4411
+ <input
4412
+ type="checkbox"
4413
+ [checked]="includeFeatureFlags()"
4414
+ (change)="includeFeatureFlags.set(!includeFeatureFlags())"
4415
+ [disabled]="getCurrentFlagsCount() === 0"
4416
+ />
4417
+ <span>Feature Flags ({{ getCurrentFlagsCount() }} forced)</span>
4418
+ </label>
4419
+ @if (forcedFlags().length > 0) {
4420
+ <ul class="forced-items-list">
4421
+ @for (flag of forcedFlags(); track flag.id) {
4422
+ <li>
4423
+ <label class="item-checkbox">
4424
+ <input
4425
+ type="checkbox"
4426
+ [checked]="isItemSelected(selectedFlagIds(), flag.id)"
4427
+ (change)="toggleItemSelection(selectedFlagIds, flag.id)"
4428
+ />
4429
+ <span class="item-name">{{ flag.name }}</span>
4430
+ <span class="item-status" [class.enabled]="flag.isEnabled" [class.disabled]="!flag.isEnabled">
4431
+ {{ flag.isEnabled ? 'ON' : 'OFF' }}
4432
+ </span>
4433
+ </label>
4434
+ </li>
4435
+ }
4436
+ </ul>
4437
+ }
4438
+ </div>
4439
+ }
4440
+
4441
+ @if (isPermissionsEnabled()) {
4442
+ <div class="category-section">
4443
+ <label class="checkbox-option">
4444
+ <input
4445
+ type="checkbox"
4446
+ [checked]="includePermissions()"
4447
+ (change)="includePermissions.set(!includePermissions())"
4448
+ [disabled]="getCurrentPermissionsCount() === 0"
4449
+ />
4450
+ <span>Permissions ({{ getCurrentPermissionsCount() }} forced)</span>
4451
+ </label>
4452
+ @if (forcedPermissions().length > 0) {
4453
+ <ul class="forced-items-list">
4454
+ @for (perm of forcedPermissions(); track perm.id) {
4455
+ <li>
4456
+ <label class="item-checkbox">
4457
+ <input
4458
+ type="checkbox"
4459
+ [checked]="isItemSelected(selectedPermissionIds(), perm.id)"
4460
+ (change)="toggleItemSelection(selectedPermissionIds, perm.id)"
4461
+ />
4462
+ <span class="item-name">{{ perm.name }}</span>
4463
+ <span class="item-status" [class.enabled]="perm.isGranted" [class.disabled]="!perm.isGranted">
4464
+ {{ perm.isGranted ? 'GRANTED' : 'DENIED' }}
4465
+ </span>
4466
+ </label>
4467
+ </li>
4468
+ }
4469
+ </ul>
4470
+ }
4471
+ </div>
4472
+ }
4473
+
4474
+ @if (isAppFeaturesEnabled()) {
4475
+ <div class="category-section">
4476
+ <label class="checkbox-option">
4477
+ <input
4478
+ type="checkbox"
4479
+ [checked]="includeAppFeatures()"
4480
+ (change)="includeAppFeatures.set(!includeAppFeatures())"
4481
+ [disabled]="getCurrentAppFeaturesCount() === 0"
4482
+ />
4483
+ <span>App Features ({{ getCurrentAppFeaturesCount() }} forced)</span>
4484
+ </label>
4485
+ @if (forcedAppFeatures().length > 0) {
4486
+ <ul class="forced-items-list">
4487
+ @for (feat of forcedAppFeatures(); track feat.id) {
4488
+ <li>
4489
+ <label class="item-checkbox">
4490
+ <input
4491
+ type="checkbox"
4492
+ [checked]="isItemSelected(selectedFeatureIds(), feat.id)"
4493
+ (change)="toggleItemSelection(selectedFeatureIds, feat.id)"
4494
+ />
4495
+ <span class="item-name">{{ feat.name }}</span>
4496
+ <span class="item-status" [class.enabled]="feat.isEnabled" [class.disabled]="!feat.isEnabled">
4497
+ {{ feat.isEnabled ? 'ON' : 'OFF' }}
4498
+ </span>
4499
+ </label>
4500
+ </li>
4501
+ }
4502
+ </ul>
4503
+ }
4504
+ </div>
4505
+ }
4506
+
4507
+ @if (isLanguageEnabled()) {
4508
+ <div class="category-section">
4509
+ <label class="checkbox-option">
4510
+ <input
4511
+ type="checkbox"
4512
+ [checked]="includeLanguage()"
4513
+ (change)="includeLanguage.set(!includeLanguage())"
4514
+ [disabled]="!getCurrentLanguage() || getCurrentLanguage() === 'Not Forced'"
4515
+ />
4516
+ <span>Language ({{ getCurrentLanguage() }})</span>
4517
+ </label>
4518
+ </div>
4519
+ }
4172
4520
  </div>
4173
4521
 
4174
4522
  <div class="form-actions">
@@ -4279,9 +4627,9 @@ class DevToolbarPresetsToolComponent {
4279
4627
  }
4280
4628
  </div>
4281
4629
  </ndt-toolbar-tool>
4282
- `, 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:1}.header ndt-button{flex-shrink:0}.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-border-subtle);border-radius:var(--ndt-border-radius-medium);padding:var(--ndt-spacing-md);background:transparent;color:var(--ndt-text-muted);text-align:center}.empty p{margin:0}.empty .hint{font-size:var(--ndt-font-size-xs)}.preset-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)}.preset-list::-webkit-scrollbar{width:8px}.preset-list::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}.preset-list::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px}:is():hover{background:var(--ndt-hover-bg)}.preset-card{background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium);display:flex;flex-direction:column;gap:var(--ndt-spacing-sm)}.preset-card__header{display:flex;justify-content:space-between;align-items:center;gap:var(--ndt-spacing-sm)}.preset-card__header h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary);flex:1}.preset-card__actions{display:flex;gap:var(--ndt-spacing-xs)}.icon-button{background:transparent;border:none;cursor:pointer;padding:var(--ndt-spacing-xs);border-radius:var(--ndt-border-radius-small);color:var(--ndt-text-secondary);display:flex;align-items:center;justify-content:center}.icon-button:hover{background:var(--ndt-hover-bg);color:var(--ndt-text-primary)}.icon-button ndt-icon{width:16px;height:16px}.preset-card__description{margin:0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-secondary)}.preset-card__meta{font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted)}.preset-card__meta span{margin-right:var(--ndt-spacing-sm)}.preset-card__preview{display:flex;gap:var(--ndt-spacing-xs);flex-wrap:wrap}.badge{background:var(--ndt-primary-color);color:#fff;padding:2px 8px;border-radius:12px;font-size:var(--ndt-font-size-xs);font-weight:500}.preset-form{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--ndt-spacing-md);padding:var(--ndt-spacing-md)}.preset-form ndt-input{width:100%}.preset-summary{background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium)}.preset-summary h4{margin:0 0 var(--ndt-spacing-sm) 0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-primary)}.preset-summary ul{margin:0;padding-left:var(--ndt-spacing-md);color:var(--ndt-text-secondary);font-size:var(--ndt-font-size-sm)}.preset-summary ul li{margin-bottom:var(--ndt-spacing-xs)}.form-actions{display:flex;justify-content:flex-end;gap:var(--ndt-spacing-sm)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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: DevToolbarButtonComponent, selector: "ndt-button", inputs: ["type", "variant", "icon", "label", "ariaLabel", "isActive"] }, { kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4630
+ `, 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);ndt-input{flex:1}ndt-button{flex-shrink:0}}.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-border-subtle);border-radius:var(--ndt-border-radius-medium);padding:var(--ndt-spacing-md);background:transparent;color:var(--ndt-text-muted);text-align:center;p{margin:0}.hint{font-size:var(--ndt-font-size-xs)}}.preset-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);&::-webkit-scrollbar{width:8px}&::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}&::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px;&:hover{background:var(--ndt-hover-bg)}}scrollbar-width:thin;scrollbar-color:var(--ndt-border-primary) var(--ndt-background-secondary)}.preset-card{background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium);display:flex;flex-direction:column;gap:var(--ndt-spacing-sm)}.preset-card__header{display:flex;justify-content:space-between;align-items:center;gap:var(--ndt-spacing-sm);h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary);flex:1}}.preset-card__actions{display:flex;gap:var(--ndt-spacing-xs)}.icon-button{background:transparent;border:none;cursor:pointer;padding:var(--ndt-spacing-xs);border-radius:var(--ndt-border-radius-small);color:var(--ndt-text-secondary);display:flex;align-items:center;justify-content:center;&:hover{background:var(--ndt-hover-bg);color:var(--ndt-text-primary)}ndt-icon{width:16px;height:16px}}.preset-card__description{margin:0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-secondary)}.preset-card__meta{font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted);span{margin-right:var(--ndt-spacing-sm)}}.preset-card__preview{display:flex;gap:var(--ndt-spacing-xs);flex-wrap:wrap}.badge{background:var(--ndt-primary-color);color:#fff;padding:2px 8px;border-radius:12px;font-size:var(--ndt-font-size-xs);font-weight:500}.preset-form{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--ndt-spacing-md);padding:var(--ndt-spacing-md);ndt-input{width:100%}}.preset-summary{background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium);display:flex;flex-direction:column;gap:var(--ndt-spacing-sm);h4{margin:0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-primary)}}.category-section{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs)}.checkbox-option{display:flex;align-items:center;gap:var(--ndt-spacing-sm);cursor:pointer;color:var(--ndt-text-secondary);font-size:var(--ndt-font-size-sm);input[type=checkbox]{cursor:pointer;width:16px;height:16px;accent-color:var(--ndt-primary);&:disabled{cursor:not-allowed;opacity:.5}}&:has(input:disabled){opacity:.6;cursor:not-allowed}}.forced-items-list{list-style:none;padding:0;margin:0 0 0 var(--ndt-spacing-lg);display:flex;flex-direction:column;gap:var(--ndt-spacing-xs);font-size:var(--ndt-font-size-xs);li{background:rgba(var(--ndt-primary-rgb),.05);border-radius:var(--ndt-border-radius-small);border-left:2px solid rgba(var(--ndt-primary-rgb),.3)}.item-checkbox{display:flex;justify-content:space-between;align-items:center;padding:var(--ndt-spacing-xs) var(--ndt-spacing-sm);cursor:pointer;gap:var(--ndt-spacing-sm);input[type=checkbox]{cursor:pointer;width:14px;height:14px;accent-color:var(--ndt-primary);flex-shrink:0}&:hover{background:rgba(var(--ndt-primary-rgb),.08)}}.item-name{color:var(--ndt-text-primary);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item-status{font-weight:600;padding:2px 6px;border-radius:var(--ndt-border-radius-small);font-size:10px;text-transform:uppercase;letter-spacing:.5px;flex-shrink:0;&.enabled{background:#22c55e26;color:#22c55e}&.disabled{background:#ef444426;color:#ef4444}}}.form-actions{display:flex;justify-content:flex-end;gap:var(--ndt-spacing-sm)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { 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: DevToolbarButtonComponent, selector: "ndt-button", inputs: ["type", "variant", "icon", "label", "ariaLabel", "isActive"] }, { kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4283
4631
  }
4284
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarPresetsToolComponent, decorators: [{
4632
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPresetsToolComponent, decorators: [{
4285
4633
  type: Component,
4286
4634
  args: [{ selector: 'ndt-presets-tool', standalone: true, imports: [
4287
4635
  FormsModule,
@@ -4289,7 +4637,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
4289
4637
  DevToolbarInputComponent,
4290
4638
  DevToolbarButtonComponent,
4291
4639
  DevToolbarIconComponent,
4292
- DevToolbarWindowComponent,
4293
4640
  ], template: `
4294
4641
  <ndt-toolbar-tool [options]="options" title="Presets" icon="layout">
4295
4642
  <div class="container">
@@ -4338,15 +4685,122 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
4338
4685
  [ariaLabel]="'Preset description'"
4339
4686
  />
4340
4687
 
4341
- <!-- Summary of what will be saved -->
4688
+ <!-- Category selection checkboxes -->
4342
4689
  <div class="preset-summary">
4343
- <h4>Configuration to Save:</h4>
4344
- <ul>
4345
- <li>Feature Flags: {{ getCurrentFlagsCount() }} forced</li>
4346
- <li>Permissions: {{ getCurrentPermissionsCount() }} forced</li>
4347
- <li>App Features: {{ getCurrentAppFeaturesCount() }} forced</li>
4348
- <li>Language: {{ getCurrentLanguage() }}</li>
4349
- </ul>
4690
+ <h4>Select what to include:</h4>
4691
+
4692
+ @if (isFeatureFlagsEnabled()) {
4693
+ <div class="category-section">
4694
+ <label class="checkbox-option">
4695
+ <input
4696
+ type="checkbox"
4697
+ [checked]="includeFeatureFlags()"
4698
+ (change)="includeFeatureFlags.set(!includeFeatureFlags())"
4699
+ [disabled]="getCurrentFlagsCount() === 0"
4700
+ />
4701
+ <span>Feature Flags ({{ getCurrentFlagsCount() }} forced)</span>
4702
+ </label>
4703
+ @if (forcedFlags().length > 0) {
4704
+ <ul class="forced-items-list">
4705
+ @for (flag of forcedFlags(); track flag.id) {
4706
+ <li>
4707
+ <label class="item-checkbox">
4708
+ <input
4709
+ type="checkbox"
4710
+ [checked]="isItemSelected(selectedFlagIds(), flag.id)"
4711
+ (change)="toggleItemSelection(selectedFlagIds, flag.id)"
4712
+ />
4713
+ <span class="item-name">{{ flag.name }}</span>
4714
+ <span class="item-status" [class.enabled]="flag.isEnabled" [class.disabled]="!flag.isEnabled">
4715
+ {{ flag.isEnabled ? 'ON' : 'OFF' }}
4716
+ </span>
4717
+ </label>
4718
+ </li>
4719
+ }
4720
+ </ul>
4721
+ }
4722
+ </div>
4723
+ }
4724
+
4725
+ @if (isPermissionsEnabled()) {
4726
+ <div class="category-section">
4727
+ <label class="checkbox-option">
4728
+ <input
4729
+ type="checkbox"
4730
+ [checked]="includePermissions()"
4731
+ (change)="includePermissions.set(!includePermissions())"
4732
+ [disabled]="getCurrentPermissionsCount() === 0"
4733
+ />
4734
+ <span>Permissions ({{ getCurrentPermissionsCount() }} forced)</span>
4735
+ </label>
4736
+ @if (forcedPermissions().length > 0) {
4737
+ <ul class="forced-items-list">
4738
+ @for (perm of forcedPermissions(); track perm.id) {
4739
+ <li>
4740
+ <label class="item-checkbox">
4741
+ <input
4742
+ type="checkbox"
4743
+ [checked]="isItemSelected(selectedPermissionIds(), perm.id)"
4744
+ (change)="toggleItemSelection(selectedPermissionIds, perm.id)"
4745
+ />
4746
+ <span class="item-name">{{ perm.name }}</span>
4747
+ <span class="item-status" [class.enabled]="perm.isGranted" [class.disabled]="!perm.isGranted">
4748
+ {{ perm.isGranted ? 'GRANTED' : 'DENIED' }}
4749
+ </span>
4750
+ </label>
4751
+ </li>
4752
+ }
4753
+ </ul>
4754
+ }
4755
+ </div>
4756
+ }
4757
+
4758
+ @if (isAppFeaturesEnabled()) {
4759
+ <div class="category-section">
4760
+ <label class="checkbox-option">
4761
+ <input
4762
+ type="checkbox"
4763
+ [checked]="includeAppFeatures()"
4764
+ (change)="includeAppFeatures.set(!includeAppFeatures())"
4765
+ [disabled]="getCurrentAppFeaturesCount() === 0"
4766
+ />
4767
+ <span>App Features ({{ getCurrentAppFeaturesCount() }} forced)</span>
4768
+ </label>
4769
+ @if (forcedAppFeatures().length > 0) {
4770
+ <ul class="forced-items-list">
4771
+ @for (feat of forcedAppFeatures(); track feat.id) {
4772
+ <li>
4773
+ <label class="item-checkbox">
4774
+ <input
4775
+ type="checkbox"
4776
+ [checked]="isItemSelected(selectedFeatureIds(), feat.id)"
4777
+ (change)="toggleItemSelection(selectedFeatureIds, feat.id)"
4778
+ />
4779
+ <span class="item-name">{{ feat.name }}</span>
4780
+ <span class="item-status" [class.enabled]="feat.isEnabled" [class.disabled]="!feat.isEnabled">
4781
+ {{ feat.isEnabled ? 'ON' : 'OFF' }}
4782
+ </span>
4783
+ </label>
4784
+ </li>
4785
+ }
4786
+ </ul>
4787
+ }
4788
+ </div>
4789
+ }
4790
+
4791
+ @if (isLanguageEnabled()) {
4792
+ <div class="category-section">
4793
+ <label class="checkbox-option">
4794
+ <input
4795
+ type="checkbox"
4796
+ [checked]="includeLanguage()"
4797
+ (change)="includeLanguage.set(!includeLanguage())"
4798
+ [disabled]="!getCurrentLanguage() || getCurrentLanguage() === 'Not Forced'"
4799
+ />
4800
+ <span>Language ({{ getCurrentLanguage() }})</span>
4801
+ </label>
4802
+ </div>
4803
+ }
4350
4804
  </div>
4351
4805
 
4352
4806
  <div class="form-actions">
@@ -4457,11 +4911,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
4457
4911
  }
4458
4912
  </div>
4459
4913
  </ndt-toolbar-tool>
4460
- `, 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:1}.header ndt-button{flex-shrink:0}.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-border-subtle);border-radius:var(--ndt-border-radius-medium);padding:var(--ndt-spacing-md);background:transparent;color:var(--ndt-text-muted);text-align:center}.empty p{margin:0}.empty .hint{font-size:var(--ndt-font-size-xs)}.preset-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)}.preset-list::-webkit-scrollbar{width:8px}.preset-list::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}.preset-list::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px}:is():hover{background:var(--ndt-hover-bg)}.preset-card{background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium);display:flex;flex-direction:column;gap:var(--ndt-spacing-sm)}.preset-card__header{display:flex;justify-content:space-between;align-items:center;gap:var(--ndt-spacing-sm)}.preset-card__header h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary);flex:1}.preset-card__actions{display:flex;gap:var(--ndt-spacing-xs)}.icon-button{background:transparent;border:none;cursor:pointer;padding:var(--ndt-spacing-xs);border-radius:var(--ndt-border-radius-small);color:var(--ndt-text-secondary);display:flex;align-items:center;justify-content:center}.icon-button:hover{background:var(--ndt-hover-bg);color:var(--ndt-text-primary)}.icon-button ndt-icon{width:16px;height:16px}.preset-card__description{margin:0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-secondary)}.preset-card__meta{font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted)}.preset-card__meta span{margin-right:var(--ndt-spacing-sm)}.preset-card__preview{display:flex;gap:var(--ndt-spacing-xs);flex-wrap:wrap}.badge{background:var(--ndt-primary-color);color:#fff;padding:2px 8px;border-radius:12px;font-size:var(--ndt-font-size-xs);font-weight:500}.preset-form{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--ndt-spacing-md);padding:var(--ndt-spacing-md)}.preset-form ndt-input{width:100%}.preset-summary{background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium)}.preset-summary h4{margin:0 0 var(--ndt-spacing-sm) 0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-primary)}.preset-summary ul{margin:0;padding-left:var(--ndt-spacing-md);color:var(--ndt-text-secondary);font-size:var(--ndt-font-size-sm)}.preset-summary ul li{margin-bottom:var(--ndt-spacing-xs)}.form-actions{display:flex;justify-content:flex-end;gap:var(--ndt-spacing-sm)}\n"] }]
4914
+ `, 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);ndt-input{flex:1}ndt-button{flex-shrink:0}}.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-border-subtle);border-radius:var(--ndt-border-radius-medium);padding:var(--ndt-spacing-md);background:transparent;color:var(--ndt-text-muted);text-align:center;p{margin:0}.hint{font-size:var(--ndt-font-size-xs)}}.preset-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);&::-webkit-scrollbar{width:8px}&::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}&::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px;&:hover{background:var(--ndt-hover-bg)}}scrollbar-width:thin;scrollbar-color:var(--ndt-border-primary) var(--ndt-background-secondary)}.preset-card{background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium);display:flex;flex-direction:column;gap:var(--ndt-spacing-sm)}.preset-card__header{display:flex;justify-content:space-between;align-items:center;gap:var(--ndt-spacing-sm);h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary);flex:1}}.preset-card__actions{display:flex;gap:var(--ndt-spacing-xs)}.icon-button{background:transparent;border:none;cursor:pointer;padding:var(--ndt-spacing-xs);border-radius:var(--ndt-border-radius-small);color:var(--ndt-text-secondary);display:flex;align-items:center;justify-content:center;&:hover{background:var(--ndt-hover-bg);color:var(--ndt-text-primary)}ndt-icon{width:16px;height:16px}}.preset-card__description{margin:0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-secondary)}.preset-card__meta{font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted);span{margin-right:var(--ndt-spacing-sm)}}.preset-card__preview{display:flex;gap:var(--ndt-spacing-xs);flex-wrap:wrap}.badge{background:var(--ndt-primary-color);color:#fff;padding:2px 8px;border-radius:12px;font-size:var(--ndt-font-size-xs);font-weight:500}.preset-form{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--ndt-spacing-md);padding:var(--ndt-spacing-md);ndt-input{width:100%}}.preset-summary{background:var(--ndt-background-secondary);padding:var(--ndt-spacing-md);border-radius:var(--ndt-border-radius-medium);display:flex;flex-direction:column;gap:var(--ndt-spacing-sm);h4{margin:0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-primary)}}.category-section{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs)}.checkbox-option{display:flex;align-items:center;gap:var(--ndt-spacing-sm);cursor:pointer;color:var(--ndt-text-secondary);font-size:var(--ndt-font-size-sm);input[type=checkbox]{cursor:pointer;width:16px;height:16px;accent-color:var(--ndt-primary);&:disabled{cursor:not-allowed;opacity:.5}}&:has(input:disabled){opacity:.6;cursor:not-allowed}}.forced-items-list{list-style:none;padding:0;margin:0 0 0 var(--ndt-spacing-lg);display:flex;flex-direction:column;gap:var(--ndt-spacing-xs);font-size:var(--ndt-font-size-xs);li{background:rgba(var(--ndt-primary-rgb),.05);border-radius:var(--ndt-border-radius-small);border-left:2px solid rgba(var(--ndt-primary-rgb),.3)}.item-checkbox{display:flex;justify-content:space-between;align-items:center;padding:var(--ndt-spacing-xs) var(--ndt-spacing-sm);cursor:pointer;gap:var(--ndt-spacing-sm);input[type=checkbox]{cursor:pointer;width:14px;height:14px;accent-color:var(--ndt-primary);flex-shrink:0}&:hover{background:rgba(var(--ndt-primary-rgb),.08)}}.item-name{color:var(--ndt-text-primary);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item-status{font-weight:600;padding:2px 6px;border-radius:var(--ndt-border-radius-small);font-size:10px;text-transform:uppercase;letter-spacing:.5px;flex-shrink:0;&.enabled{background:#22c55e26;color:#22c55e}&.disabled{background:#ef444426;color:#ef4444}}}.form-actions{display:flex;justify-content:flex-end;gap:var(--ndt-spacing-sm)}\n"] }]
4461
4915
  }] });
4462
4916
 
4463
4917
  class DevToolbarComponent {
4464
4918
  constructor() {
4919
+ this.document = inject(DOCUMENT);
4465
4920
  this.state = inject(DevToolbarStateService);
4466
4921
  this.destroyRef = inject(DestroyRef);
4467
4922
  this.settingsService = inject(SettingsService);
@@ -4472,10 +4927,18 @@ class DevToolbarComponent {
4472
4927
  this.mouseLeave = fromEvent(document, 'mouseleave')
4473
4928
  .pipe(throttleTime(3000), takeUntilDestroyed(this.destroyRef))
4474
4929
  .subscribe(() => this.onMouseLeave());
4930
+ // Update state service when config changes
4931
+ effect(() => {
4932
+ this.state.setConfig(this.config());
4933
+ });
4475
4934
  }
4476
4935
  ngOnInit() {
4477
- const settings = this.settingsService.getSettings();
4478
- this.state.setTheme(settings.isDarkMode ? 'dark' : 'light');
4936
+ this.injectGlobalStyles();
4937
+ // Always use light theme
4938
+ this.state.setTheme('light');
4939
+ }
4940
+ ngOnDestroy() {
4941
+ this.globalStyleElement?.remove();
4479
4942
  }
4480
4943
  onMouseEnter() {
4481
4944
  this.state.setVisibility(true);
@@ -4486,36 +4949,106 @@ class DevToolbarComponent {
4486
4949
  toggleDevTools() {
4487
4950
  this.state.setVisibility(!this.state.isVisible());
4488
4951
  }
4489
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4490
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarComponent, isStandalone: true, selector: "ndt-toolbar", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
4952
+ /**
4953
+ * Injects global theme styles into the document head to make CSS variables
4954
+ * available to CDK overlays and other elements rendered outside Shadow DOM.
4955
+ * Uses light theme only.
4956
+ */
4957
+ injectGlobalStyles() {
4958
+ // Check if styles are already injected (e.g., by another toolbar instance)
4959
+ if (this.document.getElementById('ndt-global-theme')) {
4960
+ return;
4961
+ }
4962
+ this.globalStyleElement = this.document.createElement('style');
4963
+ this.globalStyleElement.id = 'ndt-global-theme';
4964
+ this.globalStyleElement.textContent = `
4965
+ /* Global Light Theme for ngx-dev-toolbar overlays */
4966
+ :where(ndt-toolbar),
4967
+ .ndt-overlay-panel,
4968
+ .cdk-overlay-container {
4969
+ --ndt-border-radius-small: 4px;
4970
+ --ndt-border-radius-medium: 8px;
4971
+ --ndt-border-radius-large: 12px;
4972
+ --ndt-transition-default: all 0.2s ease-out;
4973
+ --ndt-transition-smooth: all 0.2s ease-in-out;
4974
+ --ndt-spacing-xs: 4px;
4975
+ --ndt-spacing-sm: 6px;
4976
+ --ndt-spacing-md: 12px;
4977
+ --ndt-spacing-lg: 16px;
4978
+ --ndt-window-padding: 16px;
4979
+ --ndt-font-size-xs: 0.75rem;
4980
+ --ndt-font-size-sm: 0.875rem;
4981
+ --ndt-font-size-md: 1rem;
4982
+ --ndt-font-size-lg: 1.25rem;
4983
+ --ndt-font-size-xl: 2rem;
4984
+ --ndt-primary: #df30d4;
4985
+ --ndt-primary-rgb: 223, 48, 212;
4986
+ --ndt-text-on-primary: rgb(255, 255, 255);
4987
+ --ndt-bg-primary: rgb(255, 255, 255);
4988
+ --ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, 0.88) 100%);
4989
+ --ndt-text-primary: rgb(17, 24, 39);
4990
+ --ndt-text-secondary: rgb(55, 65, 81);
4991
+ --ndt-text-muted: rgb(107, 114, 128);
4992
+ --ndt-border-primary: #e5e7eb;
4993
+ --ndt-border-subtle: rgba(17, 24, 39, 0.1);
4994
+ --ndt-hover-bg: rgba(17, 24, 39, 0.05);
4995
+ --ndt-hover-danger: rgb(239, 68, 68);
4996
+ --ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, 0.2);
4997
+ --ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, 0.05), 0 4px 8px rgba(107, 114, 128, 0.15), 0 2px 4px rgba(107, 114, 128, 0.1);
4998
+ --ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, 0.1), 0px 1px 2px 0px rgba(156, 163, 175, 0.12), 0px 4px 4px 0px rgba(156, 163, 175, 0.1), 0px 10px 6px 0px rgba(156, 163, 175, 0.08), 0px 17px 7px 0px rgba(156, 163, 175, 0.05), 0px 26px 7px 0px rgba(156, 163, 175, 0.02);
4999
+ --ndt-background-secondary: var(--ndt-bg-primary);
5000
+ --ndt-background-hover: var(--ndt-hover-bg);
5001
+ --ndt-border-color: var(--ndt-border-primary);
5002
+ --ndt-note-background: rgb(219, 234, 254);
5003
+ --ndt-note-border: rgba(37, 99, 235, 0.2);
5004
+ --ndt-warning-background: rgb(254, 249, 195);
5005
+ --ndt-warning-border: rgba(202, 138, 4, 0.2);
5006
+ --ndt-error-background: rgb(254, 226, 226);
5007
+ --ndt-error-border: rgba(220, 38, 38, 0.2);
5008
+ }
5009
+ .ndt-overlay-panel {
5010
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif;
5011
+ box-sizing: border-box;
5012
+ }
5013
+ .ndt-overlay-panel *, .ndt-overlay-panel *::before, .ndt-overlay-panel *::after {
5014
+ box-sizing: border-box;
5015
+ }
5016
+ .cdk-overlay-backdrop.ndt-overlay-backdrop {
5017
+ background: transparent;
5018
+ }
5019
+ `;
5020
+ this.document.head.appendChild(this.globalStyleElement);
5021
+ }
5022
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5023
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarComponent, isStandalone: true, selector: "ndt-toolbar", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
4491
5024
  <div
4492
5025
  aria-label="Developer tools"
4493
5026
  role="toolbar"
4494
- class="dev-toolbar"
5027
+ class="ndt-toolbar"
4495
5028
  [@toolbarState]="state.isVisible() ? 'visible' : 'hidden'"
4496
5029
  [attr.data-theme]="state.theme()"
4497
- [class.dev-toolbar--active]="state.isVisible()"
5030
+ [class.ndt-toolbar--active]="state.isVisible()"
4498
5031
  (mouseenter)="onMouseEnter()"
4499
5032
  >
4500
5033
  <ndt-home-tool />
4501
- @if (config().showLanguageTool ?? true) {
5034
+ <ng-content />
5035
+ @if (config().showLanguageTool ?? false) {
4502
5036
  <ndt-language-tool />
4503
5037
  }
4504
- @if (config().showFeatureFlagsTool ?? true) {
4505
- <ndt-feature-flags-tool />
5038
+ @if (config().showPresetsTool ?? false) {
5039
+ <ndt-presets-tool />
4506
5040
  }
4507
- @if (config().showAppFeaturesTool ?? true) {
5041
+ @if (config().showAppFeaturesTool ?? false) {
4508
5042
  <ndt-app-features-tool />
4509
5043
  }
4510
- @if (config().showPermissionsTool ?? true) {
5044
+ @if (config().showPermissionsTool ?? false) {
4511
5045
  <ndt-permissions-tool />
4512
5046
  }
4513
- @if (config().showPresetsTool ?? true) {
4514
- <ndt-presets-tool />
5047
+ @if (config().showFeatureFlagsTool ?? false) {
5048
+ <ndt-feature-flags-tool />
4515
5049
  }
4516
- <ng-content />
4517
5050
  </div>
4518
- `, isInline: true, styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-window-padding: 16px;--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);display:contents;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\"}:host[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{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}h1,h2,h3,h4,h5{font-weight:600;color:var(--ndt-text-primary);margin:0}h1{font-size:var(--ndt-font-size-xl)}h2{font-size:var(--ndt-font-size-lg)}h3{font-size:var(--ndt-font-size-md)}h4{font-size:var(--ndt-font-size-sm)}h5{font-size:var(--ndt-font-size-xs)}hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}p{line-height:1.5em;margin:0}\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" }, { kind: "component", type: DevToolbarAppFeaturesToolComponent, selector: "ndt-app-features-tool" }, { kind: "component", type: DevToolbarPermissionsToolComponent, selector: "ndt-permissions-tool" }, { kind: "component", type: DevToolbarPresetsToolComponent, selector: "ndt-presets-tool" }], animations: [
5051
+ `, isInline: true, styles: [":host{display:contents;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\"}.ndt-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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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);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}.ndt-toolbar--active{opacity:1}h1,h2,h3,h4,h5{font-weight:600;color:var(--ndt-text-primary);margin:0}h1{font-size:var(--ndt-font-size-xl)}h2{font-size:var(--ndt-font-size-lg)}h3{font-size:var(--ndt-font-size-md)}h4{font-size:var(--ndt-font-size-sm)}h5{font-size:var(--ndt-font-size-xs)}hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}p{line-height:1.5em;margin:0}\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" }, { kind: "component", type: DevToolbarAppFeaturesToolComponent, selector: "ndt-app-features-tool" }, { kind: "component", type: DevToolbarPermissionsToolComponent, selector: "ndt-permissions-tool" }, { kind: "component", type: DevToolbarPresetsToolComponent, selector: "ndt-presets-tool" }], animations: [
4519
5052
  trigger('toolbarState', [
4520
5053
  state('hidden', style({
4521
5054
  transform: 'translate(-50%, calc(100% + -1.2rem))',
@@ -4529,7 +5062,7 @@ class DevToolbarComponent {
4529
5062
  ]),
4530
5063
  ], encapsulation: i0.ViewEncapsulation.ShadowDom }); }
4531
5064
  }
4532
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarComponent, decorators: [{
5065
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarComponent, decorators: [{
4533
5066
  type: Component,
4534
5067
  args: [{ standalone: true, selector: 'ndt-toolbar', encapsulation: ViewEncapsulation.ShadowDom, imports: [
4535
5068
  DevToolbarHomeToolComponent,
@@ -4542,29 +5075,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
4542
5075
  <div
4543
5076
  aria-label="Developer tools"
4544
5077
  role="toolbar"
4545
- class="dev-toolbar"
5078
+ class="ndt-toolbar"
4546
5079
  [@toolbarState]="state.isVisible() ? 'visible' : 'hidden'"
4547
5080
  [attr.data-theme]="state.theme()"
4548
- [class.dev-toolbar--active]="state.isVisible()"
5081
+ [class.ndt-toolbar--active]="state.isVisible()"
4549
5082
  (mouseenter)="onMouseEnter()"
4550
5083
  >
4551
5084
  <ndt-home-tool />
4552
- @if (config().showLanguageTool ?? true) {
5085
+ <ng-content />
5086
+ @if (config().showLanguageTool ?? false) {
4553
5087
  <ndt-language-tool />
4554
5088
  }
4555
- @if (config().showFeatureFlagsTool ?? true) {
4556
- <ndt-feature-flags-tool />
5089
+ @if (config().showPresetsTool ?? false) {
5090
+ <ndt-presets-tool />
4557
5091
  }
4558
- @if (config().showAppFeaturesTool ?? true) {
5092
+ @if (config().showAppFeaturesTool ?? false) {
4559
5093
  <ndt-app-features-tool />
4560
5094
  }
4561
- @if (config().showPermissionsTool ?? true) {
5095
+ @if (config().showPermissionsTool ?? false) {
4562
5096
  <ndt-permissions-tool />
4563
5097
  }
4564
- @if (config().showPresetsTool ?? true) {
4565
- <ndt-presets-tool />
5098
+ @if (config().showFeatureFlagsTool ?? false) {
5099
+ <ndt-feature-flags-tool />
4566
5100
  }
4567
- <ng-content />
4568
5101
  </div>
4569
5102
  `, animations: [
4570
5103
  trigger('toolbarState', [
@@ -4578,8 +5111,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
4578
5111
  animate('300ms cubic-bezier(0.4, 0, 0.2, 1)'),
4579
5112
  ]),
4580
5113
  ]),
4581
- ], styles: [":host{--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: 6px;--ndt-spacing-md: 12px;--ndt-window-padding: 16px;--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);display:contents;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\"}:host[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{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}h1,h2,h3,h4,h5{font-weight:600;color:var(--ndt-text-primary);margin:0}h1{font-size:var(--ndt-font-size-xl)}h2{font-size:var(--ndt-font-size-lg)}h3{font-size:var(--ndt-font-size-md)}h4{font-size:var(--ndt-font-size-sm)}h5{font-size:var(--ndt-font-size-xs)}hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}p{line-height:1.5em;margin:0}\n"] }]
4582
- }] });
5114
+ ], styles: [":host{display:contents;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\"}.ndt-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: 6px;--ndt-spacing-md: 12px;--ndt-spacing-lg: 16px;--ndt-window-padding: 16px;--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);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}.ndt-toolbar--active{opacity:1}h1,h2,h3,h4,h5{font-weight:600;color:var(--ndt-text-primary);margin:0}h1{font-size:var(--ndt-font-size-xl)}h2{font-size:var(--ndt-font-size-lg)}h3{font-size:var(--ndt-font-size-md)}h4{font-size:var(--ndt-font-size-sm)}h5{font-size:var(--ndt-font-size-xs)}hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}p{line-height:1.5em;margin:0}\n"] }]
5115
+ }], ctorParameters: () => [] });
4583
5116
 
4584
5117
  class DevToolbarFeatureFlagService {
4585
5118
  constructor() {
@@ -4599,10 +5132,36 @@ class DevToolbarFeatureFlagService {
4599
5132
  getForcedValues() {
4600
5133
  return this.internalService.getForcedFlags();
4601
5134
  }
4602
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarFeatureFlagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4603
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarFeatureFlagService, providedIn: 'root' }); }
5135
+ /**
5136
+ * Gets ALL flag values with overrides already applied.
5137
+ * Returns the complete set of flags where overridden values replace base values.
5138
+ * Each flag includes an `isForced` property indicating if it was overridden.
5139
+ *
5140
+ * This method simplifies integration by eliminating the need to manually merge
5141
+ * base flags with overrides using combineLatest.
5142
+ *
5143
+ * @returns Observable of all flags with overrides applied
5144
+ *
5145
+ * @example
5146
+ * ```typescript
5147
+ * // Get a specific flag value with overrides applied
5148
+ * this.featureFlagsService.getValues().pipe(
5149
+ * map(flags => flags.find(f => f.id === 'newFeature')),
5150
+ * map(flag => flag?.isEnabled ?? false)
5151
+ * ).subscribe(isEnabled => {
5152
+ * if (isEnabled) {
5153
+ * // Enable feature
5154
+ * }
5155
+ * });
5156
+ * ```
5157
+ */
5158
+ getValues() {
5159
+ return this.internalService.flags$;
5160
+ }
5161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarFeatureFlagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5162
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarFeatureFlagService, providedIn: 'root' }); }
4604
5163
  }
4605
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarFeatureFlagService, decorators: [{
5164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarFeatureFlagService, decorators: [{
4606
5165
  type: Injectable,
4607
5166
  args: [{ providedIn: 'root' }]
4608
5167
  }] });
@@ -4625,10 +5184,19 @@ class DevToolbarLanguageService {
4625
5184
  getForcedValues() {
4626
5185
  return this.internalService.getForcedLanguage();
4627
5186
  }
4628
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLanguageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4629
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLanguageService, providedIn: 'root' }); }
5187
+ /**
5188
+ * Gets the forced language value.
5189
+ * For the language tool, this returns the same as getForcedValues() since
5190
+ * only one language can be selected at a time.
5191
+ * @returns Observable of forced language array (single item or empty)
5192
+ */
5193
+ getValues() {
5194
+ return this.internalService.getForcedLanguage();
5195
+ }
5196
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLanguageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5197
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLanguageService, providedIn: 'root' }); }
4630
5198
  }
4631
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLanguageService, decorators: [{
5199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLanguageService, decorators: [{
4632
5200
  type: Injectable,
4633
5201
  args: [{ providedIn: 'root' }]
4634
5202
  }] });
@@ -4734,6 +5302,32 @@ class DevToolbarAppFeaturesService {
4734
5302
  getForcedValues() {
4735
5303
  return this.internalService.getForcedFeatures();
4736
5304
  }
5305
+ /**
5306
+ * Gets ALL app feature values with overrides already applied.
5307
+ * Returns the complete set of features where overridden values replace base values.
5308
+ * Each feature includes an `isForced` property indicating if it was overridden.
5309
+ *
5310
+ * This method simplifies integration by eliminating the need to manually merge
5311
+ * base features with overrides using combineLatest.
5312
+ *
5313
+ * @returns Observable of all features with overrides applied
5314
+ *
5315
+ * @example
5316
+ * ```typescript
5317
+ * // Check if a feature is enabled with overrides applied
5318
+ * this.appFeaturesService.getValues().pipe(
5319
+ * map(features => features.find(f => f.id === 'premium-analytics')),
5320
+ * map(feature => feature?.isEnabled ?? false)
5321
+ * ).subscribe(isEnabled => {
5322
+ * if (isEnabled) {
5323
+ * // Enable premium analytics
5324
+ * }
5325
+ * });
5326
+ * ```
5327
+ */
5328
+ getValues() {
5329
+ return this.internalService.features$;
5330
+ }
4737
5331
  /**
4738
5332
  * Apply a preset feature configuration (for preset tool integration).
4739
5333
  *
@@ -4787,10 +5381,10 @@ class DevToolbarAppFeaturesService {
4787
5381
  getCurrentForcedState() {
4788
5382
  return this.internalService.getCurrentForcedState();
4789
5383
  }
4790
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarAppFeaturesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4791
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarAppFeaturesService, providedIn: 'root' }); }
5384
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarAppFeaturesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5385
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarAppFeaturesService, providedIn: 'root' }); }
4792
5386
  }
4793
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarAppFeaturesService, decorators: [{
5387
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarAppFeaturesService, decorators: [{
4794
5388
  type: Injectable,
4795
5389
  args: [{ providedIn: 'root' }]
4796
5390
  }] });
@@ -4861,6 +5455,32 @@ class DevToolbarPermissionsService {
4861
5455
  getForcedValues() {
4862
5456
  return this.internalService.getForcedPermissions();
4863
5457
  }
5458
+ /**
5459
+ * Gets ALL permission values with overrides already applied.
5460
+ * Returns the complete set of permissions where overridden values replace base values.
5461
+ * Each permission includes an `isForced` property indicating if it was overridden.
5462
+ *
5463
+ * This method simplifies integration by eliminating the need to manually merge
5464
+ * base permissions with overrides using combineLatest.
5465
+ *
5466
+ * @returns Observable of all permissions with overrides applied
5467
+ *
5468
+ * @example
5469
+ * ```typescript
5470
+ * // Simple permission check with overrides applied
5471
+ * this.permissionsService.getValues().pipe(
5472
+ * map(permissions => permissions.find(p => p.id === 'can-edit')),
5473
+ * map(permission => permission?.isGranted ?? false)
5474
+ * ).subscribe(canEdit => {
5475
+ * if (canEdit) {
5476
+ * // Enable edit functionality
5477
+ * }
5478
+ * });
5479
+ * ```
5480
+ */
5481
+ getValues() {
5482
+ return this.internalService.permissions$;
5483
+ }
4864
5484
  /**
4865
5485
  * Apply a preset permission state. Useful for automated testing scenarios.
4866
5486
  *
@@ -4885,10 +5505,10 @@ class DevToolbarPermissionsService {
4885
5505
  getCurrentState() {
4886
5506
  return this.internalService.getCurrentForcedState();
4887
5507
  }
4888
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarPermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4889
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarPermissionsService, providedIn: 'root' }); }
5508
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5509
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPermissionsService, providedIn: 'root' }); }
4890
5510
  }
4891
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarPermissionsService, decorators: [{
5511
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPermissionsService, decorators: [{
4892
5512
  type: Injectable,
4893
5513
  args: [{ providedIn: 'root' }]
4894
5514
  }] });
@@ -4958,10 +5578,87 @@ class DevToolbarPresetsService {
4958
5578
  const preset = JSON.parse(json);
4959
5579
  return this.internalService.addPreset(preset);
4960
5580
  }
4961
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarPresetsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4962
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarPresetsService, providedIn: 'root' }); }
5581
+ /**
5582
+ * Initialize presets with predefined configurations.
5583
+ * Useful for setting up default presets that all developers can use.
5584
+ *
5585
+ * @param presets - Array of preset configurations to initialize
5586
+ * @returns Array of created presets
5587
+ *
5588
+ * @example
5589
+ * ```typescript
5590
+ * const presetsService = inject(DevToolbarPresetsService);
5591
+ *
5592
+ * presetsService.initializePresets([
5593
+ * {
5594
+ * name: 'Admin User',
5595
+ * description: 'Full access admin configuration',
5596
+ * config: {
5597
+ * featureFlags: {
5598
+ * enabled: ['admin-panel', 'advanced-features'],
5599
+ * disabled: []
5600
+ * },
5601
+ * permissions: {
5602
+ * granted: ['admin', 'write', 'delete'],
5603
+ * denied: []
5604
+ * },
5605
+ * appFeatures: {
5606
+ * enabled: ['analytics', 'reporting'],
5607
+ * disabled: []
5608
+ * },
5609
+ * language: 'en'
5610
+ * }
5611
+ * },
5612
+ * {
5613
+ * name: 'Read-Only User',
5614
+ * description: 'Limited access for viewing only',
5615
+ * config: {
5616
+ * featureFlags: {
5617
+ * enabled: [],
5618
+ * disabled: ['admin-panel', 'advanced-features']
5619
+ * },
5620
+ * permissions: {
5621
+ * granted: ['read'],
5622
+ * denied: ['write', 'delete']
5623
+ * },
5624
+ * appFeatures: {
5625
+ * enabled: [],
5626
+ * disabled: ['analytics', 'reporting']
5627
+ * },
5628
+ * language: null
5629
+ * }
5630
+ * }
5631
+ * ]);
5632
+ * ```
5633
+ */
5634
+ initializePresets(presets) {
5635
+ return presets.map((preset) => this.internalService.addPreset({
5636
+ id: '', // Will be generated
5637
+ createdAt: '', // Will be generated
5638
+ updatedAt: '', // Will be generated
5639
+ ...preset,
5640
+ }));
5641
+ }
5642
+ /**
5643
+ * Clear all existing presets and set new initial presets.
5644
+ * Use this to replace all presets with a fresh set of configurations.
5645
+ *
5646
+ * @param presets - Array of preset configurations to set as initial
5647
+ * @returns Array of created presets
5648
+ */
5649
+ setInitialPresets(presets) {
5650
+ // Clear existing presets
5651
+ const currentPresets = this.internalService.presets();
5652
+ currentPresets.forEach((preset) => {
5653
+ this.internalService.deletePreset(preset.id);
5654
+ });
5655
+ // Add new presets
5656
+ return this.initializePresets(presets);
5657
+ }
5658
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPresetsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5659
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPresetsService, providedIn: 'root' }); }
4963
5660
  }
4964
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarPresetsService, decorators: [{
5661
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPresetsService, decorators: [{
4965
5662
  type: Injectable,
4966
5663
  args: [{ providedIn: 'root' }]
4967
5664
  }] });
@@ -4970,5 +5667,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
4970
5667
  * Generated bundle index. Do not edit.
4971
5668
  */
4972
5669
 
4973
- export { DevToolbarAppFeaturesService, DevToolbarAppFeaturesToolComponent, DevToolbarComponent, DevToolbarFeatureFlagService, DevToolbarIconComponent, DevToolbarLanguageService, DevToolbarPermissionsService, DevToolbarPermissionsToolComponent, DevToolbarPresetsService, DevToolbarPresetsToolComponent, DevToolbarToolComponent };
5670
+ export { DevToolbarAppFeaturesService, DevToolbarAppFeaturesToolComponent, DevToolbarComponent, DevToolbarFeatureFlagService, DevToolbarIconComponent, DevToolbarLanguageService, DevToolbarListComponent, DevToolbarListItemComponent, DevToolbarPermissionsService, DevToolbarPermissionsToolComponent, DevToolbarPresetsService, DevToolbarPresetsToolComponent, DevToolbarToolComponent };
4974
5671
  //# sourceMappingURL=ngx-dev-toolbar.mjs.map