@kuzntsv/uikit 1.0.82 → 1.0.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,28 +1,29 @@
1
- import * as i0 from "@angular/core";
2
- import { AfterViewInit, ElementRef, EnvironmentProviders, InjectionToken, Injector, OnDestroy, OnInit, PipeTransform, WritableSignal } from "@angular/core";
3
- import { NotificationService, RoleService, SignalSelectionModel } from "@kuzntsv/uikit";
4
1
  import z, { z as z$1 } from "zod";
2
+ import * as i0 from "@angular/core";
3
+ import { EnvironmentProviders, InjectionToken, Injector, OnDestroy, PipeTransform, WritableSignal } from "@angular/core";
4
+ import { LoaderService, NotificationService, RoleService, SignalSelectionModel } from "@kuzntsv/uikit";
5
5
  import { HttpClient, HttpContext, HttpParams, HttpResourceRef } from "@angular/common/http";
6
6
  import { Observable, Subject, Subscription } from "rxjs";
7
- import { FormControl, FormGroup } from "@angular/forms";
8
7
  import { MatAutocompleteSelectedEvent } from "@angular/material/autocomplete";
8
+ import { FieldTree, FormValueControl } from "@angular/forms/signals";
9
9
  import { NativeDateAdapter } from "@angular/material/core";
10
10
  import { MatDialog, MatDialogRef } from "@angular/material/dialog";
11
- import { SafeUrl } from "@angular/platform-browser";
11
+ import { SafeHtml, SafeResourceUrl, SafeScript, SafeStyle, SafeUrl } from "@angular/platform-browser";
12
+ import { MatSelectChange } from "@angular/material/select";
12
13
  import { MatMenuTrigger } from "@angular/material/menu";
13
14
  import { MatPaginator, PageEvent } from "@angular/material/paginator";
14
15
  import { MatSort, Sort } from "@angular/material/sort";
15
16
  import { MatTableDataSource } from "@angular/material/table";
17
+ import { FormGroup } from "@angular/forms";
16
18
  import { CanActivateFn, Router } from "@angular/router";
