@zambon-dev/ui 0.0.1-bootstrap.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +177 -0
  2. package/README.md +81 -81
  3. package/fesm2022/zambon-dev-ui-framework.mjs +5995 -3980
  4. package/fesm2022/zambon-dev-ui-framework.mjs.map +1 -1
  5. package/fesm2022/zambon-dev-ui-library.mjs +6003 -4272
  6. package/fesm2022/zambon-dev-ui-library.mjs.map +1 -1
  7. package/fesm2022/zambon-dev-ui-shared.mjs +2758 -1790
  8. package/fesm2022/zambon-dev-ui-shared.mjs.map +1 -1
  9. package/fesm2022/zambon-dev-ui-testing.mjs +73 -77
  10. package/fesm2022/zambon-dev-ui-testing.mjs.map +1 -1
  11. package/fesm2022/zambon-dev-ui.mjs +6 -8
  12. package/i18n/framework/en.json +63 -63
  13. package/i18n/framework/pt.json +63 -63
  14. package/i18n/shared/external-content/en.json +12 -12
  15. package/i18n/shared/external-content/pt.json +12 -12
  16. package/i18n/shared/language-selector/en.json +5 -5
  17. package/i18n/shared/language-selector/pt.json +5 -5
  18. package/i18n/shared/login/en.json +16 -14
  19. package/i18n/shared/login/pt.json +16 -14
  20. package/i18n/shared/operations-history/en.json +5 -5
  21. package/i18n/shared/operations-history/pt.json +5 -5
  22. package/i18n/shared/services-history/en.json +14 -14
  23. package/i18n/shared/services-history/pt.json +14 -14
  24. package/i18n/shared/top-bar/en.json +10 -7
  25. package/i18n/shared/top-bar/pt.json +10 -7
  26. package/package.json +1 -1
  27. package/styles/common.scss +9 -10
  28. package/styles/components/card.scss +19 -13
  29. package/styles/components/dropdown-static.scss +33 -35
  30. package/styles/components/input-group.scss +48 -44
  31. package/styles/components/input.scss +120 -99
  32. package/styles/components/label.scss +6 -3
  33. package/styles/components/row.scss +48 -48
  34. package/styles/mixins/background.scss +31 -31
  35. package/styles/theme.css +307 -75
  36. package/styles/variables.scss +86 -60
  37. package/types/zambon-dev-ui-framework.d.ts +1470 -1029
  38. package/types/zambon-dev-ui-library.d.ts +1689 -1165
  39. package/types/zambon-dev-ui-shared.d.ts +630 -543
  40. package/types/zambon-dev-ui-testing.d.ts +25 -30
  41. package/types/zambon-dev-ui.d.ts +6 -3
  42. package/fesm2022/zambon-dev-ui.mjs.map +0 -1
  43. package/styles/components/button.scss +0 -101
@@ -1,15 +1,13 @@
1
- import * as i0 from '@angular/core';
2
- import { ApplicationRef, TemplateRef, OnDestroy, Signal, InputSignal, ModelSignal, WritableSignal, OnInit, OutputEmitterRef, AfterViewInit, EventEmitter, NgZone, InjectionToken, Provider, EnvironmentProviders } from '@angular/core';
3
- import { RibbonGroupChild, RibbonButtonComponent, IRibbonButtonOption, DataProviderService, FormService, DataGridDataset, ModalComponent, ModalSize, ITabView, MultiSelectResultDataset, MultiEditorDataset, MultiEditorComponent, MultiSelectComponent, IModal, DataGridConfigsProvider, AngularAssetPattern } from '@zambon-dev/ui/library';
4
- export { DateValidators } from '@zambon-dev/ui/library';
5
- import { Observable, ReplaySubject, Subject } from 'rxjs';
6
- import { JwtHelperService } from '@auth0/angular-jwt';
7
- import { Location } from '@angular/common';
8
- import { Router, RouteReuseStrategy, ActivatedRouteSnapshot, DetachedRouteHandle, ActivatedRoute } from '@angular/router';
9
- import { FormGroupDirective, FormGroup, FormBuilder } from '@angular/forms';
10
- import { HttpErrorResponse, HttpBackend } from '@angular/common/http';
11
- import { TranslationResource, MultiTranslateHttpLoader } from 'ngx-translate-multi-http-loader';
12
-
1
+ import * as i0 from "@angular/core";
2
+ import { AfterViewInit, ApplicationRef, EnvironmentProviders, EventEmitter, InjectionToken, InputSignal, ModelSignal, NgZone, OnDestroy, OnInit, OutputEmitterRef, Provider, Signal, TemplateRef, WritableSignal } from "@angular/core";
3
+ import { AngularAssetPattern, ButtonIntent, DataGridConfigsProvider, DataGridDataset, DataProviderService, DateValidators, FormService, IModal, IRibbonButtonOption, ITabView, ModalComponent, ModalSize, MultiEditorComponent, MultiEditorDataset, MultiSelectComponent, MultiSelectResultDataset, RibbonButtonComponent, RibbonGroupChild } from "@zambon-dev/ui/library";
4
+ import { Observable, ReplaySubject, Subject } from "rxjs";
5
+ import { JwtHelperService } from "@auth0/angular-jwt";
6
+ import { Location } from "@angular/common";
7
+ import { ActivatedRoute, ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy, Router } from "@angular/router";
8
+ import { FormBuilder, FormGroup, FormGroupDirective } from "@angular/forms";
9
+ import { HttpBackend, HttpErrorResponse } from "@angular/common/http";
10
+ import { MultiTranslateHttpLoader, TranslationResource } from "ngx-translate-multi-http-loader";
13
11
  /**
14
12
  * Key used in Angular route `data` to identify the framework tab view type.
15
13
  *
@@ -22,1045 +20,1488 @@ import { TranslationResource, MultiTranslateHttpLoader } from 'ngx-translate-mul
22
20
  * }
23
21
  * ```
24
22
  */
25
- declare const FRAMEWORK_VIEW_TYPE = "frameworkViewType";
23
+ export declare const FRAMEWORK_VIEW_TYPE = "frameworkViewType";
26
24
  /**
27
25
  * Values for the {@link FRAMEWORK_VIEW_TYPE} route data key.
28
26
  */
