ngx-dev-toolbar 1.0.5 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -0
- package/components/icons/icon.component.d.ts +1 -1
- package/components/list/list.component.d.ts +48 -0
- package/components/list-item/list-item.component.d.ts +54 -0
- package/components/select/select.component.d.ts +1 -1
- package/components/window/window.component.d.ts +3 -3
- package/dev-toolbar-state.service.d.ts +1 -1
- package/dev-toolbar.component.d.ts +3 -2
- package/fesm2022/ngx-dev-toolbar.mjs +1457 -771
- package/fesm2022/ngx-dev-toolbar.mjs.map +1 -1
- package/index.d.ts +6 -3
- package/models/dev-toolbar-config.interface.d.ts +31 -0
- package/models/dev-tools.interface.d.ts +22 -0
- package/package.json +1 -1
- package/tools/app-features-tool/app-features.models.d.ts +5 -0
- package/tools/app-features-tool/app-features.service.d.ts +24 -0
- package/tools/feature-flags-tool/feature-flags-internal.service.d.ts +15 -0
- package/tools/feature-flags-tool/feature-flags.models.d.ts +1 -0
- package/tools/feature-flags-tool/feature-flags.service.d.ts +24 -0
- package/tools/language-tool/language-internal.service.d.ts +10 -0
- package/tools/language-tool/language.service.d.ts +7 -0
- package/tools/permissions-tool/permissions.models.d.ts +2 -0
- package/tools/permissions-tool/permissions.service.d.ts +24 -0
- package/tools/presets-tool/presets-internal.service.d.ts +57 -0
- package/tools/presets-tool/presets-tool.component.d.ts +33 -0
- package/tools/presets-tool/presets.models.d.ts +24 -0
- package/tools/presets-tool/presets.service.d.ts +51 -0
- package/tools/network-mocker-tool/network-mocker-tool.component.d.ts +0 -23
- package/tools/network-mocker-tool/network-mocker.models.d.ts +0 -16
- package/tools/network-mocker-tool/network-mocker.service.d.ts +0 -16
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { signal, computed, Injectable,
|
|
3
|
-
import {
|
|
2
|
+
import { signal, computed, Injectable, ChangeDetectionStrategy, Component, input, inject, ElementRef, output, ContentChild, ViewChild, model, DestroyRef, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import { CommonModule } 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() {
|
|
@@ -82,10 +82,10 @@ class DevToolbarStateService {
|
|
|
82
82
|
isHidden: !state.isHidden,
|
|
83
83
|
}));
|
|
84
84
|
}
|
|
85
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
86
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.
|
|
85
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
86
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarStateService, providedIn: 'root' }); }
|
|
87
87
|
}
|
|
88
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
88
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarStateService, decorators: [{
|
|
89
89
|
type: Injectable,
|
|
90
90
|
args: [{
|
|
91
91
|
providedIn: 'root',
|
|
@@ -93,8 +93,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
93
93
|
}] });
|
|
94
94
|
|
|
95
95
|
class AngularIconComponent {
|
|
96
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
97
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.
|
|
96
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: AngularIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
97
|
+
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
98
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none">
|
|
99
99
|
<defs>
|
|
100
100
|
<linearGradient
|
|
@@ -122,7 +122,7 @@ class AngularIconComponent {
|
|
|
122
122
|
</svg>
|
|
123
123
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
124
124
|
}
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: AngularIconComponent, decorators: [{
|
|
126
126
|
type: Component,
|
|
127
127
|
args: [{
|
|
128
128
|
selector: 'ndt-angular-icon',
|
|
@@ -162,8 +162,8 @@ class BoltIconComponent {
|
|
|
162
162
|
constructor() {
|
|
163
163
|
this.fill = input('#FFFF');
|
|
164
164
|
}
|
|
165
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
166
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
165
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: BoltIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
166
|
+
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
167
|
<svg
|
|
168
168
|
[attr.fill]="fill()"
|
|
169
169
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -181,7 +181,7 @@ class BoltIconComponent {
|
|
|
181
181
|
</svg>
|
|
182
182
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
183
183
|
}
|
|
184
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
184
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: BoltIconComponent, decorators: [{
|
|
185
185
|
type: Component,
|
|
186
186
|
args: [{
|
|
187
187
|
selector: 'ndt-bolt-icon',
|
|
@@ -211,8 +211,8 @@ class BugIconComponent {
|
|
|
211
211
|
constructor() {
|
|
212
212
|
this.fill = input('#FFFF');
|
|
213
213
|
}
|
|
214
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
215
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
214
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: BugIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
215
|
+
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
216
|
<svg
|
|
217
217
|
[attr.fill]="fill()"
|
|
218
218
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -226,7 +226,7 @@ class BugIconComponent {
|
|
|
226
226
|
</svg>
|
|
227
227
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
228
228
|
}
|
|
229
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
229
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: BugIconComponent, decorators: [{
|
|
230
230
|
type: Component,
|
|
231
231
|
args: [{
|
|
232
232
|
selector: 'ndt-bug-icon',
|
|
@@ -252,8 +252,8 @@ class CodeIconComponent {
|
|
|
252
252
|
constructor() {
|
|
253
253
|
this.fill = input('#FFFF');
|
|
254
254
|
}
|
|
255
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
256
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
255
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: CodeIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
256
|
+
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
257
|
<svg
|
|
258
258
|
[attr.fill]="fill()"
|
|
259
259
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -268,7 +268,7 @@ class CodeIconComponent {
|
|
|
268
268
|
</svg>
|
|
269
269
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
270
270
|
}
|
|
271
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
271
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: CodeIconComponent, decorators: [{
|
|
272
272
|
type: Component,
|
|
273
273
|
args: [{
|
|
274
274
|
selector: 'ndt-code-icon',
|
|
@@ -295,8 +295,8 @@ class DatabaseIconComponent {
|
|
|
295
295
|
constructor() {
|
|
296
296
|
this.fill = input('#FFFF');
|
|
297
297
|
}
|
|
298
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
299
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
298
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DatabaseIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
299
|
+
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
300
|
<svg
|
|
301
301
|
[attr.fill]="fill()"
|
|
302
302
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -314,7 +314,7 @@ class DatabaseIconComponent {
|
|
|
314
314
|
</svg>
|
|
315
315
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
316
316
|
}
|
|
317
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
317
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DatabaseIconComponent, decorators: [{
|
|
318
318
|
type: Component,
|
|
319
319
|
args: [{
|
|
320
320
|
selector: 'ndt-database-icon',
|
|
@@ -344,8 +344,8 @@ class DiscordIconComponent {
|
|
|
344
344
|
constructor() {
|
|
345
345
|
this.fill = input('#000000');
|
|
346
346
|
}
|
|
347
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
348
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
347
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DiscordIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
348
|
+
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
349
|
<svg
|
|
350
350
|
[attr.fill]="fill()"
|
|
351
351
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -359,7 +359,7 @@ class DiscordIconComponent {
|
|
|
359
359
|
</svg>
|
|
360
360
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
361
361
|
}
|
|
362
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
362
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DiscordIconComponent, decorators: [{
|
|
363
363
|
type: Component,
|
|
364
364
|
args: [{
|
|
365
365
|
selector: 'ndt-discord-icon',
|
|
@@ -385,8 +385,8 @@ class DocsIconComponent {
|
|
|
385
385
|
constructor() {
|
|
386
386
|
this.fill = input('#FFFF');
|
|
387
387
|
}
|
|
388
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
389
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
388
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DocsIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
389
|
+
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
390
|
<svg
|
|
391
391
|
[attr.fill]="fill()"
|
|
392
392
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -400,7 +400,7 @@ class DocsIconComponent {
|
|
|
400
400
|
</svg>
|
|
401
401
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
402
402
|
}
|
|
403
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
403
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DocsIconComponent, decorators: [{
|
|
404
404
|
type: Component,
|
|
405
405
|
args: [{
|
|
406
406
|
selector: 'ndt-docs-icon',
|
|
@@ -426,8 +426,8 @@ class ExportIconComponent {
|
|
|
426
426
|
constructor() {
|
|
427
427
|
this.fill = input('#FFFF');
|
|
428
428
|
}
|
|
429
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
430
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
429
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ExportIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
430
|
+
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
431
|
<svg
|
|
432
432
|
[attr.fill]="fill()"
|
|
433
433
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -441,7 +441,7 @@ class ExportIconComponent {
|
|
|
441
441
|
</svg>
|
|
442
442
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
443
443
|
}
|
|
444
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
444
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ExportIconComponent, decorators: [{
|
|
445
445
|
type: Component,
|
|
446
446
|
args: [{
|
|
447
447
|
selector: 'ndt-export-icon',
|
|
@@ -467,8 +467,8 @@ class FilterIconComponent {
|
|
|
467
467
|
constructor() {
|
|
468
468
|
this.fill = input('#FFFF');
|
|
469
469
|
}
|
|
470
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
471
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
470
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: FilterIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
471
|
+
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
472
|
<svg
|
|
473
473
|
[attr.fill]="fill()"
|
|
474
474
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -486,7 +486,7 @@ class FilterIconComponent {
|
|
|
486
486
|
</svg>
|
|
487
487
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
488
488
|
}
|
|
489
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
489
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: FilterIconComponent, decorators: [{
|
|
490
490
|
type: Component,
|
|
491
491
|
args: [{
|
|
492
492
|
selector: 'ndt-filter-icon',
|
|
@@ -516,8 +516,8 @@ class GaugeIconComponent {
|
|
|
516
516
|
constructor() {
|
|
517
517
|
this.fill = input('#FFFF');
|
|
518
518
|
}
|
|
519
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
520
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
519
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GaugeIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
520
|
+
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
521
|
<svg
|
|
522
522
|
[attr.fill]="fill()"
|
|
523
523
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -535,7 +535,7 @@ class GaugeIconComponent {
|
|
|
535
535
|
</svg>
|
|
536
536
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
537
537
|
}
|
|
538
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
538
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GaugeIconComponent, decorators: [{
|
|
539
539
|
type: Component,
|
|
540
540
|
args: [{
|
|
541
541
|
selector: 'ndt-gauge-icon',
|
|
@@ -565,8 +565,8 @@ class GearIconComponent {
|
|
|
565
565
|
constructor() {
|
|
566
566
|
this.fill = input('#FFFF');
|
|
567
567
|
}
|
|
568
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
569
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
568
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GearIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
569
|
+
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
570
|
<svg
|
|
571
571
|
[attr.fill]="fill()"
|
|
572
572
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -584,7 +584,7 @@ class GearIconComponent {
|
|
|
584
584
|
</svg>
|
|
585
585
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
586
586
|
}
|
|
587
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
587
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GearIconComponent, decorators: [{
|
|
588
588
|
type: Component,
|
|
589
589
|
args: [{
|
|
590
590
|
selector: 'ndt-gear-icon',
|
|
@@ -614,8 +614,8 @@ class GitBranchIconComponent {
|
|
|
614
614
|
constructor() {
|
|
615
615
|
this.fill = input('#FFFF');
|
|
616
616
|
}
|
|
617
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
618
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
617
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GitBranchIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
618
|
+
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
619
|
<svg
|
|
620
620
|
[attr.fill]="fill()"
|
|
621
621
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -633,7 +633,7 @@ class GitBranchIconComponent {
|
|
|
633
633
|
</svg>
|
|
634
634
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
635
635
|
}
|
|
636
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
636
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: GitBranchIconComponent, decorators: [{
|
|
637
637
|
type: Component,
|
|
638
638
|
args: [{
|
|
639
639
|
selector: 'ndt-git-branch-icon',
|
|
@@ -663,8 +663,8 @@ class ImportIconComponent {
|
|
|
663
663
|
constructor() {
|
|
664
664
|
this.fill = input('#FFFF');
|
|
665
665
|
}
|
|
666
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
667
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
666
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ImportIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
667
|
+
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
668
|
<svg
|
|
669
669
|
[attr.fill]="fill()"
|
|
670
670
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -678,7 +678,7 @@ class ImportIconComponent {
|
|
|
678
678
|
</svg>
|
|
679
679
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
680
680
|
}
|
|
681
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
681
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ImportIconComponent, decorators: [{
|
|
682
682
|
type: Component,
|
|
683
683
|
args: [{
|
|
684
684
|
selector: 'ndt-import-icon',
|
|
@@ -704,8 +704,8 @@ class LayoutIconComponent {
|
|
|
704
704
|
constructor() {
|
|
705
705
|
this.fill = input('#FFFF');
|
|
706
706
|
}
|
|
707
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
708
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
707
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LayoutIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
708
|
+
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
709
|
<svg
|
|
710
710
|
[attr.fill]="fill()"
|
|
711
711
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -720,7 +720,7 @@ class LayoutIconComponent {
|
|
|
720
720
|
</svg>
|
|
721
721
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
722
722
|
}
|
|
723
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
723
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LayoutIconComponent, decorators: [{
|
|
724
724
|
type: Component,
|
|
725
725
|
args: [{
|
|
726
726
|
selector: 'ndt-layout-icon',
|
|
@@ -747,8 +747,8 @@ class LightbulbIconComponent {
|
|
|
747
747
|
constructor() {
|
|
748
748
|
this.fill = input('#FFFF');
|
|
749
749
|
}
|
|
750
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
751
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
750
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LightbulbIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
751
|
+
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
752
|
<svg
|
|
753
753
|
[attr.fill]="fill()"
|
|
754
754
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -762,7 +762,7 @@ class LightbulbIconComponent {
|
|
|
762
762
|
</svg>
|
|
763
763
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
764
764
|
}
|
|
765
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
765
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LightbulbIconComponent, decorators: [{
|
|
766
766
|
type: Component,
|
|
767
767
|
args: [{
|
|
768
768
|
selector: 'ndt-lightbulb-icon',
|
|
@@ -788,8 +788,8 @@ class LightingIconComponent {
|
|
|
788
788
|
constructor() {
|
|
789
789
|
this.fill = input('#FFFF');
|
|
790
790
|
}
|
|
791
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
792
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
791
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LightingIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
792
|
+
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
793
|
<svg
|
|
794
794
|
[attr.fill]="fill()"
|
|
795
795
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -804,7 +804,7 @@ class LightingIconComponent {
|
|
|
804
804
|
</svg>
|
|
805
805
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
806
806
|
}
|
|
807
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
807
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LightingIconComponent, decorators: [{
|
|
808
808
|
type: Component,
|
|
809
809
|
args: [{
|
|
810
810
|
selector: 'ndt-lighting-icon',
|
|
@@ -831,8 +831,8 @@ class LockIconComponent {
|
|
|
831
831
|
constructor() {
|
|
832
832
|
this.fill = input('#FFFF');
|
|
833
833
|
}
|
|
834
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
835
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
834
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LockIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
835
|
+
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
836
|
<svg
|
|
837
837
|
[attr.fill]="fill()"
|
|
838
838
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -846,7 +846,7 @@ class LockIconComponent {
|
|
|
846
846
|
</svg>
|
|
847
847
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
848
848
|
}
|
|
849
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
849
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: LockIconComponent, decorators: [{
|
|
850
850
|
type: Component,
|
|
851
851
|
args: [{
|
|
852
852
|
selector: 'ndt-lock-icon',
|
|
@@ -872,8 +872,8 @@ class MoonIconComponent {
|
|
|
872
872
|
constructor() {
|
|
873
873
|
this.fill = input('#FFFF');
|
|
874
874
|
}
|
|
875
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
876
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
875
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: MoonIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
876
|
+
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
877
|
<svg
|
|
878
878
|
[attr.fill]="fill()"
|
|
879
879
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -891,7 +891,7 @@ class MoonIconComponent {
|
|
|
891
891
|
</svg>
|
|
892
892
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
893
893
|
}
|
|
894
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
894
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: MoonIconComponent, decorators: [{
|
|
895
895
|
type: Component,
|
|
896
896
|
args: [{
|
|
897
897
|
selector: 'ndt-moon-icon',
|
|
@@ -921,8 +921,8 @@ class NetworkIconComponent {
|
|
|
921
921
|
constructor() {
|
|
922
922
|
this.fill = input('#FFFF');
|
|
923
923
|
}
|
|
924
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
925
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
924
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NetworkIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
925
|
+
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
926
|
<svg
|
|
927
927
|
[attr.fill]="fill()"
|
|
928
928
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -940,7 +940,7 @@ class NetworkIconComponent {
|
|
|
940
940
|
</svg>
|
|
941
941
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
942
942
|
}
|
|
943
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
943
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: NetworkIconComponent, decorators: [{
|
|
944
944
|
type: Component,
|
|
945
945
|
args: [{
|
|
946
946
|
selector: 'ndt-network-icon',
|
|
@@ -970,8 +970,8 @@ class PuzzleIconComponent {
|
|
|
970
970
|
constructor() {
|
|
971
971
|
this.fill = input('#FFFF');
|
|
972
972
|
}
|
|
973
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
974
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
973
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: PuzzleIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
974
|
+
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
975
|
<svg
|
|
976
976
|
[attr.fill]="fill()"
|
|
977
977
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -989,7 +989,7 @@ class PuzzleIconComponent {
|
|
|
989
989
|
</svg>
|
|
990
990
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
991
991
|
}
|
|
992
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
992
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: PuzzleIconComponent, decorators: [{
|
|
993
993
|
type: Component,
|
|
994
994
|
args: [{
|
|
995
995
|
selector: 'ndt-puzzle-icon',
|
|
@@ -1019,8 +1019,8 @@ class RefreshIconComponent {
|
|
|
1019
1019
|
constructor() {
|
|
1020
1020
|
this.fill = input('#FFFF');
|
|
1021
1021
|
}
|
|
1022
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1023
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
1022
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: RefreshIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1023
|
+
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
1024
|
<svg
|
|
1025
1025
|
[attr.fill]="fill()"
|
|
1026
1026
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -1038,7 +1038,7 @@ class RefreshIconComponent {
|
|
|
1038
1038
|
</svg>
|
|
1039
1039
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1040
1040
|
}
|
|
1041
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
1041
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: RefreshIconComponent, decorators: [{
|
|
1042
1042
|
type: Component,
|
|
1043
1043
|
args: [{
|
|
1044
1044
|
selector: 'ndt-refresh-icon',
|
|
@@ -1068,8 +1068,8 @@ class StarIconComponent {
|
|
|
1068
1068
|
constructor() {
|
|
1069
1069
|
this.fill = input('#FFFF');
|
|
1070
1070
|
}
|
|
1071
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1072
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
1071
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: StarIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1072
|
+
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
1073
|
<svg
|
|
1074
1074
|
[attr.fill]="fill()"
|
|
1075
1075
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -1087,7 +1087,7 @@ class StarIconComponent {
|
|
|
1087
1087
|
</svg>
|
|
1088
1088
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1089
1089
|
}
|
|
1090
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
1090
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: StarIconComponent, decorators: [{
|
|
1091
1091
|
type: Component,
|
|
1092
1092
|
args: [{
|
|
1093
1093
|
selector: 'ndt-star-icon',
|
|
@@ -1117,8 +1117,8 @@ class SunIconComponent {
|
|
|
1117
1117
|
constructor() {
|
|
1118
1118
|
this.fill = input('#FFFF');
|
|
1119
1119
|
}
|
|
1120
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1121
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
1120
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: SunIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1121
|
+
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
1122
|
<svg
|
|
1123
1123
|
[attr.fill]="fill()"
|
|
1124
1124
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -1136,7 +1136,7 @@ class SunIconComponent {
|
|
|
1136
1136
|
</svg>
|
|
1137
1137
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1138
1138
|
}
|
|
1139
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
1139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: SunIconComponent, decorators: [{
|
|
1140
1140
|
type: Component,
|
|
1141
1141
|
args: [{
|
|
1142
1142
|
selector: 'ndt-sun-icon',
|
|
@@ -1166,8 +1166,8 @@ class TerminalIconComponent {
|
|
|
1166
1166
|
constructor() {
|
|
1167
1167
|
this.fill = input('#FFFF');
|
|
1168
1168
|
}
|
|
1169
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1170
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
1169
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TerminalIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1170
|
+
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
1171
|
<svg
|
|
1172
1172
|
[attr.fill]="fill()"
|
|
1173
1173
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -1185,7 +1185,7 @@ class TerminalIconComponent {
|
|
|
1185
1185
|
</svg>
|
|
1186
1186
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1187
1187
|
}
|
|
1188
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
1188
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TerminalIconComponent, decorators: [{
|
|
1189
1189
|
type: Component,
|
|
1190
1190
|
args: [{
|
|
1191
1191
|
selector: 'ndt-terminal-icon',
|
|
@@ -1215,8 +1215,8 @@ class ToggleLeftIconComponent {
|
|
|
1215
1215
|
constructor() {
|
|
1216
1216
|
this.fill = input('#FFFF');
|
|
1217
1217
|
}
|
|
1218
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1219
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
1218
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ToggleLeftIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1219
|
+
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
1220
|
<svg
|
|
1221
1221
|
[attr.fill]="fill()"
|
|
1222
1222
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -1234,7 +1234,7 @@ class ToggleLeftIconComponent {
|
|
|
1234
1234
|
</svg>
|
|
1235
1235
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1236
1236
|
}
|
|
1237
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
1237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: ToggleLeftIconComponent, decorators: [{
|
|
1238
1238
|
type: Component,
|
|
1239
1239
|
args: [{
|
|
1240
1240
|
selector: 'ndt-toggle-left-icon',
|
|
@@ -1264,8 +1264,8 @@ class TranslateIconComponent {
|
|
|
1264
1264
|
constructor() {
|
|
1265
1265
|
this.fill = input('#FFFF');
|
|
1266
1266
|
}
|
|
1267
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1268
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
1267
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TranslateIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1268
|
+
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
1269
|
<svg
|
|
1270
1270
|
[attr.fill]="fill()"
|
|
1271
1271
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -1279,7 +1279,7 @@ class TranslateIconComponent {
|
|
|
1279
1279
|
</svg>
|
|
1280
1280
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1281
1281
|
}
|
|
1282
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
1282
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TranslateIconComponent, decorators: [{
|
|
1283
1283
|
type: Component,
|
|
1284
1284
|
args: [{
|
|
1285
1285
|
selector: 'ndt-translate-icon',
|
|
@@ -1305,8 +1305,8 @@ class TrashIconComponent {
|
|
|
1305
1305
|
constructor() {
|
|
1306
1306
|
this.fill = input('#FFFF');
|
|
1307
1307
|
}
|
|
1308
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1309
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
1308
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TrashIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1309
|
+
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
1310
|
<svg
|
|
1311
1311
|
[attr.fill]="fill()"
|
|
1312
1312
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -1320,7 +1320,7 @@ class TrashIconComponent {
|
|
|
1320
1320
|
</svg>
|
|
1321
1321
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1322
1322
|
}
|
|
1323
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
1323
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: TrashIconComponent, decorators: [{
|
|
1324
1324
|
type: Component,
|
|
1325
1325
|
args: [{
|
|
1326
1326
|
selector: 'ndt-trash-icon',
|
|
@@ -1346,8 +1346,8 @@ class UsersIconComponent {
|
|
|
1346
1346
|
constructor() {
|
|
1347
1347
|
this.fill = input('#FFFF');
|
|
1348
1348
|
}
|
|
1349
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1350
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
1349
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: UsersIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1350
|
+
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
1351
|
<svg
|
|
1352
1352
|
[attr.fill]="fill()"
|
|
1353
1353
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -1365,7 +1365,7 @@ class UsersIconComponent {
|
|
|
1365
1365
|
</svg>
|
|
1366
1366
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1367
1367
|
}
|
|
1368
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
1368
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: UsersIconComponent, decorators: [{
|
|
1369
1369
|
type: Component,
|
|
1370
1370
|
args: [{
|
|
1371
1371
|
selector: 'ndt-users-icon',
|
|
@@ -1397,8 +1397,8 @@ class DevToolbarIconComponent {
|
|
|
1397
1397
|
this.name = input.required();
|
|
1398
1398
|
this.fill = computed(() => this.stateService.theme() === 'dark' ? '#FFFFFF' : '#000000');
|
|
1399
1399
|
}
|
|
1400
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1401
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.
|
|
1400
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1401
|
+
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
1402
|
@switch (name()) { @case ('angular') {
|
|
1403
1403
|
<ndt-angular-icon />
|
|
1404
1404
|
} @case ('bolt') {
|
|
@@ -1458,7 +1458,7 @@ class DevToolbarIconComponent {
|
|
|
1458
1458
|
} }
|
|
1459
1459
|
`, 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
1460
|
}
|
|
1461
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
1461
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarIconComponent, decorators: [{
|
|
1462
1462
|
type: Component,
|
|
1463
1463
|
args: [{
|
|
1464
1464
|
selector: 'ndt-icon',
|
|
@@ -1556,6 +1556,206 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
1556
1556
|
}]
|
|
1557
1557
|
}] });
|
|
1558
1558
|
|
|
1559
|
+
/**
|
|
1560
|
+
* Container component for displaying lists of items with consistent scrolling,
|
|
1561
|
+
* empty states, and layout across all tools.
|
|
1562
|
+
*
|
|
1563
|
+
* @example
|
|
1564
|
+
* ```html
|
|
1565
|
+
* <ndt-list
|
|
1566
|
+
* [hasItems]="items().length > 0"
|
|
1567
|
+
* [hasResults]="filteredItems().length > 0"
|
|
1568
|
+
* emptyMessage="No items found"
|
|
1569
|
+
* noResultsMessage="No items match your filter"
|
|
1570
|
+
* >
|
|
1571
|
+
* @for (item of filteredItems(); track item.id) {
|
|
1572
|
+
* <ndt-list-item ... />
|
|
1573
|
+
* }
|
|
1574
|
+
* </ndt-list>
|
|
1575
|
+
* ```
|
|
1576
|
+
*/
|
|
1577
|
+
class DevToolbarListComponent {
|
|
1578
|
+
constructor() {
|
|
1579
|
+
/**
|
|
1580
|
+
* Whether the list has any items at all (before filtering).
|
|
1581
|
+
* When false, shows the emptyMessage.
|
|
1582
|
+
*/
|
|
1583
|
+
this.hasItems = input(true);
|
|
1584
|
+
/**
|
|
1585
|
+
* Whether the list has any results after filtering.
|
|
1586
|
+
* When false (but hasItems is true), shows the noResultsMessage.
|
|
1587
|
+
*/
|
|
1588
|
+
this.hasResults = input(true);
|
|
1589
|
+
/**
|
|
1590
|
+
* Message to display when there are no items at all.
|
|
1591
|
+
* @example "No feature flags found"
|
|
1592
|
+
*/
|
|
1593
|
+
this.emptyMessage = input('No items found');
|
|
1594
|
+
/**
|
|
1595
|
+
* Optional hint text to display below the empty message.
|
|
1596
|
+
* @example "Call setAvailableOptions() to configure features"
|
|
1597
|
+
*/
|
|
1598
|
+
this.emptyHint = input(undefined);
|
|
1599
|
+
/**
|
|
1600
|
+
* Message to display when items exist but none match the current filter.
|
|
1601
|
+
* @example "No flags match your filter"
|
|
1602
|
+
*/
|
|
1603
|
+
this.noResultsMessage = input('No results match your filter');
|
|
1604
|
+
}
|
|
1605
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1606
|
+
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: `
|
|
1607
|
+
@if (!hasItems()) {
|
|
1608
|
+
<div class="empty-state">
|
|
1609
|
+
<p>{{ emptyMessage() }}</p>
|
|
1610
|
+
@if (emptyHint()) {
|
|
1611
|
+
<p class="hint">{{ emptyHint() }}</p>
|
|
1612
|
+
}
|
|
1613
|
+
</div>
|
|
1614
|
+
} @else if (!hasResults()) {
|
|
1615
|
+
<div class="empty-state">
|
|
1616
|
+
<p>{{ noResultsMessage() }}</p>
|
|
1617
|
+
</div>
|
|
1618
|
+
} @else {
|
|
1619
|
+
<div class="list-container">
|
|
1620
|
+
<ng-content />
|
|
1621
|
+
</div>
|
|
1622
|
+
}
|
|
1623
|
+
`, isInline: true, styles: [":host{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);p{margin:0}.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);&::-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)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
|
|
1624
|
+
}
|
|
1625
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarListComponent, decorators: [{
|
|
1626
|
+
type: Component,
|
|
1627
|
+
args: [{ selector: 'ndt-list', standalone: true, imports: [CommonModule], template: `
|
|
1628
|
+
@if (!hasItems()) {
|
|
1629
|
+
<div class="empty-state">
|
|
1630
|
+
<p>{{ emptyMessage() }}</p>
|
|
1631
|
+
@if (emptyHint()) {
|
|
1632
|
+
<p class="hint">{{ emptyHint() }}</p>
|
|
1633
|
+
}
|
|
1634
|
+
</div>
|
|
1635
|
+
} @else if (!hasResults()) {
|
|
1636
|
+
<div class="empty-state">
|
|
1637
|
+
<p>{{ noResultsMessage() }}</p>
|
|
1638
|
+
</div>
|
|
1639
|
+
} @else {
|
|
1640
|
+
<div class="list-container">
|
|
1641
|
+
<ng-content />
|
|
1642
|
+
</div>
|
|
1643
|
+
}
|
|
1644
|
+
`, styles: [":host{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);p{margin:0}.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);&::-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)}\n"] }]
|
|
1645
|
+
}] });
|
|
1646
|
+
|
|
1647
|
+
/**
|
|
1648
|
+
* List item component with consistent layout, dot badge indicator,
|
|
1649
|
+
* and forced state highlighting.
|
|
1650
|
+
*
|
|
1651
|
+
* @example
|
|
1652
|
+
* ```html
|
|
1653
|
+
* <ndt-list-item
|
|
1654
|
+
* title="Analytics Dashboard"
|
|
1655
|
+
* description="Advanced reporting tools"
|
|
1656
|
+
* [isForced]="false"
|
|
1657
|
+
* [currentValue]="true"
|
|
1658
|
+
* [originalValue]="undefined"
|
|
1659
|
+
* >
|
|
1660
|
+
* <ndt-select ... />
|
|
1661
|
+
* </ndt-list-item>
|
|
1662
|
+
* ```
|
|
1663
|
+
*/
|
|
1664
|
+
class DevToolbarListItemComponent {
|
|
1665
|
+
constructor() {
|
|
1666
|
+
/**
|
|
1667
|
+
* Display title for the list item
|
|
1668
|
+
* @example "Analytics Dashboard"
|
|
1669
|
+
*/
|
|
1670
|
+
this.title = input.required();
|
|
1671
|
+
/**
|
|
1672
|
+
* Optional description text
|
|
1673
|
+
* @example "Advanced reporting and data visualization tools"
|
|
1674
|
+
*/
|
|
1675
|
+
this.description = input(undefined);
|
|
1676
|
+
/**
|
|
1677
|
+
* Whether this item's state is forced via the dev toolbar
|
|
1678
|
+
*/
|
|
1679
|
+
this.isForced = input(false);
|
|
1680
|
+
/**
|
|
1681
|
+
* Current enabled/granted state of the item
|
|
1682
|
+
*/
|
|
1683
|
+
this.currentValue = input.required();
|
|
1684
|
+
/**
|
|
1685
|
+
* Original value before forcing (only present when isForced is true)
|
|
1686
|
+
*/
|
|
1687
|
+
this.originalValue = input(undefined);
|
|
1688
|
+
/**
|
|
1689
|
+
* Value to display in the dot indicator.
|
|
1690
|
+
* For forced items: shows originalValue
|
|
1691
|
+
* For non-forced items: shows currentValue
|
|
1692
|
+
*/
|
|
1693
|
+
this.displayValue = computed(() => {
|
|
1694
|
+
const originalValue = this.originalValue();
|
|
1695
|
+
return this.isForced() && originalValue !== undefined
|
|
1696
|
+
? originalValue
|
|
1697
|
+
: this.currentValue();
|
|
1698
|
+
});
|
|
1699
|
+
/**
|
|
1700
|
+
* Tooltip text explaining the indicator state
|
|
1701
|
+
*/
|
|
1702
|
+
this.tooltipText = computed(() => {
|
|
1703
|
+
const value = this.displayValue();
|
|
1704
|
+
const state = value ? 'enabled' : 'disabled';
|
|
1705
|
+
if (this.isForced() && this.originalValue() !== undefined) {
|
|
1706
|
+
return `Originally: ${state}`;
|
|
1707
|
+
}
|
|
1708
|
+
return `Current state: ${state}`;
|
|
1709
|
+
});
|
|
1710
|
+
}
|
|
1711
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1712
|
+
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: `
|
|
1713
|
+
<div class="list-item" [class.list-item--forced]="isForced()">
|
|
1714
|
+
<div class="info">
|
|
1715
|
+
<h3>{{ title() }}</h3>
|
|
1716
|
+
@if (description()) {
|
|
1717
|
+
<div class="description-wrapper">
|
|
1718
|
+
<span
|
|
1719
|
+
class="dot-indicator"
|
|
1720
|
+
[class.dot-indicator--on]="displayValue()"
|
|
1721
|
+
[class.dot-indicator--off]="!displayValue()"
|
|
1722
|
+
[title]="tooltipText()"
|
|
1723
|
+
></span>
|
|
1724
|
+
<p>{{ description() }}</p>
|
|
1725
|
+
</div>
|
|
1726
|
+
}
|
|
1727
|
+
</div>
|
|
1728
|
+
<div class="actions">
|
|
1729
|
+
<ng-content />
|
|
1730
|
+
</div>
|
|
1731
|
+
</div>
|
|
1732
|
+
`, isInline: true, styles: [".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 }] }); }
|
|
1733
|
+
}
|
|
1734
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarListItemComponent, decorators: [{
|
|
1735
|
+
type: Component,
|
|
1736
|
+
args: [{ selector: 'ndt-list-item', standalone: true, imports: [CommonModule], template: `
|
|
1737
|
+
<div class="list-item" [class.list-item--forced]="isForced()">
|
|
1738
|
+
<div class="info">
|
|
1739
|
+
<h3>{{ title() }}</h3>
|
|
1740
|
+
@if (description()) {
|
|
1741
|
+
<div class="description-wrapper">
|
|
1742
|
+
<span
|
|
1743
|
+
class="dot-indicator"
|
|
1744
|
+
[class.dot-indicator--on]="displayValue()"
|
|
1745
|
+
[class.dot-indicator--off]="!displayValue()"
|
|
1746
|
+
[title]="tooltipText()"
|
|
1747
|
+
></span>
|
|
1748
|
+
<p>{{ description() }}</p>
|
|
1749
|
+
</div>
|
|
1750
|
+
}
|
|
1751
|
+
</div>
|
|
1752
|
+
<div class="actions">
|
|
1753
|
+
<ng-content />
|
|
1754
|
+
</div>
|
|
1755
|
+
</div>
|
|
1756
|
+
`, styles: [".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"] }]
|
|
1757
|
+
}] });
|
|
1758
|
+
|
|
1559
1759
|
class DevToolbarToolButtonComponent {
|
|
1560
1760
|
constructor() {
|
|
1561
1761
|
// Injects
|
|
@@ -1596,8 +1796,8 @@ class DevToolbarToolButtonComponent {
|
|
|
1596
1796
|
onBlur() {
|
|
1597
1797
|
this.isFocused.set(false);
|
|
1598
1798
|
}
|
|
1599
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1600
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.
|
|
1799
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarToolButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1800
|
+
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
1801
|
<button
|
|
1602
1802
|
class="tool-button"
|
|
1603
1803
|
[class.tool-button--active]="isActive()"
|
|
@@ -1618,7 +1818,7 @@ class DevToolbarToolButtonComponent {
|
|
|
1618
1818
|
}
|
|
1619
1819
|
<ng-content />
|
|
1620
1820
|
</button>
|
|
1621
|
-
`, isInline: true, styles: [".
|
|
1821
|
+
`, 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: [
|
|
1622
1822
|
trigger('tooltipAnimation', [
|
|
1623
1823
|
state('hidden', style({
|
|
1624
1824
|
opacity: 0,
|
|
@@ -1633,7 +1833,7 @@ class DevToolbarToolButtonComponent {
|
|
|
1633
1833
|
]),
|
|
1634
1834
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1635
1835
|
}
|
|
1636
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
1836
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarToolButtonComponent, decorators: [{
|
|
1637
1837
|
type: Component,
|
|
1638
1838
|
args: [{ selector: 'ndt-tool-button', standalone: true, template: `
|
|
1639
1839
|
<button
|
|
@@ -1669,20 +1869,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
1669
1869
|
transition('hidden => visible', [animate('200ms ease-out')]),
|
|
1670
1870
|
transition('visible => hidden', [animate('150ms ease-in')]),
|
|
1671
1871
|
]),
|
|
1672
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, styles: [".
|
|
1872
|
+
], 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"] }]
|
|
1673
1873
|
}] });
|
|
1674
1874
|
|
|
1675
1875
|
class DevToolbarWindowComponent {
|
|
1676
1876
|
constructor() {
|
|
1677
1877
|
this.devToolbarStateService = inject(DevToolbarStateService);
|
|
1678
1878
|
this.config = input.required();
|
|
1679
|
-
this.
|
|
1879
|
+
this.closed = output();
|
|
1680
1880
|
this.maximize = output();
|
|
1681
1881
|
this.minimize = output();
|
|
1682
1882
|
this.theme = computed(() => this.devToolbarStateService.theme());
|
|
1683
1883
|
}
|
|
1684
1884
|
onClose() {
|
|
1685
|
-
this.
|
|
1885
|
+
this.closed.emit();
|
|
1686
1886
|
}
|
|
1687
1887
|
onMaximize() {
|
|
1688
1888
|
this.maximize.emit();
|
|
@@ -1690,8 +1890,8 @@ class DevToolbarWindowComponent {
|
|
|
1690
1890
|
onMinimize() {
|
|
1691
1891
|
this.minimize.emit();
|
|
1692
1892
|
}
|
|
1693
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1694
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.
|
|
1893
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1894
|
+
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: `
|
|
1695
1895
|
<div class="window dev-toolbar" [attr.data-theme]="theme()">
|
|
1696
1896
|
<div class="header">
|
|
1697
1897
|
<div class="header__content">
|
|
@@ -1729,9 +1929,9 @@ class DevToolbarWindowComponent {
|
|
|
1729
1929
|
<ng-content></ng-content>
|
|
1730
1930
|
</div>
|
|
1731
1931
|
</div>
|
|
1732
|
-
`, isInline: true, styles: ["
|
|
1932
|
+
`, 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"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1733
1933
|
}
|
|
1734
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
1934
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarWindowComponent, decorators: [{
|
|
1735
1935
|
type: Component,
|
|
1736
1936
|
args: [{ selector: 'ndt-window', standalone: true, template: `
|
|
1737
1937
|
<div class="window dev-toolbar" [attr.data-theme]="theme()">
|
|
@@ -1771,7 +1971,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
1771
1971
|
<ng-content></ng-content>
|
|
1772
1972
|
</div>
|
|
1773
1973
|
</div>
|
|
1774
|
-
`, styles: ["
|
|
1974
|
+
`, 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: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"] }]
|
|
1775
1975
|
}] });
|
|
1776
1976
|
|
|
1777
1977
|
class DevToolbarToolComponent {
|
|
@@ -1835,8 +2035,8 @@ class DevToolbarToolComponent {
|
|
|
1835
2035
|
const buttonContainerRect = this.buttonContainer?.nativeElement?.getBoundingClientRect();
|
|
1836
2036
|
return buttonContainerRect?.left ?? 0;
|
|
1837
2037
|
}
|
|
1838
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1839
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.
|
|
2038
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2039
|
+
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 }], viewQueries: [{ propertyName: "buttonContainer", first: true, predicate: ["buttonContainer"], descendants: true }], ngImport: i0, template: `
|
|
1840
2040
|
<div #trigger="cdkOverlayOrigin" class="dev-toolbar-tool" cdkOverlayOrigin>
|
|
1841
2041
|
<div
|
|
1842
2042
|
class="dev-toolbar-tool__icon"
|
|
@@ -1866,13 +2066,13 @@ class DevToolbarToolComponent {
|
|
|
1866
2066
|
[cdkConnectedOverlayHeight]="height()"
|
|
1867
2067
|
cdkConnectedOverlay
|
|
1868
2068
|
>
|
|
1869
|
-
<ndt-window [@slideAnimation] [config]="options()" (
|
|
2069
|
+
<ndt-window [@slideAnimation] [config]="options()" (closed)="onClose()">
|
|
1870
2070
|
<ng-content />
|
|
1871
2071
|
</ndt-window>
|
|
1872
2072
|
</ng-template>
|
|
1873
2073
|
}
|
|
1874
2074
|
</div>
|
|
1875
|
-
`, isInline: true, styles: [".
|
|
2075
|
+
`, 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: ["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
2076
|
trigger('slideAnimation', [
|
|
1877
2077
|
transition(':enter', [
|
|
1878
2078
|
style({
|
|
@@ -1897,7 +2097,7 @@ class DevToolbarToolComponent {
|
|
|
1897
2097
|
]),
|
|
1898
2098
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1899
2099
|
}
|
|
1900
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
2100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarToolComponent, decorators: [{
|
|
1901
2101
|
type: Component,
|
|
1902
2102
|
args: [{ selector: 'ndt-toolbar-tool', standalone: true, imports: [
|
|
1903
2103
|
CdkConnectedOverlay,
|
|
@@ -1935,7 +2135,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
1935
2135
|
[cdkConnectedOverlayHeight]="height()"
|
|
1936
2136
|
cdkConnectedOverlay
|
|
1937
2137
|
>
|
|
1938
|
-
<ndt-window [@slideAnimation] [config]="options()" (
|
|
2138
|
+
<ndt-window [@slideAnimation] [config]="options()" (closed)="onClose()">
|
|
1939
2139
|
<ng-content />
|
|
1940
2140
|
</ndt-window>
|
|
1941
2141
|
</ng-template>
|
|
@@ -1964,7 +2164,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
1964
2164
|
})),
|
|
1965
2165
|
]),
|
|
1966
2166
|
]),
|
|
1967
|
-
], styles: [".
|
|
2167
|
+
], styles: [".tool{position:relative}.trigger{cursor:pointer}\n"] }]
|
|
1968
2168
|
}], propDecorators: { buttonContainer: [{
|
|
1969
2169
|
type: ViewChild,
|
|
1970
2170
|
args: ['buttonContainer']
|
|
@@ -1981,8 +2181,8 @@ class DevToolbarInputComponent {
|
|
|
1981
2181
|
this.ariaLabel = input('');
|
|
1982
2182
|
this.inputClass = input('input');
|
|
1983
2183
|
}
|
|
1984
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
1985
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
2184
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2185
|
+
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
2186
|
<input
|
|
1987
2187
|
[attr.aria-label]="ariaLabel()"
|
|
1988
2188
|
[type]="type()"
|
|
@@ -1991,9 +2191,9 @@ class DevToolbarInputComponent {
|
|
|
1991
2191
|
[placeholder]="placeholder()"
|
|
1992
2192
|
(ngModelChange)="value.set($event)"
|
|
1993
2193
|
/>
|
|
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
|
|
2194
|
+
`, 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;&::placeholder{color:var(--ndt-text-muted)}&:focus{outline:none;border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2)}&: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
2195
|
}
|
|
1996
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
2196
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInputComponent, decorators: [{
|
|
1997
2197
|
type: Component,
|
|
1998
2198
|
args: [{ selector: 'ndt-input', standalone: true, imports: [FormsModule], template: `
|
|
1999
2199
|
<input
|
|
@@ -2004,7 +2204,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
2004
2204
|
[placeholder]="placeholder()"
|
|
2005
2205
|
(ngModelChange)="value.set($event)"
|
|
2006
2206
|
/>
|
|
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
|
|
2207
|
+
`, 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;&::placeholder{color:var(--ndt-text-muted)}&:focus{outline:none;border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2)}&:disabled{background-color:var(--ndt-bg-secondary);cursor:not-allowed;color:var(--ndt-text-muted)}}\n"] }]
|
|
2008
2208
|
}] });
|
|
2009
2209
|
|
|
2010
2210
|
class DevToolbarSelectComponent {
|
|
@@ -2051,8 +2251,8 @@ class DevToolbarSelectComponent {
|
|
|
2051
2251
|
this.value.set(option.value);
|
|
2052
2252
|
this.close();
|
|
2053
2253
|
}
|
|
2054
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
2055
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.
|
|
2254
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2255
|
+
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
2256
|
<div
|
|
2057
2257
|
class="dev-toolbar select"
|
|
2058
2258
|
[class.small]="size() === 'small'"
|
|
@@ -2101,9 +2301,9 @@ class DevToolbarSelectComponent {
|
|
|
2101
2301
|
}
|
|
2102
2302
|
</div>
|
|
2103
2303
|
</ng-template>
|
|
2104
|
-
`, isInline: true, styles: ["
|
|
2304
|
+
`, 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;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{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
2305
|
}
|
|
2106
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
2306
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarSelectComponent, decorators: [{
|
|
2107
2307
|
type: Component,
|
|
2108
2308
|
args: [{ selector: 'ndt-select', standalone: true, imports: [CommonModule, FormsModule, OverlayModule, CdkMenuModule], template: `
|
|
2109
2309
|
<div
|
|
@@ -2154,7 +2354,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
2154
2354
|
}
|
|
2155
2355
|
</div>
|
|
2156
2356
|
</ng-template>
|
|
2157
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["
|
|
2357
|
+
`, 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;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{backdrop-filter:blur(8px)}\n"] }]
|
|
2158
2358
|
}] });
|
|
2159
2359
|
|
|
2160
2360
|
class DevToolsStorageService {
|
|
@@ -2222,10 +2422,10 @@ class DevToolsStorageService {
|
|
|
2222
2422
|
getToolKey(key) {
|
|
2223
2423
|
return key.includes(this.PREFIX) ? key : this.PREFIX + key;
|
|
2224
2424
|
}
|
|
2225
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
2226
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.
|
|
2425
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolsStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2426
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolsStorageService, providedIn: 'root' }); }
|
|
2227
2427
|
}
|
|
2228
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
2428
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolsStorageService, decorators: [{
|
|
2229
2429
|
type: Injectable,
|
|
2230
2430
|
args: [{ providedIn: 'root' }]
|
|
2231
2431
|
}] });
|
|
@@ -2398,6 +2598,7 @@ class DevToolbarInternalAppFeaturesService {
|
|
|
2398
2598
|
...feature,
|
|
2399
2599
|
isEnabled: isInEnabled ? true : isInDisabled ? false : feature.isEnabled,
|
|
2400
2600
|
isForced,
|
|
2601
|
+
originalValue: isForced ? feature.isEnabled : undefined,
|
|
2401
2602
|
};
|
|
2402
2603
|
});
|
|
2403
2604
|
}
|
|
@@ -2452,10 +2653,10 @@ class DevToolbarInternalAppFeaturesService {
|
|
|
2452
2653
|
this.saveForcedFeatures(cleanedState);
|
|
2453
2654
|
}
|
|
2454
2655
|
}
|
|
2455
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
2456
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.
|
|
2656
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalAppFeaturesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2657
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalAppFeaturesService, providedIn: 'root' }); }
|
|
2457
2658
|
}
|
|
2458
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
2659
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalAppFeaturesService, decorators: [{
|
|
2459
2660
|
type: Injectable,
|
|
2460
2661
|
args: [{ providedIn: 'root' }]
|
|
2461
2662
|
}], ctorParameters: () => [] });
|
|
@@ -2484,7 +2685,7 @@ class DevToolbarAppFeaturesToolComponent {
|
|
|
2484
2685
|
this.features = this.appFeaturesService.features;
|
|
2485
2686
|
this.hasNoFeatures = computed(() => this.features().length === 0);
|
|
2486
2687
|
this.filteredFeatures = computed(() => {
|
|
2487
|
-
|
|
2688
|
+
const filtered = this.features().filter((feature) => {
|
|
2488
2689
|
const searchTerm = this.searchQuery().toLowerCase();
|
|
2489
2690
|
const featureName = feature.name.toLowerCase();
|
|
2490
2691
|
const featureDescription = feature.description?.toLowerCase() ?? '';
|
|
@@ -2497,6 +2698,8 @@ class DevToolbarAppFeaturesToolComponent {
|
|
|
2497
2698
|
(this.activeFilter() === 'disabled' && !feature.isEnabled);
|
|
2498
2699
|
return matchesSearch && matchesFilter;
|
|
2499
2700
|
});
|
|
2701
|
+
// Sort alphabetically by name
|
|
2702
|
+
return filtered.sort((a, b) => a.name.localeCompare(b.name));
|
|
2500
2703
|
});
|
|
2501
2704
|
this.hasNoFilteredFeatures = computed(() => this.filteredFeatures().length === 0);
|
|
2502
2705
|
// Other properties
|
|
@@ -2568,8 +2771,8 @@ class DevToolbarAppFeaturesToolComponent {
|
|
|
2568
2771
|
return '';
|
|
2569
2772
|
return feature.isEnabled ? 'on' : 'off';
|
|
2570
2773
|
}
|
|
2571
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
2572
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.
|
|
2774
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarAppFeaturesToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2775
|
+
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
2776
|
<ndt-toolbar-tool
|
|
2574
2777
|
[options]="options"
|
|
2575
2778
|
title="App Features"
|
|
@@ -2593,42 +2796,36 @@ class DevToolbarAppFeaturesToolComponent {
|
|
|
2593
2796
|
</div>
|
|
2594
2797
|
</div>
|
|
2595
2798
|
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
<p>No features match your filter</p>
|
|
2604
|
-
</div>
|
|
2605
|
-
} @else {
|
|
2606
|
-
<div class="feature-list">
|
|
2799
|
+
<ndt-list
|
|
2800
|
+
[hasItems]="!hasNoFeatures()"
|
|
2801
|
+
[hasResults]="!hasNoFilteredFeatures()"
|
|
2802
|
+
emptyMessage="No app features found"
|
|
2803
|
+
[emptyHint]="'Call setAvailableOptions() to configure features'"
|
|
2804
|
+
noResultsMessage="No features match your filter"
|
|
2805
|
+
>
|
|
2607
2806
|
@for (feature of filteredFeatures(); track feature.id) {
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
</div>
|
|
2807
|
+
<ndt-list-item
|
|
2808
|
+
[title]="feature.name"
|
|
2809
|
+
[description]="feature.description"
|
|
2810
|
+
[isForced]="feature.isForced"
|
|
2811
|
+
[currentValue]="feature.isEnabled"
|
|
2812
|
+
[originalValue]="feature.originalValue"
|
|
2813
|
+
>
|
|
2814
|
+
<ndt-select
|
|
2815
|
+
[value]="getFeatureValue(feature)"
|
|
2816
|
+
[options]="featureValueOptions"
|
|
2817
|
+
[ariaLabel]="'Set value for ' + feature.name"
|
|
2818
|
+
(valueChange)="onFeatureChange(feature.id, $event ?? '')"
|
|
2819
|
+
size="small"
|
|
2820
|
+
/>
|
|
2821
|
+
</ndt-list-item>
|
|
2624
2822
|
}
|
|
2625
|
-
</
|
|
2626
|
-
}
|
|
2823
|
+
</ndt-list>
|
|
2627
2824
|
</div>
|
|
2628
2825
|
</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)
|
|
2826
|
+
`, 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
2827
|
}
|
|
2631
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
2828
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarAppFeaturesToolComponent, decorators: [{
|
|
2632
2829
|
type: Component,
|
|
2633
2830
|
args: [{ selector: 'ndt-app-features-tool', standalone: true, imports: [
|
|
2634
2831
|
FormsModule,
|
|
@@ -2636,6 +2833,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
2636
2833
|
DevToolbarInputComponent,
|
|
2637
2834
|
DevToolbarSelectComponent,
|
|
2638
2835
|
DevToolbarIconComponent,
|
|
2836
|
+
DevToolbarListComponent,
|
|
2837
|
+
DevToolbarListItemComponent,
|
|
2639
2838
|
], template: `
|
|
2640
2839
|
<ndt-toolbar-tool
|
|
2641
2840
|
[options]="options"
|
|
@@ -2660,40 +2859,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
2660
2859
|
</div>
|
|
2661
2860
|
</div>
|
|
2662
2861
|
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
<p>No features match your filter</p>
|
|
2671
|
-
</div>
|
|
2672
|
-
} @else {
|
|
2673
|
-
<div class="feature-list">
|
|
2862
|
+
<ndt-list
|
|
2863
|
+
[hasItems]="!hasNoFeatures()"
|
|
2864
|
+
[hasResults]="!hasNoFilteredFeatures()"
|
|
2865
|
+
emptyMessage="No app features found"
|
|
2866
|
+
[emptyHint]="'Call setAvailableOptions() to configure features'"
|
|
2867
|
+
noResultsMessage="No features match your filter"
|
|
2868
|
+
>
|
|
2674
2869
|
@for (feature of filteredFeatures(); track feature.id) {
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
|
|
2690
|
-
</div>
|
|
2870
|
+
<ndt-list-item
|
|
2871
|
+
[title]="feature.name"
|
|
2872
|
+
[description]="feature.description"
|
|
2873
|
+
[isForced]="feature.isForced"
|
|
2874
|
+
[currentValue]="feature.isEnabled"
|
|
2875
|
+
[originalValue]="feature.originalValue"
|
|
2876
|
+
>
|
|
2877
|
+
<ndt-select
|
|
2878
|
+
[value]="getFeatureValue(feature)"
|
|
2879
|
+
[options]="featureValueOptions"
|
|
2880
|
+
[ariaLabel]="'Set value for ' + feature.name"
|
|
2881
|
+
(valueChange)="onFeatureChange(feature.id, $event ?? '')"
|
|
2882
|
+
size="small"
|
|
2883
|
+
/>
|
|
2884
|
+
</ndt-list-item>
|
|
2691
2885
|
}
|
|
2692
|
-
</
|
|
2693
|
-
}
|
|
2886
|
+
</ndt-list>
|
|
2694
2887
|
</div>
|
|
2695
2888
|
</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)
|
|
2889
|
+
`, 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
2890
|
}] });
|
|
2698
2891
|
|
|
2699
2892
|
class DevToolbarInternalFeatureFlagService {
|
|
@@ -2710,11 +2903,19 @@ class DevToolbarInternalFeatureFlagService {
|
|
|
2710
2903
|
this.appFlags$,
|
|
2711
2904
|
this.forcedFlags$,
|
|
2712
2905
|
]).pipe(map(([appFlags, { enabled, disabled }]) => {
|
|
2713
|
-
return appFlags.map((flag) =>
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2906
|
+
return appFlags.map((flag) => {
|
|
2907
|
+
const isForced = enabled.includes(flag.id) || disabled.includes(flag.id);
|
|
2908
|
+
return {
|
|
2909
|
+
...flag,
|
|
2910
|
+
isForced,
|
|
2911
|
+
isEnabled: enabled.includes(flag.id)
|
|
2912
|
+
? true
|
|
2913
|
+
: disabled.includes(flag.id)
|
|
2914
|
+
? false
|
|
2915
|
+
: flag.isEnabled,
|
|
2916
|
+
originalValue: isForced ? flag.isEnabled : undefined,
|
|
2917
|
+
};
|
|
2918
|
+
});
|
|
2718
2919
|
}));
|
|
2719
2920
|
this.flags = toSignal(this.flags$, { initialValue: [] });
|
|
2720
2921
|
this.loadForcedFlags();
|
|
@@ -2757,10 +2958,25 @@ class DevToolbarInternalFeatureFlagService {
|
|
|
2757
2958
|
this.forcedFlagsSubject.next(savedFlags);
|
|
2758
2959
|
}
|
|
2759
2960
|
}
|
|
2760
|
-
|
|
2761
|
-
|
|
2961
|
+
/**
|
|
2962
|
+
* Apply feature flags from a preset (used by Presets Tool)
|
|
2963
|
+
* This method directly sets the forced flags state without user interaction
|
|
2964
|
+
*/
|
|
2965
|
+
applyPresetFlags(presetState) {
|
|
2966
|
+
this.forcedFlagsSubject.next(presetState);
|
|
2967
|
+
this.storageService.set(this.STORAGE_KEY, presetState);
|
|
2968
|
+
}
|
|
2969
|
+
/**
|
|
2970
|
+
* Get current forced state for saving to preset
|
|
2971
|
+
* Returns the raw state of enabled and disabled flag IDs
|
|
2972
|
+
*/
|
|
2973
|
+
getCurrentForcedState() {
|
|
2974
|
+
return this.forcedFlagsSubject.value;
|
|
2975
|
+
}
|
|
2976
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalFeatureFlagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2977
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalFeatureFlagService, providedIn: 'root' }); }
|
|
2762
2978
|
}
|
|
2763
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
2979
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalFeatureFlagService, decorators: [{
|
|
2764
2980
|
type: Injectable,
|
|
2765
2981
|
args: [{ providedIn: 'root' }]
|
|
2766
2982
|
}], ctorParameters: () => [] });
|
|
@@ -2775,7 +2991,7 @@ class DevToolbarFeatureFlagsToolComponent {
|
|
|
2775
2991
|
this.flags = this.featureFlags.flags;
|
|
2776
2992
|
this.hasNoFlags = computed(() => this.flags().length === 0);
|
|
2777
2993
|
this.filteredFlags = computed(() => {
|
|
2778
|
-
|
|
2994
|
+
const filtered = this.flags().filter((flag) => {
|
|
2779
2995
|
const searchTerm = this.searchQuery().toLowerCase();
|
|
2780
2996
|
const flagName = flag.name.toLowerCase();
|
|
2781
2997
|
const flagDescription = flag.description?.toLowerCase() ?? '';
|
|
@@ -2788,6 +3004,8 @@ class DevToolbarFeatureFlagsToolComponent {
|
|
|
2788
3004
|
(this.activeFilter() === 'disabled' && !flag.isEnabled);
|
|
2789
3005
|
return matchesSearch && matchesFilter;
|
|
2790
3006
|
});
|
|
3007
|
+
// Sort alphabetically by name
|
|
3008
|
+
return filtered.sort((a, b) => a.name.localeCompare(b.name));
|
|
2791
3009
|
});
|
|
2792
3010
|
this.hasNoFilteredFlags = computed(() => this.filteredFlags().length === 0);
|
|
2793
3011
|
// Other properties
|
|
@@ -2840,8 +3058,8 @@ class DevToolbarFeatureFlagsToolComponent {
|
|
|
2840
3058
|
return '';
|
|
2841
3059
|
return flag.isEnabled ? 'on' : 'off';
|
|
2842
3060
|
}
|
|
2843
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
2844
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.
|
|
3061
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarFeatureFlagsToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3062
|
+
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: `
|
|
2845
3063
|
<ndt-toolbar-tool
|
|
2846
3064
|
[options]="options"
|
|
2847
3065
|
title="Feature Flags"
|
|
@@ -2865,39 +3083,35 @@ class DevToolbarFeatureFlagsToolComponent {
|
|
|
2865
3083
|
</div>
|
|
2866
3084
|
</div>
|
|
2867
3085
|
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
<p>No flags found matching your filter</p>
|
|
2875
|
-
</div>
|
|
2876
|
-
} @else {
|
|
2877
|
-
<div class="flag-list">
|
|
3086
|
+
<ndt-list
|
|
3087
|
+
[hasItems]="!hasNoFlags()"
|
|
3088
|
+
[hasResults]="!hasNoFilteredFlags()"
|
|
3089
|
+
emptyMessage="No flags found"
|
|
3090
|
+
noResultsMessage="No flags found matching your filter"
|
|
3091
|
+
>
|
|
2878
3092
|
@for (flag of filteredFlags(); track flag.id) {
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
3093
|
+
<ndt-list-item
|
|
3094
|
+
[title]="flag.name"
|
|
3095
|
+
[description]="flag.description"
|
|
3096
|
+
[isForced]="flag.isForced"
|
|
3097
|
+
[currentValue]="flag.isEnabled"
|
|
3098
|
+
[originalValue]="flag.originalValue"
|
|
3099
|
+
>
|
|
3100
|
+
<ndt-select
|
|
3101
|
+
[value]="getFlagValue(flag)"
|
|
3102
|
+
[options]="flagValueOptions"
|
|
3103
|
+
[ariaLabel]="'Set value for ' + flag.name"
|
|
3104
|
+
(valueChange)="onFlagChange(flag.id, $event ?? '')"
|
|
3105
|
+
size="small"
|
|
3106
|
+
/>
|
|
3107
|
+
</ndt-list-item>
|
|
2893
3108
|
}
|
|
2894
|
-
</
|
|
2895
|
-
}
|
|
3109
|
+
</ndt-list>
|
|
2896
3110
|
</div>
|
|
2897
3111
|
</ndt-toolbar-tool>
|
|
2898
|
-
`, 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)
|
|
3112
|
+
`, 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 }); }
|
|
2899
3113
|
}
|
|
2900
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
3114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarFeatureFlagsToolComponent, decorators: [{
|
|
2901
3115
|
type: Component,
|
|
2902
3116
|
args: [{ selector: 'ndt-feature-flags-tool', standalone: true, imports: [
|
|
2903
3117
|
FormsModule,
|
|
@@ -2905,6 +3119,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
2905
3119
|
DevToolbarInputComponent,
|
|
2906
3120
|
DevToolbarSelectComponent,
|
|
2907
3121
|
DevToolbarIconComponent,
|
|
3122
|
+
DevToolbarListComponent,
|
|
3123
|
+
DevToolbarListItemComponent,
|
|
2908
3124
|
], template: `
|
|
2909
3125
|
<ndt-toolbar-tool
|
|
2910
3126
|
[options]="options"
|
|
@@ -2929,37 +3145,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
2929
3145
|
</div>
|
|
2930
3146
|
</div>
|
|
2931
3147
|
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
<p>No flags found matching your filter</p>
|
|
2939
|
-
</div>
|
|
2940
|
-
} @else {
|
|
2941
|
-
<div class="flag-list">
|
|
3148
|
+
<ndt-list
|
|
3149
|
+
[hasItems]="!hasNoFlags()"
|
|
3150
|
+
[hasResults]="!hasNoFilteredFlags()"
|
|
3151
|
+
emptyMessage="No flags found"
|
|
3152
|
+
noResultsMessage="No flags found matching your filter"
|
|
3153
|
+
>
|
|
2942
3154
|
@for (flag of filteredFlags(); track flag.id) {
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
3155
|
+
<ndt-list-item
|
|
3156
|
+
[title]="flag.name"
|
|
3157
|
+
[description]="flag.description"
|
|
3158
|
+
[isForced]="flag.isForced"
|
|
3159
|
+
[currentValue]="flag.isEnabled"
|
|
3160
|
+
[originalValue]="flag.originalValue"
|
|
3161
|
+
>
|
|
3162
|
+
<ndt-select
|
|
3163
|
+
[value]="getFlagValue(flag)"
|
|
3164
|
+
[options]="flagValueOptions"
|
|
3165
|
+
[ariaLabel]="'Set value for ' + flag.name"
|
|
3166
|
+
(valueChange)="onFlagChange(flag.id, $event ?? '')"
|
|
3167
|
+
size="small"
|
|
3168
|
+
/>
|
|
3169
|
+
</ndt-list-item>
|
|
2957
3170
|
}
|
|
2958
|
-
</
|
|
2959
|
-
}
|
|
3171
|
+
</ndt-list>
|
|
2960
3172
|
</div>
|
|
2961
3173
|
</ndt-toolbar-tool>
|
|
2962
|
-
`, 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)
|
|
3174
|
+
`, 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"] }]
|
|
2963
3175
|
}] });
|
|
2964
3176
|
|
|
2965
3177
|
class DevToolbarButtonComponent {
|
|
@@ -2971,8 +3183,8 @@ class DevToolbarButtonComponent {
|
|
|
2971
3183
|
this.ariaLabel = input();
|
|
2972
3184
|
this.isActive = input(false);
|
|
2973
3185
|
}
|
|
2974
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
2975
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.
|
|
3186
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3187
|
+
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: `
|
|
2976
3188
|
<button
|
|
2977
3189
|
class="button"
|
|
2978
3190
|
[attr.aria-label]="ariaLabel()"
|
|
@@ -2988,9 +3200,9 @@ class DevToolbarButtonComponent {
|
|
|
2988
3200
|
}
|
|
2989
3201
|
<ng-content />
|
|
2990
3202
|
</button>
|
|
2991
|
-
`, isInline: true, styles: [".
|
|
3203
|
+
`, 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 }); }
|
|
2992
3204
|
}
|
|
2993
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
3205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarButtonComponent, decorators: [{
|
|
2994
3206
|
type: Component,
|
|
2995
3207
|
args: [{ selector: 'ndt-button', standalone: true, imports: [DevToolbarIconComponent], template: `
|
|
2996
3208
|
<button
|
|
@@ -3008,7 +3220,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
3008
3220
|
}
|
|
3009
3221
|
<ng-content />
|
|
3010
3222
|
</button>
|
|
3011
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".
|
|
3223
|
+
`, 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"] }]
|
|
3012
3224
|
}] });
|
|
3013
3225
|
|
|
3014
3226
|
class DevToolbarCardComponent {
|
|
@@ -3019,8 +3231,8 @@ class DevToolbarCardComponent {
|
|
|
3019
3231
|
onClick() {
|
|
3020
3232
|
this.click.set();
|
|
3021
3233
|
}
|
|
3022
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
3023
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.
|
|
3234
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3235
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.7", type: DevToolbarCardComponent, isStandalone: true, selector: "ndt-card", ngImport: i0, template: `
|
|
3024
3236
|
<div
|
|
3025
3237
|
class="card"
|
|
3026
3238
|
role="button"
|
|
@@ -3034,9 +3246,9 @@ class DevToolbarCardComponent {
|
|
|
3034
3246
|
>
|
|
3035
3247
|
<ng-content></ng-content>
|
|
3036
3248
|
</div>
|
|
3037
|
-
`, 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"] }); }
|
|
3249
|
+
`, 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"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3038
3250
|
}
|
|
3039
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
3251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarCardComponent, decorators: [{
|
|
3040
3252
|
type: Component,
|
|
3041
3253
|
args: [{ selector: 'ndt-card', standalone: true, template: `
|
|
3042
3254
|
<div
|
|
@@ -3052,7 +3264,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
3052
3264
|
>
|
|
3053
3265
|
<ng-content></ng-content>
|
|
3054
3266
|
</div>
|
|
3055
|
-
`, 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"] }]
|
|
3267
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, 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"] }]
|
|
3056
3268
|
}] });
|
|
3057
3269
|
|
|
3058
3270
|
class DevToolbarClickableCardComponent {
|
|
@@ -3065,8 +3277,8 @@ class DevToolbarClickableCardComponent {
|
|
|
3065
3277
|
onClick() {
|
|
3066
3278
|
this.click.set();
|
|
3067
3279
|
}
|
|
3068
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
3069
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
3280
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarClickableCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3281
|
+
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: `
|
|
3070
3282
|
<ndt-card (clicked)="onClick()">
|
|
3071
3283
|
<div class="clickable-card">
|
|
3072
3284
|
<div class="clickable-card__icon">
|
|
@@ -3078,9 +3290,9 @@ class DevToolbarClickableCardComponent {
|
|
|
3078
3290
|
</div>
|
|
3079
3291
|
</div>
|
|
3080
3292
|
</ndt-card>
|
|
3081
|
-
`, isInline: true, styles: [".clickable-card{display:flex;flex-direction:column;gap:var(--ndt-spacing-
|
|
3293
|
+
`, 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3082
3294
|
}
|
|
3083
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
3295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarClickableCardComponent, decorators: [{
|
|
3084
3296
|
type: Component,
|
|
3085
3297
|
args: [{ selector: 'ndt-clickable-card', standalone: true, imports: [DevToolbarCardComponent, DevToolbarIconComponent], template: `
|
|
3086
3298
|
<ndt-card (clicked)="onClick()">
|
|
@@ -3094,7 +3306,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
3094
3306
|
</div>
|
|
3095
3307
|
</div>
|
|
3096
3308
|
</ndt-card>
|
|
3097
|
-
`, styles: [".clickable-card{display:flex;flex-direction:column;gap:var(--ndt-spacing-
|
|
3309
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, 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"] }]
|
|
3098
3310
|
}] });
|
|
3099
3311
|
|
|
3100
3312
|
class DevToolbarLinkButtonComponent {
|
|
@@ -3102,8 +3314,8 @@ class DevToolbarLinkButtonComponent {
|
|
|
3102
3314
|
this.url = input.required();
|
|
3103
3315
|
this.icon = input.required();
|
|
3104
3316
|
}
|
|
3105
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
3106
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.
|
|
3317
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLinkButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3318
|
+
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: `
|
|
3107
3319
|
<a
|
|
3108
3320
|
[href]="url()"
|
|
3109
3321
|
target="_blank"
|
|
@@ -3117,9 +3329,9 @@ class DevToolbarLinkButtonComponent {
|
|
|
3117
3329
|
<ng-content></ng-content>
|
|
3118
3330
|
</span>
|
|
3119
3331
|
</a>
|
|
3120
|
-
`, 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"] }] }); }
|
|
3332
|
+
`, 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3121
3333
|
}
|
|
3122
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
3334
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLinkButtonComponent, decorators: [{
|
|
3123
3335
|
type: Component,
|
|
3124
3336
|
args: [{ selector: 'ndt-link-button', standalone: true, imports: [DevToolbarIconComponent], template: `
|
|
3125
3337
|
<a
|
|
@@ -3135,7 +3347,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
3135
3347
|
<ng-content></ng-content>
|
|
3136
3348
|
</span>
|
|
3137
3349
|
</a>
|
|
3138
|
-
`, 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"] }]
|
|
3350
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, 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"] }]
|
|
3139
3351
|
}] });
|
|
3140
3352
|
|
|
3141
3353
|
class SettingsService {
|
|
@@ -3151,10 +3363,10 @@ class SettingsService {
|
|
|
3151
3363
|
setSettings(settings) {
|
|
3152
3364
|
this.storageService.set(this.STORAGE_KEY, settings);
|
|
3153
3365
|
}
|
|
3154
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
3155
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.
|
|
3366
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: SettingsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3367
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: SettingsService, providedIn: 'root' }); }
|
|
3156
3368
|
}
|
|
3157
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
3369
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: SettingsService, decorators: [{
|
|
3158
3370
|
type: Injectable,
|
|
3159
3371
|
args: [{ providedIn: 'root' }]
|
|
3160
3372
|
}] });
|
|
@@ -3249,8 +3461,8 @@ class DevToolbarHomeToolComponent {
|
|
|
3249
3461
|
this.storageService.clearAllSettings();
|
|
3250
3462
|
window.location.reload();
|
|
3251
3463
|
}
|
|
3252
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
3253
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.
|
|
3464
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarHomeToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3465
|
+
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: `
|
|
3254
3466
|
<ndt-toolbar-tool [options]="options" title="Home" icon="angular">
|
|
3255
3467
|
<section class="settings">
|
|
3256
3468
|
<div class="instruction">
|
|
@@ -3321,9 +3533,9 @@ class DevToolbarHomeToolComponent {
|
|
|
3321
3533
|
</div>
|
|
3322
3534
|
</section>
|
|
3323
3535
|
</ndt-toolbar-tool>
|
|
3324
|
-
`, isInline: true, styles: [".
|
|
3536
|
+
`, 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 }); }
|
|
3325
3537
|
}
|
|
3326
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
3538
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarHomeToolComponent, decorators: [{
|
|
3327
3539
|
type: Component,
|
|
3328
3540
|
args: [{ selector: 'ndt-home-tool', standalone: true, imports: [
|
|
3329
3541
|
DevToolbarToolComponent,
|
|
@@ -3402,7 +3614,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
3402
3614
|
</div>
|
|
3403
3615
|
</section>
|
|
3404
3616
|
</ndt-toolbar-tool>
|
|
3405
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".
|
|
3617
|
+
`, 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"] }]
|
|
3406
3618
|
}] });
|
|
3407
3619
|
|
|
3408
3620
|
class DevToolbarInternalLanguageService {
|
|
@@ -3437,10 +3649,36 @@ class DevToolbarInternalLanguageService {
|
|
|
3437
3649
|
this.forcedLanguage$.next(savedLanguage);
|
|
3438
3650
|
}
|
|
3439
3651
|
}
|
|
3440
|
-
|
|
3441
|
-
|
|
3652
|
+
/**
|
|
3653
|
+
* Apply language from a preset (used by Presets Tool)
|
|
3654
|
+
* Accepts a language ID and finds the corresponding Language object from available languages
|
|
3655
|
+
*/
|
|
3656
|
+
async applyPresetLanguage(languageId) {
|
|
3657
|
+
if (languageId === null) {
|
|
3658
|
+
this.removeForcedLanguage();
|
|
3659
|
+
return;
|
|
3660
|
+
}
|
|
3661
|
+
// Get available languages and find matching one
|
|
3662
|
+
const languages = await firstValueFrom(this.languages$);
|
|
3663
|
+
const language = languages.find((lang) => lang.id === languageId);
|
|
3664
|
+
if (language) {
|
|
3665
|
+
this.setForcedLanguage(language);
|
|
3666
|
+
}
|
|
3667
|
+
else {
|
|
3668
|
+
console.warn(`Language ${languageId} not found in available languages. Skipping.`);
|
|
3669
|
+
}
|
|
3670
|
+
}
|
|
3671
|
+
/**
|
|
3672
|
+
* Get current forced language ID for saving to preset
|
|
3673
|
+
* Returns the language ID or null if no language is forced
|
|
3674
|
+
*/
|
|
3675
|
+
getCurrentForcedLanguage() {
|
|
3676
|
+
return this.forcedLanguage$.value?.id ?? null;
|
|
3677
|
+
}
|
|
3678
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalLanguageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3679
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalLanguageService, providedIn: 'root' }); }
|
|
3442
3680
|
}
|
|
3443
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
3681
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalLanguageService, decorators: [{
|
|
3444
3682
|
type: Injectable,
|
|
3445
3683
|
args: [{ providedIn: 'root' }]
|
|
3446
3684
|
}], ctorParameters: () => [] });
|
|
@@ -3476,8 +3714,8 @@ class DevToolbarLanguageToolComponent {
|
|
|
3476
3714
|
this.languageService.setForcedLanguage(selectedLanguage);
|
|
3477
3715
|
}
|
|
3478
3716
|
}
|
|
3479
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
3480
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.
|
|
3717
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLanguageToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3718
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.7", type: DevToolbarLanguageToolComponent, isStandalone: true, selector: "ndt-language-tool", ngImport: i0, template: `
|
|
3481
3719
|
<ndt-toolbar-tool title="Languages" icon="translate" [options]="options">
|
|
3482
3720
|
<div class="language-select">
|
|
3483
3721
|
<label for="language-select">Language</label>
|
|
@@ -3492,7 +3730,7 @@ class DevToolbarLanguageToolComponent {
|
|
|
3492
3730
|
</ndt-toolbar-tool>
|
|
3493
3731
|
`, 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"] }] }); }
|
|
3494
3732
|
}
|
|
3495
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
3733
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLanguageToolComponent, decorators: [{
|
|
3496
3734
|
type: Component,
|
|
3497
3735
|
args: [{ selector: 'ndt-language-tool', standalone: true, imports: [DevToolbarToolComponent, DevToolbarSelectComponent], template: `
|
|
3498
3736
|
<ndt-toolbar-tool title="Languages" icon="translate" [options]="options">
|
|
@@ -3510,406 +3748,106 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
3510
3748
|
`, styles: [".language-select{display:flex;flex-direction:row;gap:.5rem;align-items:center;justify-content:space-between}\n"] }]
|
|
3511
3749
|
}] });
|
|
3512
3750
|
|
|
3513
|
-
class
|
|
3751
|
+
class DevToolbarInternalPermissionsService {
|
|
3514
3752
|
constructor() {
|
|
3515
|
-
this.
|
|
3516
|
-
this.
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
|
|
3520
|
-
|
|
3521
|
-
|
|
3522
|
-
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
|
|
3530
|
-
|
|
3531
|
-
|
|
3532
|
-
|
|
3533
|
-
|
|
3534
|
-
|
|
3753
|
+
this.STORAGE_KEY = 'permissions';
|
|
3754
|
+
this.storageService = inject(DevToolsStorageService);
|
|
3755
|
+
this.appPermissions$ = new BehaviorSubject([]);
|
|
3756
|
+
this.forcedStateSubject = new BehaviorSubject({
|
|
3757
|
+
granted: [],
|
|
3758
|
+
denied: [],
|
|
3759
|
+
});
|
|
3760
|
+
this.forcedState$ = this.forcedStateSubject.asObservable();
|
|
3761
|
+
this.permissions$ = combineLatest([
|
|
3762
|
+
this.appPermissions$,
|
|
3763
|
+
this.forcedState$,
|
|
3764
|
+
]).pipe(map(([appPermissions, { granted, denied }]) => {
|
|
3765
|
+
return appPermissions.map((permission) => {
|
|
3766
|
+
const isForced = granted.includes(permission.id) || denied.includes(permission.id);
|
|
3767
|
+
return {
|
|
3768
|
+
...permission,
|
|
3769
|
+
isForced,
|
|
3770
|
+
isGranted: granted.includes(permission.id)
|
|
3771
|
+
? true
|
|
3772
|
+
: denied.includes(permission.id)
|
|
3773
|
+
? false
|
|
3774
|
+
: permission.isGranted,
|
|
3775
|
+
originalValue: isForced ? permission.isGranted : undefined,
|
|
3776
|
+
};
|
|
3777
|
+
});
|
|
3778
|
+
}));
|
|
3779
|
+
this.permissions = toSignal(this.permissions$, { initialValue: [] });
|
|
3780
|
+
this.loadForcedState();
|
|
3535
3781
|
}
|
|
3536
|
-
|
|
3537
|
-
this.
|
|
3782
|
+
setAppPermissions(permissions) {
|
|
3783
|
+
this.appPermissions$.next(permissions);
|
|
3784
|
+
this.validateAndCleanForcedState(permissions);
|
|
3538
3785
|
}
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3786
|
+
setPermission(id, granted) {
|
|
3787
|
+
const { granted: grantedIds, denied: deniedIds } = this.forcedStateSubject.value;
|
|
3788
|
+
const newGranted = grantedIds.filter((permId) => permId !== id);
|
|
3789
|
+
const newDenied = deniedIds.filter((permId) => permId !== id);
|
|
3790
|
+
if (granted) {
|
|
3791
|
+
newGranted.push(id);
|
|
3792
|
+
}
|
|
3793
|
+
else {
|
|
3794
|
+
newDenied.push(id);
|
|
3795
|
+
}
|
|
3796
|
+
const newState = { granted: newGranted, denied: newDenied };
|
|
3797
|
+
this.forcedStateSubject.next(newState);
|
|
3798
|
+
this.storageService.set(this.STORAGE_KEY, newState);
|
|
3543
3799
|
}
|
|
3544
|
-
|
|
3545
|
-
this.
|
|
3546
|
-
|
|
3800
|
+
removePermissionOverride(id) {
|
|
3801
|
+
const { granted, denied } = this.forcedStateSubject.value;
|
|
3802
|
+
const newState = {
|
|
3803
|
+
granted: granted.filter((permId) => permId !== id),
|
|
3804
|
+
denied: denied.filter((permId) => permId !== id),
|
|
3805
|
+
};
|
|
3806
|
+
this.forcedStateSubject.next(newState);
|
|
3807
|
+
this.storageService.set(this.STORAGE_KEY, newState);
|
|
3547
3808
|
}
|
|
3548
|
-
|
|
3549
|
-
this.
|
|
3550
|
-
console.log('Network mocking disabled');
|
|
3809
|
+
getForcedPermissions() {
|
|
3810
|
+
return this.permissions$.pipe(map((permissions) => permissions.filter((permission) => permission.isForced)));
|
|
3551
3811
|
}
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
|
|
3812
|
+
/**
|
|
3813
|
+
* Apply a preset permissions state, replacing the current forced state.
|
|
3814
|
+
* Useful for automated testing or restoring saved configurations.
|
|
3815
|
+
* @param state The preset forced permissions state to apply
|
|
3816
|
+
*/
|
|
3817
|
+
applyPresetPermissions(state) {
|
|
3818
|
+
this.forcedStateSubject.next(state);
|
|
3819
|
+
this.storageService.set(this.STORAGE_KEY, state);
|
|
3555
3820
|
}
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
|
|
3559
|
-
|
|
3560
|
-
|
|
3561
|
-
|
|
3562
|
-
|
|
3563
|
-
|
|
3564
|
-
|
|
3565
|
-
|
|
3566
|
-
class DevToolbarNetworkMockerToolComponent {
|
|
3567
|
-
constructor() {
|
|
3568
|
-
// Injects
|
|
3569
|
-
this.networkMockerService = inject(DevToolbarNetworkMockerService);
|
|
3570
|
-
// Signals
|
|
3571
|
-
this.newMockUrl = signal('');
|
|
3572
|
-
this.newMockMethod = signal('GET');
|
|
3573
|
-
this.newMockStatus = signal('200');
|
|
3574
|
-
this.newMockResponse = signal('');
|
|
3575
|
-
// Computed values
|
|
3576
|
-
this.mockRequests = this.networkMockerService.getMockRequests();
|
|
3577
|
-
this.isMockingEnabled = this.networkMockerService.getIsMockingEnabled();
|
|
3578
|
-
this.hasNoMocks = computed(() => this.mockRequests().length === 0);
|
|
3579
|
-
// Window options
|
|
3580
|
-
this.options = {
|
|
3581
|
-
title: 'Network Mocker',
|
|
3582
|
-
description: 'Intercept and mock HTTP requests for testing and development',
|
|
3583
|
-
isClosable: true,
|
|
3584
|
-
size: 'tall',
|
|
3585
|
-
id: 'ndt-network-mocker',
|
|
3586
|
-
isBeta: true,
|
|
3821
|
+
/**
|
|
3822
|
+
* Get the current forced permissions state.
|
|
3823
|
+
* Returns a deep copy to prevent external mutations.
|
|
3824
|
+
* @returns Current forced permissions state
|
|
3825
|
+
*/
|
|
3826
|
+
getCurrentForcedState() {
|
|
3827
|
+
const currentState = this.forcedStateSubject.value;
|
|
3828
|
+
return {
|
|
3829
|
+
granted: [...currentState.granted],
|
|
3830
|
+
denied: [...currentState.denied],
|
|
3587
3831
|
};
|
|
3588
|
-
// Other properties
|
|
3589
|
-
this.httpMethods = [
|
|
3590
|
-
{ value: 'GET', label: 'GET' },
|
|
3591
|
-
{ value: 'POST', label: 'POST' },
|
|
3592
|
-
{ value: 'PUT', label: 'PUT' },
|
|
3593
|
-
{ value: 'DELETE', label: 'DELETE' },
|
|
3594
|
-
{ value: 'PATCH', label: 'PATCH' },
|
|
3595
|
-
];
|
|
3596
3832
|
}
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3600
|
-
|
|
3601
|
-
|
|
3602
|
-
|
|
3603
|
-
url,
|
|
3604
|
-
method: this.newMockMethod(),
|
|
3605
|
-
status: parseInt(this.newMockStatus()) || 200,
|
|
3606
|
-
response: this.newMockResponse()
|
|
3607
|
-
? JSON.parse(this.newMockResponse())
|
|
3608
|
-
: {},
|
|
3609
|
-
};
|
|
3610
|
-
this.networkMockerService.addMockRequest(config);
|
|
3611
|
-
// Reset form
|
|
3612
|
-
this.newMockUrl.set('');
|
|
3613
|
-
this.newMockMethod.set('GET');
|
|
3614
|
-
this.newMockStatus.set('200');
|
|
3615
|
-
this.newMockResponse.set('');
|
|
3616
|
-
}
|
|
3617
|
-
onToggleMocking() {
|
|
3618
|
-
if (this.isMockingEnabled()) {
|
|
3619
|
-
this.networkMockerService.disableMocking();
|
|
3833
|
+
loadForcedState() {
|
|
3834
|
+
try {
|
|
3835
|
+
const savedState = this.storageService.get(this.STORAGE_KEY);
|
|
3836
|
+
if (savedState && this.isValidForcedState(savedState)) {
|
|
3837
|
+
this.forcedStateSubject.next(savedState);
|
|
3838
|
+
}
|
|
3620
3839
|
}
|
|
3621
|
-
|
|
3622
|
-
|
|
3840
|
+
catch (error) {
|
|
3841
|
+
console.warn('Error loading forced permissions state from localStorage:', error);
|
|
3623
3842
|
}
|
|
3624
3843
|
}
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
|
|
3631
|
-
|
|
3632
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarNetworkMockerToolComponent, isStandalone: true, selector: "ndt-network-mocker-tool", ngImport: i0, template: `
|
|
3633
|
-
<ndt-toolbar-tool [options]="options" title="Network Mocker" icon="network">
|
|
3634
|
-
<div class="container">
|
|
3635
|
-
<div class="header">
|
|
3636
|
-
<h3>Mock Network Requests</h3>
|
|
3637
|
-
<p>Intercept and mock HTTP requests for testing and development.</p>
|
|
3638
|
-
</div>
|
|
3639
|
-
|
|
3640
|
-
<div class="form">
|
|
3641
|
-
<div class="form-row">
|
|
3642
|
-
<ndt-input
|
|
3643
|
-
[(value)]="newMockUrl"
|
|
3644
|
-
placeholder="Enter URL pattern (e.g., /api/users/*)"
|
|
3645
|
-
ariaLabel="Mock URL"
|
|
3646
|
-
/>
|
|
3647
|
-
<ndt-select
|
|
3648
|
-
[(value)]="newMockMethod"
|
|
3649
|
-
[options]="httpMethods"
|
|
3650
|
-
size="small"
|
|
3651
|
-
ariaLabel="HTTP Method"
|
|
3652
|
-
/>
|
|
3653
|
-
</div>
|
|
3654
|
-
|
|
3655
|
-
<div class="form-row">
|
|
3656
|
-
<ndt-input
|
|
3657
|
-
[(value)]="newMockStatus"
|
|
3658
|
-
placeholder="Status code (default: 200)"
|
|
3659
|
-
type="number"
|
|
3660
|
-
ariaLabel="Status Code"
|
|
3661
|
-
/>
|
|
3662
|
-
<ndt-input
|
|
3663
|
-
[(value)]="newMockResponse"
|
|
3664
|
-
placeholder="Response JSON (optional)"
|
|
3665
|
-
ariaLabel="Response JSON"
|
|
3666
|
-
/>
|
|
3667
|
-
</div>
|
|
3668
|
-
|
|
3669
|
-
<div class="actions">
|
|
3670
|
-
<ndt-button label="Add Mock" icon="import" (click)="onAddMock()" />
|
|
3671
|
-
<ndt-button
|
|
3672
|
-
[label]="
|
|
3673
|
-
isMockingEnabled() ? 'Disable Mocking' : 'Enable Mocking'
|
|
3674
|
-
"
|
|
3675
|
-
[icon]="isMockingEnabled() ? 'trash' : 'network'"
|
|
3676
|
-
(click)="onToggleMocking()"
|
|
3677
|
-
/>
|
|
3678
|
-
</div>
|
|
3679
|
-
</div>
|
|
3680
|
-
|
|
3681
|
-
@if (hasNoMocks()) {
|
|
3682
|
-
<div class="empty">
|
|
3683
|
-
<p>No mock requests configured. Add your first mock above.</p>
|
|
3684
|
-
</div>
|
|
3685
|
-
} @else {
|
|
3686
|
-
<div class="mocks-list">
|
|
3687
|
-
<h4>Configured Mocks</h4>
|
|
3688
|
-
@for (mock of mockRequests(); track mock.id) {
|
|
3689
|
-
<div class="mock-item">
|
|
3690
|
-
<div class="mock-info">
|
|
3691
|
-
<div class="mock-method">{{ mock.method }}</div>
|
|
3692
|
-
<div class="mock-url">{{ mock.url }}</div>
|
|
3693
|
-
<div class="mock-status">{{ mock.status }}</div>
|
|
3694
|
-
</div>
|
|
3695
|
-
<div class="mock-actions">
|
|
3696
|
-
<ndt-button
|
|
3697
|
-
variant="icon"
|
|
3698
|
-
[icon]="mock.isActive ? 'star' : 'moon'"
|
|
3699
|
-
[ariaLabel]="mock.isActive ? 'Disable mock' : 'Enable mock'"
|
|
3700
|
-
(click)="onToggleMock(mock.id)"
|
|
3701
|
-
/>
|
|
3702
|
-
<ndt-button
|
|
3703
|
-
variant="icon"
|
|
3704
|
-
icon="trash"
|
|
3705
|
-
ariaLabel="Remove mock"
|
|
3706
|
-
(click)="onRemoveMock(mock.id)"
|
|
3707
|
-
/>
|
|
3708
|
-
</div>
|
|
3709
|
-
</div>
|
|
3710
|
-
}
|
|
3711
|
-
</div>
|
|
3712
|
-
} @if (isMockingEnabled()) {
|
|
3713
|
-
<div class="status">
|
|
3714
|
-
<p>✅ Network mocking is active</p>
|
|
3715
|
-
</div>
|
|
3716
|
-
}
|
|
3717
|
-
</div>
|
|
3718
|
-
</ndt-toolbar-tool>
|
|
3719
|
-
`, isInline: true, styles: [".container{display:flex;flex-direction:column;height:100%;gap:var(--ndt-spacing-md);padding:var(--ndt-spacing-md)}.header{text-align:center;flex-shrink:0}.header h3{margin:0 0 var(--ndt-spacing-sm) 0;font-size:var(--ndt-font-size-lg);color:var(--ndt-text-primary);font-weight:600}.header p{margin:0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-muted)}.form{display:flex;flex-direction:column;gap:var(--ndt-spacing-sm);flex-shrink:0;padding:var(--ndt-spacing-md);background:var(--ndt-background-secondary);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-medium)}.form-row{display:flex;gap:var(--ndt-spacing-sm)}.form-row ndt-input{flex:1}.form-row ndt-select{flex:0 0 120px}.actions{display:flex;gap:var(--ndt-spacing-sm);margin-top:var(--ndt-spacing-sm)}.empty{display:flex;align-items:center;justify-content:center;flex:1;color:var(--ndt-text-muted);text-align:center;font-size:var(--ndt-font-size-sm)}.mocks-list{display:flex;flex-direction:column;gap:var(--ndt-spacing-sm);flex:1;min-height:0;overflow-y:auto}.mocks-list h4{margin:0 0 var(--ndt-spacing-sm) 0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary);font-weight:600}.mocks-list::-webkit-scrollbar{width:8px}.mocks-list::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}.mocks-list::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px}:is():hover{background:var(--ndt-hover-bg)}.mock-item{display:flex;align-items:center;gap:var(--ndt-spacing-sm);padding:var(--ndt-spacing-sm);background:var(--ndt-background-secondary);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-small)}.mock-item .mock-info{flex:1;display:flex;align-items:center;gap:var(--ndt-spacing-sm)}.mock-item .mock-method{font-weight:600;font-size:var(--ndt-font-size-xs);color:var(--ndt-primary);background:var(--ndt-primary-background);padding:2px 6px;border-radius:var(--ndt-border-radius-small);min-width:40px;text-align:center}.mock-item .mock-url{flex:1;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-primary);font-family:monospace}.mock-item .mock-status{font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted);min-width:30px;text-align:center}.mock-item .mock-actions{display:flex;gap:var(--ndt-spacing-xs)}.status{text-align:center;padding:var(--ndt-spacing-sm) var(--ndt-spacing-md);background:var(--ndt-success-background);border:1px solid var(--ndt-success-border);border-radius:var(--ndt-border-radius-small);color:var(--ndt-success-text);font-size:var(--ndt-font-size-sm);flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: DevToolbarToolComponent, selector: "ndt-toolbar-tool", inputs: ["options", "icon", "title"] }, { kind: "component", type: DevToolbarButtonComponent, selector: "ndt-button", inputs: ["type", "variant", "icon", "label", "ariaLabel", "isActive"] }, { kind: "component", type: DevToolbarInputComponent, selector: "ndt-input", inputs: ["value", "type", "placeholder", "ariaLabel", "inputClass"], outputs: ["valueChange"] }, { kind: "component", type: DevToolbarSelectComponent, selector: "ndt-select", inputs: ["value", "options", "ariaLabel", "label", "size"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3720
|
-
}
|
|
3721
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarNetworkMockerToolComponent, decorators: [{
|
|
3722
|
-
type: Component,
|
|
3723
|
-
args: [{ selector: 'ndt-network-mocker-tool', standalone: true, imports: [
|
|
3724
|
-
FormsModule,
|
|
3725
|
-
DevToolbarToolComponent,
|
|
3726
|
-
DevToolbarButtonComponent,
|
|
3727
|
-
DevToolbarInputComponent,
|
|
3728
|
-
DevToolbarSelectComponent,
|
|
3729
|
-
], template: `
|
|
3730
|
-
<ndt-toolbar-tool [options]="options" title="Network Mocker" icon="network">
|
|
3731
|
-
<div class="container">
|
|
3732
|
-
<div class="header">
|
|
3733
|
-
<h3>Mock Network Requests</h3>
|
|
3734
|
-
<p>Intercept and mock HTTP requests for testing and development.</p>
|
|
3735
|
-
</div>
|
|
3736
|
-
|
|
3737
|
-
<div class="form">
|
|
3738
|
-
<div class="form-row">
|
|
3739
|
-
<ndt-input
|
|
3740
|
-
[(value)]="newMockUrl"
|
|
3741
|
-
placeholder="Enter URL pattern (e.g., /api/users/*)"
|
|
3742
|
-
ariaLabel="Mock URL"
|
|
3743
|
-
/>
|
|
3744
|
-
<ndt-select
|
|
3745
|
-
[(value)]="newMockMethod"
|
|
3746
|
-
[options]="httpMethods"
|
|
3747
|
-
size="small"
|
|
3748
|
-
ariaLabel="HTTP Method"
|
|
3749
|
-
/>
|
|
3750
|
-
</div>
|
|
3751
|
-
|
|
3752
|
-
<div class="form-row">
|
|
3753
|
-
<ndt-input
|
|
3754
|
-
[(value)]="newMockStatus"
|
|
3755
|
-
placeholder="Status code (default: 200)"
|
|
3756
|
-
type="number"
|
|
3757
|
-
ariaLabel="Status Code"
|
|
3758
|
-
/>
|
|
3759
|
-
<ndt-input
|
|
3760
|
-
[(value)]="newMockResponse"
|
|
3761
|
-
placeholder="Response JSON (optional)"
|
|
3762
|
-
ariaLabel="Response JSON"
|
|
3763
|
-
/>
|
|
3764
|
-
</div>
|
|
3765
|
-
|
|
3766
|
-
<div class="actions">
|
|
3767
|
-
<ndt-button label="Add Mock" icon="import" (click)="onAddMock()" />
|
|
3768
|
-
<ndt-button
|
|
3769
|
-
[label]="
|
|
3770
|
-
isMockingEnabled() ? 'Disable Mocking' : 'Enable Mocking'
|
|
3771
|
-
"
|
|
3772
|
-
[icon]="isMockingEnabled() ? 'trash' : 'network'"
|
|
3773
|
-
(click)="onToggleMocking()"
|
|
3774
|
-
/>
|
|
3775
|
-
</div>
|
|
3776
|
-
</div>
|
|
3777
|
-
|
|
3778
|
-
@if (hasNoMocks()) {
|
|
3779
|
-
<div class="empty">
|
|
3780
|
-
<p>No mock requests configured. Add your first mock above.</p>
|
|
3781
|
-
</div>
|
|
3782
|
-
} @else {
|
|
3783
|
-
<div class="mocks-list">
|
|
3784
|
-
<h4>Configured Mocks</h4>
|
|
3785
|
-
@for (mock of mockRequests(); track mock.id) {
|
|
3786
|
-
<div class="mock-item">
|
|
3787
|
-
<div class="mock-info">
|
|
3788
|
-
<div class="mock-method">{{ mock.method }}</div>
|
|
3789
|
-
<div class="mock-url">{{ mock.url }}</div>
|
|
3790
|
-
<div class="mock-status">{{ mock.status }}</div>
|
|
3791
|
-
</div>
|
|
3792
|
-
<div class="mock-actions">
|
|
3793
|
-
<ndt-button
|
|
3794
|
-
variant="icon"
|
|
3795
|
-
[icon]="mock.isActive ? 'star' : 'moon'"
|
|
3796
|
-
[ariaLabel]="mock.isActive ? 'Disable mock' : 'Enable mock'"
|
|
3797
|
-
(click)="onToggleMock(mock.id)"
|
|
3798
|
-
/>
|
|
3799
|
-
<ndt-button
|
|
3800
|
-
variant="icon"
|
|
3801
|
-
icon="trash"
|
|
3802
|
-
ariaLabel="Remove mock"
|
|
3803
|
-
(click)="onRemoveMock(mock.id)"
|
|
3804
|
-
/>
|
|
3805
|
-
</div>
|
|
3806
|
-
</div>
|
|
3807
|
-
}
|
|
3808
|
-
</div>
|
|
3809
|
-
} @if (isMockingEnabled()) {
|
|
3810
|
-
<div class="status">
|
|
3811
|
-
<p>✅ Network mocking is active</p>
|
|
3812
|
-
</div>
|
|
3813
|
-
}
|
|
3814
|
-
</div>
|
|
3815
|
-
</ndt-toolbar-tool>
|
|
3816
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".container{display:flex;flex-direction:column;height:100%;gap:var(--ndt-spacing-md);padding:var(--ndt-spacing-md)}.header{text-align:center;flex-shrink:0}.header h3{margin:0 0 var(--ndt-spacing-sm) 0;font-size:var(--ndt-font-size-lg);color:var(--ndt-text-primary);font-weight:600}.header p{margin:0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-muted)}.form{display:flex;flex-direction:column;gap:var(--ndt-spacing-sm);flex-shrink:0;padding:var(--ndt-spacing-md);background:var(--ndt-background-secondary);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-medium)}.form-row{display:flex;gap:var(--ndt-spacing-sm)}.form-row ndt-input{flex:1}.form-row ndt-select{flex:0 0 120px}.actions{display:flex;gap:var(--ndt-spacing-sm);margin-top:var(--ndt-spacing-sm)}.empty{display:flex;align-items:center;justify-content:center;flex:1;color:var(--ndt-text-muted);text-align:center;font-size:var(--ndt-font-size-sm)}.mocks-list{display:flex;flex-direction:column;gap:var(--ndt-spacing-sm);flex:1;min-height:0;overflow-y:auto}.mocks-list h4{margin:0 0 var(--ndt-spacing-sm) 0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary);font-weight:600}.mocks-list::-webkit-scrollbar{width:8px}.mocks-list::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}.mocks-list::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px}:is():hover{background:var(--ndt-hover-bg)}.mock-item{display:flex;align-items:center;gap:var(--ndt-spacing-sm);padding:var(--ndt-spacing-sm);background:var(--ndt-background-secondary);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-small)}.mock-item .mock-info{flex:1;display:flex;align-items:center;gap:var(--ndt-spacing-sm)}.mock-item .mock-method{font-weight:600;font-size:var(--ndt-font-size-xs);color:var(--ndt-primary);background:var(--ndt-primary-background);padding:2px 6px;border-radius:var(--ndt-border-radius-small);min-width:40px;text-align:center}.mock-item .mock-url{flex:1;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-primary);font-family:monospace}.mock-item .mock-status{font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted);min-width:30px;text-align:center}.mock-item .mock-actions{display:flex;gap:var(--ndt-spacing-xs)}.status{text-align:center;padding:var(--ndt-spacing-sm) var(--ndt-spacing-md);background:var(--ndt-success-background);border:1px solid var(--ndt-success-border);border-radius:var(--ndt-border-radius-small);color:var(--ndt-success-text);font-size:var(--ndt-font-size-sm);flex-shrink:0}\n"] }]
|
|
3817
|
-
}] });
|
|
3818
|
-
|
|
3819
|
-
class DevToolbarInternalPermissionsService {
|
|
3820
|
-
constructor() {
|
|
3821
|
-
this.STORAGE_KEY = 'permissions';
|
|
3822
|
-
this.storageService = inject(DevToolsStorageService);
|
|
3823
|
-
this.appPermissions$ = new BehaviorSubject([]);
|
|
3824
|
-
this.forcedStateSubject = new BehaviorSubject({
|
|
3825
|
-
granted: [],
|
|
3826
|
-
denied: [],
|
|
3827
|
-
});
|
|
3828
|
-
this.forcedState$ = this.forcedStateSubject.asObservable();
|
|
3829
|
-
this.permissions$ = combineLatest([
|
|
3830
|
-
this.appPermissions$,
|
|
3831
|
-
this.forcedState$,
|
|
3832
|
-
]).pipe(map(([appPermissions, { granted, denied }]) => {
|
|
3833
|
-
return appPermissions.map((permission) => ({
|
|
3834
|
-
...permission,
|
|
3835
|
-
isForced: granted.includes(permission.id) || denied.includes(permission.id),
|
|
3836
|
-
isGranted: granted.includes(permission.id)
|
|
3837
|
-
? true
|
|
3838
|
-
: denied.includes(permission.id)
|
|
3839
|
-
? false
|
|
3840
|
-
: permission.isGranted,
|
|
3841
|
-
}));
|
|
3842
|
-
}));
|
|
3843
|
-
this.permissions = toSignal(this.permissions$, { initialValue: [] });
|
|
3844
|
-
this.loadForcedState();
|
|
3845
|
-
}
|
|
3846
|
-
setAppPermissions(permissions) {
|
|
3847
|
-
this.appPermissions$.next(permissions);
|
|
3848
|
-
this.validateAndCleanForcedState(permissions);
|
|
3849
|
-
}
|
|
3850
|
-
setPermission(id, granted) {
|
|
3851
|
-
const { granted: grantedIds, denied: deniedIds } = this.forcedStateSubject.value;
|
|
3852
|
-
const newGranted = grantedIds.filter((permId) => permId !== id);
|
|
3853
|
-
const newDenied = deniedIds.filter((permId) => permId !== id);
|
|
3854
|
-
if (granted) {
|
|
3855
|
-
newGranted.push(id);
|
|
3856
|
-
}
|
|
3857
|
-
else {
|
|
3858
|
-
newDenied.push(id);
|
|
3859
|
-
}
|
|
3860
|
-
const newState = { granted: newGranted, denied: newDenied };
|
|
3861
|
-
this.forcedStateSubject.next(newState);
|
|
3862
|
-
this.storageService.set(this.STORAGE_KEY, newState);
|
|
3863
|
-
}
|
|
3864
|
-
removePermissionOverride(id) {
|
|
3865
|
-
const { granted, denied } = this.forcedStateSubject.value;
|
|
3866
|
-
const newState = {
|
|
3867
|
-
granted: granted.filter((permId) => permId !== id),
|
|
3868
|
-
denied: denied.filter((permId) => permId !== id),
|
|
3869
|
-
};
|
|
3870
|
-
this.forcedStateSubject.next(newState);
|
|
3871
|
-
this.storageService.set(this.STORAGE_KEY, newState);
|
|
3872
|
-
}
|
|
3873
|
-
getForcedPermissions() {
|
|
3874
|
-
return this.permissions$.pipe(map((permissions) => permissions.filter((permission) => permission.isForced)));
|
|
3875
|
-
}
|
|
3876
|
-
/**
|
|
3877
|
-
* Apply a preset permissions state, replacing the current forced state.
|
|
3878
|
-
* Useful for automated testing or restoring saved configurations.
|
|
3879
|
-
* @param state The preset forced permissions state to apply
|
|
3880
|
-
*/
|
|
3881
|
-
applyPresetPermissions(state) {
|
|
3882
|
-
this.forcedStateSubject.next(state);
|
|
3883
|
-
this.storageService.set(this.STORAGE_KEY, state);
|
|
3884
|
-
}
|
|
3885
|
-
/**
|
|
3886
|
-
* Get the current forced permissions state.
|
|
3887
|
-
* Returns a deep copy to prevent external mutations.
|
|
3888
|
-
* @returns Current forced permissions state
|
|
3889
|
-
*/
|
|
3890
|
-
getCurrentForcedState() {
|
|
3891
|
-
const currentState = this.forcedStateSubject.value;
|
|
3892
|
-
return {
|
|
3893
|
-
granted: [...currentState.granted],
|
|
3894
|
-
denied: [...currentState.denied],
|
|
3895
|
-
};
|
|
3896
|
-
}
|
|
3897
|
-
loadForcedState() {
|
|
3898
|
-
try {
|
|
3899
|
-
const savedState = this.storageService.get(this.STORAGE_KEY);
|
|
3900
|
-
if (savedState && this.isValidForcedState(savedState)) {
|
|
3901
|
-
this.forcedStateSubject.next(savedState);
|
|
3902
|
-
}
|
|
3903
|
-
}
|
|
3904
|
-
catch (error) {
|
|
3905
|
-
console.warn('Error loading forced permissions state from localStorage:', error);
|
|
3906
|
-
}
|
|
3907
|
-
}
|
|
3908
|
-
isValidForcedState(state) {
|
|
3909
|
-
return (state &&
|
|
3910
|
-
typeof state === 'object' &&
|
|
3911
|
-
Array.isArray(state.granted) &&
|
|
3912
|
-
Array.isArray(state.denied));
|
|
3844
|
+
isValidForcedState(state) {
|
|
3845
|
+
if (!state || typeof state !== 'object') {
|
|
3846
|
+
return false;
|
|
3847
|
+
}
|
|
3848
|
+
const candidate = state;
|
|
3849
|
+
return (Array.isArray(candidate['granted']) &&
|
|
3850
|
+
Array.isArray(candidate['denied']));
|
|
3913
3851
|
}
|
|
3914
3852
|
validateAndCleanForcedState(permissions) {
|
|
3915
3853
|
const currentState = this.forcedStateSubject.value;
|
|
@@ -3934,10 +3872,10 @@ class DevToolbarInternalPermissionsService {
|
|
|
3934
3872
|
}
|
|
3935
3873
|
}
|
|
3936
3874
|
}
|
|
3937
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
3938
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.
|
|
3875
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3876
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPermissionsService, providedIn: 'root' }); }
|
|
3939
3877
|
}
|
|
3940
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
3878
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPermissionsService, decorators: [{
|
|
3941
3879
|
type: Injectable,
|
|
3942
3880
|
args: [{ providedIn: 'root' }]
|
|
3943
3881
|
}], ctorParameters: () => [] });
|
|
@@ -3952,7 +3890,7 @@ class DevToolbarPermissionsToolComponent {
|
|
|
3952
3890
|
this.permissions = this.permissionsService.permissions;
|
|
3953
3891
|
this.hasNoPermissions = computed(() => this.permissions().length === 0);
|
|
3954
3892
|
this.filteredPermissions = computed(() => {
|
|
3955
|
-
|
|
3893
|
+
const filtered = this.permissions().filter((permission) => {
|
|
3956
3894
|
const searchTerm = this.searchQuery().toLowerCase();
|
|
3957
3895
|
const permissionName = permission.name.toLowerCase();
|
|
3958
3896
|
const permissionDescription = permission.description?.toLowerCase() ?? '';
|
|
@@ -3965,6 +3903,8 @@ class DevToolbarPermissionsToolComponent {
|
|
|
3965
3903
|
(this.activeFilter() === 'denied' && !permission.isGranted);
|
|
3966
3904
|
return matchesSearch && matchesFilter;
|
|
3967
3905
|
});
|
|
3906
|
+
// Sort alphabetically by name
|
|
3907
|
+
return filtered.sort((a, b) => a.name.localeCompare(b.name));
|
|
3968
3908
|
});
|
|
3969
3909
|
this.hasNoFilteredPermissions = computed(() => this.filteredPermissions().length === 0);
|
|
3970
3910
|
// Other properties
|
|
@@ -4017,8 +3957,8 @@ class DevToolbarPermissionsToolComponent {
|
|
|
4017
3957
|
return '';
|
|
4018
3958
|
return permission.isGranted ? 'granted' : 'denied';
|
|
4019
3959
|
}
|
|
4020
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
4021
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.
|
|
3960
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPermissionsToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3961
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarPermissionsToolComponent, isStandalone: true, selector: "ndt-permissions-tool", ngImport: i0, template: `
|
|
4022
3962
|
<ndt-toolbar-tool
|
|
4023
3963
|
[options]="options"
|
|
4024
3964
|
title="Permissions"
|
|
@@ -4044,40 +3984,36 @@ class DevToolbarPermissionsToolComponent {
|
|
|
4044
3984
|
</div>
|
|
4045
3985
|
</div>
|
|
4046
3986
|
|
|
4047
|
-
|
|
4048
|
-
|
|
4049
|
-
|
|
4050
|
-
|
|
4051
|
-
|
|
4052
|
-
|
|
4053
|
-
|
|
4054
|
-
<p>No permissions match your filter</p>
|
|
4055
|
-
</div>
|
|
4056
|
-
} @else {
|
|
4057
|
-
<div class="permission-list">
|
|
3987
|
+
<ndt-list
|
|
3988
|
+
[hasItems]="!hasNoPermissions()"
|
|
3989
|
+
[hasResults]="!hasNoFilteredPermissions()"
|
|
3990
|
+
emptyMessage="No permissions found"
|
|
3991
|
+
[emptyHint]="'Call setAvailableOptions() to configure permissions'"
|
|
3992
|
+
noResultsMessage="No permissions match your filter"
|
|
3993
|
+
>
|
|
4058
3994
|
@for (permission of filteredPermissions(); track permission.id) {
|
|
4059
|
-
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4071
|
-
|
|
4072
|
-
|
|
3995
|
+
<ndt-list-item
|
|
3996
|
+
[title]="permission.name"
|
|
3997
|
+
[description]="permission.description"
|
|
3998
|
+
[isForced]="permission.isForced"
|
|
3999
|
+
[currentValue]="permission.isGranted"
|
|
4000
|
+
[originalValue]="permission.originalValue"
|
|
4001
|
+
>
|
|
4002
|
+
<ndt-select
|
|
4003
|
+
[value]="getPermissionValue(permission)"
|
|
4004
|
+
[options]="permissionValueOptions"
|
|
4005
|
+
[ariaLabel]="'Override state for ' + permission.name"
|
|
4006
|
+
(valueChange)="onPermissionChange(permission.id, $event ?? '')"
|
|
4007
|
+
size="small"
|
|
4008
|
+
/>
|
|
4009
|
+
</ndt-list-item>
|
|
4073
4010
|
}
|
|
4074
|
-
</
|
|
4075
|
-
}
|
|
4011
|
+
</ndt-list>
|
|
4076
4012
|
</div>
|
|
4077
4013
|
</ndt-toolbar-tool>
|
|
4078
|
-
`, 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)
|
|
4014
|
+
`, 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 }); }
|
|
4079
4015
|
}
|
|
4080
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
4016
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPermissionsToolComponent, decorators: [{
|
|
4081
4017
|
type: Component,
|
|
4082
4018
|
args: [{ selector: 'ndt-permissions-tool', standalone: true, imports: [
|
|
4083
4019
|
FormsModule,
|
|
@@ -4085,6 +4021,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
4085
4021
|
DevToolbarInputComponent,
|
|
4086
4022
|
DevToolbarSelectComponent,
|
|
4087
4023
|
DevToolbarIconComponent,
|
|
4024
|
+
DevToolbarListComponent,
|
|
4025
|
+
DevToolbarListItemComponent,
|
|
4088
4026
|
], template: `
|
|
4089
4027
|
<ndt-toolbar-tool
|
|
4090
4028
|
[options]="options"
|
|
@@ -4111,38 +4049,610 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
4111
4049
|
</div>
|
|
4112
4050
|
</div>
|
|
4113
4051
|
|
|
4114
|
-
|
|
4052
|
+
<ndt-list
|
|
4053
|
+
[hasItems]="!hasNoPermissions()"
|
|
4054
|
+
[hasResults]="!hasNoFilteredPermissions()"
|
|
4055
|
+
emptyMessage="No permissions found"
|
|
4056
|
+
[emptyHint]="'Call setAvailableOptions() to configure permissions'"
|
|
4057
|
+
noResultsMessage="No permissions match your filter"
|
|
4058
|
+
>
|
|
4059
|
+
@for (permission of filteredPermissions(); track permission.id) {
|
|
4060
|
+
<ndt-list-item
|
|
4061
|
+
[title]="permission.name"
|
|
4062
|
+
[description]="permission.description"
|
|
4063
|
+
[isForced]="permission.isForced"
|
|
4064
|
+
[currentValue]="permission.isGranted"
|
|
4065
|
+
[originalValue]="permission.originalValue"
|
|
4066
|
+
>
|
|
4067
|
+
<ndt-select
|
|
4068
|
+
[value]="getPermissionValue(permission)"
|
|
4069
|
+
[options]="permissionValueOptions"
|
|
4070
|
+
[ariaLabel]="'Override state for ' + permission.name"
|
|
4071
|
+
(valueChange)="onPermissionChange(permission.id, $event ?? '')"
|
|
4072
|
+
size="small"
|
|
4073
|
+
/>
|
|
4074
|
+
</ndt-list-item>
|
|
4075
|
+
}
|
|
4076
|
+
</ndt-list>
|
|
4077
|
+
</div>
|
|
4078
|
+
</ndt-toolbar-tool>
|
|
4079
|
+
`, 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"] }]
|
|
4080
|
+
}] });
|
|
4081
|
+
|
|
4082
|
+
/**
|
|
4083
|
+
* Internal service for managing presets state.
|
|
4084
|
+
* Handles CRUD operations, captures current toolbar config, and applies presets.
|
|
4085
|
+
*/
|
|
4086
|
+
class DevToolbarInternalPresetsService {
|
|
4087
|
+
constructor() {
|
|
4088
|
+
this.STORAGE_KEY = 'presets';
|
|
4089
|
+
this.storageService = inject(DevToolsStorageService);
|
|
4090
|
+
// Inject all other tool internal services (for reading/writing state)
|
|
4091
|
+
this.featureFlagsService = inject(DevToolbarInternalFeatureFlagService);
|
|
4092
|
+
this.languageService = inject(DevToolbarInternalLanguageService);
|
|
4093
|
+
this.permissionsService = inject(DevToolbarInternalPermissionsService);
|
|
4094
|
+
this.appFeaturesService = inject(DevToolbarInternalAppFeaturesService);
|
|
4095
|
+
this.presetsSubject = new BehaviorSubject([]);
|
|
4096
|
+
this.presets$ = this.presetsSubject.asObservable();
|
|
4097
|
+
this.presets = toSignal(this.presets$, { initialValue: [] });
|
|
4098
|
+
this.loadPresets();
|
|
4099
|
+
}
|
|
4100
|
+
/**
|
|
4101
|
+
* Capture current toolbar state as a new preset
|
|
4102
|
+
*/
|
|
4103
|
+
saveCurrentAsPreset(name, description) {
|
|
4104
|
+
const preset = {
|
|
4105
|
+
id: this.generateId(),
|
|
4106
|
+
name,
|
|
4107
|
+
description,
|
|
4108
|
+
createdAt: new Date().toISOString(),
|
|
4109
|
+
updatedAt: new Date().toISOString(),
|
|
4110
|
+
config: this.captureCurrentConfig(),
|
|
4111
|
+
};
|
|
4112
|
+
const presets = [...this.presetsSubject.value, preset];
|
|
4113
|
+
this.presetsSubject.next(presets);
|
|
4114
|
+
this.storageService.set(this.STORAGE_KEY, presets);
|
|
4115
|
+
return preset;
|
|
4116
|
+
}
|
|
4117
|
+
/**
|
|
4118
|
+
* Apply a preset to all tools (THIS IS THE KEY METHOD)
|
|
4119
|
+
*/
|
|
4120
|
+
async applyPreset(presetId) {
|
|
4121
|
+
const preset = this.presetsSubject.value.find((p) => p.id === presetId);
|
|
4122
|
+
if (!preset)
|
|
4123
|
+
return;
|
|
4124
|
+
// Apply to each tool's internal service
|
|
4125
|
+
this.featureFlagsService.applyPresetFlags(preset.config.featureFlags);
|
|
4126
|
+
await this.languageService.applyPresetLanguage(preset.config.language);
|
|
4127
|
+
this.permissionsService.applyPresetPermissions(preset.config.permissions);
|
|
4128
|
+
this.appFeaturesService.applyForcedState(preset.config.appFeatures);
|
|
4129
|
+
}
|
|
4130
|
+
/**
|
|
4131
|
+
* Update an existing preset with current toolbar state
|
|
4132
|
+
*/
|
|
4133
|
+
updatePreset(presetId) {
|
|
4134
|
+
const presets = this.presetsSubject.value.map((preset) => {
|
|
4135
|
+
if (preset.id === presetId) {
|
|
4136
|
+
return {
|
|
4137
|
+
...preset,
|
|
4138
|
+
updatedAt: new Date().toISOString(),
|
|
4139
|
+
config: this.captureCurrentConfig(),
|
|
4140
|
+
};
|
|
4141
|
+
}
|
|
4142
|
+
return preset;
|
|
4143
|
+
});
|
|
4144
|
+
this.presetsSubject.next(presets);
|
|
4145
|
+
this.storageService.set(this.STORAGE_KEY, presets);
|
|
4146
|
+
}
|
|
4147
|
+
/**
|
|
4148
|
+
* Delete a preset
|
|
4149
|
+
*/
|
|
4150
|
+
deletePreset(presetId) {
|
|
4151
|
+
const presets = this.presetsSubject.value.filter((p) => p.id !== presetId);
|
|
4152
|
+
this.presetsSubject.next(presets);
|
|
4153
|
+
this.storageService.set(this.STORAGE_KEY, presets);
|
|
4154
|
+
}
|
|
4155
|
+
/**
|
|
4156
|
+
* Add a preset (used for import)
|
|
4157
|
+
*/
|
|
4158
|
+
addPreset(preset) {
|
|
4159
|
+
// Generate new ID to avoid conflicts
|
|
4160
|
+
const newPreset = {
|
|
4161
|
+
...preset,
|
|
4162
|
+
id: this.generateId(),
|
|
4163
|
+
createdAt: new Date().toISOString(),
|
|
4164
|
+
updatedAt: new Date().toISOString(),
|
|
4165
|
+
};
|
|
4166
|
+
const presets = [...this.presetsSubject.value, newPreset];
|
|
4167
|
+
this.presetsSubject.next(presets);
|
|
4168
|
+
this.storageService.set(this.STORAGE_KEY, presets);
|
|
4169
|
+
return newPreset;
|
|
4170
|
+
}
|
|
4171
|
+
/**
|
|
4172
|
+
* Get a preset by ID
|
|
4173
|
+
*/
|
|
4174
|
+
getPresetById(presetId) {
|
|
4175
|
+
return this.presetsSubject.value.find((p) => p.id === presetId);
|
|
4176
|
+
}
|
|
4177
|
+
/**
|
|
4178
|
+
* Capture current configuration from all tools
|
|
4179
|
+
*/
|
|
4180
|
+
captureCurrentConfig() {
|
|
4181
|
+
return {
|
|
4182
|
+
featureFlags: this.featureFlagsService.getCurrentForcedState(),
|
|
4183
|
+
language: this.languageService.getCurrentForcedLanguage(),
|
|
4184
|
+
permissions: this.permissionsService.getCurrentForcedState(),
|
|
4185
|
+
appFeatures: this.appFeaturesService.getCurrentForcedState(),
|
|
4186
|
+
};
|
|
4187
|
+
}
|
|
4188
|
+
/**
|
|
4189
|
+
* Load presets from localStorage
|
|
4190
|
+
*/
|
|
4191
|
+
loadPresets() {
|
|
4192
|
+
try {
|
|
4193
|
+
const saved = this.storageService.get(this.STORAGE_KEY);
|
|
4194
|
+
if (saved && Array.isArray(saved)) {
|
|
4195
|
+
this.presetsSubject.next(saved);
|
|
4196
|
+
}
|
|
4197
|
+
}
|
|
4198
|
+
catch (error) {
|
|
4199
|
+
console.error('Failed to load presets from localStorage:', error);
|
|
4200
|
+
}
|
|
4201
|
+
}
|
|
4202
|
+
/**
|
|
4203
|
+
* Generate unique preset ID
|
|
4204
|
+
*/
|
|
4205
|
+
generateId() {
|
|
4206
|
+
return `preset-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
4207
|
+
}
|
|
4208
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPresetsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4209
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPresetsService, providedIn: 'root' }); }
|
|
4210
|
+
}
|
|
4211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarInternalPresetsService, decorators: [{
|
|
4212
|
+
type: Injectable,
|
|
4213
|
+
args: [{ providedIn: 'root' }]
|
|
4214
|
+
}], ctorParameters: () => [] });
|
|
4215
|
+
|
|
4216
|
+
class DevToolbarPresetsToolComponent {
|
|
4217
|
+
constructor() {
|
|
4218
|
+
// Injects
|
|
4219
|
+
this.presetsService = inject(DevToolbarInternalPresetsService);
|
|
4220
|
+
this.featureFlagsService = inject(DevToolbarInternalFeatureFlagService);
|
|
4221
|
+
this.permissionsService = inject(DevToolbarInternalPermissionsService);
|
|
4222
|
+
this.appFeaturesService = inject(DevToolbarInternalAppFeaturesService);
|
|
4223
|
+
this.languageService = inject(DevToolbarInternalLanguageService);
|
|
4224
|
+
// Signals
|
|
4225
|
+
this.viewMode = signal('list');
|
|
4226
|
+
this.searchQuery = signal('');
|
|
4227
|
+
this.presetName = signal('');
|
|
4228
|
+
this.presetDescription = signal('');
|
|
4229
|
+
this.presets = this.presetsService.presets;
|
|
4230
|
+
this.filteredPresets = computed(() => {
|
|
4231
|
+
const query = this.searchQuery().toLowerCase();
|
|
4232
|
+
return this.presets().filter((preset) => preset.name.toLowerCase().includes(query) ||
|
|
4233
|
+
preset.description?.toLowerCase().includes(query));
|
|
4234
|
+
});
|
|
4235
|
+
this.hasNoPresets = computed(() => this.presets().length === 0);
|
|
4236
|
+
this.hasNoFilteredPresets = computed(() => this.filteredPresets().length === 0);
|
|
4237
|
+
// Other properties
|
|
4238
|
+
this.options = {
|
|
4239
|
+
title: 'Presets',
|
|
4240
|
+
description: 'Save and load toolbar configurations',
|
|
4241
|
+
isClosable: true,
|
|
4242
|
+
size: 'tall',
|
|
4243
|
+
id: 'ndt-presets',
|
|
4244
|
+
isBeta: true,
|
|
4245
|
+
};
|
|
4246
|
+
}
|
|
4247
|
+
// Public methods
|
|
4248
|
+
onSearchChange(query) {
|
|
4249
|
+
this.searchQuery.set(query);
|
|
4250
|
+
}
|
|
4251
|
+
onSwitchToCreateMode() {
|
|
4252
|
+
this.viewMode.set('create');
|
|
4253
|
+
this.presetName.set('');
|
|
4254
|
+
this.presetDescription.set('');
|
|
4255
|
+
}
|
|
4256
|
+
onSwitchToListMode() {
|
|
4257
|
+
this.viewMode.set('list');
|
|
4258
|
+
}
|
|
4259
|
+
onSavePreset(event) {
|
|
4260
|
+
event.preventDefault();
|
|
4261
|
+
if (!this.presetName())
|
|
4262
|
+
return;
|
|
4263
|
+
this.presetsService.saveCurrentAsPreset(this.presetName(), this.presetDescription());
|
|
4264
|
+
this.onSwitchToListMode();
|
|
4265
|
+
}
|
|
4266
|
+
onApplyPreset(presetId) {
|
|
4267
|
+
this.presetsService.applyPreset(presetId);
|
|
4268
|
+
}
|
|
4269
|
+
onUpdatePreset(presetId) {
|
|
4270
|
+
this.presetsService.updatePreset(presetId);
|
|
4271
|
+
}
|
|
4272
|
+
onExportPreset(presetId) {
|
|
4273
|
+
const preset = this.presets().find((p) => p.id === presetId);
|
|
4274
|
+
if (!preset)
|
|
4275
|
+
return;
|
|
4276
|
+
const json = JSON.stringify(preset, null, 2);
|
|
4277
|
+
const blob = new Blob([json], { type: 'application/json' });
|
|
4278
|
+
const url = URL.createObjectURL(blob);
|
|
4279
|
+
const link = document.createElement('a');
|
|
4280
|
+
link.href = url;
|
|
4281
|
+
link.download = `preset-${preset.name.toLowerCase().replace(/\s+/g, '-')}.json`;
|
|
4282
|
+
link.click();
|
|
4283
|
+
URL.revokeObjectURL(url);
|
|
4284
|
+
}
|
|
4285
|
+
onDeletePreset(presetId) {
|
|
4286
|
+
if (confirm('Are you sure you want to delete this preset?')) {
|
|
4287
|
+
this.presetsService.deletePreset(presetId);
|
|
4288
|
+
}
|
|
4289
|
+
}
|
|
4290
|
+
// Protected methods
|
|
4291
|
+
getCurrentFlagsCount() {
|
|
4292
|
+
const state = this.featureFlagsService.getCurrentForcedState();
|
|
4293
|
+
return state.enabled.length + state.disabled.length;
|
|
4294
|
+
}
|
|
4295
|
+
getCurrentPermissionsCount() {
|
|
4296
|
+
const state = this.permissionsService.getCurrentForcedState();
|
|
4297
|
+
return state.granted.length + state.denied.length;
|
|
4298
|
+
}
|
|
4299
|
+
getCurrentAppFeaturesCount() {
|
|
4300
|
+
const state = this.appFeaturesService.getCurrentForcedState();
|
|
4301
|
+
return state.enabled.length + state.disabled.length;
|
|
4302
|
+
}
|
|
4303
|
+
getCurrentLanguage() {
|
|
4304
|
+
return this.languageService.getCurrentForcedLanguage() || 'Not Forced';
|
|
4305
|
+
}
|
|
4306
|
+
formatDate(isoString) {
|
|
4307
|
+
return new Date(isoString).toLocaleDateString();
|
|
4308
|
+
}
|
|
4309
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPresetsToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4310
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.7", type: DevToolbarPresetsToolComponent, isStandalone: true, selector: "ndt-presets-tool", ngImport: i0, template: `
|
|
4311
|
+
<ndt-toolbar-tool [options]="options" title="Presets" icon="layout">
|
|
4312
|
+
<div class="container">
|
|
4313
|
+
<!-- Mode Toggle -->
|
|
4314
|
+
@if (!hasNoPresets() || viewMode() === 'create') {
|
|
4315
|
+
<div class="header">
|
|
4316
|
+
@if (viewMode() === 'list') {
|
|
4317
|
+
<ndt-input
|
|
4318
|
+
[value]="searchQuery()"
|
|
4319
|
+
(valueChange)="onSearchChange($event)"
|
|
4320
|
+
placeholder="Search presets..."
|
|
4321
|
+
[ariaLabel]="'Search presets'"
|
|
4322
|
+
/>
|
|
4323
|
+
<ndt-button
|
|
4324
|
+
(click)="onSwitchToCreateMode()"
|
|
4325
|
+
[ariaLabel]="'Create new preset'"
|
|
4326
|
+
>
|
|
4327
|
+
New Preset
|
|
4328
|
+
</ndt-button>
|
|
4329
|
+
} @else {
|
|
4330
|
+
<ndt-button
|
|
4331
|
+
(click)="onSwitchToListMode()"
|
|
4332
|
+
[ariaLabel]="'Back to list'"
|
|
4333
|
+
>
|
|
4334
|
+
← Back to List
|
|
4335
|
+
</ndt-button>
|
|
4336
|
+
}
|
|
4337
|
+
</div>
|
|
4338
|
+
}
|
|
4339
|
+
|
|
4340
|
+
<!-- Create Form -->
|
|
4341
|
+
@if (viewMode() === 'create') {
|
|
4342
|
+
<form (submit)="onSavePreset($event)" class="preset-form">
|
|
4343
|
+
<ndt-input
|
|
4344
|
+
label="Preset Name"
|
|
4345
|
+
[value]="presetName()"
|
|
4346
|
+
(valueChange)="presetName.set($event)"
|
|
4347
|
+
placeholder="e.g., Admin User - Full Access"
|
|
4348
|
+
[ariaLabel]="'Preset name'"
|
|
4349
|
+
/>
|
|
4350
|
+
<ndt-input
|
|
4351
|
+
label="Description (optional)"
|
|
4352
|
+
[value]="presetDescription()"
|
|
4353
|
+
(valueChange)="presetDescription.set($event)"
|
|
4354
|
+
placeholder="Brief description of this preset"
|
|
4355
|
+
[ariaLabel]="'Preset description'"
|
|
4356
|
+
/>
|
|
4357
|
+
|
|
4358
|
+
<!-- Summary of what will be saved -->
|
|
4359
|
+
<div class="preset-summary">
|
|
4360
|
+
<h4>Configuration to Save:</h4>
|
|
4361
|
+
<ul>
|
|
4362
|
+
<li>Feature Flags: {{ getCurrentFlagsCount() }} forced</li>
|
|
4363
|
+
<li>Permissions: {{ getCurrentPermissionsCount() }} forced</li>
|
|
4364
|
+
<li>App Features: {{ getCurrentAppFeaturesCount() }} forced</li>
|
|
4365
|
+
<li>Language: {{ getCurrentLanguage() }}</li>
|
|
4366
|
+
</ul>
|
|
4367
|
+
</div>
|
|
4368
|
+
|
|
4369
|
+
<div class="form-actions">
|
|
4370
|
+
<ndt-button type="submit">Save Preset</ndt-button>
|
|
4371
|
+
</div>
|
|
4372
|
+
</form>
|
|
4373
|
+
}
|
|
4374
|
+
|
|
4375
|
+
<!-- Empty State -->
|
|
4376
|
+
@if (viewMode() === 'list' && hasNoPresets()) {
|
|
4115
4377
|
<div class="empty">
|
|
4116
|
-
<p>No
|
|
4117
|
-
<p class="hint">
|
|
4378
|
+
<p>No presets saved yet</p>
|
|
4379
|
+
<p class="hint">
|
|
4380
|
+
Save the current toolbar configuration as a preset for quick access
|
|
4381
|
+
</p>
|
|
4382
|
+
<ndt-button (click)="onSwitchToCreateMode()">
|
|
4383
|
+
Create Your First Preset
|
|
4384
|
+
</ndt-button>
|
|
4118
4385
|
</div>
|
|
4119
|
-
} @else if (
|
|
4386
|
+
} @else if (viewMode() === 'list' && hasNoFilteredPresets()) {
|
|
4120
4387
|
<div class="empty">
|
|
4121
|
-
<p>No
|
|
4388
|
+
<p>No presets match your search</p>
|
|
4122
4389
|
</div>
|
|
4123
|
-
} @else {
|
|
4124
|
-
|
|
4125
|
-
|
|
4126
|
-
|
|
4127
|
-
|
|
4128
|
-
|
|
4129
|
-
<
|
|
4390
|
+
} @else if (viewMode() === 'list') {
|
|
4391
|
+
<!-- Preset List -->
|
|
4392
|
+
<div class="preset-list">
|
|
4393
|
+
@for (preset of filteredPresets(); track preset.id) {
|
|
4394
|
+
<div class="preset-card">
|
|
4395
|
+
<div class="preset-card__header">
|
|
4396
|
+
<h3>{{ preset.name }}</h3>
|
|
4397
|
+
<div class="preset-card__actions">
|
|
4398
|
+
<button
|
|
4399
|
+
class="icon-button"
|
|
4400
|
+
(click)="onApplyPreset(preset.id)"
|
|
4401
|
+
[attr.aria-label]="'Apply preset ' + preset.name"
|
|
4402
|
+
title="Apply preset"
|
|
4403
|
+
>
|
|
4404
|
+
<ndt-icon name="refresh" />
|
|
4405
|
+
</button>
|
|
4406
|
+
<button
|
|
4407
|
+
class="icon-button"
|
|
4408
|
+
(click)="onUpdatePreset(preset.id)"
|
|
4409
|
+
[attr.aria-label]="'Update preset ' + preset.name"
|
|
4410
|
+
title="Update with current state"
|
|
4411
|
+
>
|
|
4412
|
+
<ndt-icon name="gear" />
|
|
4413
|
+
</button>
|
|
4414
|
+
<button
|
|
4415
|
+
class="icon-button"
|
|
4416
|
+
(click)="onExportPreset(preset.id)"
|
|
4417
|
+
[attr.aria-label]="'Export preset ' + preset.name"
|
|
4418
|
+
title="Export as JSON"
|
|
4419
|
+
>
|
|
4420
|
+
<ndt-icon name="export" />
|
|
4421
|
+
</button>
|
|
4422
|
+
<button
|
|
4423
|
+
class="icon-button"
|
|
4424
|
+
(click)="onDeletePreset(preset.id)"
|
|
4425
|
+
[attr.aria-label]="'Delete preset ' + preset.name"
|
|
4426
|
+
title="Delete preset"
|
|
4427
|
+
>
|
|
4428
|
+
<ndt-icon name="trash" />
|
|
4429
|
+
</button>
|
|
4430
|
+
</div>
|
|
4130
4431
|
</div>
|
|
4432
|
+
@if (preset.description) {
|
|
4433
|
+
<p class="preset-card__description">{{ preset.description }}</p>
|
|
4434
|
+
}
|
|
4435
|
+
<div class="preset-card__meta">
|
|
4436
|
+
<span>Updated: {{ formatDate(preset.updatedAt) }}</span>
|
|
4437
|
+
</div>
|
|
4438
|
+
<!-- Preview of preset config -->
|
|
4439
|
+
<div class="preset-card__preview">
|
|
4440
|
+
@if (preset.config.featureFlags.enabled.length > 0 ||
|
|
4441
|
+
preset.config.featureFlags.disabled.length > 0) {
|
|
4442
|
+
<span class="badge">
|
|
4443
|
+
{{
|
|
4444
|
+
preset.config.featureFlags.enabled.length +
|
|
4445
|
+
preset.config.featureFlags.disabled.length
|
|
4446
|
+
}}
|
|
4447
|
+
flags
|
|
4448
|
+
</span>
|
|
4449
|
+
} @if (preset.config.permissions.granted.length > 0 ||
|
|
4450
|
+
preset.config.permissions.denied.length > 0) {
|
|
4451
|
+
<span class="badge">
|
|
4452
|
+
{{
|
|
4453
|
+
preset.config.permissions.granted.length +
|
|
4454
|
+
preset.config.permissions.denied.length
|
|
4455
|
+
}}
|
|
4456
|
+
perms
|
|
4457
|
+
</span>
|
|
4458
|
+
} @if (preset.config.appFeatures.enabled.length > 0 ||
|
|
4459
|
+
preset.config.appFeatures.disabled.length > 0) {
|
|
4460
|
+
<span class="badge">
|
|
4461
|
+
{{
|
|
4462
|
+
preset.config.appFeatures.enabled.length +
|
|
4463
|
+
preset.config.appFeatures.disabled.length
|
|
4464
|
+
}}
|
|
4465
|
+
features
|
|
4466
|
+
</span>
|
|
4467
|
+
} @if (preset.config.language) {
|
|
4468
|
+
<span class="badge">{{ preset.config.language }}</span>
|
|
4469
|
+
}
|
|
4470
|
+
</div>
|
|
4471
|
+
</div>
|
|
4472
|
+
}
|
|
4473
|
+
</div>
|
|
4474
|
+
}
|
|
4475
|
+
</div>
|
|
4476
|
+
</ndt-toolbar-tool>
|
|
4477
|
+
`, 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);h4{margin:0 0 var(--ndt-spacing-sm) 0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-primary)}ul{margin:0;padding-left:var(--ndt-spacing-md);color:var(--ndt-text-secondary);font-size:var(--ndt-font-size-sm);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 }); }
|
|
4478
|
+
}
|
|
4479
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPresetsToolComponent, decorators: [{
|
|
4480
|
+
type: Component,
|
|
4481
|
+
args: [{ selector: 'ndt-presets-tool', standalone: true, imports: [
|
|
4482
|
+
FormsModule,
|
|
4483
|
+
DevToolbarToolComponent,
|
|
4484
|
+
DevToolbarInputComponent,
|
|
4485
|
+
DevToolbarButtonComponent,
|
|
4486
|
+
DevToolbarIconComponent,
|
|
4487
|
+
DevToolbarWindowComponent,
|
|
4488
|
+
], template: `
|
|
4489
|
+
<ndt-toolbar-tool [options]="options" title="Presets" icon="layout">
|
|
4490
|
+
<div class="container">
|
|
4491
|
+
<!-- Mode Toggle -->
|
|
4492
|
+
@if (!hasNoPresets() || viewMode() === 'create') {
|
|
4493
|
+
<div class="header">
|
|
4494
|
+
@if (viewMode() === 'list') {
|
|
4495
|
+
<ndt-input
|
|
4496
|
+
[value]="searchQuery()"
|
|
4497
|
+
(valueChange)="onSearchChange($event)"
|
|
4498
|
+
placeholder="Search presets..."
|
|
4499
|
+
[ariaLabel]="'Search presets'"
|
|
4500
|
+
/>
|
|
4501
|
+
<ndt-button
|
|
4502
|
+
(click)="onSwitchToCreateMode()"
|
|
4503
|
+
[ariaLabel]="'Create new preset'"
|
|
4504
|
+
>
|
|
4505
|
+
New Preset
|
|
4506
|
+
</ndt-button>
|
|
4507
|
+
} @else {
|
|
4508
|
+
<ndt-button
|
|
4509
|
+
(click)="onSwitchToListMode()"
|
|
4510
|
+
[ariaLabel]="'Back to list'"
|
|
4511
|
+
>
|
|
4512
|
+
← Back to List
|
|
4513
|
+
</ndt-button>
|
|
4514
|
+
}
|
|
4515
|
+
</div>
|
|
4516
|
+
}
|
|
4131
4517
|
|
|
4132
|
-
|
|
4133
|
-
|
|
4134
|
-
|
|
4135
|
-
|
|
4136
|
-
|
|
4137
|
-
|
|
4138
|
-
|
|
4518
|
+
<!-- Create Form -->
|
|
4519
|
+
@if (viewMode() === 'create') {
|
|
4520
|
+
<form (submit)="onSavePreset($event)" class="preset-form">
|
|
4521
|
+
<ndt-input
|
|
4522
|
+
label="Preset Name"
|
|
4523
|
+
[value]="presetName()"
|
|
4524
|
+
(valueChange)="presetName.set($event)"
|
|
4525
|
+
placeholder="e.g., Admin User - Full Access"
|
|
4526
|
+
[ariaLabel]="'Preset name'"
|
|
4527
|
+
/>
|
|
4528
|
+
<ndt-input
|
|
4529
|
+
label="Description (optional)"
|
|
4530
|
+
[value]="presetDescription()"
|
|
4531
|
+
(valueChange)="presetDescription.set($event)"
|
|
4532
|
+
placeholder="Brief description of this preset"
|
|
4533
|
+
[ariaLabel]="'Preset description'"
|
|
4534
|
+
/>
|
|
4535
|
+
|
|
4536
|
+
<!-- Summary of what will be saved -->
|
|
4537
|
+
<div class="preset-summary">
|
|
4538
|
+
<h4>Configuration to Save:</h4>
|
|
4539
|
+
<ul>
|
|
4540
|
+
<li>Feature Flags: {{ getCurrentFlagsCount() }} forced</li>
|
|
4541
|
+
<li>Permissions: {{ getCurrentPermissionsCount() }} forced</li>
|
|
4542
|
+
<li>App Features: {{ getCurrentAppFeaturesCount() }} forced</li>
|
|
4543
|
+
<li>Language: {{ getCurrentLanguage() }}</li>
|
|
4544
|
+
</ul>
|
|
4545
|
+
</div>
|
|
4546
|
+
|
|
4547
|
+
<div class="form-actions">
|
|
4548
|
+
<ndt-button type="submit">Save Preset</ndt-button>
|
|
4549
|
+
</div>
|
|
4550
|
+
</form>
|
|
4551
|
+
}
|
|
4552
|
+
|
|
4553
|
+
<!-- Empty State -->
|
|
4554
|
+
@if (viewMode() === 'list' && hasNoPresets()) {
|
|
4555
|
+
<div class="empty">
|
|
4556
|
+
<p>No presets saved yet</p>
|
|
4557
|
+
<p class="hint">
|
|
4558
|
+
Save the current toolbar configuration as a preset for quick access
|
|
4559
|
+
</p>
|
|
4560
|
+
<ndt-button (click)="onSwitchToCreateMode()">
|
|
4561
|
+
Create Your First Preset
|
|
4562
|
+
</ndt-button>
|
|
4563
|
+
</div>
|
|
4564
|
+
} @else if (viewMode() === 'list' && hasNoFilteredPresets()) {
|
|
4565
|
+
<div class="empty">
|
|
4566
|
+
<p>No presets match your search</p>
|
|
4567
|
+
</div>
|
|
4568
|
+
} @else if (viewMode() === 'list') {
|
|
4569
|
+
<!-- Preset List -->
|
|
4570
|
+
<div class="preset-list">
|
|
4571
|
+
@for (preset of filteredPresets(); track preset.id) {
|
|
4572
|
+
<div class="preset-card">
|
|
4573
|
+
<div class="preset-card__header">
|
|
4574
|
+
<h3>{{ preset.name }}</h3>
|
|
4575
|
+
<div class="preset-card__actions">
|
|
4576
|
+
<button
|
|
4577
|
+
class="icon-button"
|
|
4578
|
+
(click)="onApplyPreset(preset.id)"
|
|
4579
|
+
[attr.aria-label]="'Apply preset ' + preset.name"
|
|
4580
|
+
title="Apply preset"
|
|
4581
|
+
>
|
|
4582
|
+
<ndt-icon name="refresh" />
|
|
4583
|
+
</button>
|
|
4584
|
+
<button
|
|
4585
|
+
class="icon-button"
|
|
4586
|
+
(click)="onUpdatePreset(preset.id)"
|
|
4587
|
+
[attr.aria-label]="'Update preset ' + preset.name"
|
|
4588
|
+
title="Update with current state"
|
|
4589
|
+
>
|
|
4590
|
+
<ndt-icon name="gear" />
|
|
4591
|
+
</button>
|
|
4592
|
+
<button
|
|
4593
|
+
class="icon-button"
|
|
4594
|
+
(click)="onExportPreset(preset.id)"
|
|
4595
|
+
[attr.aria-label]="'Export preset ' + preset.name"
|
|
4596
|
+
title="Export as JSON"
|
|
4597
|
+
>
|
|
4598
|
+
<ndt-icon name="export" />
|
|
4599
|
+
</button>
|
|
4600
|
+
<button
|
|
4601
|
+
class="icon-button"
|
|
4602
|
+
(click)="onDeletePreset(preset.id)"
|
|
4603
|
+
[attr.aria-label]="'Delete preset ' + preset.name"
|
|
4604
|
+
title="Delete preset"
|
|
4605
|
+
>
|
|
4606
|
+
<ndt-icon name="trash" />
|
|
4607
|
+
</button>
|
|
4608
|
+
</div>
|
|
4609
|
+
</div>
|
|
4610
|
+
@if (preset.description) {
|
|
4611
|
+
<p class="preset-card__description">{{ preset.description }}</p>
|
|
4612
|
+
}
|
|
4613
|
+
<div class="preset-card__meta">
|
|
4614
|
+
<span>Updated: {{ formatDate(preset.updatedAt) }}</span>
|
|
4615
|
+
</div>
|
|
4616
|
+
<!-- Preview of preset config -->
|
|
4617
|
+
<div class="preset-card__preview">
|
|
4618
|
+
@if (preset.config.featureFlags.enabled.length > 0 ||
|
|
4619
|
+
preset.config.featureFlags.disabled.length > 0) {
|
|
4620
|
+
<span class="badge">
|
|
4621
|
+
{{
|
|
4622
|
+
preset.config.featureFlags.enabled.length +
|
|
4623
|
+
preset.config.featureFlags.disabled.length
|
|
4624
|
+
}}
|
|
4625
|
+
flags
|
|
4626
|
+
</span>
|
|
4627
|
+
} @if (preset.config.permissions.granted.length > 0 ||
|
|
4628
|
+
preset.config.permissions.denied.length > 0) {
|
|
4629
|
+
<span class="badge">
|
|
4630
|
+
{{
|
|
4631
|
+
preset.config.permissions.granted.length +
|
|
4632
|
+
preset.config.permissions.denied.length
|
|
4633
|
+
}}
|
|
4634
|
+
perms
|
|
4635
|
+
</span>
|
|
4636
|
+
} @if (preset.config.appFeatures.enabled.length > 0 ||
|
|
4637
|
+
preset.config.appFeatures.disabled.length > 0) {
|
|
4638
|
+
<span class="badge">
|
|
4639
|
+
{{
|
|
4640
|
+
preset.config.appFeatures.enabled.length +
|
|
4641
|
+
preset.config.appFeatures.disabled.length
|
|
4642
|
+
}}
|
|
4643
|
+
features
|
|
4644
|
+
</span>
|
|
4645
|
+
} @if (preset.config.language) {
|
|
4646
|
+
<span class="badge">{{ preset.config.language }}</span>
|
|
4647
|
+
}
|
|
4648
|
+
</div>
|
|
4139
4649
|
</div>
|
|
4140
4650
|
}
|
|
4141
4651
|
</div>
|
|
4142
4652
|
}
|
|
4143
4653
|
</div>
|
|
4144
4654
|
</ndt-toolbar-tool>
|
|
4145
|
-
`, 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)
|
|
4655
|
+
`, 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);h4{margin:0 0 var(--ndt-spacing-sm) 0;font-size:var(--ndt-font-size-sm);color:var(--ndt-text-primary)}ul{margin:0;padding-left:var(--ndt-spacing-md);color:var(--ndt-text-secondary);font-size:var(--ndt-font-size-sm);li{margin-bottom:var(--ndt-spacing-xs)}}}.form-actions{display:flex;justify-content:flex-end;gap:var(--ndt-spacing-sm)}\n"] }]
|
|
4146
4656
|
}] });
|
|
4147
4657
|
|
|
4148
4658
|
class DevToolbarComponent {
|
|
@@ -4150,7 +4660,7 @@ class DevToolbarComponent {
|
|
|
4150
4660
|
this.state = inject(DevToolbarStateService);
|
|
4151
4661
|
this.destroyRef = inject(DestroyRef);
|
|
4152
4662
|
this.settingsService = inject(SettingsService);
|
|
4153
|
-
this.
|
|
4663
|
+
this.config = input({});
|
|
4154
4664
|
this.keyboardShortcut = fromEvent(window, 'keydown')
|
|
4155
4665
|
.pipe(filter((event) => event.ctrlKey && event.shiftKey && event.key === 'D'), takeUntilDestroyed(this.destroyRef))
|
|
4156
4666
|
.subscribe(() => this.toggleDevTools());
|
|
@@ -4171,9 +4681,8 @@ class DevToolbarComponent {
|
|
|
4171
4681
|
toggleDevTools() {
|
|
4172
4682
|
this.state.setVisibility(!this.state.isVisible());
|
|
4173
4683
|
}
|
|
4174
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
4175
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.
|
|
4176
|
-
@if (isDevMode) {
|
|
4684
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4685
|
+
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: `
|
|
4177
4686
|
<div
|
|
4178
4687
|
aria-label="Developer tools"
|
|
4179
4688
|
role="toolbar"
|
|
@@ -4184,15 +4693,24 @@ class DevToolbarComponent {
|
|
|
4184
4693
|
(mouseenter)="onMouseEnter()"
|
|
4185
4694
|
>
|
|
4186
4695
|
<ndt-home-tool />
|
|
4187
|
-
<ndt-language-tool />
|
|
4188
|
-
<ndt-feature-flags-tool />
|
|
4189
|
-
<ndt-app-features-tool />
|
|
4190
|
-
<ndt-permissions-tool />
|
|
4191
|
-
<ndt-network-mocker-tool />
|
|
4192
4696
|
<ng-content />
|
|
4697
|
+
@if (config().showLanguageTool ?? false) {
|
|
4698
|
+
<ndt-language-tool />
|
|
4699
|
+
}
|
|
4700
|
+
@if (config().showPresetsTool ?? false) {
|
|
4701
|
+
<ndt-presets-tool />
|
|
4702
|
+
}
|
|
4703
|
+
@if (config().showAppFeaturesTool ?? false) {
|
|
4704
|
+
<ndt-app-features-tool />
|
|
4705
|
+
}
|
|
4706
|
+
@if (config().showPermissionsTool ?? false) {
|
|
4707
|
+
<ndt-permissions-tool />
|
|
4708
|
+
}
|
|
4709
|
+
@if (config().showFeatureFlagsTool ?? false) {
|
|
4710
|
+
<ndt-feature-flags-tool />
|
|
4711
|
+
}
|
|
4193
4712
|
</div>
|
|
4194
|
-
|
|
4195
|
-
`, isInline: true, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.dev-toolbar{position:fixed;bottom:0;left:50%;z-index:999999;transform:translate(-50%);display:flex;pointer-events:auto;background:var(--ndt-bg-primary);border:1px solid var(--ndt-border-primary);border-radius:9999px;box-shadow:var(--ndt-shadow-toolbar);height:40px;overflow:hidden}.dev-toolbar--active{opacity:1}\n"], dependencies: [{ kind: "component", type: DevToolbarHomeToolComponent, selector: "ndt-home-tool", inputs: ["badge"] }, { kind: "component", type: DevToolbarLanguageToolComponent, selector: "ndt-language-tool" }, { kind: "component", type: DevToolbarFeatureFlagsToolComponent, selector: "ndt-feature-flags-tool" }, { kind: "component", type: DevToolbarAppFeaturesToolComponent, selector: "ndt-app-features-tool" }, { kind: "component", type: DevToolbarNetworkMockerToolComponent, selector: "ndt-network-mocker-tool" }, { kind: "component", type: DevToolbarPermissionsToolComponent, selector: "ndt-permissions-tool" }], animations: [
|
|
4713
|
+
`, 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: [
|
|
4196
4714
|
trigger('toolbarState', [
|
|
4197
4715
|
state('hidden', style({
|
|
4198
4716
|
transform: 'translate(-50%, calc(100% + -1.2rem))',
|
|
@@ -4204,19 +4722,18 @@ class DevToolbarComponent {
|
|
|
4204
4722
|
animate('300ms cubic-bezier(0.4, 0, 0.2, 1)'),
|
|
4205
4723
|
]),
|
|
4206
4724
|
]),
|
|
4207
|
-
] }); }
|
|
4725
|
+
], encapsulation: i0.ViewEncapsulation.ShadowDom }); }
|
|
4208
4726
|
}
|
|
4209
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
4727
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarComponent, decorators: [{
|
|
4210
4728
|
type: Component,
|
|
4211
|
-
args: [{ standalone: true, selector: 'ndt-toolbar', imports: [
|
|
4729
|
+
args: [{ standalone: true, selector: 'ndt-toolbar', encapsulation: ViewEncapsulation.ShadowDom, imports: [
|
|
4212
4730
|
DevToolbarHomeToolComponent,
|
|
4213
4731
|
DevToolbarLanguageToolComponent,
|
|
4214
4732
|
DevToolbarFeatureFlagsToolComponent,
|
|
4215
4733
|
DevToolbarAppFeaturesToolComponent,
|
|
4216
|
-
DevToolbarNetworkMockerToolComponent,
|
|
4217
4734
|
DevToolbarPermissionsToolComponent,
|
|
4735
|
+
DevToolbarPresetsToolComponent,
|
|
4218
4736
|
], template: `
|
|
4219
|
-
@if (isDevMode) {
|
|
4220
4737
|
<div
|
|
4221
4738
|
aria-label="Developer tools"
|
|
4222
4739
|
role="toolbar"
|
|
@@ -4227,14 +4744,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
4227
4744
|
(mouseenter)="onMouseEnter()"
|
|
4228
4745
|
>
|
|
4229
4746
|
<ndt-home-tool />
|
|
4230
|
-
<ndt-language-tool />
|
|
4231
|
-
<ndt-feature-flags-tool />
|
|
4232
|
-
<ndt-app-features-tool />
|
|
4233
|
-
<ndt-permissions-tool />
|
|
4234
|
-
<ndt-network-mocker-tool />
|
|
4235
4747
|
<ng-content />
|
|
4748
|
+
@if (config().showLanguageTool ?? false) {
|
|
4749
|
+
<ndt-language-tool />
|
|
4750
|
+
}
|
|
4751
|
+
@if (config().showPresetsTool ?? false) {
|
|
4752
|
+
<ndt-presets-tool />
|
|
4753
|
+
}
|
|
4754
|
+
@if (config().showAppFeaturesTool ?? false) {
|
|
4755
|
+
<ndt-app-features-tool />
|
|
4756
|
+
}
|
|
4757
|
+
@if (config().showPermissionsTool ?? false) {
|
|
4758
|
+
<ndt-permissions-tool />
|
|
4759
|
+
}
|
|
4760
|
+
@if (config().showFeatureFlagsTool ?? false) {
|
|
4761
|
+
<ndt-feature-flags-tool />
|
|
4762
|
+
}
|
|
4236
4763
|
</div>
|
|
4237
|
-
}
|
|
4238
4764
|
`, animations: [
|
|
4239
4765
|
trigger('toolbarState', [
|
|
4240
4766
|
state('hidden', style({
|
|
@@ -4247,7 +4773,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
4247
4773
|
animate('300ms cubic-bezier(0.4, 0, 0.2, 1)'),
|
|
4248
4774
|
]),
|
|
4249
4775
|
]),
|
|
4250
|
-
], styles: ["
|
|
4776
|
+
], 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"] }]
|
|
4251
4777
|
}] });
|
|
4252
4778
|
|
|
4253
4779
|
class DevToolbarFeatureFlagService {
|
|
@@ -4268,10 +4794,36 @@ class DevToolbarFeatureFlagService {
|
|
|
4268
4794
|
getForcedValues() {
|
|
4269
4795
|
return this.internalService.getForcedFlags();
|
|
4270
4796
|
}
|
|
4271
|
-
|
|
4272
|
-
|
|
4797
|
+
/**
|
|
4798
|
+
* Gets ALL flag values with overrides already applied.
|
|
4799
|
+
* Returns the complete set of flags where overridden values replace base values.
|
|
4800
|
+
* Each flag includes an `isForced` property indicating if it was overridden.
|
|
4801
|
+
*
|
|
4802
|
+
* This method simplifies integration by eliminating the need to manually merge
|
|
4803
|
+
* base flags with overrides using combineLatest.
|
|
4804
|
+
*
|
|
4805
|
+
* @returns Observable of all flags with overrides applied
|
|
4806
|
+
*
|
|
4807
|
+
* @example
|
|
4808
|
+
* ```typescript
|
|
4809
|
+
* // Get a specific flag value with overrides applied
|
|
4810
|
+
* this.featureFlagsService.getValues().pipe(
|
|
4811
|
+
* map(flags => flags.find(f => f.id === 'newFeature')),
|
|
4812
|
+
* map(flag => flag?.isEnabled ?? false)
|
|
4813
|
+
* ).subscribe(isEnabled => {
|
|
4814
|
+
* if (isEnabled) {
|
|
4815
|
+
* // Enable feature
|
|
4816
|
+
* }
|
|
4817
|
+
* });
|
|
4818
|
+
* ```
|
|
4819
|
+
*/
|
|
4820
|
+
getValues() {
|
|
4821
|
+
return this.internalService.flags$;
|
|
4822
|
+
}
|
|
4823
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarFeatureFlagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4824
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarFeatureFlagService, providedIn: 'root' }); }
|
|
4273
4825
|
}
|
|
4274
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
4826
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarFeatureFlagService, decorators: [{
|
|
4275
4827
|
type: Injectable,
|
|
4276
4828
|
args: [{ providedIn: 'root' }]
|
|
4277
4829
|
}] });
|
|
@@ -4294,10 +4846,19 @@ class DevToolbarLanguageService {
|
|
|
4294
4846
|
getForcedValues() {
|
|
4295
4847
|
return this.internalService.getForcedLanguage();
|
|
4296
4848
|
}
|
|
4297
|
-
|
|
4298
|
-
|
|
4849
|
+
/**
|
|
4850
|
+
* Gets the forced language value.
|
|
4851
|
+
* For the language tool, this returns the same as getForcedValues() since
|
|
4852
|
+
* only one language can be selected at a time.
|
|
4853
|
+
* @returns Observable of forced language array (single item or empty)
|
|
4854
|
+
*/
|
|
4855
|
+
getValues() {
|
|
4856
|
+
return this.internalService.getForcedLanguage();
|
|
4857
|
+
}
|
|
4858
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLanguageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4859
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLanguageService, providedIn: 'root' }); }
|
|
4299
4860
|
}
|
|
4300
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
4861
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarLanguageService, decorators: [{
|
|
4301
4862
|
type: Injectable,
|
|
4302
4863
|
args: [{ providedIn: 'root' }]
|
|
4303
4864
|
}] });
|
|
@@ -4403,6 +4964,32 @@ class DevToolbarAppFeaturesService {
|
|
|
4403
4964
|
getForcedValues() {
|
|
4404
4965
|
return this.internalService.getForcedFeatures();
|
|
4405
4966
|
}
|
|
4967
|
+
/**
|
|
4968
|
+
* Gets ALL app feature values with overrides already applied.
|
|
4969
|
+
* Returns the complete set of features where overridden values replace base values.
|
|
4970
|
+
* Each feature includes an `isForced` property indicating if it was overridden.
|
|
4971
|
+
*
|
|
4972
|
+
* This method simplifies integration by eliminating the need to manually merge
|
|
4973
|
+
* base features with overrides using combineLatest.
|
|
4974
|
+
*
|
|
4975
|
+
* @returns Observable of all features with overrides applied
|
|
4976
|
+
*
|
|
4977
|
+
* @example
|
|
4978
|
+
* ```typescript
|
|
4979
|
+
* // Check if a feature is enabled with overrides applied
|
|
4980
|
+
* this.appFeaturesService.getValues().pipe(
|
|
4981
|
+
* map(features => features.find(f => f.id === 'premium-analytics')),
|
|
4982
|
+
* map(feature => feature?.isEnabled ?? false)
|
|
4983
|
+
* ).subscribe(isEnabled => {
|
|
4984
|
+
* if (isEnabled) {
|
|
4985
|
+
* // Enable premium analytics
|
|
4986
|
+
* }
|
|
4987
|
+
* });
|
|
4988
|
+
* ```
|
|
4989
|
+
*/
|
|
4990
|
+
getValues() {
|
|
4991
|
+
return this.internalService.features$;
|
|
4992
|
+
}
|
|
4406
4993
|
/**
|
|
4407
4994
|
* Apply a preset feature configuration (for preset tool integration).
|
|
4408
4995
|
*
|
|
@@ -4456,10 +5043,10 @@ class DevToolbarAppFeaturesService {
|
|
|
4456
5043
|
getCurrentForcedState() {
|
|
4457
5044
|
return this.internalService.getCurrentForcedState();
|
|
4458
5045
|
}
|
|
4459
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
4460
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.
|
|
5046
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarAppFeaturesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5047
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarAppFeaturesService, providedIn: 'root' }); }
|
|
4461
5048
|
}
|
|
4462
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
5049
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarAppFeaturesService, decorators: [{
|
|
4463
5050
|
type: Injectable,
|
|
4464
5051
|
args: [{ providedIn: 'root' }]
|
|
4465
5052
|
}] });
|
|
@@ -4530,6 +5117,32 @@ class DevToolbarPermissionsService {
|
|
|
4530
5117
|
getForcedValues() {
|
|
4531
5118
|
return this.internalService.getForcedPermissions();
|
|
4532
5119
|
}
|
|
5120
|
+
/**
|
|
5121
|
+
* Gets ALL permission values with overrides already applied.
|
|
5122
|
+
* Returns the complete set of permissions where overridden values replace base values.
|
|
5123
|
+
* Each permission includes an `isForced` property indicating if it was overridden.
|
|
5124
|
+
*
|
|
5125
|
+
* This method simplifies integration by eliminating the need to manually merge
|
|
5126
|
+
* base permissions with overrides using combineLatest.
|
|
5127
|
+
*
|
|
5128
|
+
* @returns Observable of all permissions with overrides applied
|
|
5129
|
+
*
|
|
5130
|
+
* @example
|
|
5131
|
+
* ```typescript
|
|
5132
|
+
* // Simple permission check with overrides applied
|
|
5133
|
+
* this.permissionsService.getValues().pipe(
|
|
5134
|
+
* map(permissions => permissions.find(p => p.id === 'can-edit')),
|
|
5135
|
+
* map(permission => permission?.isGranted ?? false)
|
|
5136
|
+
* ).subscribe(canEdit => {
|
|
5137
|
+
* if (canEdit) {
|
|
5138
|
+
* // Enable edit functionality
|
|
5139
|
+
* }
|
|
5140
|
+
* });
|
|
5141
|
+
* ```
|
|
5142
|
+
*/
|
|
5143
|
+
getValues() {
|
|
5144
|
+
return this.internalService.permissions$;
|
|
5145
|
+
}
|
|
4533
5146
|
/**
|
|
4534
5147
|
* Apply a preset permission state. Useful for automated testing scenarios.
|
|
4535
5148
|
*
|
|
@@ -4554,10 +5167,83 @@ class DevToolbarPermissionsService {
|
|
|
4554
5167
|
getCurrentState() {
|
|
4555
5168
|
return this.internalService.getCurrentForcedState();
|
|
4556
5169
|
}
|
|
4557
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.
|
|
4558
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.
|
|
5170
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5171
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPermissionsService, providedIn: 'root' }); }
|
|
5172
|
+
}
|
|
5173
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPermissionsService, decorators: [{
|
|
5174
|
+
type: Injectable,
|
|
5175
|
+
args: [{ providedIn: 'root' }]
|
|
5176
|
+
}] });
|
|
5177
|
+
|
|
5178
|
+
/**
|
|
5179
|
+
* Public service for managing dev toolbar presets.
|
|
5180
|
+
* Allows developers to programmatically save, load, and manage presets.
|
|
5181
|
+
*/
|
|
5182
|
+
class DevToolbarPresetsService {
|
|
5183
|
+
constructor() {
|
|
5184
|
+
this.internalService = inject(DevToolbarInternalPresetsService);
|
|
5185
|
+
}
|
|
5186
|
+
/**
|
|
5187
|
+
* Get all saved presets as an Observable
|
|
5188
|
+
*/
|
|
5189
|
+
getPresets() {
|
|
5190
|
+
return this.internalService.presets$;
|
|
5191
|
+
}
|
|
5192
|
+
/**
|
|
5193
|
+
* Save current toolbar state as a preset
|
|
5194
|
+
* @param name - Name for the preset
|
|
5195
|
+
* @param description - Optional description
|
|
5196
|
+
* @returns The created preset
|
|
5197
|
+
*/
|
|
5198
|
+
savePreset(name, description) {
|
|
5199
|
+
return this.internalService.saveCurrentAsPreset(name, description);
|
|
5200
|
+
}
|
|
5201
|
+
/**
|
|
5202
|
+
* Apply a preset (load its configuration into all tools)
|
|
5203
|
+
* @param presetId - ID of the preset to apply
|
|
5204
|
+
*/
|
|
5205
|
+
async applyPreset(presetId) {
|
|
5206
|
+
return this.internalService.applyPreset(presetId);
|
|
5207
|
+
}
|
|
5208
|
+
/**
|
|
5209
|
+
* Update a preset with current toolbar state
|
|
5210
|
+
* @param presetId - ID of the preset to update
|
|
5211
|
+
*/
|
|
5212
|
+
updatePreset(presetId) {
|
|
5213
|
+
this.internalService.updatePreset(presetId);
|
|
5214
|
+
}
|
|
5215
|
+
/**
|
|
5216
|
+
* Delete a preset
|
|
5217
|
+
* @param presetId - ID of the preset to delete
|
|
5218
|
+
*/
|
|
5219
|
+
deletePreset(presetId) {
|
|
5220
|
+
this.internalService.deletePreset(presetId);
|
|
5221
|
+
}
|
|
5222
|
+
/**
|
|
5223
|
+
* Export a preset as JSON string
|
|
5224
|
+
* @param presetId - ID of the preset to export
|
|
5225
|
+
* @returns JSON string representation of the preset
|
|
5226
|
+
*/
|
|
5227
|
+
exportPreset(presetId) {
|
|
5228
|
+
const preset = this.internalService.getPresetById(presetId);
|
|
5229
|
+
if (!preset)
|
|
5230
|
+
return null;
|
|
5231
|
+
return JSON.stringify(preset, null, 2);
|
|
5232
|
+
}
|
|
5233
|
+
/**
|
|
5234
|
+
* Import a preset from JSON string
|
|
5235
|
+
* @param json - JSON string representation of a preset
|
|
5236
|
+
* @returns The imported preset
|
|
5237
|
+
* @throws Error if JSON is invalid
|
|
5238
|
+
*/
|
|
5239
|
+
importPreset(json) {
|
|
5240
|
+
const preset = JSON.parse(json);
|
|
5241
|
+
return this.internalService.addPreset(preset);
|
|
5242
|
+
}
|
|
5243
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPresetsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5244
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPresetsService, providedIn: 'root' }); }
|
|
4559
5245
|
}
|
|
4560
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.
|
|
5246
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.7", ngImport: i0, type: DevToolbarPresetsService, decorators: [{
|
|
4561
5247
|
type: Injectable,
|
|
4562
5248
|
args: [{ providedIn: 'root' }]
|
|
4563
5249
|
}] });
|
|
@@ -4566,5 +5252,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
4566
5252
|
* Generated bundle index. Do not edit.
|
|
4567
5253
|
*/
|
|
4568
5254
|
|
|
4569
|
-
export { DevToolbarAppFeaturesService, DevToolbarAppFeaturesToolComponent, DevToolbarComponent, DevToolbarFeatureFlagService, DevToolbarIconComponent, DevToolbarLanguageService,
|
|
5255
|
+
export { DevToolbarAppFeaturesService, DevToolbarAppFeaturesToolComponent, DevToolbarComponent, DevToolbarFeatureFlagService, DevToolbarIconComponent, DevToolbarLanguageService, DevToolbarListComponent, DevToolbarListItemComponent, DevToolbarPermissionsService, DevToolbarPermissionsToolComponent, DevToolbarPresetsService, DevToolbarPresetsToolComponent, DevToolbarToolComponent };
|
|
4570
5256
|
//# sourceMappingURL=ngx-dev-toolbar.mjs.map
|