17
- import { FieldTree } from "@angular/forms/signals";
18
- interface Authenticate {
19
- username: string;
20
- password: string;
21
- }
22
- export declare class LoginPageComponent implements OnInit {
23
- pending: boolean;
24
- error: string;
25
- isKiosk: boolean;
19
+ declare const loginSchema: z$1.ZodObject<{
20
+ username: z$1.ZodString;
21
+ password: z$1.ZodString;
22
+ }, z$1.core.$strip>;
23
+ type Authenticate = z$1.infer<typeof loginSchema>;
24
+ export declare class LoginPageComponent {
25
+ pending: import("@angular/core").WritableSignal<boolean>;
26
+ isKiosk: import("@angular/core").WritableSignal<boolean>;
26
27
  /**
27
28
  * Идентификатор АС получаем автоматически из ActivatedRoute Data!
28
29
  * (Для этого в настройках роутера должен быть включен withComponentInputBinding())
@@ -30,11 +31,13 @@ export declare class LoginPageComponent implements OnInit {
30
31
  idCas: import("@angular/core").InputSignal<number>;
31
32
  private readonly authService;
32
33
  private readonly router;
33
- private readonly loaderService;
34
34
  private readonly notificationService;
35
- ngOnInit(): void;
36
- onSubmit($event: Authenticate): void;
37
- onSubmitPermit($event: string): void;
35
+ constructor();
36
+ onSubmit(event: Authenticate): Promise<void>;
37
+ onSubmitPermit(permit: string): Promise<void>;
38
+ private startLoading;
39
+ private finishLoading;
40
+ private handleError;
38
41
  private handleSuccessLogin;
39
42
  static ɵfac: i0.ɵɵFactoryDeclaration<LoginPageComponent, never>;
40
43
  static ɵcmp: i0.ɵɵComponentDeclaration<LoginPageComponent, "ngx-uik-login-page", never, {
@@ -59,90 +62,72 @@ export interface ChipItem {
59
62
  value: string;
60
63
  viewValue: string;
61
64
  }
62
- export declare class BaseMatChipComponent {
65
+ export declare class ChipInputAutocompleteComponent implements FormValueControl<string[]> {
66
+ private readonly formFieldDirective;
67
+ /** Все элементы. */
63
68
  items: import("@angular/core").InputSignal<ChipItem[]>;
64
- selectedItemsInput: import("@angular/core").InputSignal<string[]>;
69
+ /** Заголовок. */
65
70
  title: import("@angular/core").InputSignal<string>;
66
- selectedItemsChange: import("@angular/core").OutputEmitterRef<string[]>;
67
- readonly input: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
71
+ readonly value: import("@angular/core").ModelSignal<string[]>;
72
+ readonly filterQuery: import("@angular/core").ModelSignal<string>;
68
73
  separatorKeysCodes: number[];
69
- inputCtrl: FormControl<any>;
70
- filteredItems$?: Observable<ChipItem[]>;
71
- selectedItems: ChipItem[];
72
- constructor();
74
+ readonly selectedItems: import("@angular/core").WritableSignal<ChipItem[]>;
75
+ readonly filteredItems: import("@angular/core").Signal<ChipItem[]>;
76
+ readonly isDisabled: import("@angular/core").Signal<boolean>;
77
+ readonly isInvalid: import("@angular/core").Signal<boolean>;
73
78
  remove(value: string): void;
74
79
  selected(event: MatAutocompleteSelectedEvent): void;
75
- private _filter;
76
80
  onCloseClick($event: MouseEvent): void;
77
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseMatChipComponent, never>;
78
- static ɵcmp: i0.ɵɵComponentDeclaration<BaseMatChipComponent, "ngx-uik-chip-input-autocomplete", never, {
81
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChipInputAutocompleteComponent, never>;
82
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChipInputAutocompleteComponent, "ngx-uik-chip-input-autocomplete", never, {
79
83
  "items": {
80
84
  "alias": "items";
81
85
  "required": false;
82
86
  "isSignal": true;
83
87
  };
84
- "selectedItemsInput": {
85
- "alias": "selectedItemsInput";
88
+ "title": {
89
+ "alias": "title";
86
90
  "required": false;
87
91
  "isSignal": true;
88
92
  };
89
- "title": {
90
- "alias": "title";
93
+ "value": {
94
+ "alias": "value";
95
+ "required": false;
96
+ "isSignal": true;
97
+ };
98
+ "filterQuery": {
99
+ "alias": "filterQuery";
91
100
  "required": false;
92
101
  "isSignal": true;
93
102
  };
94
103
  }, {
95
- "selectedItemsChange": "selectedItemsChange";
104
+ "value": "valueChange";
105
+ "filterQuery": "filterQueryChange";
96
106
  }, never, never, true, never>;
97
107
  }
98
- export declare class CustomDateAdapter extends NativeDateAdapter {
99
- parse(value: any): Date | null;
100
- format(date: Date, displayFormat: Object): string;
101
- static ɵfac: i0.ɵɵFactoryDeclaration<CustomDateAdapter, never>;
102
- static ɵprov: i0.ɵɵInjectableDeclaration<any>;
103
- }
104
- export declare const MY_NATIVE_FORMATS: {
105
- parse: {
106
- dateInput: string;
107
- };
108
- display: {
109
- dateInput: string;
110
- monthYearLabel: {
111
- year: string;
112
- month: string;
113
- };
114
- dateA11yLabel: {
115
- year: string;
116
- month: string;
117
- day: string;
118
- };
119
- monthYearA11yLabel: {
120
- year: string;
121
- month: string;
122
- };
123
- };
124
- };
125
- export interface DateRange {
126
- begin: string;
127
- end: string;
128
- }
129
- export declare function dateFormat(date: Date | null | undefined): string;
130
- export declare class DateRangeInputComponent implements OnInit, OnDestroy {
108
+ export declare class DateRangeInputComponent {
109
+ readonly DEFAULT_MIN_DATE: Date;
131
110
  label: import("@angular/core").InputSignal<string>;
132
- dateRange: import("@angular/core").InputSignal<DateRange>;
111
+ dateRange: import("@angular/core").InputSignal<{
112
+ begin: string;
113
+ end: string;
114
+ }>;
133
115
  minDate: import("@angular/core").InputSignal<Date>;
134
116
  clearInput: import("@angular/core").InputSignal<any>;
135
117
  required: import("@angular/core").InputSignal<boolean>;
136
- dateRangeChange: import("@angular/core").OutputEmitterRef<DateRange>;
137
- form: FormGroup<{
138
- begin: FormControl<any>;
139
- end: FormControl<any>;
118
+ dateRangeChange: import("@angular/core").OutputEmitterRef<{
119
+ begin: string;
120
+ end: string;
140
121
  }>;
141
- subscription: Subscription;
122
+ formModel: import("@angular/core").WritableSignal<{
123
+ begin: Date | null;
124
+ end: Date | null;
125
+ }>;
126
+ form: import("@angular/forms/signals").FieldTree<{
127
+ begin: Date | null;
128
+ end: Date | null;
129
+ }, string | number, "writable">;
142
130
  constructor();
143
- ngOnInit(): void;
144
- ngOnDestroy(): void;
145
- private rangeToDateDateRange;
146
131
  static ɵfac: i0.ɵɵFactoryDeclaration<DateRangeInputComponent, never>;
147
132
  static ɵcmp: i0.ɵɵComponentDeclaration<DateRangeInputComponent, "ngx-uik-date-range-input", never, {
148
133
  "label": {
@@ -174,6 +159,49 @@ export declare class DateRangeInputComponent implements OnInit, OnDestroy {
174
159
  "dateRangeChange": "dateRangeChange";
175
160
  }, never, never, true, never>;
176
161
  }
162
+ export declare class CustomDateAdapter extends NativeDateAdapter {
163
+ parse(value: any): Date | null;
164
+ format(date: Date, displayFormat: Object): string;
165
+ static ɵfac: i0.ɵɵFactoryDeclaration<CustomDateAdapter, never>;
166
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
167
+ }
168
+ export declare const MY_NATIVE_FORMATS: {
169
+ parse: {
170
+ dateInput: string;
171
+ };
172
+ display: {
173
+ dateInput: string;
174
+ monthYearLabel: {
175
+ year: string;
176
+ month: string;
177
+ };
178
+ dateA11yLabel: {
179
+ year: string;
180
+ month: string;
181
+ day: string;
182
+ };
183
+ monthYearA11yLabel: {
184
+ year: string;
185
+ month: string;
186
+ };
187
+ };
188
+ };
189
+ export declare const dateRangeFormSchema: (isRequired: boolean) => z$1.ZodObject<{
190
+ begin: z$1.ZodNullable<z$1.ZodInstanceOf<Date>>;
191
+ end: z$1.ZodNullable<z$1.ZodInstanceOf<Date>>;
192
+ }, z$1.core.$strip>;
193
+ export type DateRangeForm = z$1.output<ReturnType<typeof dateRangeFormSchema>>;
194
+ export declare const dateRangeSchema: (isRequired: boolean) => z$1.ZodPipe<z$1.ZodObject<{
195
+ begin: z$1.ZodNullable<z$1.ZodInstanceOf<Date>>;
196
+ end: z$1.ZodNullable<z$1.ZodInstanceOf<Date>>;
197
+ }, z$1.core.$strip>, z$1.ZodTransform<{
198
+ begin: string;
199
+ end: string;
200
+ }, {
201
+ begin: Date | null;
202
+ end: Date | null;
203
+ }>>;
204
+ export type DateRange = z$1.output<ReturnType<typeof dateRangeSchema>>;
177
205
  export declare enum DialogAction {
178
206
  Add = "Добавить",
179
207
  Edit = "Изменить",
@@ -188,16 +216,15 @@ export interface DialogData {
188
216
  btnYesTitle: string;
189
217
  }
190
218
  export declare class DialogComponent {
191
- readonly data: DialogData;
219
+ readonly data: DialogData | null;
192
220
  readonly dialogRef: MatDialogRef<any, any>;
193
- constructor();
194
- onNoClick(): void;
221
+ readonly dialogData: DialogData;
195
222
  static ɵfac: i0.ɵɵFactoryDeclaration<DialogComponent, never>;
196
223
  static ɵcmp: i0.ɵɵComponentDeclaration<DialogComponent, "ngx-uik-dialog", never, {}, {}, never, never, true, never>;
197
224
  }
198
225
  export declare class EmptyComponent {
199
226
  static ɵfac: i0.ɵɵFactoryDeclaration<EmptyComponent, never>;
200
- static ɵcmp: i0.ɵɵComponentDeclaration<EmptyComponent, "app-empty-route-guard-holder", never, {}, {}, never, never, true, never>;
227
+ static ɵcmp: i0.ɵɵComponentDeclaration<EmptyComponent, "ngx-uik-empty-route-guard-holder", never, {}, {}, never, never, true, never>;
201
228
  }
202
229
  export declare class NavBarComponent extends BaseNavBarMenuClass {
203
230
  /** Видимость панели, когда loggedIn === false. */
@@ -217,7 +244,6 @@ export declare class NavBarComponent extends BaseNavBarMenuClass {
217
244
  /** Нажата кнопка "Выйти". */
218
245
  logout: import("@angular/core").OutputEmitterRef<string>;
219
246
  private readonly dialog;
220
- constructor();
221
247
  onLogout(): void;
222
248
  openDialog(): void;
223
249
  static ɵfac: i0.ɵɵFactoryDeclaration<NavBarComponent, never>;
@@ -265,76 +291,65 @@ export declare class NotFoundComponent {
265
291
  static ɵfac: i0.ɵɵFactoryDeclaration<NotFoundComponent, never>;
266
292
  static ɵcmp: i0.ɵɵComponentDeclaration<NotFoundComponent, "ngx-uik-not-found", never, {}, {}, never, never, true, never>;
267
293
  }
268
- export declare class ProgressSpinnerComponent implements AfterViewInit {
269
- private readonly cdRef;
270
- ngAfterViewInit(): void;
271
- static ɵfac: i0.ɵɵFactoryDeclaration<ProgressSpinnerComponent, never>;
272
- static ɵcmp: i0.ɵɵComponentDeclaration<ProgressSpinnerComponent, "ngx-uik-loader", never, {}, {}, never, never, true, never>;
273
- }
274
294
  interface SelectItem$1 {
275
295
  value: string;
276
296
  viewValue: string;
277
297
  }
278
- export declare class BaseSelectAutocompleteWithVsComponent implements OnInit, OnDestroy {
298
+ export declare class SelectAutocompleteWithVsComponent implements FormValueControl<string | undefined> {
299
+ readonly ITEM_HEIGHT_PX = 50;
300
+ readonly MAX_VISIBLE_ITEMS = 4;
301
+ readonly MAX_HEIGHT_PX = 200;
302
+ private readonly formFieldDirective;
303
+ /** Все элементы. */
279
304
  items: import("@angular/core").InputSignal<SelectItem$1[]>;
280
- selectedItemInput: import("@angular/core").InputSignal<SelectItem$1 | undefined>;
305
+ /** Заголовок. */
281
306
  title: import("@angular/core").InputSignal<string>;
282
- isVisible: import("@angular/core").InputSignal<boolean>;
283
- isRequired: import("@angular/core").InputSignal<boolean>;
284
- isDisabled: import("@angular/core").InputSignal<boolean>;
307
+ /** Ширина. */
285
308
  width: import("@angular/core").InputSignal<string>;
286
- selectedItem: import("@angular/core").WritableSignal<SelectItem$1 | undefined>;
287
- selectedItemChange: import("@angular/core").OutputEmitterRef<string>;
288
- height: string;
289
- inputCtrl: FormControl<any>;
290
- filteredItems: SelectItem$1[];
291
- subscription: Subscription;
309
+ readonly value: import("@angular/core").ModelSignal<string | undefined>;
310
+ readonly filterQuery: import("@angular/core").ModelSignal<string>;
311
+ readonly isDisabled: import("@angular/core").Signal<boolean>;
312
+ readonly isInvalid: import("@angular/core").Signal<boolean>;
313
+ readonly debouncedQuery: import("@angular/core").Resource<string>;
314
+ readonly filteredItems: import("@angular/core").Signal<SelectItem$1[]>;
315
+ readonly height: import("@angular/core").Signal<string>;
292
316
  constructor();
293
- ngOnInit(): void;
294
- ngOnDestroy(): void;
295
- onSelectedItemChange(item: any): void;
317
+ readonly selectedItemObject: import("@angular/core").Signal<SelectItem$1 | undefined>;
318
+ onOptionSelected(event: MatAutocompleteSelectedEvent): void;
319
+ onInputChanges(event: Event): void;
320
+ onBlur(): void;
296
321
  onClearClick($event: MouseEvent): void;
297
- displayWithFn(lookup: any): any;
298
- private setFileredItems;
299
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseSelectAutocompleteWithVsComponent, never>;
300
- static ɵcmp: i0.ɵɵComponentDeclaration<BaseSelectAutocompleteWithVsComponent, "ngx-uik-select-autocomplete-with-vs", never, {
322
+ displayWithFn(item: SelectItem$1 | null | undefined): string;
323
+ static ɵfac: i0.ɵɵFactoryDeclaration<SelectAutocompleteWithVsComponent, never>;
324
+ static ɵcmp: i0.ɵɵComponentDeclaration<SelectAutocompleteWithVsComponent, "ngx-uik-select-autocomplete-with-vs", never, {
301
325
  "items": {
302
326
  "alias": "items";
303
327
  "required": false;
304
328
  "isSignal": true;
305
329
  };
306
- "selectedItemInput": {
307
- "alias": "selectedItemInput";
308
- "required": false;
309
- "isSignal": true;
310
- };
311
330
  "title": {
312
331
  "alias": "title";
313
332
  "required": false;
314
333
  "isSignal": true;
315
334
  };
316
- "isVisible": {
317
- "alias": "isVisible";
318
- "required": false;
319
- "isSignal": true;
320
- };
321
- "isRequired": {
322
- "alias": "isRequired";
335
+ "width": {
336
+ "alias": "width";
323
337
  "required": false;
324
338
  "isSignal": true;
325
339
  };
326
- "isDisabled": {
327
- "alias": "isDisabled";
340
+ "value": {
341
+ "alias": "value";
328
342
  "required": false;
329
343
  "isSignal": true;
330
344
  };
331
- "width": {
332
- "alias": "width";
345
+ "filterQuery": {
346
+ "alias": "filterQuery";
333
347
  "required": false;
334
348
  "isSignal": true;
335
349
  };
336
350
  }, {
337
- "selectedItemChange": "selectedItemChange";
351
+ "value": "valueChange";
352
+ "filterQuery": "filterQueryChange";
338
353
  }, never, never, true, never>;
339
354
  }
340
355
  export interface SelectItem {
@@ -345,35 +360,35 @@ export interface SelectGroup {
345
360
  name: string;
346
361
  items: SelectItem[];
347
362
  }
348
- export declare class BaseSelectWithGroupComponent {
363
+ export declare class SelectWithGroupComponent implements FormValueControl<string[]> {
364
+ /** Все группы. */
349
365
  groups: import("@angular/core").InputSignal<SelectGroup[]>;
350
- selectedItems: import("@angular/core").InputSignal<string[]>;
366
+ /** Заголовок. */
351
367
  title: import("@angular/core").InputSignal<string>;
352
- selectedItemsChange: import("@angular/core").OutputEmitterRef<string[]>;
353
- separatorKeysCodes: number[];
354
- control: FormControl<number[] | null>;
355
- constructor();
356
- selectionChange($event: any): void;
368
+ /** Выбранные элементы, ключи (BaseSelectItem.value). */
369
+ readonly value: import("@angular/core").ModelSignal<string[]>;
370
+ readonly separatorKeysCodes: number[];
371
+ onSelectionChange(event: MatSelectChange): void;
357
372
  onClearClick($event: MouseEvent): void;
358
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseSelectWithGroupComponent, never>;
359
- static ɵcmp: i0.ɵɵComponentDeclaration<BaseSelectWithGroupComponent, "ngx-uik-select-with-group", never, {
373
+ static ɵfac: i0.ɵɵFactoryDeclaration<SelectWithGroupComponent, never>;
374
+ static ɵcmp: i0.ɵɵComponentDeclaration<SelectWithGroupComponent, "ngx-uik-select-with-group", never, {
360
375
  "groups": {
361
376
  "alias": "groups";
362
377
  "required": false;
363
378
  "isSignal": true;
364
379
  };
365
- "selectedItems": {
366
- "alias": "selectedItems";
380
+ "title": {
381
+ "alias": "title";
367
382
  "required": false;
368
383
  "isSignal": true;
369
384
  };
370
- "title": {
371
- "alias": "title";
385
+ "value": {
386
+ "alias": "value";
372
387
  "required": false;
373
388
  "isSignal": true;
374
389
  };
375
390
  }, {
376
- "selectedItemsChange": "selectedItemsChange";
391
+ "value": "valueChange";
377
392
  }, never, never, true, never>;
378
393
  }
379
394
  export type ObjectKeys<T extends string | number | symbol = string, K = any> = { [key in T]: K; };
@@ -911,6 +926,53 @@ export declare enum Action {
911
926
  Add = "Добавление",
912
927
  Edit = "Изменение"
913
928
  }
929
+ export declare abstract class BaseEditClass<T> implements OnDestroy {
930
+ /** Заголовок. */
931
+ abstract title: string;
932
+ /** Данные диалога. */
933
+ protected abstract dialogData?: IEditDialogData<T>;
934
+ /** Форма. */
935
+ abstract form?: FormGroup<any>;
936
+ /** Ссылка на диалог. */
937
+ protected abstract dialogRef?: MatDialogRef<any, IEditDialogData<T> | null>;
938
+ /** Сервис индикатор загрузки. */
939
+ protected loaderService: LoaderService;
940
+ /** Сервис уведомлений. */
941
+ protected notificationService: NotificationService;
942
+ /** Сервис ролей. */
943
+ protected roleService: RoleService;
944
+ /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */
945
+ protected subscription: Subscription;
946
+ ngOnDestroy(): void;
947
+ onNoClick(event: MouseEvent): void;
948
+ onSubmit(): void;
949
+ formActionIsAdd(): boolean;
950
+ formActionIsEdit(): boolean;
951
+ /**
952
+ * Определяет видимость элемента на основе ЧЕРНОГО списка ролей.
953
+ * По умолчанию элемент ВИДИМ. Скрывается (возвращает false), если у пользователя
954
+ * есть запрещенная роль или если передан маркер скрытия фичи HIDE_ROLE_MARKER.
955
+ */
956
+ protected isVisibleForForbiddenRoles(forbiddenRoles: string[]): boolean;
957
+ /**
958
+ * Определяет видимость элемента на основе БЕЛОГО списка ролей.
959
+ * По умолчанию элемент СКРЫТ. Показывается (возвращает true), только если у пользователя
960
+ * есть хотя бы одна из разрешенных ролей. Администратор (ADMIN) всегда видит элемент.
961
+ */
962
+ protected isVisibleForAllowedRoles(allowedRoles: string[]): boolean;
963
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseEditClass<any>, never>;
964
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BaseEditClass<any>, never, never, {}, {}, never, never, true, never>;
965
+ }
966
+ export interface IEntityAction<T> {
967
+ action: EntityAction;
968
+ entity: T | undefined;
969
+ }
970
+ export declare enum EntityAction {
971
+ Init = "Инициализация",
972
+ Add = "Добавление",
973
+ Edit = "Изменение",
974
+ Delete = "Удаление"
975
+ }
914
976
  export declare class AvatarService {
915
977
  baseRoute: string;
916
978
  private readonly http;
@@ -918,14 +980,6 @@ export declare class AvatarService {
918
980
  static ɵfac: i0.ɵɵFactoryDeclaration<AvatarService, never>;
919
981
  static ɵprov: i0.ɵɵInjectableDeclaration<any>;
920
982
  }
921
- export declare class LoaderService {
922
- private overlayRef;
923
- private readonly overlay;
924
- show(): void;
925
- hide(): void;
926
- static ɵfac: i0.ɵɵFactoryDeclaration<LoaderService, never>;
927
- static ɵprov: i0.ɵɵInjectableDeclaration<any>;
928
- }
929
983
  export declare class LocalStorageService {
930
984
  constructor();
931
985
  saveData(key: string, value: string): void;
@@ -969,53 +1023,6 @@ export declare class SseService<T> {
969
1023
  static ɵfac: i0.ɵɵFactoryDeclaration<SseService<any>, never>;
970
1024
  static ɵprov: i0.ɵɵInjectableDeclaration<any>;
971
1025
  }
972
- export declare abstract class BaseEditClass<T> implements OnDestroy {
973
- /** Заголовок. */
974
- abstract title: string;
975
- /** Данные диалога. */
976
- protected abstract dialogData?: IEditDialogData<T>;
977
- /** Форма. */
978
- abstract form?: FormGroup<any>;
979
- /** Ссылка на диалог. */
980
- protected abstract dialogRef?: MatDialogRef<any, IEditDialogData<T> | null>;
981
- /** Сервис индикатор загрузки. */
982
- protected loaderService: LoaderService;
983
- /** Сервис уведомлений. */
984
- protected notificationService: NotificationService;
985
- /** Сервис ролей. */
986
- protected roleService: RoleService;
987
- /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */
988
- protected subscription: Subscription;
989
- ngOnDestroy(): void;
990
- onNoClick(event: MouseEvent): void;
991
- onSubmit(): void;
992
- formActionIsAdd(): boolean;
993
- formActionIsEdit(): boolean;
994
- /**
995
- * Определяет видимость элемента на основе ЧЕРНОГО списка ролей.
996
- * По умолчанию элемент ВИДИМ. Скрывается (возвращает false), если у пользователя
997
- * есть запрещенная роль или если передан маркер скрытия фичи HIDE_ROLE_MARKER.
998
- */
999
- protected isVisibleForForbiddenRoles(forbiddenRoles: string[]): boolean;
1000
- /**
1001
- * Определяет видимость элемента на основе БЕЛОГО списка ролей.
1002
- * По умолчанию элемент СКРЫТ. Показывается (возвращает true), только если у пользователя
1003
- * есть хотя бы одна из разрешенных ролей. Администратор (ADMIN) всегда видит элемент.
1004
- */
1005
- protected isVisibleForAllowedRoles(allowedRoles: string[]): boolean;
1006
- static ɵfac: i0.ɵɵFactoryDeclaration<BaseEditClass<any>, never>;
1007
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseEditClass<any>, never, never, {}, {}, never, never, true, never>;
1008
- }
1009
- export interface IEntityAction<T> {
1010
- action: EntityAction;
1011
- entity: T | undefined;
1012
- }
1013
- export declare enum EntityAction {
1014
- Init = "Инициализация",
1015
- Add = "Добавление",
1016
- Edit = "Изменение",
1017
- Delete = "Удаление"
1018
- }
1019
1026
  export declare class BaseFilterClass implements OnDestroy {
1020
1027
  /** Сервис для работы с LocalStorage. */
1021
1028
  protected localStorageService: LocalStorageService;
@@ -1592,9 +1599,10 @@ export declare const secUserSchema: z.ZodObject<{
1592
1599
  }, z.core.$strip>>>;
1593
1600
  }, z.core.$strip>;
1594
1601
  export type SecUser = z.infer<typeof secUserSchema>;
1602
+ export type SafeAny = SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl;
1595
1603
  export declare class SafePipe implements PipeTransform {
1596
1604
  private readonly sanitizer;
1597
- transform(url: string | SafeUrl | null | undefined): SafeUrl;
1605
+ transform(url: string | SafeAny | null | undefined, type?: 'html' | 'style' | 'script' | 'url' | 'resourceUrl'): string | SafeAny;
1598
1606
  static ɵfac: i0.ɵɵFactoryDeclaration<SafePipe, never>;
1599
1607
  static ɵpipe: i0.ɵɵPipeDeclaration<SafePipe, "safe", true>;
1600
1608
  }
@@ -1,5 +1,5 @@
1
1
  import * as i0 from "@angular/core";
2
- import { InjectionToken, Signal } from "@angular/core";
2
+ import { InjectionToken, OnDestroy, Signal } from "@angular/core";
3
3
  import { HttpContextToken } from "@angular/common/http";
4
4
  import { Observable } from "rxjs";
5
5
  import { ZodError } from "zod";
@@ -31,6 +31,7 @@ export declare const API_NAME: HttpContextToken<string>;
31
31
  export declare const BYPASS_AUTH: HttpContextToken<boolean>;
32
32
  export declare const DEFAULT_TIMEOUT: InjectionToken<number>;
33
33
  export declare const REQUEST_TIMEOUT: HttpContextToken<number>;
34
+ export declare const SKIP_LOADER: HttpContextToken<boolean>;
34
35
  export interface AppEnvironment {
35
36
  appVersion: string;
36
37
  production: boolean;
@@ -175,6 +176,20 @@ export declare class AuthService {
175
176
  static ɵfac: i0.ɵɵFactoryDeclaration<AuthService, never>;
176
177
  static ɵprov: i0.ɵɵInjectableDeclaration<any>;
177
178
  }
179
+ export declare class LoaderService implements OnDestroy {
180
+ private overlayRef;
181
+ private readonly overlay;
182
+ private activeRequests;
183
+ show(): void;
184
+ hide(): void;
185
+ /**
186
+ * Принудительный сброс (например, при смене роута или критической ошибке)
187
+ */
188
+ reset(): void;
189
+ ngOnDestroy(): void;
190
+ static ɵfac: i0.ɵɵFactoryDeclaration<LoaderService, never>;
191
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
192
+ }
178
193
  export declare class NotificationService implements INotificationService {
179
194
  private readonly duration;
180
195
  private readonly _snackBar;