29
- declare enum FrameworkViewType {
30
- /** A details/edit view with data provider and sub-views (breadcrumbs, save, etc.). */
31
- Details = "details",
32
- /** A list/grid view (no data provider, no sub-views). */
33
- List = "list"
34
- }
35
-
36
- interface ITab {
37
- clones: string[];
38
- entityBaseUrl?: string;
39
- isTitleLoading: boolean;
40
- queryParams?: {
41
- [key: string]: string;
42
- };
43
- title?: string;
44
- url: string;
45
- }
46
- declare class Tab implements ITab {
47
- private _title?;
48
- clones: string[];
49
- entityBaseUrl?: string;
50
- isTitleLoading: boolean;
51
- queryParams?: {
52
- [key: string]: string;
53
- };
54
- get title(): string | undefined;
55
- set title(value: string | undefined);
56
- url: string;
57
- constructor(init?: Partial<Tab>);
58
- }
59
-
60
- interface ITabHistory {
61
- title: string;
62
- url: string;
63
- }
64
-
65
- declare class TabService {
66
- private applicationRef;
67
- private location;
68
- private router;
69
- private readonly revision;
70
- private activeTabIndex;
71
- private customReuseStrategy;
72
- private displayTitleIndices;
73
- private openTabs;
74
- get activeTabHistory(): ITab[];
75
- get activeTabs(): ITab[];
76
- get activeTabsDisplayTitles(): (string | undefined)[];
77
- get activeTabsLoadingStates(): boolean[];
78
- private get activeTab();
79
- constructor(applicationRef: ApplicationRef, location: Location, router: Router, routeReuseStrategy: RouteReuseStrategy);
80
- activateTab(tab: ITab): void;
81
- cloneCurrentTab(url: string): void;
82
- closeActiveTab(): void;
83
- closeAllTabs(): void;
84
- closeTab(index: number): void;
85
- isTabActive(tab: ITab): boolean;
86
- isUrlActive(url: string, checkForClones?: boolean): boolean;
87
- isUrlOpen(url: string): boolean;
88
- navigateBackOrCloseActiveTab(): void;
89
- navigateCurrentTab(tab: ITab): void;
90
- navigateCurrentTabBack(tab: ITab): void;
91
- navigateTo(tab: ITab | undefined, clonedUrl?: string): void;
92
- openTab(tab: ITab): void;
93
- replaceCurrentTabSubView(baseUrl: string, tab?: ITab): void;
94
- redirectCurrentTab(url: string, updateLocation?: boolean): void;
95
- setRouteRedirect(fromUrl: string, toUrl: string): void;
96
- updateActiveTabRootTitle(title: string): void;
97
- updateTabTitle(url: string, title: string): void;
98
- /** Announces that the tab state changed, so views reading it re-render. */
99
- private touched;
100
- /**
101
- * The view a tab is showing: the top of its history stack.
102
- *
103
- * Not `activeTabs[index]`, which is the stack's *root* -- the entry the strip takes each tab's
104
- * label from. The two are the same only for a tab nobody has drilled into, which is why
105
- * reaching for the wrong one survives most testing. Undefined for an index with no tab, which
106
- * is what closing the last tab leaves behind.
107
- */
108
- private currentViewOf;
109
- private findTab;
110
- private findTabIndex;
111
- private isTabExists;
112
- private findTabIndexByEntityMatch;
113
- private findTabIndexByCurrentView;
114
- private inheritTitleIfKnown;
115
- private isChildRoute;
116
- private matchTabUrl;
117
- static ɵfac: i0.ɵɵFactoryDeclaration<TabService, never>;
118
- static ɵprov: i0.ɵɵInjectableDeclaration<any>;
119
- }
120
-
121
- declare abstract class AuthService {
122
- protected jwtHelper: JwtHelperService;
123
- protected tabService: TabService;
124
- private actionsCache$;
125
- private isActionsCacheInitialized;
126
- abstract get adminAction(): string;
127
- get isAuthenticated(): boolean;
128
- get isTokenExpired(): boolean;
129
- get token(): string | null;
130
- get userID(): number | undefined;
131
- protected get refreshToken(): string | null;
132
- protected get userInfo(): string | null;
133
- protected get username(): string | null;
134
- constructor(jwtHelper: JwtHelperService, tabService: TabService);
135
- checkActionIsAllowed(actionToCheck: string): Observable<boolean>;
136
- checkActionsAreAllowed(actionsToCheck: string[], checkForAdministrativeMaster?: boolean): Observable<boolean[]>;
137
- signOut(): void;
138
- protected setStorage(key: 'username' | 'token' | 'refreshToken' | 'userInfo', value: string | null, useLocalStorage?: boolean | null): void;
139
- protected resetActionsCache(): void;
140
- abstract getActions(): Observable<string[]>;
141
- }
142
-
143
- declare class CustomReuseStrategy implements RouteReuseStrategy {
144
- clones: {
145
- [key: string]: string;
146
- };
147
- redirects: {
148
- [key: string]: string;
149
- };
150
- tabService?: TabService;
151
- private applicationRef;
152
- private cachedHandles;
153
- private componentIDs;
154
- private nextComponentID;
155
- clearAllHandles(): void;
156
- clearHandle(url: string): void;
157
- retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null;
158
- shouldAttach(route: ActivatedRouteSnapshot): boolean;
159
- shouldDetach(route: ActivatedRouteSnapshot): boolean;
160
- shouldReuseRoute(future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot): boolean;
161
- store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void;
162
- private getCacheKey;
163
- private getComponentID;
164
- private getRouteDepth;
165
- private getUrlFromRoute;
166
- }
167
-
168
- declare class TabViewService {
169
- onUpdateRibbonTemplate: ReplaySubject<TemplateRef<any> | undefined>;
170
- onViewChanged: Subject<string>;
171
- private readonly _activeView;
172
- get activeView(): string;
173
- setActiveView(viewId: string): void;
174
- updateRibbonTemplate(template: TemplateRef<any> | undefined): void;
175
- static ɵfac: i0.ɵɵFactoryDeclaration<TabViewService, never>;
176
- static ɵprov: i0.ɵɵInjectableDeclaration<any>;
177
- }
178
-
179
- declare class BaseButton extends RibbonGroupChild implements OnDestroy {
180
- protected readonly button: Signal<RibbonButtonComponent | undefined>;
181
- readonly allowedActions: InputSignal<string[]>;
182
- readonly disabled: ModelSignal<boolean>;
183
- readonly loading: ModelSignal<boolean>;
184
- readonly options: ModelSignal<IRibbonButtonOption[]>;
185
- readonly iconSize: InputSignal<'small' | 'large'>;
186
- protected authService: AuthService;
187
- protected destroy$: Subject<boolean>;
188
- /**
189
- * Whether a button is allowed is one question asked of one input, so it is one stream rather
190
- * than two fields written from a subscription. It also runs once: the old setter fired the
191
- * check and the constructor fired it again, before any input had arrived.
192
- *
193
- * While the answer is outstanding the button is visible but not yet loaded, which is what
194
- * `RibbonButtonComponent` already does with an option whose access has not come back.
195
- */
196
- private readonly access;
197
- /**
198
- * The options whose access check has already been sent.
199
- *
200
- * Resolving one replaces that option with a copy carrying the answer, so the list below sees a
201
- * new array and the check runs again over it. The copy has an answer and is skipped; this set
202
- * is what stops an option still in flight from being asked a second time.
203
- */
204
- private readonly requestedOptions;
205
- readonly isAccessLoaded: Signal<boolean>;
206
- readonly isVisible: Signal<boolean>;
207
- protected get isButtonDisabled(): boolean;
208
- /**
209
- * Asks for the access behind every option that declares one and has not been asked yet.
210
- *
211
- * An effect rather than a setter: `options` is written by this component's own subclasses as
212
- * well as bound by a host application, and both have to reach the check.
213
- */
214
- private readonly optionsAccess;
215
- ngOnDestroy(): void;
216
- startLoading(): void;
217
- finishLoading(status: 'failure' | 'warning' | 'success'): void;
218
- private checkAccessIsAllowed;
219
- /**
220
- * Replaces one option with a copy carrying its answer, leaving the others as they are.
221
- *
222
- * The list has to be a new array for the ribbon button to see it at all, and the untouched
223
- * options have to keep their identity so the dropdown does not rebuild every row.
224
- */
225
- private setOptionAccess;
226
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseButton, never>;
227
- static ɵcmp: i0.ɵɵComponentDeclaration<BaseButton, "ng-component", never, { "allowedActions": { "alias": "allowedActions"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; }, { "disabled": "disabledChange"; "loading": "loadingChange"; "options": "optionsChange"; }, never, never, true, never>;
228
- }
229
-
230
- declare abstract class BaseFormViewButton extends BaseButton {
231
- protected dataProviderService: DataProviderService<any>;
232
- protected formService: FormService;
233
- protected get isButtonDisabled(): boolean;
234
- constructor();
235
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormViewButton, never>;
236
- static ɵcmp: i0.ɵɵComponentDeclaration<BaseFormViewButton, "ng-component", never, {}, {}, never, never, true, never>;
237
- }
238
-
239
- declare class ButtonConfirmComponent extends BaseButton {
240
- private readonly confirmModal;
241
- readonly action: InputSignal<Observable<any>>;
242
- readonly color: InputSignal<string>;
243
- readonly icon: InputSignal<string>;
244
- readonly label: InputSignal<string>;
245
- readonly modalConfirmButtonColor: InputSignal<string>;
246
- readonly modalConfirmButtonLabel: InputSignal<string>;
247
- readonly modalMessage: InputSignal<string>;
248
- readonly modalMessageIcon: InputSignal<string>;
249
- readonly modalMessageIconColor: InputSignal<string>;
250
- readonly modalTitle: InputSignal<string>;
251
- protected gridDataset: DataGridDataset;
252
- constructor();
253
- protected onButtonClicked(): void;
254
- protected onDelete(): void;
255
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonConfirmComponent, never>;
256
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonConfirmComponent, "framework-button-confirm", never, { "action": { "alias": "action"; "required": true; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "modalConfirmButtonColor": { "alias": "modalConfirmButtonColor"; "required": false; "isSignal": true; }; "modalConfirmButtonLabel": { "alias": "modalConfirmButtonLabel"; "required": false; "isSignal": true; }; "modalMessage": { "alias": "modalMessage"; "required": false; "isSignal": true; }; "modalMessageIcon": { "alias": "modalMessageIcon"; "required": false; "isSignal": true; }; "modalMessageIconColor": { "alias": "modalMessageIconColor"; "required": false; "isSignal": true; }; "modalTitle": { "alias": "modalTitle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
257
- }
258
-
259
- declare class ButtonDeleteComponent extends BaseButton {
260
- private readonly confirmModal;
261
- readonly action: InputSignal<Observable<any>>;
262
- readonly label: InputSignal<string>;
263
- readonly modalConfirmButtonLabel: InputSignal<string>;
264
- readonly modalMessage: InputSignal<string>;
265
- readonly modalTitle: InputSignal<string>;
266
- protected gridDataset: DataGridDataset;
267
- constructor();
268
- protected onButtonClicked(): void;
269
- protected onDelete(): void;
270
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonDeleteComponent, never>;
271
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonDeleteComponent, "framework-button-delete", never, { "action": { "alias": "action"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "modalConfirmButtonLabel": { "alias": "modalConfirmButtonLabel"; "required": false; "isSignal": true; }; "modalMessage": { "alias": "modalMessage"; "required": false; "isSignal": true; }; "modalTitle": { "alias": "modalTitle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
272
- }
273
-
274
- declare abstract class ViewBase implements OnDestroy {
275
- protected destroy$: Subject<boolean>;
276
- protected readonly loadingState: WritableSignal<boolean>;
277
- get loading(): boolean;
278
- set loading(value: boolean);
279
- ngOnDestroy(): void;
280
- static ɵfac: i0.ɵɵFactoryDeclaration<ViewBase, never>;
281
- static ɵcmp: i0.ɵɵComponentDeclaration<ViewBase, "ng-component", never, {}, {}, never, never, true, never>;
282
- }
283
-
284
- declare abstract class ModalBase extends ViewBase {
285
- abstract toggle(): void;
286
- }
287
-
288
- declare class ButtonEditComponent extends BaseButton implements OnInit {
289
- readonly cancelColor: InputSignal<string>;
290
- readonly cancelIcon: InputSignal<string>;
291
- readonly cancelLabel: InputSignal<string>;
292
- readonly editIcon: InputSignal<string>;
293
- readonly editLabel: InputSignal<string>;
294
- readonly modal: InputSignal<ModalBase | undefined>;
295
- protected readonly isButtonCancelVisible: WritableSignal<boolean>;
296
- private dataProviderService;
297
- private formService;
298
- protected get hasDataProviderEntityID(): boolean;
299
- protected get isFormLoading(): boolean;
300
- ngOnInit(): void;
301
- protected onCancelClicked(): void;
302
- protected onEditClicked(): void;
303
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonEditComponent, never>;
304
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonEditComponent, "framework-button-edit", never, { "cancelColor": { "alias": "cancelColor"; "required": false; "isSignal": true; }; "cancelIcon": { "alias": "cancelIcon"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "editIcon": { "alias": "editIcon"; "required": false; "isSignal": true; }; "editLabel": { "alias": "editLabel"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
305
- }
306
-
307
- type ExportFormat = 'xlsx' | 'pdf' | 'csv' | 'xml' | 'mhtml';
308
- declare const MaxExportRows = 50000;
309
- declare class ButtonExportComponent extends BaseButton {
310
- /**
311
- * Index into `options` exported when the main button is clicked, defaulting to Excel.
312
- * `RibbonButtonComponent` treats -1 as "no default" and merely toggles the dropdown, which left
313
- * Export needing two clicks for the common case while Save (which sets 0) needed one. Set -1 to
314
- * restore the dropdown-only behaviour.
315
- */
316
- readonly defaultOption: InputSignal<number>;
317
- readonly fileBaseName: InputSignal<string>;
318
- private dataGridDataset;
319
- private translateService;
320
- protected get isButtonDisabled(): boolean;
321
- protected get tooltip(): string;
322
- private get isExceedingExportLimit();
323
- constructor();
324
- protected onButtonClicked(format?: string): void;
325
- private download;
326
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonExportComponent, never>;
327
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonExportComponent, "framework-button-export", never, { "defaultOption": { "alias": "defaultOption"; "required": false; "isSignal": true; }; "fileBaseName": { "alias": "fileBaseName"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
328
- }
329
-
330
- declare class ButtonFiltersComponent extends BaseButton implements OnInit {
331
- readonly modal: Signal<ModalComponent | undefined>;
332
- readonly modalSize: InputSignal<ModalSize>;
333
- readonly modalTitle: InputSignal<string>;
334
- readonly validateFormFunction: InputSignal<(() => void) | undefined>;
335
- protected gridDataset: DataGridDataset;
336
- protected readonly formGroup: FormGroupDirective;
337
- private readonly filters;
338
- protected get hasFiltersApplied(): boolean;
339
- protected get singleColumn(): boolean;
340
- constructor();
341
- ngOnInit(): void;
342
- protected onFiltersButtonClicked(): void;
343
- protected onFiltersSubmitClicked(): void;
344
- protected onResetButtonClicked(): void;
345
- setFilters(filters: {
346
- [key: string]: any;
347
- }): void;
348
- private finishLoadingIfStarted;
349
- /**
350
- * Drops the controls that only hold a catalog selection's label.
351
- *
352
- * They are half of how `lib-catalog-select` works and are created by it, so a screen never asked
353
- * for them and a backend has no filter behind them. Sent anyway they are dead weight, and worse:
354
- * the day a service does filter by a name, it would receive the formatted label rather than the
355
- * stored value and quietly match nothing.
356
- *
357
- * @param filters The filters as submitted.
358
- * @returns The filters a backend should receive.
359
- */
360
- private withoutDisplayControls;
361
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonFiltersComponent, never>;
362
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonFiltersComponent, "framework-button-filters", never, { "modalSize": { "alias": "modalSize"; "required": false; "isSignal": true; }; "modalTitle": { "alias": "modalTitle"; "required": false; "isSignal": true; }; "validateFormFunction": { "alias": "validateFormFunction"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
363
- }
364
-
365
- declare class ButtonNewComponent extends BaseButton {
366
- readonly endpoint: InputSignal<string>;
367
- readonly parameters: InputSignal<{
368
- [key: string]: string;
369
- } | undefined>;
370
- readonly path: InputSignal<string | undefined>;
371
- private dataProviderService;
372
- private router;
373
- private tabService;
374
- protected get hasDataProvider(): boolean;
375
- protected get hasDataProviderEntityID(): boolean;
376
- protected onButtonClicked(optionId?: string): void;
377
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonNewComponent, never>;
378
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonNewComponent, "framework-button-new", never, { "endpoint": { "alias": "endpoint"; "required": false; "isSignal": true; }; "parameters": { "alias": "parameters"; "required": false; "isSignal": true; }; "path": { "alias": "path"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
379
- }
380
-
381
- declare class ButtonOpenRecordComponent extends BaseButton implements OnInit {
382
- readonly elementPath: InputSignal<string | undefined>;
383
- readonly rootPath: InputSignal<string | undefined>;
384
- private dataGridDataset;
385
- private router;
386
- private readonly selectionCount;
387
- private tabService;
388
- protected get isSelectedOneRecord(): boolean;
389
- ngOnInit(): void;
390
- protected onButtonClicked(): void;
391
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonOpenRecordComponent, never>;
392
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonOpenRecordComponent, "framework-button-open-record", never, { "elementPath": { "alias": "elementPath"; "required": false; "isSignal": true; }; "rootPath": { "alias": "rootPath"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
393
- }
394
-
395
- declare class ButtonRefreshComponent extends BaseButton implements OnInit {
396
- private dataGridDataset;
397
- constructor();
398
- ngOnInit(): void;
399
- protected onButtonClicked(): void;
400
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonRefreshComponent, never>;
401
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonRefreshComponent, "framework-button-refresh", never, {}, {}, never, never, true, never>;
402
- }
403
-
404
- declare class ButtonSaveComponent extends BaseButton {
405
- private readonly errorModal;
406
- readonly defaultOption: InputSignal<number>;
407
- private dataProviderService;
408
- private formService;
409
- private router;
410
- private tabService;
411
- protected get isFormEditMode(): boolean;
412
- protected get isFormLoading(): boolean;
413
- constructor();
414
- protected onButtonClicked(option?: string): void;
415
- finishLoading(status: 'failure' | 'warning' | 'success'): void;
416
- private navigateToNew;
417
- private saveModel;
418
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonSaveComponent, never>;
419
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonSaveComponent, "framework-button-save", never, { "defaultOption": { "alias": "defaultOption"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
420
- }
421
-
422
- declare class ButtonViewsComponent extends BaseButton implements OnInit {
423
- readonly detailsViewRoute: InputSignal<ActivatedRouteSnapshot | null>;
424
- private baseUrlPath?;
425
- private dataProviderService;
426
- private isInternalNavigation;
427
- private router;
428
- private readonly selectedViewId;
429
- private tabService;
430
- private tabViewService;
431
- protected get hasOptions(): boolean;
432
- protected get isNewEntity(): boolean;
433
- protected get selectedView(): IRibbonButtonOption | undefined;
434
- private get defaultViewId();
435
- private get selectedViewUrl();
436
- ngOnInit(): void;
437
- protected onViewClicked(selectedOption: string | undefined): void;
438
- /**
439
- * Marks the chosen view as the current one, which is how the dropdown greys its own entry out.
440
- *
441
- * The options are rebuilt rather than edited in place: the ribbon button takes the list as an
442
- * input, so a field changed inside it is a change nothing can see.
443
- */
444
- private changeSelectedView;
445
- private getActiveOption;
446
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonViewsComponent, never>;
447
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonViewsComponent, "framework-button-views", never, { "detailsViewRoute": { "alias": "detailsViewRoute"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
448
- }
449
-
450
- declare class ButtonComponent extends BaseButton {
451
- readonly color: InputSignal<string>;
452
- readonly icon: InputSignal<string | undefined>;
453
- readonly label: InputSignal<string>;
454
- readonly action: OutputEmitterRef<void>;
455
- protected onButtonClicked(): void;
456
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
457
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "framework-button", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "action": "action"; }, never, never, true, never>;
458
- }
459
-
460
- declare class ButtonNewLegacyComponent extends BaseButton {
461
- readonly endpoint: InputSignal<string>;
462
- readonly path: InputSignal<string>;
463
- readonly tabView: InputSignal<ITabView | undefined>;
464
- private tabService;
465
- clicked(): void;
466
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonNewLegacyComponent, never>;
467
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonNewLegacyComponent, "framework-button-new-legacy", never, { "endpoint": { "alias": "endpoint"; "required": false; "isSignal": true; }; "path": { "alias": "path"; "required": false; "isSignal": true; }; "tabView": { "alias": "tabView"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
468
- }
469
-
470
- declare abstract class ChildList<TEntityModel> extends ViewBase implements OnInit {
471
- protected dataGridDataset: DataGridDataset;
472
- protected dataProvider: DataProviderService<TEntityModel> | null;
473
- protected resultDataset: MultiSelectResultDataset | null;
474
- protected selectionCount: number;
475
- protected get isLoading(): boolean;
476
- constructor();
477
- ngOnInit(): void;
478
- protected selectedRowChanged(): void;
479
- static ɵfac: i0.ɵɵFactoryDeclaration<ChildList<any>, never>;
480
- static ɵcmp: i0.ɵɵComponentDeclaration<ChildList<any>, "ng-component", never, {}, {}, never, never, true, never>;
481
- }
482
-
27
+ export declare enum FrameworkViewType {
28
+ /** A details/edit view with data provider and sub-views (breadcrumbs, save, etc.). */
29
+ Details = "details",
30
+ /** A list/grid view (no data provider, no sub-views). */
31
+ List = "list"
32
+ }
33
+ export interface ITab {
34
+ clones: string[];
35
+ entityBaseUrl?: string;
36
+ isTitleLoading: boolean;
37
+ queryParams?: {
38
+ [key: string]: string;
39
+ };
40
+ title?: string;
41
+ url: string;
42
+ }
43
+ export declare class Tab implements ITab {
44
+ private _title?;
45
+ clones: string[];
46
+ entityBaseUrl?: string;
47
+ isTitleLoading: boolean;
48
+ queryParams?: {
49
+ [key: string]: string;
50
+ };
51
+ get title(): string | undefined;
52
+ set title(value: string | undefined);
53
+ url: string;
54
+ constructor(init?: Partial<Tab>);
55
+ }
56
+ export interface ITabHistory {
57
+ title: string;
58
+ url: string;
59
+ }
60
+ export declare class TabService {
61
+ private applicationRef;
62
+ private location;
63
+ private router;
64
+ private readonly revision;
65
+ private activeTabIndex;
66
+ private customReuseStrategy;
67
+ private displayTitleIndices;
68
+ private openTabs;
69
+ get activeTabHistory(): ITab[];
70
+ get activeTabs(): ITab[];
71
+ get activeTabsDisplayTitles(): (string | undefined)[];
72
+ get activeTabsLoadingStates(): boolean[];
73
+ private get activeTab();
74
+ constructor(applicationRef: ApplicationRef, location: Location, router: Router, routeReuseStrategy: RouteReuseStrategy);
75
+ activateTab(tab: ITab): void;
76
+ cloneCurrentTab(url: string): void;
77
+ closeActiveTab(): void;
78
+ closeAllTabs(): void;
79
+ closeTab(index: number): void;
80
+ isTabActive(tab: ITab): boolean;
81
+ isUrlActive(url: string, checkForClones?: boolean): boolean;
82
+ isUrlOpen(url: string): boolean;
83
+ navigateBackOrCloseActiveTab(): void;
84
+ navigateCurrentTab(tab: ITab): void;
85
+ navigateCurrentTabBack(tab: ITab): void;
86
+ navigateTo(tab: ITab | undefined, clonedUrl?: string): void;
87
+ openTab(tab: ITab): void;
88
+ replaceCurrentTabSubView(baseUrl: string, tab?: ITab): void;
89
+ redirectCurrentTab(url: string, updateLocation?: boolean): void;
90
+ setRouteRedirect(fromUrl: string, toUrl: string): void;
91
+ updateActiveTabRootTitle(title: string): void;
92
+ updateTabTitle(url: string, title: string): void;
93
+ /** Announces that the tab state changed, so views reading it re-render. */
94
+ private touched;
95
+ /**
96
+ * The view a tab is showing: the top of its history stack.
97
+ *
98
+ * Not `activeTabs[index]`, which is the stack's *root* -- the entry the strip takes each tab's
99
+ * label from. The two are the same only for a tab nobody has drilled into, which is why
100
+ * reaching for the wrong one survives most testing. Undefined for an index with no tab, which
101
+ * is what closing the last tab leaves behind.
102
+ */
103
+ private currentViewOf;
104
+ private findTab;
105
+ private findTabIndex;
106
+ private isTabExists;
107
+ private findTabIndexByEntityMatch;
108
+ private findTabIndexByCurrentView;
109
+ private inheritTitleIfKnown;
110
+ private isChildRoute;
111
+ private matchTabUrl;
112
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabService, never>;
113
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
114
+ }
115
+ export declare abstract class AuthService {
116
+ protected jwtHelper: JwtHelperService;
117
+ protected tabService: TabService;
118
+ private actionsCache$;
119
+ private isActionsCacheInitialized;
120
+ abstract get adminAction(): string;
121
+ get isAuthenticated(): boolean;
122
+ get isTokenExpired(): boolean;
123
+ get token(): string | null;
124
+ get userID(): number | undefined;
125
+ protected get refreshToken(): string | null;
126
+ protected get userInfo(): string | null;
127
+ protected get username(): string | null;
128
+ constructor(jwtHelper: JwtHelperService, tabService: TabService);
129
+ checkActionIsAllowed(actionToCheck: string): Observable<boolean>;
130
+ checkActionsAreAllowed(actionsToCheck: string[], checkForAdministrativeMaster?: boolean): Observable<boolean[]>;
131
+ signOut(): void;
132
+ protected setStorage(key: 'username' | 'token' | 'refreshToken' | 'userInfo', value: string | null, useLocalStorage?: boolean | null): void;
133
+ protected resetActionsCache(): void;
134
+ abstract getActions(): Observable<string[]>;
135
+ }
136
+ export declare class CustomReuseStrategy implements RouteReuseStrategy {
137
+ clones: {
138
+ [key: string]: string;
139
+ };
140
+ redirects: {
141
+ [key: string]: string;
142
+ };
143
+ tabService?: TabService;
144
+ private applicationRef;
145
+ private cachedHandles;
146
+ private componentIDs;
147
+ private nextComponentID;
148
+ clearAllHandles(): void;
149
+ clearHandle(url: string): void;
150
+ retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null;
151
+ shouldAttach(route: ActivatedRouteSnapshot): boolean;
152
+ shouldDetach(route: ActivatedRouteSnapshot): boolean;
153
+ shouldReuseRoute(future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot): boolean;
154
+ store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void;
155
+ private getCacheKey;
156
+ private getComponentID;
157
+ private getRouteDepth;
158
+ private getUrlFromRoute;
159
+ }
160
+ export declare class TabViewService {
161
+ onUpdateRibbonTemplate: ReplaySubject<TemplateRef<any> | undefined>;
162
+ onViewChanged: Subject<string>;
163
+ private readonly _activeView;
164
+ get activeView(): string;
165
+ setActiveView(viewId: string): void;
166
+ updateRibbonTemplate(template: TemplateRef<any> | undefined): void;
167
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabViewService, never>;
168
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
169
+ }
170
+ export declare class BaseButton extends RibbonGroupChild implements OnDestroy {
171
+ protected readonly button: Signal<RibbonButtonComponent | undefined>;
172
+ readonly allowedActions: InputSignal<string[]>;
173
+ readonly disabled: ModelSignal<boolean>;
174
+ readonly loading: ModelSignal<boolean>;
175
+ readonly options: ModelSignal<IRibbonButtonOption[]>;
176
+ readonly iconSize: InputSignal<'small' | 'large'>;
177
+ protected authService: AuthService;
178
+ protected destroy$: Subject<boolean>;
179
+ /**
180
+ * Whether a button is allowed is one question asked of one input, so it is one stream rather
181
+ * than two fields written from a subscription. It also runs once: the old setter fired the
182
+ * check and the constructor fired it again, before any input had arrived.
183
+ *
184
+ * While the answer is outstanding the button is visible but not yet loaded, which is what
185
+ * `RibbonButtonComponent` already does with an option whose access has not come back.
186
+ */
187
+ private readonly access;
188
+ /**
189
+ * The options whose access check has already been sent.
190
+ *
191
+ * Resolving one replaces that option with a copy carrying the answer, so the list below sees a
192
+ * new array and the check runs again over it. The copy has an answer and is skipped; this set
193
+ * is what stops an option still in flight from being asked a second time.
194
+ */
195
+ private readonly requestedOptions;
196
+ readonly isAccessLoaded: Signal<boolean>;
197
+ readonly isVisible: Signal<boolean>;
198
+ protected get isButtonDisabled(): boolean;
199
+ /**
200
+ * Asks for the access behind every option that declares one and has not been asked yet.
201
+ *
202
+ * An effect rather than a setter: `options` is written by this component's own subclasses as
203
+ * well as bound by a host application, and both have to reach the check.
204
+ */
205
+ private readonly optionsAccess;
206
+ ngOnDestroy(): void;
207
+ startLoading(): void;
208
+ finishLoading(status: 'failure' | 'warning' | 'success'): void;
209
+ private checkAccessIsAllowed;
210
+ /**
211
+ * Replaces one option with a copy carrying its answer, leaving the others as they are.
212
+ *
213
+ * The list has to be a new array for the ribbon button to see it at all, and the untouched
214
+ * options have to keep their identity so the dropdown does not rebuild every row.
215
+ */
216
+ private setOptionAccess;
217
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseButton, never>;
218
+ static ɵcmp: i0.ɵɵComponentDeclaration<BaseButton, "ng-component", never, {
219
+ "allowedActions": {
220
+ "alias": "allowedActions";
221
+ "required": false;
222
+ "isSignal": true;
223
+ };
224
+ "disabled": {
225
+ "alias": "disabled";
226
+ "required": false;
227
+ "isSignal": true;
228
+ };
229
+ "loading": {
230
+ "alias": "loading";
231
+ "required": false;
232
+ "isSignal": true;
233
+ };
234
+ "options": {
235
+ "alias": "options";
236
+ "required": false;
237
+ "isSignal": true;
238
+ };
239
+ "iconSize": {
240
+ "alias": "iconSize";
241
+ "required": false;
242
+ "isSignal": true;
243
+ };
244
+ }, {
245
+ "disabled": "disabledChange";
246
+ "loading": "loadingChange";
247
+ "options": "optionsChange";
248
+ }, never, never, true, never>;
249
+ }
250
+ export declare abstract class BaseFormViewButton extends BaseButton {
251
+ protected dataProviderService: DataProviderService<any>;
252
+ protected formService: FormService;
253
+ protected get isButtonDisabled(): boolean;
254
+ constructor();
255
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormViewButton, never>;
256
+ static ɵcmp: i0.ɵɵComponentDeclaration<BaseFormViewButton, "ng-component", never, {}, {}, never, never, true, never>;
257
+ }
258
+ export declare class ButtonConfirmComponent extends BaseButton {
259
+ private readonly confirmModal;
260
+ readonly action: InputSignal<Observable<any>>;
261
+ readonly color: InputSignal<string>;
262
+ readonly icon: InputSignal<string>;
263
+ readonly label: InputSignal<string>;
264
+ /**
265
+ * What the confirm button is for. Replaces `modalConfirmButtonColor`, which took a Tailwind
266
+ * palette name -- `green-500` -- and so could neither follow a theme nor say what the button
267
+ * meant.
268
+ */
269
+ readonly modalConfirmButtonIntent: InputSignal<ButtonIntent>;
270
+ readonly modalConfirmButtonLabel: InputSignal<string>;
271
+ readonly modalMessage: InputSignal<string>;
272
+ readonly modalMessageIcon: InputSignal<string>;
273
+ readonly modalMessageIconColor: InputSignal<string>;
274
+ readonly modalTitle: InputSignal<string>;
275
+ protected gridDataset: DataGridDataset;
276
+ constructor();
277
+ protected onButtonClicked(): void;
278
+ protected onDelete(): void;
279
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonConfirmComponent, never>;
280
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonConfirmComponent, "framework-button-confirm", never, {
281
+ "action": {
282
+ "alias": "action";
283
+ "required": true;
284
+ "isSignal": true;
285
+ };
286
+ "color": {
287
+ "alias": "color";
288
+ "required": false;
289
+ "isSignal": true;
290
+ };
291
+ "icon": {
292
+ "alias": "icon";
293
+ "required": false;
294
+ "isSignal": true;
295
+ };
296
+ "label": {
297
+ "alias": "label";
298
+ "required": false;
299
+ "isSignal": true;
300
+ };
301
+ "modalConfirmButtonIntent": {
302
+ "alias": "modalConfirmButtonIntent";
303
+ "required": false;
304
+ "isSignal": true;
305
+ };
306
+ "modalConfirmButtonLabel": {
307
+ "alias": "modalConfirmButtonLabel";
308
+ "required": false;
309
+ "isSignal": true;
310
+ };
311
+ "modalMessage": {
312
+ "alias": "modalMessage";
313
+ "required": false;
314
+ "isSignal": true;
315
+ };
316
+ "modalMessageIcon": {
317
+ "alias": "modalMessageIcon";
318
+ "required": false;
319
+ "isSignal": true;
320
+ };
321
+ "modalMessageIconColor": {
322
+ "alias": "modalMessageIconColor";
323
+ "required": false;
324
+ "isSignal": true;
325
+ };
326
+ "modalTitle": {
327
+ "alias": "modalTitle";
328
+ "required": false;
329
+ "isSignal": true;
330
+ };
331
+ }, {}, never, never, true, never>;
332
+ }
333
+ declare namespace button_delete_component_d_exports {
334
+ export { ButtonDeleteComponent };
335
+ }
336
+ export declare class ButtonDeleteComponent extends BaseButton {
337
+ private readonly confirmModal;
338
+ readonly action: InputSignal<Observable<any>>;
339
+ readonly label: InputSignal<string>;
340
+ readonly modalConfirmButtonLabel: InputSignal<string>;
341
+ readonly modalMessage: InputSignal<string>;
342
+ readonly modalTitle: InputSignal<string>;
343
+ protected gridDataset: DataGridDataset;
344
+ constructor();
345
+ protected onButtonClicked(): void;
346
+ protected onDelete(): void;
347
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonDeleteComponent, never>;
348
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonDeleteComponent, "framework-button-delete", never, {
349
+ "action": {
350
+ "alias": "action";
351
+ "required": true;
352
+ "isSignal": true;
353
+ };
354
+ "label": {
355
+ "alias": "label";
356
+ "required": false;
357
+ "isSignal": true;
358
+ };
359
+ "modalConfirmButtonLabel": {
360
+ "alias": "modalConfirmButtonLabel";
361
+ "required": false;
362
+ "isSignal": true;
363
+ };
364
+ "modalMessage": {
365
+ "alias": "modalMessage";
366
+ "required": false;
367
+ "isSignal": true;
368
+ };
369
+ "modalTitle": {
370
+ "alias": "modalTitle";
371
+ "required": false;
372
+ "isSignal": true;
373
+ };
374
+ }, {}, never, never, true, never>;
375
+ }
376
+ export declare abstract class ViewBase implements OnDestroy {
377
+ protected destroy$: Subject<boolean>;
378
+ protected readonly loadingState: WritableSignal<boolean>;
379
+ get loading(): boolean;
380
+ set loading(value: boolean);
381
+ ngOnDestroy(): void;
382
+ static ɵfac: i0.ɵɵFactoryDeclaration<ViewBase, never>;
383
+ static ɵcmp: i0.ɵɵComponentDeclaration<ViewBase, "ng-component", never, {}, {}, never, never, true, never>;
384
+ }
385
+ export declare abstract class ModalBase extends ViewBase {
386
+ abstract toggle(): void;
387
+ }
388
+ declare namespace button_edit_component_d_exports$1 {
389
+ export { ButtonEditComponent };
390
+ }
391
+ export declare class ButtonEditComponent extends BaseButton implements OnInit {
392
+ readonly cancelColor: InputSignal<string>;
393
+ readonly cancelIcon: InputSignal<string>;
394
+ readonly cancelLabel: InputSignal<string>;
395
+ readonly editIcon: InputSignal<string>;
396
+ readonly editLabel: InputSignal<string>;
397
+ readonly modal: InputSignal<ModalBase | undefined>;
398
+ protected readonly isButtonCancelVisible: WritableSignal<boolean>;
399
+ private dataProviderService;
400
+ private formService;
401
+ protected get hasDataProviderEntityID(): boolean;
402
+ protected get isFormLoading(): boolean;
403
+ ngOnInit(): void;
404
+ protected onCancelClicked(): void;
405
+ protected onEditClicked(): void;
406
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonEditComponent, never>;
407
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonEditComponent, "framework-button-edit", never, {
408
+ "cancelColor": {
409
+ "alias": "cancelColor";
410
+ "required": false;
411
+ "isSignal": true;
412
+ };
413
+ "cancelIcon": {
414
+ "alias": "cancelIcon";
415
+ "required": false;
416
+ "isSignal": true;
417
+ };
418
+ "cancelLabel": {
419
+ "alias": "cancelLabel";
420
+ "required": false;
421
+ "isSignal": true;
422
+ };
423
+ "editIcon": {
424
+ "alias": "editIcon";
425
+ "required": false;
426
+ "isSignal": true;
427
+ };
428
+ "editLabel": {
429
+ "alias": "editLabel";
430
+ "required": false;
431
+ "isSignal": true;
432
+ };
433
+ "modal": {
434
+ "alias": "modal";
435
+ "required": false;
436
+ "isSignal": true;
437
+ };
438
+ }, {}, never, never, true, never>;
439
+ }
440
+ declare namespace button_export_component_d_exports {
441
+ export { ButtonExportComponent, ExportFormat, MaxExportRows };
442
+ }
443
+ export type ExportFormat = 'xlsx' | 'pdf' | 'csv' | 'xml' | 'mhtml';
444
+ export declare const MaxExportRows = 50000;
445
+ export declare class ButtonExportComponent extends BaseButton {
446
+ /**
447
+ * Index into `options` exported when the main button is clicked, defaulting to Excel.
448
+ * `RibbonButtonComponent` treats -1 as "no default" and merely toggles the dropdown, which left
449
+ * Export needing two clicks for the common case while Save (which sets 0) needed one. Set -1 to
450
+ * restore the dropdown-only behaviour.
451
+ */
452
+ readonly defaultOption: InputSignal<number>;
453
+ readonly fileBaseName: InputSignal<string>;
454
+ private dataGridDataset;
455
+ private translateService;
456
+ protected get isButtonDisabled(): boolean;
457
+ protected get tooltip(): string;
458
+ private get isExceedingExportLimit();
459
+ constructor();
460
+ protected onButtonClicked(format?: string): void;
461
+ private download;
462
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonExportComponent, never>;
463
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonExportComponent, "framework-button-export", never, {
464
+ "defaultOption": {
465
+ "alias": "defaultOption";
466
+ "required": false;
467
+ "isSignal": true;
468
+ };
469
+ "fileBaseName": {
470
+ "alias": "fileBaseName";
471
+ "required": false;
472
+ "isSignal": true;
473
+ };
474
+ }, {}, never, never, true, never>;
475
+ }
476
+ declare namespace button_filters_component_d_exports {
477
+ export { ButtonFiltersComponent };
478
+ }
479
+ export declare class ButtonFiltersComponent extends BaseButton implements OnInit {
480
+ readonly modal: Signal<ModalComponent | undefined>;
481
+ readonly modalSize: InputSignal<ModalSize>;
482
+ readonly modalTitle: InputSignal<string>;
483
+ readonly validateFormFunction: InputSignal<(() => void) | undefined>;
484
+ protected gridDataset: DataGridDataset;
485
+ protected readonly formGroup: FormGroupDirective;
486
+ private readonly filters;
487
+ protected get hasFiltersApplied(): boolean;
488
+ protected get singleColumn(): boolean;
489
+ constructor();
490
+ ngOnInit(): void;
491
+ protected onFiltersButtonClicked(): void;
492
+ protected onFiltersSubmitClicked(): void;
493
+ protected onResetButtonClicked(): void;
494
+ setFilters(filters: {
495
+ [key: string]: any;
496
+ }): void;
497
+ private finishLoadingIfStarted;
498
+ /**
499
+ * Drops the controls that only hold a catalog selection's label.
500
+ *
501
+ * They are half of how `lib-catalog-select` works and are created by it, so a screen never asked
502
+ * for them and a backend has no filter behind them. Sent anyway they are dead weight, and worse:
503
+ * the day a service does filter by a name, it would receive the formatted label rather than the
504
+ * stored value and quietly match nothing.
505
+ *
506
+ * @param filters The filters as submitted.
507
+ * @returns The filters a backend should receive.
508
+ */
509
+ private withoutDisplayControls;
510
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonFiltersComponent, never>;
511
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonFiltersComponent, "framework-button-filters", never, {
512
+ "modalSize": {
513
+ "alias": "modalSize";
514
+ "required": false;
515
+ "isSignal": true;
516
+ };
517
+ "modalTitle": {
518
+ "alias": "modalTitle";
519
+ "required": false;
520
+ "isSignal": true;
521
+ };
522
+ "validateFormFunction": {
523
+ "alias": "validateFormFunction";
524
+ "required": false;
525
+ "isSignal": true;
526
+ };
527
+ }, {}, never, ["*"], true, never>;
528
+ }
529
+ declare namespace button_new_component_d_exports$1 {
530
+ export { ButtonNewComponent };
531
+ }
532
+ export declare class ButtonNewComponent extends BaseButton {
533
+ readonly endpoint: InputSignal<string>;
534
+ readonly parameters: InputSignal<{
535
+ [key: string]: string;
536
+ } | undefined>;
537
+ readonly path: InputSignal<string | undefined>;
538
+ private dataProviderService;
539
+ private router;
540
+ private tabService;
541
+ protected get hasDataProvider(): boolean;
542
+ protected get hasDataProviderEntityID(): boolean;
543
+ protected onButtonClicked(optionId?: string): void;
544
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonNewComponent, never>;
545
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonNewComponent, "framework-button-new", never, {
546
+ "endpoint": {
547
+ "alias": "endpoint";
548
+ "required": false;
549
+ "isSignal": true;
550
+ };
551
+ "parameters": {
552
+ "alias": "parameters";
553
+ "required": false;
554
+ "isSignal": true;
555
+ };
556
+ "path": {
557
+ "alias": "path";
558
+ "required": false;
559
+ "isSignal": true;
560
+ };
561
+ }, {}, never, never, true, never>;
562
+ }
563
+ declare namespace button_open_record_component_d_exports$1 {
564
+ export { ButtonOpenRecordComponent };
565
+ }
566
+ export declare class ButtonOpenRecordComponent extends BaseButton implements OnInit {
567
+ readonly elementPath: InputSignal<string | undefined>;
568
+ readonly rootPath: InputSignal<string | undefined>;
569
+ private dataGridDataset;
570
+ private router;
571
+ private readonly selectionCount;
572
+ private tabService;
573
+ protected get isSelectedOneRecord(): boolean;
574
+ ngOnInit(): void;
575
+ protected onButtonClicked(): void;
576
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonOpenRecordComponent, never>;
577
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonOpenRecordComponent, "framework-button-open-record", never, {
578
+ "elementPath": {
579
+ "alias": "elementPath";
580
+ "required": false;
581
+ "isSignal": true;
582
+ };
583
+ "rootPath": {
584
+ "alias": "rootPath";
585
+ "required": false;
586
+ "isSignal": true;
587
+ };
588
+ }, {}, never, never, true, never>;
589
+ }
590
+ declare namespace button_refresh_component_d_exports {
591
+ export { ButtonRefreshComponent };
592
+ }
593
+ export declare class ButtonRefreshComponent extends BaseButton implements OnInit {
594
+ private dataGridDataset;
595
+ constructor();
596
+ ngOnInit(): void;
597
+ protected onButtonClicked(): void;
598
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonRefreshComponent, never>;
599
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonRefreshComponent, "framework-button-refresh", never, {}, {}, never, never, true, never>;
600
+ }
601
+ declare namespace button_save_component_d_exports$1 {
602
+ export { ButtonSaveComponent };
603
+ }
604
+ export declare class ButtonSaveComponent extends BaseButton {
605
+ private readonly errorModal;
606
+ readonly defaultOption: InputSignal<number>;
607
+ private dataProviderService;
608
+ private formService;
609
+ private router;
610
+ private tabService;
611
+ protected get isFormEditMode(): boolean;
612
+ protected get isFormLoading(): boolean;
613
+ constructor();
614
+ protected onButtonClicked(option?: string): void;
615
+ finishLoading(status: 'failure' | 'warning' | 'success'): void;
616
+ private navigateToNew;
617
+ private saveModel;
618
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonSaveComponent, never>;
619
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonSaveComponent, "framework-button-save", never, {
620
+ "defaultOption": {
621
+ "alias": "defaultOption";
622
+ "required": false;
623
+ "isSignal": true;
624
+ };
625
+ }, {}, never, never, true, never>;
626
+ }
627
+ declare namespace button_views_component_d_exports$1 {
628
+ export { ButtonViewsComponent };
629
+ }
630
+ export declare class ButtonViewsComponent extends BaseButton implements OnInit {
631
+ readonly detailsViewRoute: InputSignal<ActivatedRouteSnapshot | null>;
632
+ private baseUrlPath?;
633
+ private dataProviderService;
634
+ private isInternalNavigation;
635
+ private router;
636
+ private readonly selectedViewId;
637
+ private tabService;
638
+ private tabViewService;
639
+ protected get hasOptions(): boolean;
640
+ protected get isNewEntity(): boolean;
641
+ protected get selectedView(): IRibbonButtonOption | undefined;
642
+ private get defaultViewId();
643
+ private get selectedViewUrl();
644
+ ngOnInit(): void;
645
+ protected onViewClicked(selectedOption: string | undefined): void;
646
+ /**
647
+ * Marks the chosen view as the current one, which is how the dropdown greys its own entry out.
648
+ *
649
+ * The options are rebuilt rather than edited in place: the ribbon button takes the list as an
650
+ * input, so a field changed inside it is a change nothing can see.
651
+ */
652
+ private changeSelectedView;
653
+ private getActiveOption;
654
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonViewsComponent, never>;
655
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonViewsComponent, "framework-button-views", never, {
656
+ "detailsViewRoute": {
657
+ "alias": "detailsViewRoute";
658
+ "required": false;
659
+ "isSignal": true;
660
+ };
661
+ }, {}, never, never, true, never>;
662
+ }
663
+ export declare class ButtonComponent extends BaseButton {
664
+ readonly color: InputSignal<string>;
665
+ readonly icon: InputSignal<string | undefined>;
666
+ readonly label: InputSignal<string>;
667
+ readonly action: OutputEmitterRef<void>;
668
+ protected onButtonClicked(): void;
669
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
670
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "framework-button", never, {
671
+ "color": {
672
+ "alias": "color";
673
+ "required": false;
674
+ "isSignal": true;
675
+ };
676
+ "icon": {
677
+ "alias": "icon";
678
+ "required": false;
679
+ "isSignal": true;
680
+ };
681
+ "label": {
682
+ "alias": "label";
683
+ "required": false;
684
+ "isSignal": true;
685
+ };
686
+ }, {
687
+ "action": "action";
688
+ }, never, never, true, never>;
689
+ }
690
+ declare namespace button_new_component_d_exports {
691
+ export { ButtonNewLegacyComponent };
692
+ }
693
+ export declare class ButtonNewLegacyComponent extends BaseButton {
694
+ readonly endpoint: InputSignal<string>;
695
+ readonly path: InputSignal<string>;
696
+ readonly tabView: InputSignal<ITabView | undefined>;
697
+ private tabService;
698
+ clicked(): void;
699
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonNewLegacyComponent, never>;
700
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonNewLegacyComponent, "framework-button-new-legacy", never, {
701
+ "endpoint": {
702
+ "alias": "endpoint";
703
+ "required": false;
704
+ "isSignal": true;
705
+ };
706
+ "path": {
707
+ "alias": "path";
708
+ "required": false;
709
+ "isSignal": true;
710
+ };
711
+ "tabView": {
712
+ "alias": "tabView";
713
+ "required": false;
714
+ "isSignal": true;
715
+ };
716
+ }, {}, never, never, true, never>;
717
+ }
718
+ export declare abstract class ChildList<TEntityModel> extends ViewBase implements OnInit {
719
+ protected dataGridDataset: DataGridDataset;
720
+ protected dataProvider: DataProviderService<TEntityModel> | null;
721
+ protected resultDataset: MultiSelectResultDataset | null;
722
+ protected selectionCount: number;
723
+ protected get isLoading(): boolean;
724
+ constructor();
725
+ ngOnInit(): void;
726
+ protected selectedRowChanged(): void;
727
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChildList<any>, never>;
728
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChildList<any>, "ng-component", never, {}, {}, never, never, true, never>;
729
+ }
483
730
  /**
484
731
  * @deprecated Use standalone {@link ChildList} instead. Migrate by extending ChildList
485
732
  * and using standalone component imports with inject() for dependency injection.
486
733
  */
487
- declare abstract class ChildListLegacy extends ViewBase implements OnInit {
488
- private _entityId?;
489
- protected selectionCount: number;
490
- get entityId(): number | undefined;
491
- set entityId(value: number | undefined);
492
- disabled: boolean;
493
- protected dataGridDataset: DataGridDataset;
494
- protected resultDataset: MultiSelectResultDataset | null;
495
- constructor();
496
- ngOnInit(): void;
497
- selectedRowChanged(): void;
498
- static ɵfac: i0.ɵɵFactoryDeclaration<ChildListLegacy, never>;
499
- static ɵcmp: i0.ɵɵComponentDeclaration<ChildListLegacy, "ng-component", never, { "entityId": { "alias": "entityId"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, never>;
500
- }
501
-
502
- declare abstract class TabViewBase extends ViewBase implements AfterViewInit {
503
- private ribbonTemplate?;
504
- private tabViewService;
505
- constructor();
506
- ngAfterViewInit(): void;
507
- static ɵfac: i0.ɵɵFactoryDeclaration<TabViewBase, never>;
508
- static ɵcmp: i0.ɵɵComponentDeclaration<TabViewBase, "ng-component", never, {}, {}, never, never, true, never>;
509
- }
510
-
511
- declare abstract class FormView<TEntityModel> extends TabViewBase implements OnInit {
512
- protected dataForm: FormGroup;
513
- protected dataProvider: DataProviderService<TEntityModel> | null;
514
- protected formBuilder: FormBuilder;
515
- protected formService: FormService;
516
- protected get hasEntityID(): boolean;
517
- protected get isLoading(): boolean;
518
- constructor();
519
- ngOnInit(): void;
520
- protected abstract formSetup(): FormGroup;
521
- static ɵfac: i0.ɵɵFactoryDeclaration<FormView<any>, never>;
522
- static ɵcmp: i0.ɵɵComponentDeclaration<FormView<any>, "ng-component", never, {}, {}, never, never, true, never>;
523
- }
524
-
734
+ export declare abstract class ChildListLegacy extends ViewBase implements OnInit {
735
+ private _entityId?;
736
+ protected selectionCount: number;
737
+ get entityId(): number | undefined;
738
+ set entityId(value: number | undefined);
739
+ disabled: boolean;
740
+ protected dataGridDataset: DataGridDataset;
741
+ protected resultDataset: MultiSelectResultDataset | null;
742
+ constructor();
743
+ ngOnInit(): void;
744
+ selectedRowChanged(): void;
745
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChildListLegacy, never>;
746
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChildListLegacy, "ng-component", never, {
747
+ "entityId": {
748
+ "alias": "entityId";
749
+ "required": false;
750
+ };
751
+ "disabled": {
752
+ "alias": "disabled";
753
+ "required": false;
754
+ };
755
+ }, {}, never, never, true, never>;
756
+ }
757
+ export declare abstract class TabViewBase extends ViewBase implements AfterViewInit {
758
+ private ribbonTemplate?;
759
+ private tabViewService;
760
+ constructor();
761
+ ngAfterViewInit(): void;
762
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabViewBase, never>;
763
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabViewBase, "ng-component", never, {}, {}, never, never, true, never>;
764
+ }
765
+ export declare abstract class FormView<TEntityModel> extends TabViewBase implements OnInit {
766
+ protected dataForm: FormGroup;
767
+ protected dataProvider: DataProviderService<TEntityModel> | null;
768
+ protected formBuilder: FormBuilder;
769
+ protected formService: FormService;
770
+ protected get hasEntityID(): boolean;
771
+ protected get isLoading(): boolean;
772
+ constructor();
773
+ ngOnInit(): void;
774
+ protected abstract formSetup(): FormGroup;
775
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormView<any>, never>;
776
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormView<any>, "ng-component", never, {}, {}, never, never, true, never>;
777
+ }
525
778
  /**
526
779
  * @deprecated Use standalone {@link FormView} instead. Migrate by extending FormView
527
780
  * and using standalone component imports with inject() for dependency injection.
528
781
  */
529
- declare abstract class LegacySubViewForm extends ViewBase implements OnInit {
530
- protected formBuilder: FormBuilder;
531
- protected formService: FormService;
532
- entityId?: number;
533
- set model(value: any | null);
534
- get loading(): boolean;
535
- set loading(value: boolean);
536
- get isNew(): boolean;
537
- get viewMode(): 'view' | 'edit';
538
- set viewMode(value: 'view' | 'edit');
539
- get model(): any | null;
540
- dataForm: FormGroup;
541
- private _model;
542
- private readonly _viewMode;
543
- protected dataProvider: DataProviderService<any> | null;
544
- constructor(formBuilder: FormBuilder, formService: FormService);
545
- ngOnInit(): void;
546
- protected updateModel(model: any): void;
547
- beginEdit(resetValues?: boolean): void;
548
- cancelEdit(): void;
549
- /** Extension point: subclasses override this to validate before save. */
550
- protected validate(_formModel: any): void;
551
- save(): Observable<any>;
552
- protected abstract formSetup(): FormGroup;
553
- protected abstract saveModel(): Observable<any>;
554
- static ɵfac: i0.ɵɵFactoryDeclaration<LegacySubViewForm, never>;
555
- static ɵcmp: i0.ɵɵComponentDeclaration<LegacySubViewForm, "ng-component", never, { "entityId": { "alias": "entityId"; "required": false; }; "model": { "alias": "model"; "required": false; }; }, {}, never, never, true, never>;
556
- }
557
-
782
+ export declare abstract class LegacySubViewForm extends ViewBase implements OnInit {
783
+ protected formBuilder: FormBuilder;
784
+ protected formService: FormService;
785
+ entityId?: number;
786
+ set model(value: any | null);
787
+ get loading(): boolean;
788
+ set loading(value: boolean);
789
+ get isNew(): boolean;
790
+ get viewMode(): 'view' | 'edit';
791
+ set viewMode(value: 'view' | 'edit');
792
+ get model(): any | null;
793
+ dataForm: FormGroup;
794
+ private _model;
795
+ private readonly _viewMode;
796
+ protected dataProvider: DataProviderService<any> | null;
797
+ constructor(formBuilder: FormBuilder, formService: FormService);
798
+ ngOnInit(): void;
799
+ protected updateModel(model: any): void;
800
+ beginEdit(resetValues?: boolean): void;
801
+ cancelEdit(): void;
802
+ /** Extension point: subclasses override this to validate before save. */
803
+ protected validate(_formModel: any): void;
804
+ save(): Observable<any>;
805
+ protected abstract formSetup(): FormGroup;
806
+ protected abstract saveModel(): Observable<any>;
807
+ static ɵfac: i0.ɵɵFactoryDeclaration<LegacySubViewForm, never>;
808
+ static ɵcmp: i0.ɵɵComponentDeclaration<LegacySubViewForm, "ng-component", never, {
809
+ "entityId": {
810
+ "alias": "entityId";
811
+ "required": false;
812
+ };
813
+ "model": {
814
+ "alias": "model";
815
+ "required": false;
816
+ };
817
+ }, {}, never, never, true, never>;
818
+ }
558
819
  /**
559
820
  * @deprecated Use standalone {@link TabViewBase} instead. Migrate by extending TabViewBase
560
821
  * and using standalone component imports with inject() for dependency injection.
561
822
  */
562
823
  declare abstract class LegacyTabViewBase extends ViewBase implements OnInit, ITabView {
563
- protected route: ActivatedRoute;
564
- protected tabService: TabService;
565
- title: string;
566
- url: string;
567
- activeView?: string;
568
- constructor(route: ActivatedRoute, tabService: TabService);
569
- ngOnInit(): void;
570
- protected openTabView(): void;
571
- protected updateTitle(title: string): void;
572
- static ɵfac: i0.ɵɵFactoryDeclaration<LegacyTabViewBase, never>;
573
- static ɵcmp: i0.ɵɵComponentDeclaration<LegacyTabViewBase, "ng-component", never, {}, {}, never, never, true, never>;
574
- }
575
-
824
+ protected route: ActivatedRoute;
825
+ protected tabService: TabService;
826
+ title: string;
827
+ url: string;
828
+ activeView?: string;
829
+ constructor(route: ActivatedRoute, tabService: TabService);
830
+ ngOnInit(): void;
831
+ protected openTabView(): void;
832
+ protected updateTitle(title: string): void;
833
+ static ɵfac: i0.ɵɵFactoryDeclaration<LegacyTabViewBase, never>;
834
+ static ɵcmp: i0.ɵɵComponentDeclaration<LegacyTabViewBase, "ng-component", never, {}, {}, never, never, true, never>;
835
+ }
576
836
  /**
577
837
  * @deprecated Use standalone {@link TabViewBase} with {@link DefaultDetailsTabViewComponent} pattern instead.
578
838
  * Migrate by extending TabViewBase and composing detail/history views as child routes
579
839
  * with standalone component imports.
580
840
  */
581
- declare abstract class LegacyTabViewDetails extends LegacyTabViewBase implements AfterViewInit, OnInit {
582
- protected formService: FormService;
583
- buttonNew: ButtonNewLegacyComponent;
584
- title: string;
585
- protected defaultView: string;
586
- protected entityId?: number;
587
- protected views: IRibbonButtonOption[];
588
- get loading(): boolean;
589
- set loading(value: boolean);
590
- protected get currentView(): string;
591
- protected get model(): any;
592
- constructor(route: ActivatedRoute, tabService: TabService, formService: FormService);
593
- ngAfterViewInit(): void;
594
- ngOnInit(): void;
595
- protected openTabView(): void;
596
- protected refresh(): void;
597
- protected refreshParameters(): void;
598
- protected switchView(viewId?: string): void;
599
- protected abstract getModelDescription(): string;
600
- protected abstract getModelId(): number | null;
601
- protected abstract loadModel(): Observable<any | null>;
602
- protected abstract newModel(): any;
603
- protected abstract onViewVisible(): void;
604
- static ɵfac: i0.ɵɵFactoryDeclaration<LegacyTabViewDetails, never>;
605
- static ɵcmp: i0.ɵɵComponentDeclaration<LegacyTabViewDetails, "ng-component", never, {}, {}, never, never, true, never>;
606
- }
607
-
841
+ export declare abstract class LegacyTabViewDetails extends LegacyTabViewBase implements AfterViewInit, OnInit {
842
+ protected formService: FormService;
843
+ buttonNew: ButtonNewLegacyComponent;
844
+ title: string;
845
+ protected defaultView: string;
846
+ protected entityId?: number;
847
+ protected views: IRibbonButtonOption[];
848
+ get loading(): boolean;
849
+ set loading(value: boolean);
850
+ protected get currentView(): string;
851
+ protected get model(): any;
852
+ constructor(route: ActivatedRoute, tabService: TabService, formService: FormService);
853
+ ngAfterViewInit(): void;
854
+ ngOnInit(): void;
855
+ protected openTabView(): void;
856
+ protected refresh(): void;
857
+ protected refreshParameters(): void;
858
+ protected switchView(viewId?: string): void;
859
+ protected abstract getModelDescription(): string;
860
+ protected abstract getModelId(): number | null;
861
+ protected abstract loadModel(): Observable<any | null>;
862
+ protected abstract newModel(): any;
863
+ protected abstract onViewVisible(): void;
864
+ static ɵfac: i0.ɵɵFactoryDeclaration<LegacyTabViewDetails, never>;
865
+ static ɵcmp: i0.ɵɵComponentDeclaration<LegacyTabViewDetails, "ng-component", never, {}, {}, never, never, true, never>;
866
+ }
608
867
  /**
609
868
  * @deprecated Use standalone {@link TabViewList} instead. Migrate by extending TabViewList
610
869
  * and using standalone component imports with inject() for dependency injection.
611
870
  */
612
- declare abstract class LegacyTabViewList<TListModel> extends LegacyTabViewBase implements OnInit {
613
- protected dataGridDataset: DataGridDataset;
614
- private _selectedItem?;
615
- private selectedRows;
616
- protected get hasRowsSelected(): boolean;
617
- protected get selectedItem(): TListModel | undefined;
618
- constructor(dataGridDataset: DataGridDataset, route: ActivatedRoute, tabService: TabService);
619
- ngOnInit(): void;
620
- protected selectedRowChanged(): void;
621
- static ɵfac: i0.ɵɵFactoryDeclaration<LegacyTabViewList<any>, never>;
622
- static ɵcmp: i0.ɵɵComponentDeclaration<LegacyTabViewList<any>, "ng-component", never, {}, {}, never, never, true, never>;
623
- }
624
-
625
- declare abstract class TabViewList<TListModel> extends TabViewBase implements OnInit {
626
- protected dataGridDataset: DataGridDataset;
627
- private _selectedItem?;
628
- private selectionCount;
629
- protected get hasRowsSelected(): boolean;
630
- protected get selectedItem(): TListModel | undefined;
631
- constructor();
632
- ngOnInit(): void;
633
- protected selectedRowChanged(): void;
634
- static ɵfac: i0.ɵɵFactoryDeclaration<TabViewList<any>, never>;
635
- static ɵcmp: i0.ɵɵComponentDeclaration<TabViewList<any>, "ng-component", never, {}, {}, never, never, true, never>;
636
- }
637
-
638
- declare abstract class ListView<TEntityModel, TListModel> extends TabViewList<TListModel> implements OnInit {
639
- protected dataProvider: DataProviderService<TEntityModel> | null;
640
- protected resultDataset: MultiSelectResultDataset | null;
641
- constructor();
642
- ngOnInit(): void;
643
- static ɵfac: i0.ɵɵFactoryDeclaration<ListView<any, any>, never>;
644
- static ɵcmp: i0.ɵɵComponentDeclaration<ListView<any, any>, "ng-component", never, {}, {}, never, never, true, never>;
645
- }
646
-
647
- declare abstract class MultiEditorLegacyModal extends ModalBase implements OnInit {
648
- protected dataGridDataset: DataGridDataset;
649
- protected multiEditorDataset: MultiEditorDataset;
650
- protected formBuilder: FormBuilder;
651
- protected _entityId?: number;
652
- multiEditor: MultiEditorComponent;
653
- set entityId(value: number | undefined);
654
- savedChanges: EventEmitter<any>;
655
- form: FormGroup;
656
- constructor(dataGridDataset: DataGridDataset, multiEditorDataset: MultiEditorDataset, formBuilder: FormBuilder);
657
- ngOnInit(): void;
658
- toggle(): void;
659
- abstract formSetup(): FormGroup;
660
- static ɵfac: i0.ɵɵFactoryDeclaration<MultiEditorLegacyModal, never>;
661
- static ɵcmp: i0.ɵɵComponentDeclaration<MultiEditorLegacyModal, "ng-component", never, { "entityId": { "alias": "entityId"; "required": false; }; }, { "savedChanges": "savedChanges"; }, never, never, true, never>;
662
- }
663
-
664
- declare abstract class MultiEditorModal<TEntityModel> extends ModalBase implements OnInit {
665
- protected multiEditor: MultiEditorComponent;
666
- overrideParentID?: number;
667
- savedChanges: EventEmitter<any>;
668
- protected dataForm: FormGroup;
669
- protected dataGridDataset: DataGridDataset;
670
- protected dataProvider: DataProviderService<TEntityModel> | null;
671
- protected formBuilder: FormBuilder;
672
- protected formService: FormService;
673
- protected multiEditorDataset: MultiEditorDataset;
674
- protected selectionCount: number;
675
- constructor();
676
- ngOnInit(): void;
677
- toggle(): void;
678
- protected abstract formSetup(): FormGroup;
679
- private updateParentID;
680
- static ɵfac: i0.ɵɵFactoryDeclaration<MultiEditorModal<any>, never>;
681
- static ɵcmp: i0.ɵɵComponentDeclaration<MultiEditorModal<any>, "ng-component", never, { "overrideParentID": { "alias": "overrideParentID"; "required": false; }; }, { "savedChanges": "savedChanges"; }, never, never, true, never>;
682
- }
683
-
684
- declare abstract class MultiSelectModal extends ModalBase {
685
- multiSelect: MultiSelectComponent;
686
- savedChanges: EventEmitter<void>;
687
- toggle(): void;
688
- static ɵfac: i0.ɵɵFactoryDeclaration<MultiSelectModal, never>;
689
- static ɵcmp: i0.ɵɵComponentDeclaration<MultiSelectModal, "ng-component", never, {}, { "savedChanges": "savedChanges"; }, never, never, true, never>;
690
- }
691
-
692
- declare abstract class ViewModal<TEntityModel> extends ModalBase implements OnInit {
693
- protected modalComponent: IModal;
694
- protected beginEditOnEntityLoad: boolean;
695
- protected data$: Observable<TEntityModel | null>;
696
- protected dataForm: FormGroup;
697
- protected formBuilder: FormBuilder;
698
- protected formService: FormService;
699
- protected selectionCount: number;
700
- private entityIdSubject;
701
- constructor();
702
- ngOnInit(): void;
703
- toggle(entityID?: number): void;
704
- protected abstract formSetup(): FormGroup;
705
- protected abstract loadData(entityID?: number): Observable<TEntityModel | null>;
706
- static ɵfac: i0.ɵɵFactoryDeclaration<ViewModal<any>, never>;
707
- static ɵcmp: i0.ɵɵComponentDeclaration<ViewModal<any>, "ng-component", never, {}, {}, never, never, true, never>;
708
- }
709
-
710
- declare class ButtonEditLegacyComponent extends BaseButton {
711
- readonly cancelColor: InputSignal<string>;
712
- readonly cancelIcon: InputSignal<string>;
713
- readonly cancelLabel: InputSignal<string>;
714
- readonly editIcon: InputSignal<string>;
715
- readonly editLabel: InputSignal<string>;
716
- readonly form: InputSignal<LegacySubViewForm | undefined>;
717
- readonly modal: InputSignal<ModalBase | undefined>;
718
- protected onCancelAction(): void;
719
- protected onEditAction(): void;
720
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonEditLegacyComponent, never>;
721
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonEditLegacyComponent, "framework-button-edit-legacy", never, { "cancelColor": { "alias": "cancelColor"; "required": false; "isSignal": true; }; "cancelIcon": { "alias": "cancelIcon"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "editIcon": { "alias": "editIcon"; "required": false; "isSignal": true; }; "editLabel": { "alias": "editLabel"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
722
- }
723
-
724
- declare class ButtonSaveLegacyComponent extends BaseButton {
725
- private readonly errorModal;
726
- readonly defaultOption: InputSignal<number>;
727
- readonly form: InputSignal<LegacySubViewForm | undefined>;
728
- readonly tabView: InputSignal<LegacyTabViewDetails | undefined>;
729
- private formService;
730
- private tabService;
731
- constructor();
732
- protected onButtonClick(option?: string): void;
733
- finishLoading(status: 'failure' | 'warning' | 'success'): void;
734
- private setTabViewLoading;
735
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonSaveLegacyComponent, never>;
736
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonSaveLegacyComponent, "framework-button-save-legacy", never, { "defaultOption": { "alias": "defaultOption"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "tabView": { "alias": "tabView"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
737
- }
738
-
739
- declare class ButtonViewsLegacyComponent extends BaseButton {
740
- readonly views: InputSignal<IRibbonButtonOption[]>;
741
- readonly viewChanged: OutputEmitterRef<string | undefined>;
742
- clicked(option?: string): void;
743
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonViewsLegacyComponent, never>;
744
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonViewsLegacyComponent, "framework-button-views-legacy", never, { "views": { "alias": "views"; "required": false; "isSignal": true; }; }, { "viewChanged": "viewChanged"; }, never, never, true, never>;
745
- }
746
-
747
- declare class ButtonOpenRecordLegacyComponent extends BaseButton implements OnInit {
748
- readonly endpoint: InputSignal<string>;
749
- readonly path: InputSignal<string>;
750
- readonly tabView: InputSignal<ITabView | undefined>;
751
- protected dataGridDataset: DataGridDataset;
752
- protected readonly selectionCount: WritableSignal<number>;
753
- private tabService;
754
- ngOnInit(): void;
755
- clicked(): void;
756
- static ɵfac: i0.ɵɵFactoryDeclaration<ButtonOpenRecordLegacyComponent, never>;
757
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonOpenRecordLegacyComponent, "framework-button-open-record-legacy", never, { "endpoint": { "alias": "endpoint"; "required": false; "isSignal": true; }; "path": { "alias": "path"; "required": false; "isSignal": true; }; "tabView": { "alias": "tabView"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
758
- }
759
-
760
- declare class FrameworkButtonsModule {
761
- static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkButtonsModule, never>;
762
- static ɵmod: i0.ɵɵNgModuleDeclaration<FrameworkButtonsModule, never, [typeof ButtonDeleteComponent, typeof ButtonEditComponent, typeof ButtonExportComponent, typeof ButtonFiltersComponent, typeof ButtonNewComponent, typeof ButtonOpenRecordComponent, typeof ButtonRefreshComponent, typeof ButtonSaveComponent, typeof ButtonViewsComponent, typeof ButtonNewLegacyComponent, typeof ButtonEditLegacyComponent, typeof ButtonSaveLegacyComponent, typeof ButtonViewsLegacyComponent, typeof ButtonOpenRecordLegacyComponent], [typeof ButtonDeleteComponent, typeof ButtonEditComponent, typeof ButtonExportComponent, typeof ButtonFiltersComponent, typeof ButtonNewComponent, typeof ButtonOpenRecordComponent, typeof ButtonRefreshComponent, typeof ButtonSaveComponent, typeof ButtonViewsComponent, typeof ButtonNewLegacyComponent, typeof ButtonEditLegacyComponent, typeof ButtonSaveLegacyComponent, typeof ButtonViewsLegacyComponent, typeof ButtonOpenRecordLegacyComponent]>;
763
- static ɵinj: i0.ɵɵInjectorDeclaration<FrameworkButtonsModule>;
764
- }
765
-
766
- declare class ConfirmModalComponent implements IModal {
767
- private readonly modal;
768
- readonly errorMessage: ModelSignal<string>;
769
- readonly isLoading: ModelSignal<boolean>;
770
- readonly message: InputSignal<string>;
771
- readonly messageIcon: InputSignal<string>;
772
- readonly messageIconColor: InputSignal<string>;
773
- readonly showMessageIcon: InputSignal<boolean>;
774
- readonly size: InputSignal<ModalSize>;
775
- readonly title: InputSignal<string>;
776
- protected formService: FormService | undefined;
777
- /**
778
- * Delegates to the inner modal. A signal view query, not @ViewChild: a computed reading a plain
779
- * query would never re-run when the query resolves, so the wrapper would answer against an
780
- * undefined child for ever.
781
- */
782
- readonly isOpen: Signal<boolean>;
783
- protected get hasErrorMessage(): boolean;
784
- protected get hasMessage(): boolean;
785
- private controlContainer;
786
- private get formGroup();
787
- beginLoading(): void;
788
- clearErrorMessage(): void;
789
- closeModal(): void;
790
- finishLoading(closeModal?: boolean): void;
791
- setErrorMessage(httpErrorResponse: HttpErrorResponse): void;
792
- toggleModal(): void;
793
- static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmModalComponent, never>;
794
- static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmModalComponent, "framework-confirm-modal", never, { "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "messageIcon": { "alias": "messageIcon"; "required": false; "isSignal": true; }; "messageIconColor": { "alias": "messageIconColor"; "required": false; "isSignal": true; }; "showMessageIcon": { "alias": "showMessageIcon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, { "errorMessage": "errorMessageChange"; "isLoading": "isLoadingChange"; }, never, ["*", "[footer]"], true, never>;
795
- }
796
-
797
- declare class ErrorModalComponent {
798
- private readonly modal;
799
- readonly errorMessage: ModelSignal<string>;
800
- readonly size: InputSignal<ModalSize>;
801
- readonly subtitle: ModelSignal<string>;
802
- readonly title: ModelSignal<string>;
803
- readonly closed: OutputEmitterRef<void>;
804
- /**
805
- * Delegates to the inner modal. A signal view query, not @ViewChild: a computed reading a plain
806
- * query would never re-run when the query resolves, so the wrapper would answer against an
807
- * undefined child for ever.
808
- */
809
- readonly isOpen: Signal<boolean>;
810
- closeModal(): void;
811
- showModal(error: string | HttpErrorResponse): void;
812
- static ɵfac: i0.ɵɵFactoryDeclaration<ErrorModalComponent, never>;
813
- static ɵcmp: i0.ɵɵComponentDeclaration<ErrorModalComponent, "framework-error-modal", never, { "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, { "errorMessage": "errorMessageChange"; "subtitle": "subtitleChange"; "title": "titleChange"; "closed": "closed"; }, never, never, true, never>;
814
- }
815
-
816
- declare class FrameworkModalsModule {
817
- static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkModalsModule, never>;
818
- static ɵmod: i0.ɵɵNgModuleDeclaration<FrameworkModalsModule, never, [typeof ConfirmModalComponent, typeof ErrorModalComponent], [typeof ConfirmModalComponent, typeof ErrorModalComponent]>;
819
- static ɵinj: i0.ɵɵInjectorDeclaration<FrameworkModalsModule>;
820
- }
821
-
822
- declare class DefaultTabViewComponent implements OnDestroy, OnInit {
823
- protected destroy$: Subject<boolean>;
824
- protected readonly ribbonTemplate: WritableSignal<TemplateRef<any> | undefined>;
825
- private hasNamedAView;
826
- private ribbonViewTemplate;
827
- protected tabViewService: TabViewService;
828
- ngOnDestroy(): void;
829
- ngOnInit(): void;
830
- /**
831
- * Claims the ribbon published before the active view had a name.
832
- *
833
- * A child view publishes its ribbon from ngAfterViewInit, and the view is only named afterwards,
834
- * so the first template of a tab is always cached under an empty id. For a tab opened straight
835
- * at a non-default view that id is never looked up again, the ribbon is emptied, and nothing
836
- * refills it -- a tab being re-activated has its child re-attached rather than re-created, so
837
- * ngAfterViewInit does not run a second time.
838
- *
839
- * Only the very first naming may claim it. The empty id is not a spare bucket: it is the default
840
- * view's own id, because that view is the one whose URL carries no sub-path. Once the user
841
- * starts switching views the unnamed template belongs to the view being *left*, and handing it
842
- * to the view being entered showed the previous view's buttons on the new one and left the
843
- * previous one with no buttons at all.
844
- *
845
- * @param viewId The view that has just become active.
846
- */
847
- private claimUnnamedRibbon;
848
- /**
849
- * One signal write, where there used to be a detectChanges()/markForCheck() pair.
850
- *
851
- * Those existed to render a real template at once while deferring a clear, so switching views
852
- * did not tear an already rendered ribbon down for a frame before the incoming view pushed its
853
- * own. A signal gets both for free: writes coalesce into the next pass, so a clear followed by
854
- * a set moments later is one render, not two. The NG0100 hazard goes with it -- a signal write
855
- * after the outlet has been checked schedules another pass instead of throwing.
856
- */
857
- private updateRibbonTemplate;
858
- static ɵfac: i0.ɵɵFactoryDeclaration<DefaultTabViewComponent, never>;
859
- static ɵcmp: i0.ɵɵComponentDeclaration<DefaultTabViewComponent, "framework-default-tab-view", never, {}, {}, never, never, true, never>;
860
- }
861
-
862
- declare class DefaultDetailsTabViewComponent extends DefaultTabViewComponent implements OnDestroy, OnInit {
863
- private readonly errorModal;
864
- protected readonly containerIcon: WritableSignal<string | undefined>;
865
- protected readonly containerTitle: WritableSignal<string | undefined>;
866
- protected readonly detailsViewRoute: WritableSignal<ActivatedRouteSnapshot | null>;
867
- protected dataProviderClassName?: any;
868
- private dataProviderService;
869
- private hasEntityID;
870
- private hasLoadError;
871
- private router;
872
- private tabService;
873
- protected get componentName(): string;
874
- ngOnInit(): void;
875
- protected onErrorModalClosed(): void;
876
- static ɵfac: i0.ɵɵFactoryDeclaration<DefaultDetailsTabViewComponent, never>;
877
- static ɵcmp: i0.ɵɵComponentDeclaration<DefaultDetailsTabViewComponent, "framework-default-details-tab-view", never, {}, {}, never, never, true, never>;
878
- }
879
-
880
- declare class TabBreadcrumbsComponent {
881
- private tabService;
882
- /**
883
- * Reads straight through to the service, which is the trap this component used to be the
884
- * example of: a getter over an array a service mutates elsewhere, with nothing to mark this
885
- * view dirty. TabService announces its own changes now, and that getter takes the dependency,
886
- * so no strategy is needed here.
887
- */
888
- protected get tabHistory(): ITab[];
889
- protected onTitleClick(tab: ITab): void;
890
- static ɵfac: i0.ɵɵFactoryDeclaration<TabBreadcrumbsComponent, never>;
891
- static ɵcmp: i0.ɵɵComponentDeclaration<TabBreadcrumbsComponent, "framework-tab-breadcrumbs", never, {}, {}, never, never, true, never>;
892
- }
893
-
894
- declare class TabsComponent implements AfterViewInit, OnDestroy, OnInit {
895
- private ngZone;
896
- private router;
897
- private tabService;
898
- private tabsNav?;
899
- private static instances;
900
- /** Unique per instance: the ids below are referenced by aria-controls/aria-labelledby. */
901
- private readonly instanceId;
902
- /**
903
- * Fingerprint of everything that can invalidate the strip's scroll position: which tab is
904
- * selected, how many there are, and the strip's own geometry. Deliberately does NOT include
905
- * scrollLeft -- the user scrolling by hand must not make us yank the strip back.
906
- */
907
- private lastStripSignature;
908
- private navResizeObserver?;
909
- private isDestroyed;
910
- /** Drive the scroll buttons. Only ever assigned outside a change-detection pass (see below). */
911
- protected readonly canScrollLeft: WritableSignal<boolean>;
912
- protected readonly canScrollRight: WritableSignal<boolean>;
913
- /**
914
- * Whether the strip holds more tabs than it has room for. This decides that the buttons exist;
915
- * canScrollLeft and canScrollRight only decide whether each one is enabled.
916
- *
917
- * They used to decide both, so a button vanished the moment you reached the end it pointed at.
918
- * The strip then changed width under the pointer, and a click could land after the button had
919
- * already unmounted and do nothing — which is what "sometimes it does not move" was.
920
- */
921
- protected readonly isOverflowing: WritableSignal<boolean>;
922
- /**
923
- * Whether anything reaches the strip's right edge: a tab, or the right scroll button. While
924
- * something does, the panel's top-right corner is square, because the card's corner then belongs
925
- * to the strip. Rounding both leaves whatever sits at the edge standing over the sweep where the
926
- * panel has curved away and is not there yet — a piece floating past the corner.
927
- */
928
- protected readonly isFlushRight: WritableSignal<boolean>;
929
- protected get activeHistory(): ITabHistory[] | null;
930
- protected get activeTab(): string | null;
931
- protected get hasTabs(): boolean;
932
- protected get openTabs(): ITab[];
933
- protected get tabDisplayTitles(): (string | undefined)[];
934
- protected get tabLoadingStates(): boolean[];
935
- /** Id of the panel these tabs control; referenced by each tab's aria-controls. */
936
- protected get panelId(): string;
937
- /** Id of the selected tab, so the panel can name the tab that labels it. */
938
- protected get activeTabId(): string | null;
939
- protected trackByFn: (index: number, tab: ITab) => string;
940
- constructor(ngZone: NgZone, router: Router, tabService: TabService);
941
- ngAfterViewInit(): void;
942
- ngOnDestroy(): void;
943
- ngOnInit(): void;
944
- protected onActivateTab(tab: ITab): void;
945
- protected onCloseTab(index: number): void;
946
- /** Middle click closes a tab, the way it does in a browser. */
947
- protected onTabAuxClick(event: MouseEvent, index: number): void;
948
- /**
949
- * Roving focus. A tablist is a single tab stop: Tab reaches the selected tab, and the
950
- * arrow keys move between tabs from there. A delta of 0 means go to `from` exactly,
951
- * which is what Home and End want.
952
- */
953
- protected onMoveFocus(from: number, delta: number): void;
954
- /** The scroll buttons at each end of the strip. `direction` is -1 for left, 1 for right. */
955
- protected onScrollStrip(direction: number): void;
956
- protected isTabActive(tab: ITab): boolean;
957
- /** Stable per index, so aria-controls and aria-labelledby have something to point at. */
958
- protected tabId(index: number): string;
959
- private tabElements;
960
- /** Moves focus AND selection: this tablist follows the automatic-activation pattern. */
961
- private focusTab;
962
- /**
963
- * Everything that invalidates the scroll position, in one cheap string. The geometry is part
964
- * of it because the window resizing or the sidebar collapsing can push the selected tab out
965
- * of sight without the tab list changing at all -- which is precisely how you end up looking
966
- * at a panel whose tab is nowhere on screen.
967
- */
968
- private stripSignature;
969
- /** Keeps the selected tab on screen. Called from a microtask, never mid-change-detection. */
970
- private scrollActiveTabIntoView;
971
- /**
972
- * Recomputes whether either scroll button applies. Reads first and only enters the zone when
973
- * a button actually flips, so an ordinary scroll costs one layout read and no render.
974
- */
975
- private syncScrollAffordance;
976
- /** Everything a geometry change implies: the selected tab may be off-screen, and the scroll
977
- * buttons may have appeared or gone. */
978
- private remeasureStrip;
979
- /** Arrow function: registered and removed as a listener, so it must keep its `this`. */
980
- private onNavScroll;
981
- /**
982
- * A tab strip is horizontal but a mouse wheel is vertical, so without this the only way to
983
- * reach an off-screen tab with a plain wheel mouse is the buttons. Trackpads and shift+wheel
984
- * already produce deltaX, so those are left alone.
985
- */
986
- private onNavWheel;
987
- static ɵfac: i0.ɵɵFactoryDeclaration<TabsComponent, never>;
988
- static ɵcmp: i0.ɵɵComponentDeclaration<TabsComponent, "framework-tabs", never, {}, {}, never, ["*"], true, never>;
989
- }
990
-
991
- declare class FrameworkViewsModule {
992
- static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkViewsModule, never>;
993
- static ɵmod: i0.ɵɵNgModuleDeclaration<FrameworkViewsModule, never, [typeof DefaultDetailsTabViewComponent, typeof DefaultTabViewComponent, typeof TabBreadcrumbsComponent, typeof TabsComponent], [typeof DefaultDetailsTabViewComponent, typeof DefaultTabViewComponent, typeof TabsComponent]>;
994
- static ɵinj: i0.ɵɵInjectorDeclaration<FrameworkViewsModule>;
995
- }
996
-
997
- declare class FrameworkComponentsModule {
998
- static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkComponentsModule, never>;
999
- static ɵmod: i0.ɵɵNgModuleDeclaration<FrameworkComponentsModule, never, never, [typeof FrameworkButtonsModule, typeof FrameworkModalsModule, typeof FrameworkViewsModule]>;
1000
- static ɵinj: i0.ɵɵInjectorDeclaration<FrameworkComponentsModule>;
1001
- }
1002
-
1003
- declare const APP_CONFIG: InjectionToken<AppConfig>;
1004
- interface AppConfigOptions {
1005
- appName?: string;
1006
- companyName?: string;
1007
- environment?: string;
1008
- logoUrl?: string;
1009
- notificationsEnabled?: boolean;
1010
- notificationsUrl?: string;
1011
- version?: string;
1012
- }
1013
- declare class AppConfig {
1014
- BASE_URL: string;
1015
- /** Application name shown in the top bar brand block. */
1016
- appName: string;
1017
- /** Company name shown beneath the application name. */
1018
- companyName: string;
1019
- /** Environment key (e.g. 'DEV', 'QA', 'STG', 'PROD'). Empty string when unset. */
1020
- environment: string;
1021
- /** Optional brand logo URL shown in the top bar. */
1022
- logoUrl?: string;
1023
- /** Whether the top-bar notifications feature (bell + badge) is enabled. */
1024
- notificationsEnabled: boolean;
1025
- /** SignalR hub URL the notifications service connects to when enabled. */
1026
- notificationsUrl: string;
1027
- /** Application version string (e.g. '1.4.0'), shown at the bottom of the navigation. */
1028
- version: string;
1029
- constructor(baseUrl: string, options?: AppConfigOptions);
1030
- }
1031
-
1032
- declare class FrameworkGridConfigsProvider extends DataGridConfigsProvider {
1033
- constructor();
1034
- static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkGridConfigsProvider, never>;
1035
- static ɵprov: i0.ɵɵInjectableDeclaration<any>;
1036
- }
1037
-
1038
- declare class FrameworkModule {
1039
- static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkModule, never>;
1040
- static ɵmod: i0.ɵɵNgModuleDeclaration<FrameworkModule, never, never, [typeof FrameworkComponentsModule]>;
1041
- static ɵinj: i0.ɵɵInjectorDeclaration<FrameworkModule>;
1042
- }
1043
-
1044
- declare abstract class BackendFormValidationHelper {
1045
- static validateAllFormFields(httpErrorResponse: HttpErrorResponse, formGroup: FormGroup): void;
1046
- }
1047
-
1048
- declare abstract class RouteHelper {
1049
- static getRouteByData(routeSnapshot: ActivatedRouteSnapshot | null, key: string, value: any): ActivatedRouteSnapshot | null;
1050
- static getRouteWithComponent(routeSnapshot: ActivatedRouteSnapshot | null, component: any): ActivatedRouteSnapshot | null;
1051
- static getRouteURL(route: ActivatedRouteSnapshot, rootLevel?: boolean): string;
1052
- }
1053
-
1054
- declare const ZAMBON_FRAMEWORK_I18N_ASSET_PATH = "assets/i18n/zambon-dev/framework";
1055
- declare const ZAMBON_FRAMEWORK_I18N_ASSET: AngularAssetPattern;
1056
- declare const ZAMBON_FRAMEWORK_I18N_RESOURCES: TranslationResource[];
1057
- interface ZambonFrameworkTranslateConfig {
1058
- defaultLanguage?: string;
1059
- appResources?: (string | TranslationResource)[];
1060
- }
1061
- declare function createZambonFrameworkTranslateLoader(httpBackend: HttpBackend, appResources?: (string | TranslationResource)[]): MultiTranslateHttpLoader;
1062
- declare function provideZambonFrameworkTranslateLoader(appResources?: (string | TranslationResource)[]): Provider;
1063
- declare function provideZambonFrameworkTranslateService(config?: ZambonFrameworkTranslateConfig): EnvironmentProviders;
1064
-
1065
- export { APP_CONFIG, AppConfig, AuthService, BackendFormValidationHelper, BaseButton, BaseFormViewButton, ButtonComponent, ButtonConfirmComponent, ButtonDeleteComponent, ButtonEditComponent, ButtonEditLegacyComponent, ButtonExportComponent, ButtonFiltersComponent, ButtonNewComponent, ButtonNewLegacyComponent, ButtonOpenRecordComponent, ButtonOpenRecordLegacyComponent, ButtonRefreshComponent, ButtonSaveComponent, ButtonSaveLegacyComponent, ButtonViewsComponent, ButtonViewsLegacyComponent, ChildList, ChildListLegacy, ConfirmModalComponent, CustomReuseStrategy, DefaultDetailsTabViewComponent, DefaultTabViewComponent, ErrorModalComponent, FRAMEWORK_VIEW_TYPE, FormView, FrameworkButtonsModule, FrameworkComponentsModule, FrameworkGridConfigsProvider, FrameworkModalsModule, FrameworkModule, FrameworkViewType, FrameworkViewsModule, LegacySubViewForm, LegacyTabViewDetails, LegacyTabViewList, ListView, MaxExportRows, ModalBase, MultiEditorLegacyModal, MultiEditorModal, MultiSelectModal, RouteHelper, Tab, TabBreadcrumbsComponent, TabService, TabViewBase, TabViewList, TabViewService, TabsComponent, ViewBase, ViewModal, ZAMBON_FRAMEWORK_I18N_ASSET, ZAMBON_FRAMEWORK_I18N_ASSET_PATH, ZAMBON_FRAMEWORK_I18N_RESOURCES, createZambonFrameworkTranslateLoader, provideZambonFrameworkTranslateLoader, provideZambonFrameworkTranslateService };
1066
- export type { AppConfigOptions, ExportFormat, ITab, ITabHistory, ZambonFrameworkTranslateConfig };
871
+ export declare abstract class LegacyTabViewList<TListModel> extends LegacyTabViewBase implements OnInit {
872
+ protected dataGridDataset: DataGridDataset;
873
+ private _selectedItem?;
874
+ private selectedRows;
875
+ protected get hasRowsSelected(): boolean;
876
+ protected get selectedItem(): TListModel | undefined;
877
+ constructor(dataGridDataset: DataGridDataset, route: ActivatedRoute, tabService: TabService);
878
+ ngOnInit(): void;
879
+ protected selectedRowChanged(): void;
880
+ static ɵfac: i0.ɵɵFactoryDeclaration<LegacyTabViewList<any>, never>;
881
+ static ɵcmp: i0.ɵɵComponentDeclaration<LegacyTabViewList<any>, "ng-component", never, {}, {}, never, never, true, never>;
882
+ }
883
+ export declare abstract class TabViewList<TListModel> extends TabViewBase implements OnInit {
884
+ protected dataGridDataset: DataGridDataset;
885
+ private _selectedItem?;
886
+ private selectionCount;
887
+ protected get hasRowsSelected(): boolean;
888
+ protected get selectedItem(): TListModel | undefined;
889
+ constructor();
890
+ ngOnInit(): void;
891
+ protected selectedRowChanged(): void;
892
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabViewList<any>, never>;
893
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabViewList<any>, "ng-component", never, {}, {}, never, never, true, never>;
894
+ }
895
+ export declare abstract class ListView<TEntityModel, TListModel> extends TabViewList<TListModel> implements OnInit {
896
+ protected dataProvider: DataProviderService<TEntityModel> | null;
897
+ protected resultDataset: MultiSelectResultDataset | null;
898
+ constructor();
899
+ ngOnInit(): void;
900
+ static ɵfac: i0.ɵɵFactoryDeclaration<ListView<any, any>, never>;
901
+ static ɵcmp: i0.ɵɵComponentDeclaration<ListView<any, any>, "ng-component", never, {}, {}, never, never, true, never>;
902
+ }
903
+ export declare abstract class MultiEditorLegacyModal extends ModalBase implements OnInit {
904
+ protected dataGridDataset: DataGridDataset;
905
+ protected multiEditorDataset: MultiEditorDataset;
906
+ protected formBuilder: FormBuilder;
907
+ protected _entityId?: number;
908
+ multiEditor: MultiEditorComponent;
909
+ set entityId(value: number | undefined);
910
+ savedChanges: EventEmitter<any>;
911
+ form: FormGroup;
912
+ constructor(dataGridDataset: DataGridDataset, multiEditorDataset: MultiEditorDataset, formBuilder: FormBuilder);
913
+ ngOnInit(): void;
914
+ toggle(): void;
915
+ abstract formSetup(): FormGroup;
916
+ static ɵfac: i0.ɵɵFactoryDeclaration<MultiEditorLegacyModal, never>;
917
+ static ɵcmp: i0.ɵɵComponentDeclaration<MultiEditorLegacyModal, "ng-component", never, {
918
+ "entityId": {
919
+ "alias": "entityId";
920
+ "required": false;
921
+ };
922
+ }, {
923
+ "savedChanges": "savedChanges";
924
+ }, never, never, true, never>;
925
+ }
926
+ export declare abstract class MultiEditorModal<TEntityModel> extends ModalBase implements OnInit {
927
+ protected multiEditor: MultiEditorComponent;
928
+ overrideParentID?: number;
929
+ savedChanges: EventEmitter<any>;
930
+ protected dataForm: FormGroup;
931
+ protected dataGridDataset: DataGridDataset;
932
+ protected dataProvider: DataProviderService<TEntityModel> | null;
933
+ protected formBuilder: FormBuilder;
934
+ protected formService: FormService;
935
+ protected multiEditorDataset: MultiEditorDataset;
936
+ protected selectionCount: number;
937
+ constructor();
938
+ ngOnInit(): void;
939
+ toggle(): void;
940
+ protected abstract formSetup(): FormGroup;
941
+ private updateParentID;
942
+ static ɵfac: i0.ɵɵFactoryDeclaration<MultiEditorModal<any>, never>;
943
+ static ɵcmp: i0.ɵɵComponentDeclaration<MultiEditorModal<any>, "ng-component", never, {
944
+ "overrideParentID": {
945
+ "alias": "overrideParentID";
946
+ "required": false;
947
+ };
948
+ }, {
949
+ "savedChanges": "savedChanges";
950
+ }, never, never, true, never>;
951
+ }
952
+ export declare abstract class MultiSelectModal extends ModalBase {
953
+ multiSelect: MultiSelectComponent;
954
+ savedChanges: EventEmitter<void>;
955
+ toggle(): void;
956
+ static ɵfac: i0.ɵɵFactoryDeclaration<MultiSelectModal, never>;
957
+ static ɵcmp: i0.ɵɵComponentDeclaration<MultiSelectModal, "ng-component", never, {}, {
958
+ "savedChanges": "savedChanges";
959
+ }, never, never, true, never>;
960
+ }
961
+ export declare abstract class ViewModal<TEntityModel> extends ModalBase implements OnInit {
962
+ protected modalComponent: IModal;
963
+ protected beginEditOnEntityLoad: boolean;
964
+ protected data$: Observable<TEntityModel | null>;
965
+ protected dataForm: FormGroup;
966
+ protected formBuilder: FormBuilder;
967
+ protected formService: FormService;
968
+ protected selectionCount: number;
969
+ private entityIdSubject;
970
+ constructor();
971
+ ngOnInit(): void;
972
+ toggle(entityID?: number): void;
973
+ protected abstract formSetup(): FormGroup;
974
+ protected abstract loadData(entityID?: number): Observable<TEntityModel | null>;
975
+ static ɵfac: i0.ɵɵFactoryDeclaration<ViewModal<any>, never>;
976
+ static ɵcmp: i0.ɵɵComponentDeclaration<ViewModal<any>, "ng-component", never, {}, {}, never, never, true, never>;
977
+ }
978
+ declare namespace button_edit_component_d_exports {
979
+ export { ButtonEditLegacyComponent };
980
+ }
981
+ export declare class ButtonEditLegacyComponent extends BaseButton {
982
+ readonly cancelColor: InputSignal<string>;
983
+ readonly cancelIcon: InputSignal<string>;
984
+ readonly cancelLabel: InputSignal<string>;
985
+ readonly editIcon: InputSignal<string>;
986
+ readonly editLabel: InputSignal<string>;
987
+ readonly form: InputSignal<LegacySubViewForm | undefined>;
988
+ readonly modal: InputSignal<ModalBase | undefined>;
989
+ protected onCancelAction(): void;
990
+ protected onEditAction(): void;
991
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonEditLegacyComponent, never>;
992
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonEditLegacyComponent, "framework-button-edit-legacy", never, {
993
+ "cancelColor": {
994
+ "alias": "cancelColor";
995
+ "required": false;
996
+ "isSignal": true;
997
+ };
998
+ "cancelIcon": {
999
+ "alias": "cancelIcon";
1000
+ "required": false;
1001
+ "isSignal": true;
1002
+ };
1003
+ "cancelLabel": {
1004
+ "alias": "cancelLabel";
1005
+ "required": false;
1006
+ "isSignal": true;
1007
+ };
1008
+ "editIcon": {
1009
+ "alias": "editIcon";
1010
+ "required": false;
1011
+ "isSignal": true;
1012
+ };
1013
+ "editLabel": {
1014
+ "alias": "editLabel";
1015
+ "required": false;
1016
+ "isSignal": true;
1017
+ };
1018
+ "form": {
1019
+ "alias": "form";
1020
+ "required": false;
1021
+ "isSignal": true;
1022
+ };
1023
+ "modal": {
1024
+ "alias": "modal";
1025
+ "required": false;
1026
+ "isSignal": true;
1027
+ };
1028
+ }, {}, never, never, true, never>;
1029
+ }
1030
+ declare namespace button_save_component_d_exports {
1031
+ export { ButtonSaveLegacyComponent };
1032
+ }
1033
+ export declare class ButtonSaveLegacyComponent extends BaseButton {
1034
+ private readonly errorModal;
1035
+ readonly defaultOption: InputSignal<number>;
1036
+ readonly form: InputSignal<LegacySubViewForm | undefined>;
1037
+ readonly tabView: InputSignal<LegacyTabViewDetails | undefined>;
1038
+ private formService;
1039
+ private tabService;
1040
+ constructor();
1041
+ protected onButtonClick(option?: string): void;
1042
+ finishLoading(status: 'failure' | 'warning' | 'success'): void;
1043
+ private setTabViewLoading;
1044
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonSaveLegacyComponent, never>;
1045
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonSaveLegacyComponent, "framework-button-save-legacy", never, {
1046
+ "defaultOption": {
1047
+ "alias": "defaultOption";
1048
+ "required": false;
1049
+ "isSignal": true;
1050
+ };
1051
+ "form": {
1052
+ "alias": "form";
1053
+ "required": false;
1054
+ "isSignal": true;
1055
+ };
1056
+ "tabView": {
1057
+ "alias": "tabView";
1058
+ "required": false;
1059
+ "isSignal": true;
1060
+ };
1061
+ }, {}, never, never, true, never>;
1062
+ }
1063
+ declare namespace button_views_component_d_exports {
1064
+ export { ButtonViewsLegacyComponent };
1065
+ }
1066
+ export declare class ButtonViewsLegacyComponent extends BaseButton {
1067
+ readonly views: InputSignal<IRibbonButtonOption[]>;
1068
+ readonly viewChanged: OutputEmitterRef<string | undefined>;
1069
+ clicked(option?: string): void;
1070
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonViewsLegacyComponent, never>;
1071
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonViewsLegacyComponent, "framework-button-views-legacy", never, {
1072
+ "views": {
1073
+ "alias": "views";
1074
+ "required": false;
1075
+ "isSignal": true;
1076
+ };
1077
+ }, {
1078
+ "viewChanged": "viewChanged";
1079
+ }, never, never, true, never>;
1080
+ }
1081
+ declare namespace button_open_record_component_d_exports {
1082
+ export { ButtonOpenRecordLegacyComponent };
1083
+ }
1084
+ export declare class ButtonOpenRecordLegacyComponent extends BaseButton implements OnInit {
1085
+ readonly endpoint: InputSignal<string>;
1086
+ readonly path: InputSignal<string>;
1087
+ readonly tabView: InputSignal<ITabView | undefined>;
1088
+ protected dataGridDataset: DataGridDataset;
1089
+ protected readonly selectionCount: WritableSignal<number>;
1090
+ private tabService;
1091
+ ngOnInit(): void;
1092
+ clicked(): void;
1093
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonOpenRecordLegacyComponent, never>;
1094
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonOpenRecordLegacyComponent, "framework-button-open-record-legacy", never, {
1095
+ "endpoint": {
1096
+ "alias": "endpoint";
1097
+ "required": false;
1098
+ "isSignal": true;
1099
+ };
1100
+ "path": {
1101
+ "alias": "path";
1102
+ "required": false;
1103
+ "isSignal": true;
1104
+ };
1105
+ "tabView": {
1106
+ "alias": "tabView";
1107
+ "required": false;
1108
+ "isSignal": true;
1109
+ };
1110
+ }, {}, never, never, true, never>;
1111
+ }
1112
+ declare namespace buttons_module_d_exports {
1113
+ export { FrameworkButtonsModule };
1114
+ }
1115
+ export declare class FrameworkButtonsModule {
1116
+ static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkButtonsModule, never>;
1117
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FrameworkButtonsModule, never, [typeof ButtonDeleteComponent, typeof ButtonEditComponent, typeof ButtonExportComponent, typeof ButtonFiltersComponent, typeof ButtonNewComponent, typeof ButtonOpenRecordComponent, typeof ButtonRefreshComponent, typeof ButtonSaveComponent, typeof ButtonViewsComponent, typeof ButtonNewLegacyComponent, typeof ButtonEditLegacyComponent, typeof ButtonSaveLegacyComponent, typeof ButtonViewsLegacyComponent, typeof ButtonOpenRecordLegacyComponent], [typeof ButtonDeleteComponent, typeof ButtonEditComponent, typeof ButtonExportComponent, typeof ButtonFiltersComponent, typeof ButtonNewComponent, typeof ButtonOpenRecordComponent, typeof ButtonRefreshComponent, typeof ButtonSaveComponent, typeof ButtonViewsComponent, typeof ButtonNewLegacyComponent, typeof ButtonEditLegacyComponent, typeof ButtonSaveLegacyComponent, typeof ButtonViewsLegacyComponent, typeof ButtonOpenRecordLegacyComponent]>;
1118
+ static ɵinj: i0.ɵɵInjectorDeclaration<FrameworkButtonsModule>;
1119
+ }
1120
+ declare namespace confirm_modal_component_d_exports {
1121
+ export { ConfirmModalComponent };
1122
+ }
1123
+ export declare class ConfirmModalComponent implements IModal {
1124
+ private readonly modal;
1125
+ readonly errorMessage: ModelSignal<string>;
1126
+ readonly isLoading: ModelSignal<boolean>;
1127
+ readonly message: InputSignal<string>;
1128
+ readonly messageIcon: InputSignal<string>;
1129
+ readonly messageIconColor: InputSignal<string>;
1130
+ readonly showMessageIcon: InputSignal<boolean>;
1131
+ readonly size: InputSignal<ModalSize>;
1132
+ readonly title: InputSignal<string>;
1133
+ protected formService: FormService | undefined;
1134
+ /**
1135
+ * Delegates to the inner modal. A signal view query, not @ViewChild: a computed reading a plain
1136
+ * query would never re-run when the query resolves, so the wrapper would answer against an
1137
+ * undefined child for ever.
1138
+ */
1139
+ readonly isOpen: Signal<boolean>;
1140
+ protected get hasErrorMessage(): boolean;
1141
+ protected get hasMessage(): boolean;
1142
+ private controlContainer;
1143
+ private get formGroup();
1144
+ beginLoading(): void;
1145
+ clearErrorMessage(): void;
1146
+ closeModal(): void;
1147
+ finishLoading(closeModal?: boolean): void;
1148
+ setErrorMessage(httpErrorResponse: HttpErrorResponse): void;
1149
+ toggleModal(): void;
1150
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmModalComponent, never>;
1151
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmModalComponent, "framework-confirm-modal", never, {
1152
+ "errorMessage": {
1153
+ "alias": "errorMessage";
1154
+ "required": false;
1155
+ "isSignal": true;
1156
+ };
1157
+ "isLoading": {
1158
+ "alias": "isLoading";
1159
+ "required": false;
1160
+ "isSignal": true;
1161
+ };
1162
+ "message": {
1163
+ "alias": "message";
1164
+ "required": false;
1165
+ "isSignal": true;
1166
+ };
1167
+ "messageIcon": {
1168
+ "alias": "messageIcon";
1169
+ "required": false;
1170
+ "isSignal": true;
1171
+ };
1172
+ "messageIconColor": {
1173
+ "alias": "messageIconColor";
1174
+ "required": false;
1175
+ "isSignal": true;
1176
+ };
1177
+ "showMessageIcon": {
1178
+ "alias": "showMessageIcon";
1179
+ "required": false;
1180
+ "isSignal": true;
1181
+ };
1182
+ "size": {
1183
+ "alias": "size";
1184
+ "required": false;
1185
+ "isSignal": true;
1186
+ };
1187
+ "title": {
1188
+ "alias": "title";
1189
+ "required": false;
1190
+ "isSignal": true;
1191
+ };
1192
+ }, {
1193
+ "errorMessage": "errorMessageChange";
1194
+ "isLoading": "isLoadingChange";
1195
+ }, never, ["*", "[footer]"], true, never>;
1196
+ }
1197
+ declare namespace error_modal_component_d_exports {
1198
+ export { ErrorModalComponent };
1199
+ }
1200
+ export declare class ErrorModalComponent {
1201
+ private readonly modal;
1202
+ readonly errorMessage: ModelSignal<string>;
1203
+ readonly size: InputSignal<ModalSize>;
1204
+ readonly subtitle: ModelSignal<string>;
1205
+ readonly title: ModelSignal<string>;
1206
+ readonly closed: OutputEmitterRef<void>;
1207
+ /**
1208
+ * Delegates to the inner modal. A signal view query, not @ViewChild: a computed reading a plain
1209
+ * query would never re-run when the query resolves, so the wrapper would answer against an
1210
+ * undefined child for ever.
1211
+ */
1212
+ readonly isOpen: Signal<boolean>;
1213
+ closeModal(): void;
1214
+ showModal(error: string | HttpErrorResponse): void;
1215
+ static ɵfac: i0.ɵɵFactoryDeclaration<ErrorModalComponent, never>;
1216
+ static ɵcmp: i0.ɵɵComponentDeclaration<ErrorModalComponent, "framework-error-modal", never, {
1217
+ "errorMessage": {
1218
+ "alias": "errorMessage";
1219
+ "required": false;
1220
+ "isSignal": true;
1221
+ };
1222
+ "size": {
1223
+ "alias": "size";
1224
+ "required": false;
1225
+ "isSignal": true;
1226
+ };
1227
+ "subtitle": {
1228
+ "alias": "subtitle";
1229
+ "required": false;
1230
+ "isSignal": true;
1231
+ };
1232
+ "title": {
1233
+ "alias": "title";
1234
+ "required": false;
1235
+ "isSignal": true;
1236
+ };
1237
+ }, {
1238
+ "errorMessage": "errorMessageChange";
1239
+ "subtitle": "subtitleChange";
1240
+ "title": "titleChange";
1241
+ "closed": "closed";
1242
+ }, never, never, true, never>;
1243
+ }
1244
+ declare namespace modals_module_d_exports {
1245
+ export { FrameworkModalsModule };
1246
+ }
1247
+ export declare class FrameworkModalsModule {
1248
+ static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkModalsModule, never>;
1249
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FrameworkModalsModule, never, [typeof ConfirmModalComponent, typeof ErrorModalComponent], [typeof ConfirmModalComponent, typeof ErrorModalComponent]>;
1250
+ static ɵinj: i0.ɵɵInjectorDeclaration<FrameworkModalsModule>;
1251
+ }
1252
+ declare namespace default_tab_view_component_d_exports {
1253
+ export { DefaultTabViewComponent };
1254
+ }
1255
+ export declare class DefaultTabViewComponent implements OnDestroy, OnInit {
1256
+ protected destroy$: Subject<boolean>;
1257
+ protected readonly ribbonTemplate: WritableSignal<TemplateRef<any> | undefined>;
1258
+ private hasNamedAView;
1259
+ private ribbonViewTemplate;
1260
+ protected tabViewService: TabViewService;
1261
+ ngOnDestroy(): void;
1262
+ ngOnInit(): void;
1263
+ /**
1264
+ * Claims the ribbon published before the active view had a name.
1265
+ *
1266
+ * A child view publishes its ribbon from ngAfterViewInit, and the view is only named afterwards,
1267
+ * so the first template of a tab is always cached under an empty id. For a tab opened straight
1268
+ * at a non-default view that id is never looked up again, the ribbon is emptied, and nothing
1269
+ * refills it -- a tab being re-activated has its child re-attached rather than re-created, so
1270
+ * ngAfterViewInit does not run a second time.
1271
+ *
1272
+ * Only the very first naming may claim it. The empty id is not a spare bucket: it is the default
1273
+ * view's own id, because that view is the one whose URL carries no sub-path. Once the user
1274
+ * starts switching views the unnamed template belongs to the view being *left*, and handing it
1275
+ * to the view being entered showed the previous view's buttons on the new one and left the
1276
+ * previous one with no buttons at all.
1277
+ *
1278
+ * @param viewId The view that has just become active.
1279
+ */
1280
+ private claimUnnamedRibbon;
1281
+ /**
1282
+ * One signal write, where there used to be a detectChanges()/markForCheck() pair.
1283
+ *
1284
+ * Those existed to render a real template at once while deferring a clear, so switching views
1285
+ * did not tear an already rendered ribbon down for a frame before the incoming view pushed its
1286
+ * own. A signal gets both for free: writes coalesce into the next pass, so a clear followed by
1287
+ * a set moments later is one render, not two. The NG0100 hazard goes with it -- a signal write
1288
+ * after the outlet has been checked schedules another pass instead of throwing.
1289
+ */
1290
+ private updateRibbonTemplate;
1291
+ static ɵfac: i0.ɵɵFactoryDeclaration<DefaultTabViewComponent, never>;
1292
+ static ɵcmp: i0.ɵɵComponentDeclaration<DefaultTabViewComponent, "framework-default-tab-view", never, {}, {}, never, never, true, never>;
1293
+ }
1294
+ declare namespace default_details_tab_view_component_d_exports {
1295
+ export { DefaultDetailsTabViewComponent };
1296
+ }
1297
+ export declare class DefaultDetailsTabViewComponent extends DefaultTabViewComponent implements OnDestroy, OnInit {
1298
+ private readonly errorModal;
1299
+ protected readonly containerIcon: WritableSignal<string | undefined>;
1300
+ protected readonly containerTitle: WritableSignal<string | undefined>;
1301
+ protected readonly detailsViewRoute: WritableSignal<ActivatedRouteSnapshot | null>;
1302
+ protected dataProviderClassName?: any;
1303
+ private dataProviderService;
1304
+ private hasEntityID;
1305
+ private hasLoadError;
1306
+ private router;
1307
+ private tabService;
1308
+ protected get componentName(): string;
1309
+ ngOnInit(): void;
1310
+ protected onErrorModalClosed(): void;
1311
+ static ɵfac: i0.ɵɵFactoryDeclaration<DefaultDetailsTabViewComponent, never>;
1312
+ static ɵcmp: i0.ɵɵComponentDeclaration<DefaultDetailsTabViewComponent, "framework-default-details-tab-view", never, {}, {}, never, never, true, never>;
1313
+ }
1314
+ declare namespace tab_breadcrumbs_component_d_exports {
1315
+ export { TabBreadcrumbsComponent };
1316
+ }
1317
+ export declare class TabBreadcrumbsComponent {
1318
+ private tabService;
1319
+ /**
1320
+ * Reads straight through to the service, which is the trap this component used to be the
1321
+ * example of: a getter over an array a service mutates elsewhere, with nothing to mark this
1322
+ * view dirty. TabService announces its own changes now, and that getter takes the dependency,
1323
+ * so no strategy is needed here.
1324
+ */
1325
+ protected get tabHistory(): ITab[];
1326
+ protected onTitleClick(tab: ITab): void;
1327
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabBreadcrumbsComponent, never>;
1328
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabBreadcrumbsComponent, "framework-tab-breadcrumbs", never, {}, {}, never, never, true, never>;
1329
+ }
1330
+ declare namespace tabs_component_d_exports {
1331
+ export { TabsComponent };
1332
+ }
1333
+ export declare class TabsComponent implements AfterViewInit, OnDestroy, OnInit {
1334
+ private ngZone;
1335
+ private router;
1336
+ private tabService;
1337
+ private tabsNav?;
1338
+ private static instances;
1339
+ /** Unique per instance: the ids below are referenced by aria-controls/aria-labelledby. */
1340
+ private readonly instanceId;
1341
+ /**
1342
+ * Fingerprint of everything that can invalidate the strip's scroll position: which tab is
1343
+ * selected, how many there are, and the strip's own geometry. Deliberately does NOT include
1344
+ * scrollLeft -- the user scrolling by hand must not make us yank the strip back.
1345
+ */
1346
+ private lastStripSignature;
1347
+ private navResizeObserver?;
1348
+ private isDestroyed;
1349
+ /** Drive the scroll buttons. Only ever assigned outside a change-detection pass (see below). */
1350
+ protected readonly canScrollLeft: WritableSignal<boolean>;
1351
+ protected readonly canScrollRight: WritableSignal<boolean>;
1352
+ /**
1353
+ * Whether the strip holds more tabs than it has room for. This decides that the buttons exist;
1354
+ * canScrollLeft and canScrollRight only decide whether each one is enabled.
1355
+ *
1356
+ * They used to decide both, so a button vanished the moment you reached the end it pointed at.
1357
+ * The strip then changed width under the pointer, and a click could land after the button had
1358
+ * already unmounted and do nothing — which is what "sometimes it does not move" was.
1359
+ */
1360
+ protected readonly isOverflowing: WritableSignal<boolean>;
1361
+ /**
1362
+ * Whether anything reaches the strip's right edge: a tab, or the right scroll button. While
1363
+ * something does, the panel's top-right corner is square, because the card's corner then belongs
1364
+ * to the strip. Rounding both leaves whatever sits at the edge standing over the sweep where the
1365
+ * panel has curved away and is not there yet — a piece floating past the corner.
1366
+ */
1367
+ protected readonly isFlushRight: WritableSignal<boolean>;
1368
+ protected get activeHistory(): ITabHistory[] | null;
1369
+ protected get activeTab(): string | null;
1370
+ protected get hasTabs(): boolean;
1371
+ protected get openTabs(): ITab[];
1372
+ protected get tabDisplayTitles(): (string | undefined)[];
1373
+ protected get tabLoadingStates(): boolean[];
1374
+ /** Id of the panel these tabs control; referenced by each tab's aria-controls. */
1375
+ protected get panelId(): string;
1376
+ /** Id of the selected tab, so the panel can name the tab that labels it. */
1377
+ protected get activeTabId(): string | null;
1378
+ protected trackByFn: (index: number, tab: ITab) => string;
1379
+ constructor(ngZone: NgZone, router: Router, tabService: TabService);
1380
+ ngAfterViewInit(): void;
1381
+ ngOnDestroy(): void;
1382
+ ngOnInit(): void;
1383
+ protected onActivateTab(tab: ITab): void;
1384
+ protected onCloseTab(index: number): void;
1385
+ /** Middle click closes a tab, the way it does in a browser. */
1386
+ protected onTabAuxClick(event: MouseEvent, index: number): void;
1387
+ /**
1388
+ * Roving focus. A tablist is a single tab stop: Tab reaches the selected tab, and the
1389
+ * arrow keys move between tabs from there. A delta of 0 means go to `from` exactly,
1390
+ * which is what Home and End want.
1391
+ */
1392
+ protected onMoveFocus(from: number, delta: number): void;
1393
+ /** The scroll buttons at each end of the strip. `direction` is -1 for left, 1 for right. */
1394
+ protected onScrollStrip(direction: number): void;
1395
+ protected isTabActive(tab: ITab): boolean;
1396
+ /** Stable per index, so aria-controls and aria-labelledby have something to point at. */
1397
+ protected tabId(index: number): string;
1398
+ private tabElements;
1399
+ /** Moves focus AND selection: this tablist follows the automatic-activation pattern. */
1400
+ private focusTab;
1401
+ /**
1402
+ * Everything that invalidates the scroll position, in one cheap string. The geometry is part
1403
+ * of it because the window resizing or the sidebar collapsing can push the selected tab out
1404
+ * of sight without the tab list changing at all -- which is precisely how you end up looking
1405
+ * at a panel whose tab is nowhere on screen.
1406
+ */
1407
+ private stripSignature;
1408
+ /** Keeps the selected tab on screen. Called from a microtask, never mid-change-detection. */
1409
+ private scrollActiveTabIntoView;
1410
+ /**
1411
+ * Recomputes whether either scroll button applies. Reads first and only enters the zone when
1412
+ * a button actually flips, so an ordinary scroll costs one layout read and no render.
1413
+ */
1414
+ private syncScrollAffordance;
1415
+ /** Everything a geometry change implies: the selected tab may be off-screen, and the scroll
1416
+ * buttons may have appeared or gone. */
1417
+ private remeasureStrip;
1418
+ /** Arrow function: registered and removed as a listener, so it must keep its `this`. */
1419
+ private onNavScroll;
1420
+ /**
1421
+ * A tab strip is horizontal but a mouse wheel is vertical, so without this the only way to
1422
+ * reach an off-screen tab with a plain wheel mouse is the buttons. Trackpads and shift+wheel
1423
+ * already produce deltaX, so those are left alone.
1424
+ */
1425
+ private onNavWheel;
1426
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabsComponent, never>;
1427
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabsComponent, "framework-tabs", never, {}, {}, never, ["*"], true, never>;
1428
+ }
1429
+ declare namespace views_module_d_exports {
1430
+ export { FrameworkViewsModule };
1431
+ }
1432
+ export declare class FrameworkViewsModule {
1433
+ static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkViewsModule, never>;
1434
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FrameworkViewsModule, never, [typeof DefaultDetailsTabViewComponent, typeof DefaultTabViewComponent, typeof TabBreadcrumbsComponent, typeof TabsComponent], [typeof DefaultDetailsTabViewComponent, typeof DefaultTabViewComponent, typeof TabsComponent]>;
1435
+ static ɵinj: i0.ɵɵInjectorDeclaration<FrameworkViewsModule>;
1436
+ }
1437
+ declare namespace components_module_d_exports {
1438
+ export { FrameworkComponentsModule };
1439
+ }
1440
+ export declare class FrameworkComponentsModule {
1441
+ static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkComponentsModule, never>;
1442
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FrameworkComponentsModule, never, never, [typeof FrameworkButtonsModule, typeof FrameworkModalsModule, typeof FrameworkViewsModule]>;
1443
+ static ɵinj: i0.ɵɵInjectorDeclaration<FrameworkComponentsModule>;
1444
+ }
1445
+ export declare const APP_CONFIG: InjectionToken<AppConfig>;
1446
+ export interface AppConfigOptions {
1447
+ appName?: string;
1448
+ companyName?: string;
1449
+ environment?: string;
1450
+ logoUrl?: string;
1451
+ loginBackgroundUrl?: string;
1452
+ loginLogoUrl?: string;
1453
+ notificationsEnabled?: boolean;
1454
+ notificationsUrl?: string;
1455
+ version?: string;
1456
+ }
1457
+ export declare class AppConfig {
1458
+ BASE_URL: string;
1459
+ /** Application name shown in the top bar brand block. */
1460
+ appName: string;
1461
+ /** Company name shown beneath the application name. */
1462
+ companyName: string;
1463
+ /** Environment key (e.g. 'DEV', 'QA', 'STG', 'PROD'). Empty string when unset. */
1464
+ environment: string;
1465
+ /** Optional brand logo URL shown in the top bar. */
1466
+ logoUrl?: string;
1467
+ /** Optional photograph behind the sign-in screen. Without one the app backdrop shows. */
1468
+ loginBackgroundUrl?: string;
1469
+ /** Optional logo on the sign-in card. Falls back to `logoUrl`. */
1470
+ loginLogoUrl?: string;
1471
+ /** Whether the top-bar notifications feature (bell + badge) is enabled. */
1472
+ notificationsEnabled: boolean;
1473
+ /** SignalR hub URL the notifications service connects to when enabled. */
1474
+ notificationsUrl: string;
1475
+ /** Application version string (e.g. '1.4.0'), shown at the bottom of the navigation. */
1476
+ version: string;
1477
+ constructor(baseUrl: string, options?: AppConfigOptions);
1478
+ }
1479
+ export declare class FrameworkGridConfigsProvider extends DataGridConfigsProvider {
1480
+ constructor();
1481
+ static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkGridConfigsProvider, never>;
1482
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
1483
+ }
1484
+ export declare class FrameworkModule {
1485
+ static ɵfac: i0.ɵɵFactoryDeclaration<FrameworkModule, never>;
1486
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FrameworkModule, never, never, [typeof FrameworkComponentsModule]>;
1487
+ static ɵinj: i0.ɵɵInjectorDeclaration<FrameworkModule>;
1488
+ }
1489
+ export declare abstract class BackendFormValidationHelper {
1490
+ static validateAllFormFields(httpErrorResponse: HttpErrorResponse, formGroup: FormGroup): void;
1491
+ }
1492
+ export declare abstract class RouteHelper {
1493
+ static getRouteByData(routeSnapshot: ActivatedRouteSnapshot | null, key: string, value: any): ActivatedRouteSnapshot | null;
1494
+ static getRouteWithComponent(routeSnapshot: ActivatedRouteSnapshot | null, component: any): ActivatedRouteSnapshot | null;
1495
+ static getRouteURL(route: ActivatedRouteSnapshot, rootLevel?: boolean): string;
1496
+ }
1497
+ export declare const ZAMBON_FRAMEWORK_I18N_ASSET_PATH = "assets/i18n/zambon-dev/framework";
1498
+ export declare const ZAMBON_FRAMEWORK_I18N_ASSET: AngularAssetPattern;
1499
+ export declare const ZAMBON_FRAMEWORK_I18N_RESOURCES: TranslationResource[];
1500
+ export interface ZambonFrameworkTranslateConfig {
1501
+ defaultLanguage?: string;
1502
+ appResources?: (string | TranslationResource)[];
1503
+ }
1504
+ export declare function createZambonFrameworkTranslateLoader(httpBackend: HttpBackend, appResources?: (string | TranslationResource)[]): MultiTranslateHttpLoader;
1505
+ export declare function provideZambonFrameworkTranslateLoader(appResources?: (string | TranslationResource)[]): Provider;
1506
+ export declare function provideZambonFrameworkTranslateService(config?: ZambonFrameworkTranslateConfig): EnvironmentProviders;
1507
+ export { DateValidators };