ngx-dev-toolbar 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +108 -0
- 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/toolbar-tool/toolbar-tool.component.d.ts +2 -2
- package/components/window/window.component.d.ts +3 -3
- package/dev-toolbar-state.service.d.ts +4 -1
- package/dev-toolbar.component.d.ts +12 -2
- package/fesm2022/ngx-dev-toolbar.mjs +1224 -527
- package/fesm2022/ngx-dev-toolbar.mjs.map +1 -1
- package/index.d.ts +2 -0
- package/models/dev-tools.interface.d.ts +22 -0
- package/package.json +1 -1
- package/tools/app-features-tool/app-features-tool.component.d.ts +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.models.d.ts +1 -0
- package/tools/feature-flags-tool/feature-flags.service.d.ts +24 -0
- package/tools/home-tool/home-tool.component.d.ts +0 -1
- 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 +2 -2
- package/tools/presets-tool/presets-tool.component.d.ts +24 -0
- package/tools/presets-tool/presets.models.d.ts +9 -0
- package/tools/presets-tool/presets.service.d.ts +71 -1
package/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * from './components/icons/icon.component';
|
|
2
2
|
export * from './components/icons/icon.models';
|
|
3
|
+
export * from './components/list/list.component';
|
|
4
|
+
export * from './components/list-item/list-item.component';
|
|
3
5
|
export * from './components/toolbar-tool/toolbar-tool.component';
|
|
4
6
|
export * from './components/toolbar-tool/toolbar-tool.models';
|
|
5
7
|
export * from './dev-toolbar.component';
|
|
@@ -14,4 +14,26 @@ export interface DevToolsService<OptionType> {
|
|
|
14
14
|
* @returns Observable of forced values array
|
|
15
15
|
*/
|
|
16
16
|
getForcedValues(): Observable<OptionType[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Gets ALL option values with overrides already applied.
|
|
19
|
+
* Returns the complete set of options where overridden values replace base values.
|
|
20
|
+
* Each option includes an `isForced` property indicating if it was overridden.
|
|
21
|
+
*
|
|
22
|
+
* This method simplifies integration by eliminating the need to manually merge
|
|
23
|
+
* base values with overrides using combineLatest.
|
|
24
|
+
*
|
|
25
|
+
* @returns Observable of all values with overrides applied
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* // Simple integration - no manual merging needed
|
|
30
|
+
* this.devToolbarService.getValues().pipe(
|
|
31
|
+
* map(values => values.find(v => v.id === targetId)),
|
|
32
|
+
* map(value => value?.isEnabled ?? defaultValue)
|
|
33
|
+
* ).subscribe(finalValue => {
|
|
34
|
+
* // Use the final value
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
getValues(): Observable<OptionType[]>;
|
|
17
39
|
}
|
package/package.json
CHANGED
|
@@ -39,7 +39,7 @@ export declare class DevToolbarAppFeaturesToolComponent {
|
|
|
39
39
|
onFilterChange(value: string | undefined): void;
|
|
40
40
|
/**
|
|
41
41
|
* Handle feature value change from 3-state dropdown.
|
|
42
|
-
* - 'not-forced'
|
|
42
|
+
* - 'not-forced': Remove forced override
|
|
43
43
|
* - 'on': Force feature to enabled
|
|
44
44
|
* - 'off': Force feature to disabled
|
|
45
45
|
*/
|
|
@@ -42,6 +42,11 @@ export interface DevToolbarAppFeature {
|
|
|
42
42
|
* - false: State reflects the natural application configuration
|
|
43
43
|
*/
|
|
44
44
|
isForced: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Original value before forcing (only present when isForced is true)
|
|
47
|
+
* Used to display what the feature's state was before being overridden
|
|
48
|
+
*/
|
|
49
|
+
originalValue?: boolean;
|
|
45
50
|
}
|
|
46
51
|
/**
|
|
47
52
|
* Filter options for displaying features in the toolbar UI.
|
|
@@ -97,6 +97,30 @@ export declare class DevToolbarAppFeaturesService implements DevToolsService<Dev
|
|
|
97
97
|
* ```
|
|
98
98
|
*/
|
|
99
99
|
getForcedValues(): Observable<DevToolbarAppFeature[]>;
|
|
100
|
+
/**
|
|
101
|
+
* Gets ALL app feature values with overrides already applied.
|
|
102
|
+
* Returns the complete set of features where overridden values replace base values.
|
|
103
|
+
* Each feature includes an `isForced` property indicating if it was overridden.
|
|
104
|
+
*
|
|
105
|
+
* This method simplifies integration by eliminating the need to manually merge
|
|
106
|
+
* base features with overrides using combineLatest.
|
|
107
|
+
*
|
|
108
|
+
* @returns Observable of all features with overrides applied
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* // Check if a feature is enabled with overrides applied
|
|
113
|
+
* this.appFeaturesService.getValues().pipe(
|
|
114
|
+
* map(features => features.find(f => f.id === 'premium-analytics')),
|
|
115
|
+
* map(feature => feature?.isEnabled ?? false)
|
|
116
|
+
* ).subscribe(isEnabled => {
|
|
117
|
+
* if (isEnabled) {
|
|
118
|
+
* // Enable premium analytics
|
|
119
|
+
* }
|
|
120
|
+
* });
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
getValues(): Observable<DevToolbarAppFeature[]>;
|
|
100
124
|
/**
|
|
101
125
|
* Apply a preset feature configuration (for preset tool integration).
|
|
102
126
|
*
|
|
@@ -14,6 +14,30 @@ export declare class DevToolbarFeatureFlagService implements DevToolsService<Dev
|
|
|
14
14
|
* @returns Observable of forced flags array
|
|
15
15
|
*/
|
|
16
16
|
getForcedValues(): Observable<DevToolbarFlag[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Gets ALL flag values with overrides already applied.
|
|
19
|
+
* Returns the complete set of flags where overridden values replace base values.
|
|
20
|
+
* Each flag includes an `isForced` property indicating if it was overridden.
|
|
21
|
+
*
|
|
22
|
+
* This method simplifies integration by eliminating the need to manually merge
|
|
23
|
+
* base flags with overrides using combineLatest.
|
|
24
|
+
*
|
|
25
|
+
* @returns Observable of all flags with overrides applied
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* // Get a specific flag value with overrides applied
|
|
30
|
+
* this.featureFlagsService.getValues().pipe(
|
|
31
|
+
* map(flags => flags.find(f => f.id === 'newFeature')),
|
|
32
|
+
* map(flag => flag?.isEnabled ?? false)
|
|
33
|
+
* ).subscribe(isEnabled => {
|
|
34
|
+
* if (isEnabled) {
|
|
35
|
+
* // Enable feature
|
|
36
|
+
* }
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
getValues(): Observable<DevToolbarFlag[]>;
|
|
17
41
|
static ɵfac: i0.ɵɵFactoryDeclaration<DevToolbarFeatureFlagService, never>;
|
|
18
42
|
static ɵprov: i0.ɵɵInjectableDeclaration<DevToolbarFeatureFlagService>;
|
|
19
43
|
}
|
|
@@ -14,6 +14,13 @@ export declare class DevToolbarLanguageService implements DevToolsService<Langua
|
|
|
14
14
|
* @returns Observable of forced languages array
|
|
15
15
|
*/
|
|
16
16
|
getForcedValues(): Observable<Language[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Gets the forced language value.
|
|
19
|
+
* For the language tool, this returns the same as getForcedValues() since
|
|
20
|
+
* only one language can be selected at a time.
|
|
21
|
+
* @returns Observable of forced language array (single item or empty)
|
|
22
|
+
*/
|
|
23
|
+
getValues(): Observable<Language[]>;
|
|
17
24
|
static ɵfac: i0.ɵɵFactoryDeclaration<DevToolbarLanguageService, never>;
|
|
18
25
|
static ɵprov: i0.ɵɵInjectableDeclaration<DevToolbarLanguageService>;
|
|
19
26
|
}
|
|
@@ -13,6 +13,8 @@ export interface DevToolbarPermission {
|
|
|
13
13
|
isGranted: boolean;
|
|
14
14
|
/** Whether the permission's value has been overridden through the toolbar */
|
|
15
15
|
isForced: boolean;
|
|
16
|
+
/** Original value before forcing (only present when isForced is true) */
|
|
17
|
+
originalValue?: boolean;
|
|
16
18
|
}
|
|
17
19
|
/**
|
|
18
20
|
* Internal state representing forced permission overrides.
|
|
@@ -62,6 +62,30 @@ export declare class DevToolbarPermissionsService implements DevToolsService<Dev
|
|
|
62
62
|
* ```
|
|
63
63
|
*/
|
|
64
64
|
getForcedValues(): Observable<DevToolbarPermission[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Gets ALL permission values with overrides already applied.
|
|
67
|
+
* Returns the complete set of permissions where overridden values replace base values.
|
|
68
|
+
* Each permission includes an `isForced` property indicating if it was overridden.
|
|
69
|
+
*
|
|
70
|
+
* This method simplifies integration by eliminating the need to manually merge
|
|
71
|
+
* base permissions with overrides using combineLatest.
|
|
72
|
+
*
|
|
73
|
+
* @returns Observable of all permissions with overrides applied
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* // Simple permission check with overrides applied
|
|
78
|
+
* this.permissionsService.getValues().pipe(
|
|
79
|
+
* map(permissions => permissions.find(p => p.id === 'can-edit')),
|
|
80
|
+
* map(permission => permission?.isGranted ?? false)
|
|
81
|
+
* ).subscribe(canEdit => {
|
|
82
|
+
* if (canEdit) {
|
|
83
|
+
* // Enable edit functionality
|
|
84
|
+
* }
|
|
85
|
+
* });
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
getValues(): Observable<DevToolbarPermission[]>;
|
|
65
89
|
/**
|
|
66
90
|
* Apply a preset permission state. Useful for automated testing scenarios.
|
|
67
91
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
|
-
import { DevToolbarPreset } from './presets.models';
|
|
2
|
+
import { DevToolbarPreset, PresetCategoryOptions } from './presets.models';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
/**
|
|
5
5
|
* Internal service for managing presets state.
|
|
@@ -19,7 +19,7 @@ export declare class DevToolbarInternalPresetsService {
|
|
|
19
19
|
/**
|
|
20
20
|
* Capture current toolbar state as a new preset
|
|
21
21
|
*/
|
|
22
|
-
saveCurrentAsPreset(name: string, description?: string): DevToolbarPreset;
|
|
22
|
+
saveCurrentAsPreset(name: string, description?: string, categoryOptions?: PresetCategoryOptions): DevToolbarPreset;
|
|
23
23
|
/**
|
|
24
24
|
* Apply a preset to all tools (THIS IS THE KEY METHOD)
|
|
25
25
|
*/
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DevToolbarWindowOptions } from '../../components/toolbar-tool/toolbar-tool.models';
|
|
2
|
+
import { DevToolbarStateService } from '../../dev-toolbar-state.service';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export declare class DevToolbarPresetsToolComponent {
|
|
4
5
|
private readonly presetsService;
|
|
@@ -6,14 +7,29 @@ export declare class DevToolbarPresetsToolComponent {
|
|
|
6
7
|
private readonly permissionsService;
|
|
7
8
|
private readonly appFeaturesService;
|
|
8
9
|
private readonly languageService;
|
|
10
|
+
protected readonly state: DevToolbarStateService;
|
|
9
11
|
protected readonly viewMode: import("@angular/core").WritableSignal<"list" | "create">;
|
|
10
12
|
protected readonly searchQuery: import("@angular/core").WritableSignal<string>;
|
|
11
13
|
protected readonly presetName: import("@angular/core").WritableSignal<string>;
|
|
12
14
|
protected readonly presetDescription: import("@angular/core").WritableSignal<string>;
|
|
15
|
+
protected readonly includeFeatureFlags: import("@angular/core").WritableSignal<boolean>;
|
|
16
|
+
protected readonly includePermissions: import("@angular/core").WritableSignal<boolean>;
|
|
17
|
+
protected readonly includeAppFeatures: import("@angular/core").WritableSignal<boolean>;
|
|
18
|
+
protected readonly includeLanguage: import("@angular/core").WritableSignal<boolean>;
|
|
19
|
+
protected readonly selectedFlagIds: import("@angular/core").WritableSignal<Set<string>>;
|
|
20
|
+
protected readonly selectedPermissionIds: import("@angular/core").WritableSignal<Set<string>>;
|
|
21
|
+
protected readonly selectedFeatureIds: import("@angular/core").WritableSignal<Set<string>>;
|
|
13
22
|
protected readonly presets: import("@angular/core").Signal<import("ngx-dev-toolbar").DevToolbarPreset[]>;
|
|
14
23
|
protected readonly filteredPresets: import("@angular/core").Signal<import("ngx-dev-toolbar").DevToolbarPreset[]>;
|
|
15
24
|
protected readonly hasNoPresets: import("@angular/core").Signal<boolean>;
|
|
16
25
|
protected readonly hasNoFilteredPresets: import("@angular/core").Signal<boolean>;
|
|
26
|
+
protected readonly isFeatureFlagsEnabled: import("@angular/core").Signal<boolean>;
|
|
27
|
+
protected readonly isPermissionsEnabled: import("@angular/core").Signal<boolean>;
|
|
28
|
+
protected readonly isAppFeaturesEnabled: import("@angular/core").Signal<boolean>;
|
|
29
|
+
protected readonly isLanguageEnabled: import("@angular/core").Signal<boolean>;
|
|
30
|
+
protected readonly forcedFlags: import("@angular/core").Signal<import("ngx-dev-toolbar").DevToolbarFlag[]>;
|
|
31
|
+
protected readonly forcedPermissions: import("@angular/core").Signal<import("ngx-dev-toolbar").DevToolbarPermission[]>;
|
|
32
|
+
protected readonly forcedAppFeatures: import("@angular/core").Signal<import("ngx-dev-toolbar").DevToolbarAppFeature[]>;
|
|
17
33
|
protected readonly options: DevToolbarWindowOptions;
|
|
18
34
|
onSearchChange(query: string): void;
|
|
19
35
|
onSwitchToCreateMode(): void;
|
|
@@ -28,6 +44,14 @@ export declare class DevToolbarPresetsToolComponent {
|
|
|
28
44
|
protected getCurrentAppFeaturesCount(): number;
|
|
29
45
|
protected getCurrentLanguage(): string;
|
|
30
46
|
protected formatDate(isoString: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Toggle selection of an individual item
|
|
49
|
+
*/
|
|
50
|
+
protected toggleItemSelection(signal: typeof this.selectedFlagIds, itemId: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Check if an item is selected
|
|
53
|
+
*/
|
|
54
|
+
protected isItemSelected(selectedSet: Set<string>, itemId: string): boolean;
|
|
31
55
|
static ɵfac: i0.ɵɵFactoryDeclaration<DevToolbarPresetsToolComponent, never>;
|
|
32
56
|
static ɵcmp: i0.ɵɵComponentDeclaration<DevToolbarPresetsToolComponent, "ndt-presets-tool", never, {}, {}, never, never, true, never>;
|
|
33
57
|
}
|
|
@@ -22,3 +22,12 @@ export interface DevToolbarPresetConfig {
|
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
export type PresetFilter = 'all' | 'recent' | 'favorites';
|
|
25
|
+
export interface PresetCategoryOptions {
|
|
26
|
+
includeFeatureFlags?: boolean;
|
|
27
|
+
includePermissions?: boolean;
|
|
28
|
+
includeAppFeatures?: boolean;
|
|
29
|
+
includeLanguage?: boolean;
|
|
30
|
+
selectedFlagIds?: string[];
|
|
31
|
+
selectedPermissionIds?: string[];
|
|
32
|
+
selectedFeatureIds?: string[];
|
|
33
|
+
}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
|
-
import { DevToolbarPreset } from './presets.models';
|
|
2
|
+
import { DevToolbarPreset, DevToolbarPresetConfig } from './presets.models';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Partial preset for initialization (without generated fields)
|
|
6
|
+
*/
|
|
7
|
+
export interface InitialPreset {
|
|
8
|
+
name: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
config: DevToolbarPresetConfig;
|
|
11
|
+
}
|
|
4
12
|
/**
|
|
5
13
|
* Public service for managing dev toolbar presets.
|
|
6
14
|
* Allows developers to programmatically save, load, and manage presets.
|
|
@@ -46,6 +54,68 @@ export declare class DevToolbarPresetsService {
|
|
|
46
54
|
* @throws Error if JSON is invalid
|
|
47
55
|
*/
|
|
48
56
|
importPreset(json: string): DevToolbarPreset;
|
|
57
|
+
/**
|
|
58
|
+
* Initialize presets with predefined configurations.
|
|
59
|
+
* Useful for setting up default presets that all developers can use.
|
|
60
|
+
*
|
|
61
|
+
* @param presets - Array of preset configurations to initialize
|
|
62
|
+
* @returns Array of created presets
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const presetsService = inject(DevToolbarPresetsService);
|
|
67
|
+
*
|
|
68
|
+
* presetsService.initializePresets([
|
|
69
|
+
* {
|
|
70
|
+
* name: 'Admin User',
|
|
71
|
+
* description: 'Full access admin configuration',
|
|
72
|
+
* config: {
|
|
73
|
+
* featureFlags: {
|
|
74
|
+
* enabled: ['admin-panel', 'advanced-features'],
|
|
75
|
+
* disabled: []
|
|
76
|
+
* },
|
|
77
|
+
* permissions: {
|
|
78
|
+
* granted: ['admin', 'write', 'delete'],
|
|
79
|
+
* denied: []
|
|
80
|
+
* },
|
|
81
|
+
* appFeatures: {
|
|
82
|
+
* enabled: ['analytics', 'reporting'],
|
|
83
|
+
* disabled: []
|
|
84
|
+
* },
|
|
85
|
+
* language: 'en'
|
|
86
|
+
* }
|
|
87
|
+
* },
|
|
88
|
+
* {
|
|
89
|
+
* name: 'Read-Only User',
|
|
90
|
+
* description: 'Limited access for viewing only',
|
|
91
|
+
* config: {
|
|
92
|
+
* featureFlags: {
|
|
93
|
+
* enabled: [],
|
|
94
|
+
* disabled: ['admin-panel', 'advanced-features']
|
|
95
|
+
* },
|
|
96
|
+
* permissions: {
|
|
97
|
+
* granted: ['read'],
|
|
98
|
+
* denied: ['write', 'delete']
|
|
99
|
+
* },
|
|
100
|
+
* appFeatures: {
|
|
101
|
+
* enabled: [],
|
|
102
|
+
* disabled: ['analytics', 'reporting']
|
|
103
|
+
* },
|
|
104
|
+
* language: null
|
|
105
|
+
* }
|
|
106
|
+
* }
|
|
107
|
+
* ]);
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
initializePresets(presets: InitialPreset[]): DevToolbarPreset[];
|
|
111
|
+
/**
|
|
112
|
+
* Clear all existing presets and set new initial presets.
|
|
113
|
+
* Use this to replace all presets with a fresh set of configurations.
|
|
114
|
+
*
|
|
115
|
+
* @param presets - Array of preset configurations to set as initial
|
|
116
|
+
* @returns Array of created presets
|
|
117
|
+
*/
|
|
118
|
+
setInitialPresets(presets: InitialPreset[]): DevToolbarPreset[];
|
|
49
119
|
static ɵfac: i0.ɵɵFactoryDeclaration<DevToolbarPresetsService, never>;
|
|
50
120
|
static ɵprov: i0.ɵɵInjectableDeclaration<DevToolbarPresetsService>;
|
|
51
121
|
}
|