@kuzntsv/uikit 0.0.2 → 0.0.4
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.
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
$background: mat.get-theme-color($theme, background);
|
|
8
8
|
$foreground: mat.get-theme-color($theme, foreground);
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
ngx-uik-navbar {
|
|
11
11
|
color: white;
|
|
12
12
|
|
|
13
|
-
.
|
|
13
|
+
.ngx-uik-navbar, .ngx-uik-navbar-header {
|
|
14
14
|
background: $primary;
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -2029,12 +2029,12 @@ class NavBarComponent {
|
|
|
2029
2029
|
this.subscription?.add(subs);
|
|
2030
2030
|
}
|
|
2031
2031
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: NavBarComponent, deps: [{ token: AuthService }, { token: UserService }, { token: AvatarService }, { token: i1$4.MatDialog }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
2032
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: NavBarComponent, isStandalone: true, selector: "ngx-uik-navbar", ngImport: i0, template: "@if (loggedIn$ | async) {\r\n <nav class=\"
|
|
2032
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.2", type: NavBarComponent, isStandalone: true, selector: "ngx-uik-navbar", ngImport: i0, template: "@if (loggedIn$ | async) {\r\n <nav class=\"ngx-uik-navbar-header\">\r\n \r\n <ng-content></ng-content>\r\n\r\n <div class=\"flex-spacer\"></div>\r\n \r\n @if ((loggedIn$ | async) === false || !photoURL) {\r\n <mat-icon [matTooltip]=\"(roles$ | async)?.join(',')||''\">account_circle</mat-icon>\r\n }\r\n @if ((loggedIn$ | async) && photoURL) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"photoURL | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser\"\r\n [matTooltip]=\"(roles$ | async)?.join(',')||''\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"(roles$ | async)?.join(',') || ''\">\r\n {{ fioUser }}\r\n </span>\r\n\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">\u0412\u044B\u0439\u0442\u0438 <mat-icon>logout</mat-icon></a>\r\n </nav>\r\n}", styles: [".ngx-uik-navbar-header{display:flex;flex-wrap:wrap;align-items:center;padding:8px 16px}.flex-spacer{flex-grow:1}.user-name{margin-left:8px;line-height:1rem;white-space:normal}.user-photo{border-radius:50%;width:32px;height:32px;margin-right:10px}.mat-mdc-button{color:#fff!important;padding-left:16px!important;padding-right:16px!important}.mdc-button{letter-spacing:normal}\n"], dependencies: [{ kind: "component", type: MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SafePipe, name: "safe" }] });
|
|
2033
2033
|
}
|
|
2034
2034
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.2", ngImport: i0, type: NavBarComponent, decorators: [{
|
|
2035
2035
|
type: Component,
|
|
2036
2036
|
args: [{ selector: 'ngx-uik-navbar', imports: [RouterLink, MatAnchor, MatMenuTrigger, MatMenu, MatMenuItem, MatDivider, MatIcon, MatTooltip,
|
|
2037
|
-
AsyncPipe, SafePipe], template: "@if (loggedIn$ | async) {\r\n <nav class=\"
|
|
2037
|
+
AsyncPipe, SafePipe], template: "@if (loggedIn$ | async) {\r\n <nav class=\"ngx-uik-navbar-header\">\r\n \r\n <ng-content></ng-content>\r\n\r\n <div class=\"flex-spacer\"></div>\r\n \r\n @if ((loggedIn$ | async) === false || !photoURL) {\r\n <mat-icon [matTooltip]=\"(roles$ | async)?.join(',')||''\">account_circle</mat-icon>\r\n }\r\n @if ((loggedIn$ | async) && photoURL) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"photoURL | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser\"\r\n [matTooltip]=\"(roles$ | async)?.join(',')||''\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"(roles$ | async)?.join(',') || ''\">\r\n {{ fioUser }}\r\n </span>\r\n\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">\u0412\u044B\u0439\u0442\u0438 <mat-icon>logout</mat-icon></a>\r\n </nav>\r\n}", styles: [".ngx-uik-navbar-header{display:flex;flex-wrap:wrap;align-items:center;padding:8px 16px}.flex-spacer{flex-grow:1}.user-name{margin-left:8px;line-height:1rem;white-space:normal}.user-photo{border-radius:50%;width:32px;height:32px;margin-right:10px}.mat-mdc-button{color:#fff!important;padding-left:16px!important;padding-right:16px!important}.mdc-button{letter-spacing:normal}\n"] }]
|
|
2038
2038
|
}], ctorParameters: () => [{ type: AuthService }, { type: UserService }, { type: AvatarService }, { type: i1$4.MatDialog }, { type: i2.Router }] });
|
|
2039
2039
|
|
|
2040
2040
|
class NotFoundComponent {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kuzntsv-uikit.mjs","sources":["../../../projects/uikit/src/auth/components/permit-form/permit-form.component.ts","../../../projects/uikit/src/auth/components/permit-form/permit-form.component.html","../../../projects/uikit/src/auth/components/login-form/login-form.component.ts","../../../projects/uikit/src/auth/components/login-form/login-form.component.html","../../../projects/uikit/src/models/environment.model.ts","../../../projects/uikit/src/services/log.service.ts","../../../projects/uikit/src/services/alert.service.ts","../../../projects/uikit/src/auth/services/auth-user.service.ts","../../../projects/uikit/src/auth/services/auth.service.ts","../../../projects/uikit/src/loader/progress-spinner.component.ts","../../../projects/uikit/src/loader/loader.service.ts","../../../projects/uikit/src/auth/components/login-page/login-page.component.ts","../../../projects/uikit/src/auth/components/login-page/login-page.component.html","../../../projects/uikit/src/auth/directives/disable-if-unauthorized.directive.ts","../../../projects/uikit/src/auth/directives/hide-if-unauthorized.directive.ts","../../../projects/uikit/src/auth/directives/disable-if-role.directive.ts","../../../projects/uikit/src/auth/directives/hide-if-role-not.directive.ts","../../../projects/uikit/src/auth/services/auth-guard.service.ts","../../../projects/uikit/src/auth/services/role-guard.service.ts","../../../projects/uikit/src/auth/services/auth-role.service.ts","../../../projects/uikit/src/base/base-toolbar/base-toolbar.service.ts","../../../projects/uikit/src/base/base-toolbar/components/base-toolbar.component.ts","../../../projects/uikit/src/base/base-toolbar/components/base-toolbar.component.html","../../../projects/uikit/src/base/base-classes/base-edit-dialog-data.ts","../../../projects/uikit/src/base/base-classes/base-edit-class.ts","../../../projects/uikit/src/base/base-classes/base-entity-action.ts","../../../projects/uikit/src/base/base-classes/base-filter-class.ts","../../../projects/uikit/src/base/base-classes/base-nav-bar-menu-class.ts","../../../projects/uikit/src/core/animations/animations.service.ts","../../../projects/uikit/src/core/animations/route.animations.ts","../../../projects/uikit/src/services/local-storage-service.ts","../../../projects/uikit/src/shared/dialog/dialog.component.ts","../../../projects/uikit/src/shared/dialog/dialog.component.html","../../../projects/uikit/src/base/base-classes/base-page-class.ts","../../../projects/uikit/src/base/base-classes/base-service-class.ts","../../../projects/uikit/src/guards/redirect-guard.ts","../../../projects/uikit/src/models/sec-user.model.ts","../../../projects/uikit/src/pipes/safe.pipe.ts","../../../projects/uikit/src/pipes/time.pipe.ts","../../../projects/uikit/src/pipes/truncate.pipe.ts","../../../projects/uikit/src/services/avatar.service.ts","../../../projects/uikit/src/services/export.service.ts","../../../projects/uikit/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.ts","../../../projects/uikit/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.html","../../../projects/uikit/src/shared/date-range-filter/models/date-range.ts","../../../projects/uikit/src/shared/date-range-filter/models/date-formats.ts","../../../projects/uikit/src/shared/date-range-filter/date-range-filter.component.ts","../../../projects/uikit/src/shared/date-range-filter/date-range-filter.component.html","../../../projects/uikit/src/shared/dialog/models/dialog-action.ts","../../../projects/uikit/src/shared/navbar/navbar.ts","../../../projects/uikit/src/shared/navbar/navbar.html","../../../projects/uikit/src/shared/not-found/not-found.component.ts","../../../projects/uikit/src/shared/not-found/not-found.component.html","../../../projects/uikit/src/shared/select-autocomplete-with-virtual-scroll/select-autocomplete-with-virtual-scroll.component.ts","../../../projects/uikit/src/shared/select-autocomplete-with-virtual-scroll/select-autocomplete-with-virtual-scroll.component.html","../../../projects/uikit/src/shared/select-with-group/select-with-group.component.ts","../../../projects/uikit/src/shared/select-with-group/select-with-group.component.html","../../../projects/uikit/src/shared/table/table.component.ts","../../../projects/uikit/src/shared/table/table.component.html","../../../projects/uikit/src/public-api.ts","../../../projects/uikit/src/kuzntsv-uikit.ts"],"sourcesContent":["import { Component, ElementRef, EventEmitter, HostListener, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';\r\n\r\n@Component({\r\n selector: 'ngx-uik-permit-form',\r\n templateUrl: 'permit-form.component.html',\r\n styleUrls: ['permit-form.component.scss'],\r\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardContent]\r\n})\r\nexport class PermitFormComponent implements OnInit {\r\n @ViewChild('hidy') hidy: ElementRef | undefined;\r\n\r\n @Output() submitted = new EventEmitter<string>();\r\n\r\n private mouseEvent = MouseEvent;\r\n\r\n constructor() {\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n mouseHandling() {\r\n this.hidy?.nativeElement.focus();\r\n }\r\n\r\n ngOnInit() {\r\n // Обнуляем значение Input\r\n if (this.hidy) {\r\n this.hidy.nativeElement.value = null;\r\n this.hidy.nativeElement.focus();\r\n }\r\n }\r\n\r\n /**\r\n * Поле ввода\r\n *\r\n * @param событие нажатия на клавишу\r\n */\r\n onKeydown(event: any): void {\r\n if (event.key === 'Enter') {\r\n const permit = this.hidy?.nativeElement.value;\r\n if (permit) {\r\n this.submitted.emit(permit);\r\n }\r\n }\r\n }\r\n\r\n}\r\n","<mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n Приложите пропуск\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div class=\"permit\"></div>\r\n </mat-card-content>\r\n</mat-card>\r\n<input #hidy class=\"hidy\" type=\"text\" (keydown)=\"onKeydown($event)\"/>","\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';\r\nimport { MatError, MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInput } from '@angular/material/input';\r\n\r\nimport { Authenticate } from '../../models/user';\r\n\r\n@Component({\r\n selector: 'ngx-uik-login-form',\r\n templateUrl: 'login-form.component.html',\r\n styleUrls: ['login-form.component.scss'],\r\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardContent, FormsModule, ReactiveFormsModule, MatFormField, MatLabel, MatInput, MatError, MatIcon, MatSuffix, MatButton]\r\n})\r\nexport class LoginFormComponent {\r\n @Input() errorMessage: string = '';\r\n\r\n @Output() submitted = new EventEmitter<Authenticate>();\r\n hide = true;\r\n\r\n form: FormGroup = new FormGroup({\r\n username: new FormControl('', [Validators.required]),\r\n password: new FormControl('', [Validators.required]),\r\n });\r\n\r\n isDisabled = false;\r\n\r\n constructor() { }\r\n\r\n @Input()\r\n set pending(isPending: boolean) {\r\n this.isDisabled = isPending;\r\n if (isPending) {\r\n this.form.disable();\r\n } else {\r\n this.form.enable();\r\n }\r\n }\r\n\r\n submit() {\r\n if (this.form.valid) {\r\n this.submitted.emit(this.form.value);\r\n }\r\n }\r\n}\r\n","<mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n Авторизация\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\r\n <p>\r\n <mat-form-field>\r\n <mat-label>Имя пользователя</mat-label>\r\n <input type=\"text\" pattern=\"[A-Za-z]{1,}.[A-Za-z]{1,}.[A-Za-z]*\"\r\n matInput\r\n autocomplete=\"on\"\r\n name=\"login-form-username\"\r\n placeholder=\"Имя пользователя\"\r\n formControlName=\"username\">\r\n @if (form.controls['username'].hasError('pattern')) {\r\n <mat-error>\r\n Пожалуйста, используйте требуемый формат (Пример: a.p.petrov)\r\n </mat-error>\r\n }\r\n @if (form.controls['username'].hasError('required')) {\r\n <mat-error>\r\n Пожалуйста, заполните это поле\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n </p>\r\n\r\n <p>\r\n <mat-form-field>\r\n <mat-label>Пароль</mat-label>\r\n <input [type]=\"hide ? 'password' : 'text'\" matInput placeholder=\"Пароль\" formControlName=\"password\">\r\n <mat-icon class=\"watcher\" matSuffix (mousedown)=\"hide=false\" (mouseup)=\"hide=true\"\r\n >{{ hide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n @if (form.controls['password'].hasError('required')) {\r\n <mat-error>\r\n Пожалуйста, заполните это поле\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n </p>\r\n\r\n @if (errorMessage) {\r\n <p class=\"loginError\">\r\n {{ errorMessage }}\r\n </p>\r\n }\r\n\r\n <p class=\"loginButtons\">\r\n <button type=\"submit\" mat-button mat-stroked-button color=\"primary\" [disabled]=\"isDisabled\">Войти</button>\r\n </p>\r\n\r\n </form>\r\n </mat-card-content>\r\n </mat-card>\r\n","export abstract class Environment {\r\n abstract readonly appVersion: string;\r\n abstract readonly production: boolean;\r\n abstract readonly endpoints: {\r\n readonly common: string;\r\n readonly integration: string;\r\n readonly integration1c: string;\r\n readonly main: string;\r\n readonly scheduler: string;\r\n readonly elasticSearch: string;\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Environment } from '../models/environment.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LogService {\r\n public logPrefix: string = '';\r\n\r\n constructor(private env: Environment\r\n ) {\r\n }\r\n log(...args: any) {\r\n if (!this.env.production) {\r\n // Prepend log prefix log string\r\n args.unshift(this.logPrefix + ' ');\r\n // Pass along arguments to console.log\r\n console.log(args.join(' '));\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { IAlertService } from '../base/interfaces';\r\n\r\n// Сервис для вывода сообщений(ошибки, успеха)\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlertService implements IAlertService{\r\n // eslint-disable-next-line no-magic-numbers\r\n private readonly duration = 5000;\r\n\r\n constructor(private _snackBar: MatSnackBar) {\r\n }\r\n\r\n openSnackBar(message: string, action: string, duration: number = this.duration) {\r\n this._snackBar.open(message, action, {\r\n duration,\r\n panelClass: ['red-snackbar'],\r\n });\r\n }\r\n\r\n success(message: string, duration: number = this.duration) {\r\n this.openSnackBar(message, 'Закрыть', duration);\r\n }\r\n\r\n info(message: string, duration: number = this.duration) {\r\n this.openSnackBar(message, 'Закрыть', duration);\r\n }\r\n\r\n helper(message: string, duration: number = this.duration) {\r\n this.openSnackBar(message, 'Закрыть', duration);\r\n }\r\n\r\n warning(message: string, duration: number = this.duration) {\r\n this.openSnackBar(message, 'Закрыть', duration);\r\n }\r\n\r\n error(message: string, duration: number = this.duration) {\r\n this.openSnackBar(message, 'Закрыть', duration);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n/**\r\n * Сущность пользователя из API\r\n */\r\nexport class User {\r\n id: number = 0;\r\n username: string = '';\r\n firstName: string = '';\r\n lastName: string = '';\r\n prof: string = '';\r\n depart: number = 0;\r\n area: string = '';\r\n tabnum: string = '';\r\n mail: string = '';\r\n phone: string = '';\r\n roles: string = '';\r\n rolesArray: string[] = [];\r\n roleList: string[] = [];\r\n idHuman: string = '';\r\n token: string = '';\r\n // Время действия токена\r\n expires_in: number = 0;\r\n}\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n/**\r\n * Сервис для работы с объектом в local Storage\r\n */\r\nexport class UserService {\r\n private user: User;\r\n constructor() {\r\n if (localStorage.getItem('sed_currentUser')) {\r\n this.user = JSON.parse(localStorage.getItem('sed_currentUser') || '');\r\n } else {\r\n this.user = new User();\r\n }\r\n }\r\n\r\n get dept(): number {\r\n return this.user?.depart;\r\n }\r\n\r\n /** Получить данные о пользователе */\r\n get userData(): User {\r\n return this.user;\r\n }\r\n\r\n /** Изменить данные пользователя в localStorage */\r\n set userData(user: User) {\r\n localStorage.setItem('sed_currentUser', JSON.stringify(user));\r\n this.user = JSON.parse(localStorage.getItem('sed_currentUser') || '');\r\n }\r\n\r\n /** Удаляет данные о пользователе из localStorage. */\r\n removeUser() {\r\n localStorage.removeItem('sed_currentUser');\r\n }\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { DefaultUrlSerializer, Router } from '@angular/router';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nimport { AlertService } from '../../services/alert.service';\r\nimport { LogService } from '../../services/log.service';\r\nimport { AuthPermission } from '../auth.types';\r\nimport { UserService } from './auth-user.service';\r\n\r\n// Сервис авторизации\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthService {\r\n // Указываем какой сервер использовать\r\n baseRoute = 'mainApi/';\r\n // Хранит доступные пользователю действия\r\n permissions: string[] = ['VIEW'];\r\n readonly defaultRoles = [];\r\n // Хранит роли пользователя\r\n roles$: BehaviorSubject<string[]>;\r\n loggedIn$: BehaviorSubject<boolean>;\r\n\r\n // Роль для скрытия элементов.\r\n private readonly hideRole = 'HIDE';\r\n\r\n // Объект, хранящий статус авторизации\r\n private readonly defaultHeader = {\r\n headers: new HttpHeaders().set('content-type', 'application/x-www-form-urlencoded')\r\n };\r\n\r\n private idHuman: string | null;\r\n\r\n constructor(private http: HttpClient,\r\n private router: Router,\r\n private console: LogService,\r\n private alertService: AlertService,\r\n private user: UserService,\r\n ) {\r\n this.console.logPrefix = 'Auth Service';\r\n this.idHuman = localStorage.getItem('id_human');\r\n if (this.user?.userData?.roleList) {\r\n this.roles$ = new BehaviorSubject<string[]>(this.user?.userData?.roleList);\r\n } else {\r\n this.roles$ = new BehaviorSubject<string[]>(this.defaultRoles);\r\n }\r\n this.loggedIn$ = new BehaviorSubject<boolean>((!!this.user.userData && !!this.user.userData.token));\r\n }\r\n\r\n /** Проверка разрешений */\r\n hasPermission(authPermission: AuthPermission) {\r\n return !!(this.permissions &&\r\n this.permissions.find(permission => permission === authPermission));\r\n }\r\n\r\n /** Проверка ролей */\r\n public hasRole(roles: string[], checkRole: string): boolean {\r\n if (roles) {\r\n return !!roles.find(role => (role === checkRole || role === 'ADMIN'));\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /** Проверка массива ролей */\r\n public hasRoles(roles: string[], checkRoles: string[]): boolean {\r\n if (roles) {\r\n for (const checkRole of checkRoles) {\r\n if (roles.find(role => (role === checkRole || role === 'ADMIN'))) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Элемент скрывается, если у пользователя нет ни одной роли из перереданных в \"roles\"\r\n или в списке \"roles\" есть роль \"hideRole\". */\r\n public isHideElement(roles: string[], checkRoles: string[]): boolean {\r\n if (!roles)\r\n return false;\r\n if (roles.indexOf(this.hideRole) !== -1)\r\n return true;\r\n for (const role of roles) {\r\n if (role && (role.length !== 0) && this.hasRole(checkRoles, role)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n\r\n // /** Сменить роль без side эффекта */\r\n // public changeRole(role: string) {\r\n // this.roles$.next([role]);\r\n // }\r\n\r\n // /** Сменить роли без side эффекта */\r\n // public changeRoles(roles: string[]) {\r\n // this.roles$.next(roles);\r\n // }\r\n\r\n /** Запрос авторизации */\r\n login(username: string, password: string, idCas: number, returnUrl: string = '', onErrorFn: () => void) {\r\n const passwordEncoded = encodeURIComponent(password);\r\n let body = `username=${username}&password=${passwordEncoded}`;\r\n\r\n if (idCas) {\r\n body += `&idcas=${idCas}`;\r\n }\r\n\r\n if (this.idHuman) {\r\n body += `&idhuman=${this.idHuman}`;\r\n }\r\n\r\n this.http.post(this.baseRoute + 'jwt', body, this.defaultHeader)\r\n .subscribe({\r\n next: data => {\r\n this.successLoginAction(data, returnUrl);\r\n this.alertService.success('Успешная авторизация');\r\n },\r\n error: (error: any) => {\r\n this.console.log(error);\r\n this.alertService.error('Ошибка при авторизации: ' + error, 0);\r\n if (onErrorFn) {\r\n onErrorFn();\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Aвторизация по пропуску */\r\n loginByPermit(permit: string, idCas: number, returnUrl: string = '') {\r\n let body = `permit=${permit}`;\r\n\r\n if (idCas) {\r\n body += `&idcas=${idCas}`;\r\n }\r\n\r\n if (this.idHuman) {\r\n body += `&idhuman=${this.idHuman}`;\r\n }\r\n\r\n return this.http.post(this.baseRoute + 'jwt', body, this.defaultHeader)\r\n .subscribe({\r\n next: (data) => {\r\n this.successLoginAction(data, returnUrl);\r\n this.alertService.success('Успешная авторизация');\r\n },\r\n error: (error: any) => {\r\n this.console.log(error);\r\n this.alertService.error('Ошибка при авторизации: ' + error, 0);\r\n }\r\n });\r\n }\r\n\r\n /** Разлогиниться */\r\n logout(returnUrl: string = '') {\r\n // Убирает(удаляет) пользователя из локального хранилища когда он разлогинивается\r\n this.user.removeUser();\r\n // localStorage.removeItem('sed_currentUser');\r\n // Отправляем подписчикам события что человек вышел\r\n this.loggedIn$.next(false);\r\n // Переход на страницу авторизации\r\n if (returnUrl) {\r\n // указываем целевой маршрут в параметре\r\n this.router.navigate(['/login'], { queryParams: { returnUrl } }).then();\r\n } else {\r\n this.router.navigate(['/login']).then();\r\n }\r\n }\r\n\r\n // Получить роли пользователя\r\n private getRoles(): Observable<string[]> {\r\n return this.http.get<string[]>(this.baseRoute + 'jwt/webroles');\r\n }\r\n\r\n // /** Инициализация ролей */\r\n // private initRole() {\r\n // if (this.hasRole(this.roles$.getValue(), this.defaultRole)) {\r\n // this.roleService.getRoles().subscribe({\r\n // next: (data: string[]) => {\r\n // this.roles$.next(data['Roles']);\r\n // },\r\n // error: (error: any) => {\r\n // this.console.log(error);\r\n // this.alert.error('Ошибка при получении списка ролей пользователя: ' + error);\r\n // }\r\n // });\r\n // }\r\n // }\r\n\r\n\r\n /** При успешной авторизации */\r\n private successLoginAction(user: any, returnUrl: string = '') {\r\n this.user.userData = user;\r\n this.loggedIn$.next(true);\r\n // init roles\r\n this.roles$.next(this.user.userData.roleList);\r\n\r\n if (returnUrl) {\r\n const decodeUrl = decodeURIComponent(returnUrl);\r\n // указан целевой маршрут\r\n if (decodeUrl.includes('?')) {\r\n // есть параметры строки запроса\r\n const serializer = new DefaultUrlSerializer();\r\n // параметры строки запроса\r\n const params = serializer.parse(decodeUrl).queryParams;\r\n //console.log('successLoginAction params = ', params);\r\n // выделение маршрута\r\n const url = decodeUrl.slice(0, decodeUrl.indexOf('?'));\r\n this.router.navigate([url], { queryParams: params });\r\n } else {\r\n this.router.navigate([decodeUrl]);\r\n }\r\n } else {\r\n // не указан целевой маршрут, переход на главную\r\n this.router.navigate(['']);\r\n }\r\n }\r\n}\r\n","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, AfterViewInit } from '@angular/core';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\n\r\n@Component({\r\n selector: 'ngx-uik-loader',\r\n template: `\r\n <div class=\"loading-indicator\" mat-dialog-content>\r\n <mat-progress-spinner mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </div>\r\n `,\r\n styles: [`\r\n /* Разместить по центру */\r\n .loading-indicator {\r\n position: fixed;\r\n z-index: 999;\r\n height: 2em;\r\n width: 2em;\r\n overflow: initial;\r\n margin: auto;\r\n top: 0;\r\n left: 0;\r\n bottom: 0;\r\n right: 0;\r\n }\r\n\r\n /* Заблокировать оверлей */\r\n .loading-indicator:before {\r\n content: '';\r\n display: block;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(0,0,0,0.3);\r\n }\r\n `],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatProgressSpinner]\r\n})\r\n\r\nexport class ProgressSpinnerComponent implements AfterViewInit {\r\n constructor(private cdRef: ChangeDetectorRef) { }\r\n\r\n ngAfterViewInit() {\r\n this.cdRef.detectChanges();\r\n }\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { ProgressSpinnerComponent } from './progress-spinner.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class LoaderService {\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n constructor(private overlay: Overlay) { }\r\n\r\n public show() {\r\n if (!this.overlayRef) {\r\n this.overlayRef = this.overlay.create();\r\n }\r\n const spinnerOverlayPortal = new ComponentPortal(ProgressSpinnerComponent);\r\n // Иправление ошибки Expression has changed after it was checked\r\n setTimeout(() => {\r\n if (!this.overlayRef?.hasAttached()) {\r\n this.overlayRef?.attach(spinnerOverlayPortal);\r\n }\r\n });\r\n }\r\n\r\n public hide() {\r\n if (this.overlayRef) {\r\n this.overlayRef.detach();\r\n }\r\n }\r\n}\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { LoaderService } from '../../../loader';\r\nimport { Authenticate } from '../../models/user';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { PermitFormComponent } from '../permit-form/permit-form.component';\r\nimport { LoginFormComponent } from '../login-form/login-form.component';\r\n\r\n@Component({\r\n selector: 'ngx-uik-login-page',\r\n templateUrl: 'login-page.component.html',\r\n styleUrls: ['login-page.component.scss'],\r\n imports: [LoginFormComponent, PermitFormComponent]\r\n})\r\nexport class LoginPageComponent implements OnInit, OnDestroy {\r\n pending: boolean = false;\r\n error: string = '';\r\n isKiosk: boolean = false;\r\n /** Идентификатор АС */\r\n idCas: number = 0;\r\n /** Подписка на Идентификатор АС */\r\n sub: Subscription;\r\n /** Url страницы, с которой был переход (после входа вернет на неё) */\r\n returnUrl: string = '';\r\n\r\n constructor(private authService: AuthService,\r\n private route: ActivatedRoute,\r\n private loaderService: LoaderService\r\n ) {\r\n this.sub = this.route.data.subscribe(data => {\r\n this.idCas = data['idCas'];\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (localStorage.getItem('id_human') || localStorage.getItem('kiosk-keyboard-layout')) {\r\n // this.isKiosk = true;\r\n }\r\n this.route.queryParams.subscribe(params => {\r\n this.returnUrl = params['returnUrl'];\r\n //console.log('constructor this.returnUrl = ', this.returnUrl);\r\n //this.returnUrl = this.returnUrl.slice(this.returnUrl.lastIndexOf('returnUrl=') + 'returnUrl='.length);\r\n //console.log('constructor NEW this.returnUrl = ', this.returnUrl);\r\n });\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sub.unsubscribe();\r\n }\r\n\r\n onSubmitError() {\r\n return () => {\r\n this.pending = false;\r\n this.loaderService.hide();\r\n };\r\n }\r\n\r\n onSubmit($event: Authenticate) {\r\n this.loaderService.show();\r\n this.pending = true;\r\n this.authService.login($event.username, $event.password, this.idCas, this.returnUrl, this.onSubmitError());\r\n }\r\n\r\n onSubmitPermit($event: string) {\r\n const permit = $event;\r\n this.authService.loginByPermit(permit, this.idCas, this.returnUrl);\r\n }\r\n}\r\n","@if (!isKiosk) {\r\n <ngx-uik-login-form\r\n (submitted)=\"onSubmit($event)\"\r\n [pending]=\"pending\"\r\n [errorMessage]=\"error\">\r\n </ngx-uik-login-form>\r\n }\r\n @if (isKiosk) {\r\n <ngx-uik-permit-form\r\n (submitted)=\"onSubmitPermit($event)\"\r\n >\r\n </ngx-uik-permit-form>\r\n }","import { Directive, Input, OnInit, ElementRef } from '@angular/core';\r\nimport { AuthPermission } from '../auth.types';\r\nimport { AuthService } from '../services/auth.service';\r\n\r\n@Directive({\r\n selector: '[ngxUikDisableIfUnauthorized]',\r\n standalone: true\r\n})\r\nexport class DisableIfUnauthorizedDirective implements OnInit {\r\n @Input('ngxUikDisableIfUnauthorized') permission: AuthPermission | undefined;\r\n\r\n constructor(private el: ElementRef, private authservice: AuthService) { }\r\n\r\n ngOnInit() {\r\n if (this.permission && !this.authservice.hasPermission(this.permission)) {\r\n this.el.nativeElement.disabled = true;\r\n }\r\n }\r\n}\r\n","import { Directive, OnInit, ElementRef, Input } from '@angular/core';\r\nimport { AuthService } from '../services/auth.service';\r\nimport { AuthPermission } from '../auth.types';\r\n\r\n@Directive({\r\n selector: '[ngxUikHideIfUnauthorized]',\r\n standalone: true\r\n})\r\nexport class HideIfUnauthorizedDirective implements OnInit {\r\n @Input('ngxUikHideIfUnauthorized') permission: AuthPermission | undefined;\r\n\r\n constructor(private el: ElementRef, private authService: AuthService) { }\r\n\r\n ngOnInit() {\r\n if (this.permission && !this.authService.hasPermission(this.permission)) {\r\n this.el.nativeElement.style.display = 'none';\r\n }\r\n }\r\n}\r\n","import { Directive, Input, OnInit, ElementRef } from '@angular/core';\r\nimport { AuthService } from '../services/auth.service';\r\n\r\n@Directive({\r\n selector: '[ngxUikDisableIfRole]',\r\n standalone: true\r\n})\r\nexport class DisableIfRoleDirective implements OnInit {\r\n @Input('ngxUikDisableIfRole') role: string = '';\r\n\r\n constructor(private el: ElementRef, private authService: AuthService) { }\r\n\r\n ngOnInit() {\r\n this.authService.roles$.subscribe((userRoles) => {\r\n if (this.role) {\r\n if (!this.authService.hasRole(userRoles, this.role)) {\r\n this.el.nativeElement.disabled = true;\r\n } else {\r\n this.el.nativeElement.disabled = false;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import { Directive, OnInit, ElementRef, Input } from '@angular/core';\r\nimport { AuthService } from '../services/auth.service';\r\n\r\n@Directive({\r\n selector: '[ngxUikHideIfRoleNot]',\r\n standalone: true\r\n})\r\nexport class HideIfRoleNotDirective implements OnInit {\r\n @Input('ngxUikHideIfRoleNot') roles: string[] = [];\r\n\r\n constructor(private el: ElementRef, private authService: AuthService) { }\r\n\r\n // Элемент скрывается, если у пользователя нет ни одной роли из перереданных в \"roles\"\r\n // или в списке \"roles\" есть роль \"hideRole\".\r\n ngOnInit() {\r\n if (this.roles) {\r\n this.authService.roles$.subscribe((userRoles) => {\r\n const isHide = this.authService.isHideElement(this.roles, userRoles);\r\n\r\n if (isHide) {\r\n this.el.nativeElement.style.display = 'none';\r\n } else {\r\n this.el.nativeElement.style.display = 'inherit';\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot } from '@angular/router';\r\n\r\nimport { AuthService } from './auth.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nclass AuthGuardService {\r\n\r\n constructor(private auth: AuthService,\r\n private router: Router) {\r\n }\r\n\r\n canActivate(route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ) {\r\n const isLogin = this.auth.loggedIn$.value;\r\n if (!isLogin) {\r\n console.log('state.url =', state.url);\r\n\r\n // Если не зарегистрирован вернуть в форму авторизации\r\n this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } });\r\n }\r\n\r\n return isLogin;\r\n }\r\n}\r\n\r\nexport const authGuard: CanActivateFn = (\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n) => inject(AuthGuardService).canActivate(route, state);\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { AuthService } from './auth.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nclass RoleGuardService {\r\n public roles: string[] = [];\r\n\r\n constructor(private router: Router, private authService: AuthService) {\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\r\n this.roles = route.data['roles'] as string[];\r\n return this.authService.roles$.pipe(map((userRoles: string[]) => this.authService.hasRoles(userRoles, this.roles)));\r\n }\r\n}\r\n\r\nexport const roleGuard: CanActivateFn = (\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n) => inject(RoleGuardService).canActivate(route, state);\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n// Вычисление разрешений на модули по ролям\r\nexport class RoleService {\r\n // Указываем какой сервер использовать\r\n baseRoute = 'mainApi/';\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n // Получить роли пользователя\r\n getRoles() {\r\n return this.http.get(this.baseRoute + 'jwt/webroles');\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class BaseToolbarService {\r\n baseRoute = 'BaseToolbar';\r\n\r\n constructor() {}\r\n\r\n}\r\n","import { Component, EventEmitter, inject, Input, OnDestroy, Output } from '@angular/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatToolbar } from '@angular/material/toolbar';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { IContextMenuOptions } from '../../../shared/table/models/context-menu-options.interface';\r\n\r\nimport { AuthService } from '../../../auth';\r\nimport { BaseToolbarService } from '../base-toolbar.service';\r\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatDivider } from '@angular/material/divider';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'ngx-uik-base-toolbar',\r\n templateUrl: 'base-toolbar.component.html',\r\n styleUrls: ['base-toolbar.component.scss'],\r\n imports: [MatToolbar, MatIconButton, MatTooltip, MatIcon, MatMenu, MatDivider, MatMenuTrigger, MatMenuItem],\r\n providers: [\r\n BaseToolbarService\r\n ]\r\n})\r\nexport class BaseToolbarComponent implements OnDestroy {\r\n @Input() rolesNewBtn: string[] = [];\r\n @Input() rolesEditBtn: string[] = [];\r\n @Input() rolesRemoveBtn: string[] = [];\r\n @Input() rolesCopyBtn: string[] = [];\r\n @Input() rolesExcelBtn: string[] = [];\r\n @Input() rolesCsvBtn: string[] = [];\r\n @Input() rolesPdfBtn: string[] = [];\r\n @Input() rolesPrintBtn: string[] = [];\r\n @Input() rolesRefreshBtn: string[] = [];\r\n @Input() rolesClearBtn: string[] = [];\r\n\r\n @Input() newBtnDisabled: boolean = false;\r\n @Input() editBtnDisabled: boolean = false;\r\n @Input() removeBtnDisabled: boolean = false;\r\n @Input() copyBtnDisabled: boolean = false;\r\n @Input() excelBtnDisabled: boolean = false;\r\n @Input() csvBtnDisabled: boolean = false;\r\n @Input() pdfBtnDisabled: boolean = false;\r\n @Input() printBtnDisabled: boolean = false;\r\n @Input() refreshBtnDisabled: boolean = false;\r\n @Input() clearBtnDisabled: boolean = false;\r\n\r\n @Input() newBtnTooltip = 'Добавить';\r\n @Input() editBtnTooltip = 'Изменить';\r\n @Input() removeBtnTooltip = 'Удалить';\r\n @Input() copyBtnTooltip = 'Скопировать';\r\n @Input() excelBtnTooltip = 'Экспортировать в Excel';\r\n @Input() csvBtnTooltip = 'Экспортировать в Csv';\r\n @Input() pdfBtnTooltip = 'Экспортировать в Pdf';\r\n @Input() printBtnTooltip = 'Печатать';\r\n @Input() refreshBtnTooltip = 'Обновить данные';\r\n @Input() clearBtnTooltip = 'Очистить фильтр';\r\n\r\n /** Список элементов контекстного меню. */\r\n @Input() newBtnOpt: IContextMenuOptions<string>[] = [];\r\n\r\n @Output() clickedNewBtn = new EventEmitter();\r\n @Output() clickedEditBtn = new EventEmitter();\r\n @Output() clickedRemoveBtn = new EventEmitter();\r\n @Output() clickedCopyBtn = new EventEmitter();\r\n @Output() clickedExcelBtn = new EventEmitter();\r\n @Output() clickedCsvBtn = new EventEmitter();\r\n @Output() clickedPdfBtn = new EventEmitter();\r\n @Output() clickedPrintBtn = new EventEmitter();\r\n @Output() clickedRefreshBtn = new EventEmitter();\r\n @Output() clickedClearBtn = new EventEmitter();\r\n\r\n // DI\r\n protected authService = inject(AuthService);\r\n\r\n userRoles: string[] = [];\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n // получить права пользователя\r\n this.subscription = this.authService.roles$.subscribe((userRoles) => {\r\n this.userRoles = userRoles;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n isShow(roles: string[]) {\r\n return !this.authService.isHideElement(roles, this.userRoles);\r\n }\r\n\r\n onNewClick() {\r\n this.clickedNewBtn.emit();\r\n }\r\n\r\n onEditClick() {\r\n this.clickedEditBtn.emit();\r\n }\r\n\r\n onRemoveClick() {\r\n this.clickedRemoveBtn.emit();\r\n }\r\n\r\n onCopyClick() {\r\n this.clickedCopyBtn.emit();\r\n }\r\n\r\n onExcelClick() {\r\n this.clickedExcelBtn.emit();\r\n }\r\n\r\n onCsvClick() {\r\n this.clickedCsvBtn.emit();\r\n }\r\n\r\n onPdfClick() {\r\n this.clickedPdfBtn.emit();\r\n }\r\n\r\n onPrintClick() {\r\n this.clickedPrintBtn.emit();\r\n }\r\n\r\n onRefreshGridClick() {\r\n this.clickedRefreshBtn.emit();\r\n }\r\n\r\n onClearClick() {\r\n this.clickedClearBtn.emit();\r\n }\r\n}\r\n\r\n","<mat-toolbar>\r\n @if (isShow(rolesNewBtn)) {\r\n @if (newBtnOpt && newBtnOpt.length > 0) {\r\n <button [disabled]=\"newBtnDisabled\" [matMenuTriggerFor]=\"menuNewBtn\"\r\n mat-icon-button [matTooltip]=\"newBtnTooltip\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <mat-menu #menuNewBtn=\"matMenu\">\r\n\r\n @for (menuItem of newBtnOpt; track menuItem) {\r\n @if (menuItem.title === '-' && !(menuItem.hideFn ? menuItem.hideFn(\"\") : menuItem.hide)) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (menuItem.title !== '-' && !(menuItem.hideFn ? menuItem.hideFn(\"\") : menuItem.hide)) {\r\n <button mat-menu-item\r\n (click)=\"menuItem.onClickFn ? menuItem.onClickFn('') : ''\"\r\n [disabled]=\"menuItem.disabledFn ? menuItem.disabledFn('') : menuItem.disabled\">\r\n @if (menuItem.icon) {\r\n <mat-icon>{{menuItem.icon}}</mat-icon>\r\n }\r\n {{ menuItem.title }}\r\n </button>\r\n }\r\n }\r\n\r\n </mat-menu>\r\n } \r\n @else {\r\n <button [disabled]=\"newBtnDisabled\" (click)=\"onNewClick()\"\r\n mat-icon-button routerLink=\"new\" routerLinkActive=\"active\" [matTooltip]=\"newBtnTooltip\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n }\r\n\r\n @if (isShow(rolesEditBtn)) {\r\n <button [disabled]=\"editBtnDisabled\" (click)=\"onEditClick()\"\r\n mat-icon-button routerLink=\"edit\" color=\"primary\" routerLinkActive=\"active\" [matTooltip]=\"editBtnTooltip\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesRemoveBtn)) {\r\n <button [disabled]=\"removeBtnDisabled\" (click)=\"onRemoveClick()\"\r\n mat-icon-button routerLink=\"delete\" color=\"warn\" routerLinkActive=\"active\" [matTooltip]=\"removeBtnTooltip\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesCopyBtn)) {\r\n <button [disabled]=\"copyBtnDisabled\" (click)=\"onCopyClick()\"\r\n mat-icon-button routerLink=\"delete\" routerLinkActive=\"active\" [matTooltip]=\"copyBtnTooltip\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesExcelBtn)) {\r\n <button [disabled]=\"excelBtnDisabled\" (click)=\"onExcelClick()\"\r\n mat-icon-button routerLink=\"excel\" routerLinkActive=\"active\" [matTooltip]=\"excelBtnTooltip\">\r\n <mat-icon class=\"material-icons-outlined\">explicit</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesCsvBtn)) {\r\n <button [disabled]=\"csvBtnDisabled\" (click)=\"onCsvClick()\"\r\n mat-icon-button routerLink=\"csv\" routerLinkActive=\"active\" [matTooltip]=\"csvBtnTooltip\">\r\n <mat-icon class=\"material-icons-outlined\">download</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesPdfBtn)) {\r\n <button [disabled]=\"pdfBtnDisabled\" (click)=\"onPdfClick()\"\r\n mat-icon-button routerLink=\"pdf\" routerLinkActive=\"active\" [matTooltip]=\"pdfBtnTooltip\">\r\n <mat-icon class=\"material-icons-outlined\">picture_as_pdf</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesPrintBtn)) {\r\n <button [disabled]=\"printBtnDisabled\" (click)=\"onPrintClick()\"\r\n mat-icon-button routerLink=\"print\" routerLinkActive=\"active\" [matTooltip]=\"printBtnTooltip\">\r\n <mat-icon class=\"material-icons-outlined\">print_outline</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesRefreshBtn)) {\r\n <button [disabled]=\"refreshBtnDisabled\" (click)=\"onRefreshGridClick()\"\r\n mat-icon-button routerLink=\"refresh\" routerLinkActive=\"active\" [matTooltip]=\"refreshBtnTooltip\">\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesClearBtn)) {\r\n <button [disabled]=\"clearBtnDisabled\" (click)=\"onClearClick()\"\r\n mat-icon-button routerLink=\"clear\" routerLinkActive=\"active\" [matTooltip]=\"clearBtnTooltip\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n</mat-toolbar>\r\n","export interface IEditDialogData<T, K = any> {\r\n action: Action;\r\n entity: T;\r\n extraData?: K;\r\n}\r\n\r\nexport enum Action {\r\n Add = 'Добавление',\r\n Edit = 'Изменение'\r\n}\r\n","import { Directive } from \"@angular/core\";\r\nimport { FormGroup } from \"@angular/forms\";\r\nimport { MatDialogRef } from \"@angular/material/dialog\";\r\n\r\nimport { Action, IEditDialogData } from \"./base-edit-dialog-data\";\r\n\r\n@Directive()\r\nexport class BaseEditClass<T> {\r\n title: string = '';\r\n dialogData: IEditDialogData<T> | undefined;\r\n form: FormGroup | undefined;\r\n dialogRef: MatDialogRef<any, IEditDialogData<T> | null> | undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n onNoClick(event: PointerEvent): void {\r\n this.dialogRef?.close(null);\r\n event.preventDefault(); // иначе сработает onSubmit\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.form) {\r\n if (this.form.valid) {\r\n if (this.dialogData)\r\n Object.keys(this.form.controls).forEach(controlName => this.dialogData!.entity[controlName as keyof T] = this.form?.controls[controlName].value);\r\n this.dialogRef?.close(this.dialogData);\r\n } else {\r\n Object.keys(this.form.controls).forEach(controlName => this.form?.controls[controlName].markAsTouched());\r\n }\r\n }\r\n }\r\n\r\n formActionIsAdd(): boolean {\r\n return this.dialogData?.action === Action.Add;\r\n }\r\n\r\n formActionIsEdit(): boolean {\r\n return this.dialogData?.action === Action.Edit;\r\n }\r\n}","export interface IEntityAction<T> {\r\n action: EntityAction;\r\n entity: T;\r\n}\r\n\r\nexport enum EntityAction {\r\n Init = 'Инициализация',\r\n Add = 'Добавление',\r\n Edit = 'Изменение',\r\n Delete = 'Удаление'\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\n@Directive()\r\nexport class BaseFilterClass {\r\n\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultDebounceTime = 500;\r\n\r\n constructor() {\r\n }\r\n\r\n}\r\n","import { Directive, inject } from \"@angular/core\";\r\nimport { MatMenuTrigger } from \"@angular/material/menu\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n@Directive()\r\nexport class BaseNavBarMenuClass {\r\n\r\n // DI\r\n router = inject(Router);\r\n\r\n constructor() {\r\n }\r\n \r\n /** Нажата средняя кнопка (открыть ссылку в новой вкладке). */ \r\n onMiddleClick(event: PointerEvent, baseUrl: string, menu: MatMenuTrigger) {\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if (event.button === 1) {\r\n // event.preventDefault();\r\n menu.closeMenu();\r\n const urlTree = this.router.serializeUrl(\r\n this.router.createUrlTree([baseUrl]\r\n )\r\n );\r\n window.open(urlTree, '_blank');\r\n }\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AnimationsService {\r\n private static routeAnimationType: RouteAnimationType = 'ALL';\r\n\r\n constructor() {\r\n AnimationsService.routeAnimationType = 'ALL';\r\n }\r\n\r\n static isRouteAnimationsType(type: RouteAnimationType) {\r\n // console.log('isRouteAnimationsType ', AnimationsService.routeAnimationType, type, AnimationsService.routeAnimationType === type);\r\n return AnimationsService.routeAnimationType === type;\r\n }\r\n\r\n updateRouteAnimationType(\r\n pageAnimations: boolean,\r\n elementsAnimations: boolean\r\n ) {\r\n AnimationsService.routeAnimationType =\r\n pageAnimations && elementsAnimations\r\n ? 'ALL'\r\n : pageAnimations\r\n ? 'PAGE'\r\n : elementsAnimations\r\n ? 'ELEMENTS'\r\n : 'NONE';\r\n }\r\n}\r\n\r\nexport type RouteAnimationType = 'ALL' | 'PAGE' | 'ELEMENTS' | 'NONE';\r\n","import {\r\n animate,\r\n query,\r\n style,\r\n transition,\r\n trigger,\r\n stagger,\r\n sequence\r\n} from '@angular/animations';\r\nimport { AnimationsService } from './animations.service';\r\n\r\nexport const ROUTE_ANIMATIONS_ELEMENTS = 'route-animations-elements';\r\n\r\nconst STEPS_ALL: any[] = [\r\n // PAGE\r\n query(':enter > *', style({ opacity: 0, position: 'fixed' }), {\r\n optional: true\r\n }),\r\n // ELEMENTS\r\n query(':enter .' + ROUTE_ANIMATIONS_ELEMENTS, style({ opacity: 0 }), {\r\n optional: true\r\n }),\r\n // PAGE\r\n sequence([\r\n query(\r\n ':leave > *',\r\n [\r\n style({ transform: 'translateY(0%)', opacity: 1 }),\r\n animate(\r\n '0.2s ease-in-out',\r\n style({ transform: 'translateY(-3%)', opacity: 0 })\r\n ),\r\n style({ position: 'fixed' })\r\n ],\r\n { optional: true }\r\n ),\r\n query(\r\n ':enter > *',\r\n [\r\n style({\r\n transform: 'translateY(-3%)',\r\n opacity: 0,\r\n position: 'static'\r\n }),\r\n animate(\r\n '0.5s ease-in-out',\r\n style({ transform: 'translateY(0%)', opacity: 1 })\r\n )\r\n ],\r\n { optional: true }\r\n )\r\n ]),\r\n // ELEMENTS\r\n query(\r\n ':enter .' + ROUTE_ANIMATIONS_ELEMENTS,\r\n // eslint-disable-next-line no-magic-numbers\r\n stagger(75, [\r\n style({ transform: 'translateY(10%)', opacity: 0 }),\r\n animate(\r\n '0.5s ease-in-out',\r\n style({ transform: 'translateY(0%)', opacity: 1 })\r\n )\r\n ]),\r\n { optional: true }\r\n )\r\n];\r\nconst STEPS_NONE: any[] = [];\r\nconst STEPS_PAGE = [STEPS_ALL[0], STEPS_ALL[2]];\r\nconst STEPS_ELEMENTS = [STEPS_ALL[1], STEPS_ALL[3]];\r\n\r\nexport const isRouteAnimationsAll = () => AnimationsService.isRouteAnimationsType('ALL');\r\nexport const isRouteAnimationsNone = () => AnimationsService.isRouteAnimationsType('NONE');\r\nexport const isRouteAnimationsPage = () => AnimationsService.isRouteAnimationsType('PAGE');\r\nexport const isRouteAnimationsElements = () => AnimationsService.isRouteAnimationsType('ELEMENTS');\r\n\r\nexport const routeAnimations = trigger('routeAnimations', [\r\n transition(isRouteAnimationsAll, STEPS_ALL),\r\n transition(isRouteAnimationsNone, STEPS_NONE),\r\n transition(isRouteAnimationsPage, STEPS_PAGE),\r\n transition(isRouteAnimationsElements, STEPS_ELEMENTS)\r\n]);\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalStorageService {\r\n\r\n constructor() { }\r\n\r\n public saveData(key: string, value: string) {\r\n localStorage.setItem(key, value);\r\n }\r\n\r\n public getData(key: string) {\r\n return localStorage.getItem(key)\r\n }\r\n public removeData(key: string) {\r\n localStorage.removeItem(key);\r\n }\r\n\r\n public clearData() {\r\n localStorage.clear();\r\n }\r\n\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\nimport { DialogData } from '.';\r\n\r\n@Component({\r\n selector: 'ngx-uik-dialog',\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.css'],\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, MatButton, MatDialogClose]\r\n})\r\nexport class DialogComponent {\r\n\r\n constructor(public dialogRef: MatDialogRef<DialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: DialogData\r\n ) {\r\n if (!data.title) {\r\n data.title = 'Подтверждение';\r\n }\r\n if (!data.btnNoTitle) {\r\n data.btnNoTitle = 'Нет';\r\n }\r\n if (!data.btnYesTitle) {\r\n data.btnYesTitle = 'Да';\r\n }\r\n }\r\n\r\n onNoClick(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<h1 mat-dialog-title>{{ data.title }}</h1>\n<div mat-dialog-content>\n <div style=\"white-space: pre-line\">{{ data.message }}</div>\n</div>\n<div mat-dialog-actions align=\"end\">\n <button mat-raised-button (click)=\"onNoClick()\" cdkFocusInitial>{{ data.btnNoTitle }}</button>\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"data.id\">{{ data.btnYesTitle }}</button>\n</div>\n\n","import { Directive, OnDestroy, inject } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport { Router } from '@angular/router';\r\nimport { BehaviorSubject, forkJoin, ObservableInput, Subject, Subscription } from 'rxjs';\r\n\r\nimport { ROUTE_ANIMATIONS_ELEMENTS } from '../../core';\r\nimport { LocalStorageService } from '../../services/local-storage-service';\r\nimport { DialogComponent } from '../../shared/dialog/dialog.component';\r\nimport { IContextMenuOptions, IPageState, ISortState, ITableState } from '../../shared/table';\r\nimport { IAlertService } from '../interfaces';\r\nimport { Action, IEditDialogData } from './base-edit-dialog-data';\r\nimport { ObjectKeys, SortDirection, fnCbType, fnType } from '../../types/types';\r\n\r\n@Directive()\r\nexport class BasePageClass<T> implements OnDestroy {\r\n\r\n routeAnimationsElements = ROUTE_ANIMATIONS_ELEMENTS;\r\n\r\n /** Данные для табличного компонента. */\r\n data$: BehaviorSubject<T[]> = new BehaviorSubject<T[]>([]);\r\n /** Количество записей по фильтру. */\r\n length$: BehaviorSubject<number> = new BehaviorSubject<number>(0);\r\n\r\n entityService: any;\r\n entityType: any;\r\n entityEditComponent: any;\r\n extraData?: any;\r\n\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageIndex = 0;\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageSize = 10;\r\n\r\n dialog: MatDialog | undefined;\r\n dialogEditWidth = 'auto';\r\n dialogRemoveWidth = '400px';\r\n\r\n alertService: IAlertService | undefined;\r\n\r\n routeAddress: string = '';\r\n\r\n /** Сообщение при удалении записе(й). */\r\n removalMessage: string = '';\r\n /** Заголовок страницы. */\r\n pageTitle: string = '';\r\n\r\n\r\n /**\r\n * Создание записи: вызывается перед окрытием диалога.\r\n */\r\n beforeOpenDialogOnNewEvent: fnType<T>;\r\n /**\r\n * Редактирование записи: вызывается перед окрытием диалога.\r\n */\r\n beforeOpenDialogOnEditEvent: fnType<T>;\r\n /**\r\n * Создание записи: вызывается перед сохранением объекта.\r\n */\r\n beforeSaveOnNewEvent: fnType<T>;\r\n /**\r\n * Редактирование записи: вызывается перед сохранением объекта.\r\n */\r\n beforeSaveOnEditEvent: fnType<T>;\r\n /**\r\n * Создание записи: вызывается после сохранения объекта.\r\n */\r\n afterSaveOnNewEvent: fnCbType<T>;\r\n /**\r\n * Редактирование записи: вызывается после сохранения объекта.\r\n */\r\n afterSaveOnEditEvent: fnCbType<T>;\r\n\r\n editorRoles: string[] = [];\r\n executeRoles: string[] = [];\r\n /** Список ролей, для которых скрыть элемент. */\r\n hideRoles: string[] = ['HIDE'];\r\n\r\n /** Загрузка данных. */\r\n loadData$: Subject<null> = new Subject<null>();\r\n /** Загрузка количества записей. */\r\n loadLength$: Subject<null> = new Subject<null>();\r\n /** Очистка фильтра. */\r\n clearFilter$: Subject<null> = new Subject<null>();\r\n\r\n /** Разрешен выбор нескольких строк. */\r\n allowMultiSelect = false;\r\n /** Выбранные строки в таблице. */\r\n selected: T[] = [];\r\n\r\n /** Состояние сортировки, пагинации. */\r\n tableState: ITableState;\r\n\r\n /** Доступность кнопки \"Изменить\". */\r\n editBtnDisabled = true;\r\n /** Доступность кнопки \"Удалить\". */\r\n removeBtnDisabled = true;\r\n\r\n /** Разрешено ли отправлять событие rowDoubleClicked при двойном щелчке мышью. */\r\n dblClickedEventEnable = true;\r\n\r\n // Список элементов контекстного меню.\r\n opt: IContextMenuOptions<T>[] = [];\r\n\r\n // DI\r\n protected router = inject(Router);\r\n protected localStorage = inject(LocalStorageService);\r\n\r\n subscription: Subscription | undefined = new Subscription();\r\n\r\n constructor() {\r\n this.tableState = {\r\n sortActive: this.localStorage.getData(this.constructor.name + 'SortActive') || '',\r\n sortDirection: (this.localStorage.getData(this.constructor.name + 'SortDirection') || '') as SortDirection,\r\n pageIndex: Number(this.localStorage.getData(this.constructor.name + 'PageIndex')) || this.defaultPageIndex,\r\n pageSize: Number(this.localStorage.getData(this.constructor.name + 'PageSize')) || this.defaultPageSize\r\n };\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n onPageChange(pageState: IPageState) {\r\n this.localStorage.saveData(this.constructor.name + 'PageIndex', pageState.pageIndex.toString());\r\n this.localStorage.saveData(this.constructor.name + 'PageSize', pageState.pageSize.toString());\r\n\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n onSortChange(sortState: ISortState) {\r\n this.localStorage.saveData(this.constructor.name + 'SortActive', sortState.sortActive);\r\n this.localStorage.saveData(this.constructor.name + 'SortDirection', sortState.sortDirection);\r\n\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n entityFactory(type: new () => T): T {\r\n return new type();\r\n }\r\n\r\n /** Cобытие изменение выбранных записей. */\r\n onSelectionChange(selected: T[]) {\r\n this.selected = selected;\r\n this.editBtnDisabledUpdate(this.selected);\r\n this.removeBtnDisabledUpdate(this.selected);\r\n }\r\n\r\n /** Обновление доступности кнопки \"Изменить\" - вызывается при изменении выбранных записей. */\r\n editBtnDisabledUpdate(selected: T[]) {\r\n this.editBtnDisabled = !(selected && selected.length === 1);\r\n }\r\n\r\n /** Обновление доступности кнопки \"Удалить\" - вызывается при изменении выбранных записей. */\r\n removeBtnDisabledUpdate(selected: T[]) {\r\n this.removeBtnDisabled = !(selected && selected.length > 0);\r\n }\r\n\r\n /** Cобытие двойной клик. */\r\n onRowDoubleClicked() {\r\n this.editEvent();\r\n }\r\n\r\n /** Cобытие создание. */\r\n newEvent() {\r\n if (this.entityEditComponent) {\r\n const data: IEditDialogData<T> = { action: Action.Add, entity: new this.entityType(null) };\r\n\r\n // Назначить значения полей объекта перед окрытием диалога.\r\n if (this.beforeOpenDialogOnNewEvent) {\r\n this.beforeOpenDialogOnNewEvent(data.entity, data.extraData);\r\n }\r\n\r\n // Открытие окна\r\n const dialogRef = this.openDialog(this.entityEditComponent, data, this.dialog);\r\n\r\n // Обработка закрытия окна\r\n const subs = dialogRef.afterClosed().subscribe((result: IEditDialogData<T>) => {\r\n // Проверка результата\r\n if (result && result.entity && (Object.keys(result.entity).length !== 0)) {\r\n // Дополнительные действия перед сохранением объекта.\r\n if (this.beforeSaveOnNewEvent)\r\n this.beforeSaveOnNewEvent(result.entity, result.extraData);\r\n\r\n const subs = this.entityService.newObject(result.entity)\r\n .subscribe({\r\n next: (obj: any) => {\r\n // Дополнительные действия после сохранения объекта.\r\n if (this.afterSaveOnNewEvent) {\r\n const callback = () => {\r\n this.refreshEvent();\r\n this.alertService?.success('Запись добавлена.');\r\n }\r\n this.afterSaveOnNewEvent(callback.bind(this), obj, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.alertService?.success('Запись добавлена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.alertService?.error('Произошла ошибка при добавлении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription?.add(subs2);\r\n } else {\r\n this.alertService?.warning('Действие не доступно.');\r\n }\r\n }\r\n\r\n /** Cобытие редактирование. */\r\n editEvent() {\r\n if (this.selected && this.selected.length === 1) {\r\n if (this.entityEditComponent) {\r\n const data: IEditDialogData<T> = { action: Action.Edit, entity: this.selected[0] };\r\n\r\n // Назначить значения полей объекта перед окрытием диалога.\r\n if (this.beforeOpenDialogOnEditEvent) {\r\n this.beforeOpenDialogOnEditEvent(data.entity, data.extraData);\r\n }\r\n\r\n // Открытие окна\r\n const dialogRef = this.openDialog(this.entityEditComponent, data, this.dialog);\r\n\r\n // Обработка закрытия окна\r\n const subs = dialogRef.afterClosed().subscribe((result: IEditDialogData<T>) => {\r\n // Проверка результата\r\n if (result && result.entity && (Object.keys(result.entity).length !== 0)) {\r\n // Дополнительные действия перед сохранением объекта.\r\n if (this.beforeSaveOnEditEvent)\r\n this.beforeSaveOnEditEvent(result.entity, result.extraData);\r\n\r\n const subs = this.entityService.editObject(result.entity)\r\n .subscribe({\r\n next: () => {\r\n // Дополнительные действия после сохранения объекта.\r\n if (this.afterSaveOnEditEvent) {\r\n const callback = () => {\r\n this.refreshEvent();\r\n this.alertService?.success('Запись изменена.');\r\n }\r\n this.afterSaveOnEditEvent(callback.bind(this), result.entity, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.alertService?.success('Запись изменена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.alertService?.error('Произошла ошибка при изменении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription?.add(subs2);\r\n } else {\r\n this.alertService?.warning('Действие не доступно.');\r\n }\r\n }\r\n }\r\n\r\n\r\n /** Cобытие удаление. */\r\n removeEvent() {\r\n // если вырбана запись(и)\r\n if (this.selected && this.selected.length > 0) {\r\n const dialogRef = this.openDialogRemoveConfirm(this.removalMessage);\r\n if (dialogRef) {\r\n const subs = dialogRef.afterClosed().subscribe((result: any) => {\r\n // при подтверждении возвращается 'delete'\r\n if (result === 'delete') {\r\n // готовим объект с запросами на удаление\r\n type tplotOptions = {\r\n [key: string]: ObservableInput<T>\r\n }\r\n const sourcesObject: ObjectKeys = {};\r\n this.selected.forEach((item, index) => sourcesObject['obj' + index] = this.entityService.deleteObject(item));\r\n // ждем, когда выполнятся все запросы\r\n const subs = forkJoin(sourcesObject)\r\n .subscribe({\r\n next: () => {\r\n this.refreshEvent();\r\n this.alertService?.success('Выбранные записи удалены.');\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.alertService?.error('Произошла ошибка при удалении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription?.add(subs2);\r\n }\r\n }\r\n }\r\n\r\n /** Событие обновления данных. */\r\n refreshEvent() {\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n /** Cобытие очистки фильтра. */\r\n clearEvent() {\r\n this.clearFilter$.next(null);\r\n }\r\n\r\n /** Изменение сообщения об удалении. */\r\n onRemovalMessageChange(message: string) {\r\n this.removalMessage = message;\r\n }\r\n\r\n /** Изменение заголовка страницы. */\r\n onPageTitleChange(title: string) {\r\n this.pageTitle = title;\r\n }\r\n\r\n openDialog(entityComponent: any, data: IEditDialogData<T>, dialog: any) {\r\n // create dialog config\r\n const dialogConfig = new MatDialogConfig();\r\n dialogConfig.disableClose = true;\r\n dialogConfig.autoFocus = true;\r\n dialogConfig.width = this.dialogEditWidth;\r\n dialogConfig.data = data;\r\n dialogConfig.panelClass = this.entityType.name + '-edit-dialog';\r\n // return dialog\r\n return dialog.open(entityComponent, dialogConfig);\r\n }\r\n\r\n openDialogRemoveConfirm(removalMessage: string): MatDialogRef<DialogComponent> | undefined {\r\n let message = 'Вы хотите удалить ';\r\n message += removalMessage ?\r\n removalMessage :\r\n this.allowMultiSelect ? `выбранные записи (${this.selected.length})?` : 'выбранную запись?';\r\n return this.dialog?.open(DialogComponent, {\r\n width: this.dialogRemoveWidth,\r\n data: {\r\n id: 'delete',\r\n title: 'Подтверждение',\r\n message: message,\r\n btnNoTitle: 'Отмена',\r\n btnYesTitle: 'Удалить'\r\n }\r\n });\r\n }\r\n\r\n // contextMenu: Документы потока (в новой вкладке).\r\n protected onMiddleButton(baseUrl: string, queryParamName?: string, queryParamValue?: string) {\r\n return ($event: MouseEvent, item: T, contextMenu: MatMenuTrigger) => {\r\n // Нажата средняя кнопка (в новой вкладке).\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if ($event.button === 1) {\r\n //$event.preventDefault();\r\n contextMenu.closeMenu();\r\n // Converts the route into a string that can be used\r\n // with the window.open() function\r\n const url = this.router.serializeUrl(\r\n queryParamName && queryParamValue ?\r\n this.router.createUrlTree([baseUrl], { queryParams: { [queryParamName]: item[queryParamValue as keyof T] } })\r\n : this.router.createUrlTree([baseUrl])\r\n );\r\n window.open(url, '_blank');\r\n }\r\n };\r\n }\r\n\r\n protected dateToString(date: string | number | Date) {\r\n return date ? (new Date(date)).toLocaleString('ru-RU', { timeZone: 'Europe/Samara' }) : null; // MSK+01\r\n }\r\n\r\n}\r\n\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { BaseClass } from './base-class';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BaseServiceClass<T extends BaseClass> {\r\n baseRoute: string = '';\r\n entityType: any;\r\n\r\n countRoute = 'count';\r\n basePageRoute = 'page';\r\n basePageSizeRoute = 'pageSize';\r\n\r\n protected http = inject(HttpClient);\r\n\r\n constructor() { }\r\n\r\n getObjects(): Observable<T[]> {\r\n return this.http.get<T[]>(this.baseRoute)\r\n .pipe(map(data => data.map(item => new this.entityType(item).deserialize(item))));\r\n }\r\n\r\n getObject(id: number): any {\r\n return this.http.get<T>(this.baseRoute + id)\r\n .pipe(map(data => new this.entityType(data).deserialize(data)));\r\n }\r\n\r\n getCount(): Observable<number> {\r\n return this.http.get<number>(this.baseRoute + this.countRoute);\r\n }\r\n\r\n getObjectsByPaging(pageIndex: number, pageSize: number, sortColumn: string, direction: string): Observable<T[]> {\r\n const params = this.getParams(pageIndex, pageSize, sortColumn, direction);\r\n return this.http.get<T[]>(this.baseRoute, { params })\r\n .pipe(map(data => data.map(item => new this.entityType(item).deserialize(item))));\r\n }\r\n\r\n newObject(entity: T): any {\r\n return this.http.post(this.baseRoute, entity);\r\n }\r\n\r\n editObject(entity: T): any {\r\n return this.http.put(this.baseRoute + entity.id, entity);\r\n }\r\n\r\n deleteObject(entity: T): any {\r\n return this.http.delete(this.baseRoute + entity.id);\r\n }\r\n\r\n protected getParams(pageIndex: number, pageSize: number, sortColumn: string, direction: string): HttpParams {\r\n let params = new HttpParams();\r\n if (pageIndex)\r\n params = params.append('page', pageIndex);\r\n if (pageSize)\r\n params = params.append('limit', pageSize);\r\n if (sortColumn)\r\n params = params.append('column', sortColumn);\r\n if (direction)\r\n params = params.append('direction', direction);\r\n return params;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RedirectGuard {\r\n\r\n constructor() { }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\r\n console.log(route.data['externalUrl']);\r\n\r\n window.location.href = route.data['externalUrl'];\r\n return true;\r\n }\r\n}\r\n","import { Deserializable } from './deserializable.model';\r\nimport { SecUserView } from './sec-user-view.model';\r\n\r\nexport class SecUser implements Deserializable {\r\n id: number = 0;\r\n login: string = '';\r\n fio: string = '';\r\n dept: number = 0;\r\n tabnum: number = 0;\r\n userView: SecUserView | undefined;\r\n\r\n public constructor(init: SecUser) {\r\n if (init) {\r\n Object.assign(this, init);\r\n } else {\r\n this.id = 0;\r\n this.login = '';\r\n this.dept = 0;\r\n this.tabnum = 0;\r\n this.fio = '';\r\n }\r\n }\r\n\r\n deserialize(input: any): this {\r\n Object.assign(this, input);\r\n return this;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer} from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safe'\r\n})\r\nexport class SafePipe implements PipeTransform {\r\n\r\n constructor(private sanitizer: DomSanitizer) {}\r\n\r\n transform(url: string) {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'time'\n})\nexport class TimePipe implements PipeTransform {\n\n transform(value: number): string {\n // const hour = Math.abs(value) >= 60 ? Math.round(value / 60) + 'ч.' : '';\n // const minute = ' ' + Math.abs(value % 60) + 'м.';\n // return value === 0 ? '0' : hour + ' ' + minute;\n\n const hour = Math.abs(value) >= 60 ? Math.floor(Math.abs(value) / 60).toString().padStart(2,'0') : '00';\n const minute = Math.abs(value % 60).toString().padStart(2,'0');\n const time = hour + ':' + minute;\n return value < 0 ? '-' + time : time;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'truncate'\n})\nexport class TruncatePipe implements PipeTransform {\n // Usage:\n // {{ str | truncate:[20] }} // or\n // {{ str | truncate:[20, '...'] }} // or|\n transform(value: string, args: any[]): string {\n const limit = args.length > 0 ? parseInt(args[0], 10) : 20;\n const trail = args.length > 1 ? args[1] : '...';\n return value.length > limit ? value.substring(0, limit) + trail : value;\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AvatarService {\r\n baseRoute = 'common/human/';\r\n\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getAvatarById(idHuman: number): Observable<ArrayBuffer> {\r\n return this.http.get(this.baseRoute + idHuman + '/avatar', { responseType: 'arraybuffer' });\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport * as XLSX from 'xlsx';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExportService {\r\n\r\n constructor(\r\n ) {\r\n }\r\n\r\n // Экспорт в CSV\r\n exportCSV(data: any, filename = 'data', arrHeader: any, newHeaders: any) {\r\n const csvData = this.convertToCSV(data, arrHeader, newHeaders);\r\n console.log(csvData);\r\n const blob = new Blob(['\\ufeff' + csvData], { type: 'text/csv;charset=utf-8;' });\r\n const dwldLink = document.createElement('a');\r\n const url = URL.createObjectURL(blob);\r\n const isSafariBrowser = navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1;\r\n if (isSafariBrowser) { //if Safari open in new window to save file with random filename.\r\n dwldLink.setAttribute('target', '_blank');\r\n }\r\n dwldLink.setAttribute('href', url);\r\n dwldLink.setAttribute('download', filename + '.csv');\r\n dwldLink.style.visibility = 'hidden';\r\n document.body.appendChild(dwldLink);\r\n dwldLink.click();\r\n document.body.removeChild(dwldLink);\r\n }\r\n\r\n convertToCSV(objArray: any, headerList: any, newHeaders: any) {\r\n const array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;\r\n let str = '';\r\n let row = 'S.No,';\r\n for (const index in newHeaders) {\r\n if (Object.prototype.hasOwnProperty.call(newHeaders, index)) {\r\n row += newHeaders[index] + ',';\r\n }\r\n }\r\n row = row.slice(0, -1);\r\n str += row + '\\r\\n';\r\n for (let i = 0; i < array.length; i++) {\r\n let line = (i + 1) + '';\r\n for (const index in headerList) {\r\n if (Object.prototype.hasOwnProperty.call(newHeaders, index)) {\r\n const head = headerList[index];\r\n line += ',' + array[i][head];\r\n }\r\n }\r\n str += line + '\\r\\n';\r\n }\r\n return str;\r\n }\r\n\r\n // Экспорт в Excel\r\n exportExcel(data: any, heading: any, sheetName = 'sheet1', filename = 'data') {\r\n const wb = XLSX.utils.book_new();\r\n const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet([]);\r\n XLSX.utils.sheet_add_aoa(ws, heading);\r\n XLSX.utils.sheet_add_json(ws, data, { origin: 'A2', skipHeader: true });\r\n XLSX.utils.book_append_sheet(wb, ws, sheetName);\r\n XLSX.writeFile(wb, filename + '.xlsx');\r\n }\r\n\r\n}\r\n","import { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent, MatOption } from \"@angular/material/autocomplete\";\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { BehaviorSubject, Observable, Subscription, startWith } from \"rxjs\";\r\nimport { map } from \"rxjs/operators\";\r\n\r\nimport { ChipItem } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-chip-input-autocomplete',\r\n templateUrl: './chip-input-autocomplete.component.html',\r\n styleUrl: './chip-input-autocomplete.component.css',\r\n imports: [MatFormField, AsyncPipe, FormsModule, ReactiveFormsModule, MatAutocompleteModule, MatIcon, MatOption, MatChipsModule, MatLabel]\r\n})\r\nexport class BaseMatChipComponent implements OnInit, OnDestroy {\r\n\r\n // Все элементы\r\n @Input() items$: BehaviorSubject<ChipItem[]> = new BehaviorSubject<ChipItem[]>([]);\r\n // Выбранные элементы, ключи (ChipItem.value)\r\n @Input() selectedItems$: Observable<string[]> = new Observable<string[]>();\r\n // Заголовок\r\n @Input() title: string = '';\r\n // Событие изменения выбранных элементов\r\n @Output() selectedItemsChange = new EventEmitter<string[]>();\r\n\r\n @ViewChild('input') input: ElementRef<HTMLInputElement> | undefined;\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n inputCtrl = new FormControl();\r\n filteredItems$: Observable<ChipItem[]> | undefined;\r\n selectedItems: ChipItem[] = [];\r\n // Все элементы\r\n items: ChipItem[] = [];\r\n\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n this.subscription = this.items$.subscribe(data => {\r\n // console.log('ITEMS$ data', data);\r\n this.items = data;\r\n\r\n if (this.items.length > 0) {\r\n this.filteredItems$ = this.inputCtrl.valueChanges.pipe(\r\n startWith(null),\r\n map(item => (item ? this._filter(item) : this.items.slice())),\r\n );\r\n\r\n const subs = this.selectedItems$.subscribe(items => {\r\n // console.log('ITEMS', items);\r\n if (items)\r\n this.selectedItems = this.items.filter(s => items.includes(s.value));\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n }\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n remove(value: string): void {\r\n this.selectedItems = [...this.selectedItems];\r\n const index = this.selectedItems.map(i => i.value).indexOf(value);\r\n if (index >= 0) {\r\n this.selectedItems.splice(index, 1);\r\n this.selectedItemsChange.emit(this.selectedItems.map(i => i.value));\r\n }\r\n }\r\n\r\n selected(event: MatAutocompleteSelectedEvent): void {\r\n this.selectedItems = [...this.selectedItems];\r\n const item = this.items.find(s => s.value == event.option.value)\r\n if (item) {\r\n this.selectedItems.push(item);\r\n }\r\n this.selectedItemsChange.emit(this.selectedItems.map(i => i.value));\r\n if (this.input)\r\n this.input.nativeElement.value = '';\r\n this.inputCtrl.setValue(null);\r\n }\r\n\r\n private _filter(value: string): ChipItem[] {\r\n const filterValue = value.toLowerCase();\r\n return this.items.filter(item => item.viewValue.toLowerCase().includes(filterValue));\r\n }\r\n\r\n onCloseClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n this.selectedItemsChange.emit([]);\r\n }\r\n}\r\n","<mat-form-field class=\"chip-list\" appearance=\"fill\">\r\n <mat-label>{{ title }}</mat-label>\r\n <mat-chip-grid #chipList aria-label=\"'Выбор '+title\">\r\n @for (item of selectedItems; track item) {\r\n <mat-chip-row color=\"primary\"\r\n (removed)=\"remove(item.value)\">\r\n {{ item.viewValue }}\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input\r\n #input\r\n [placeholder]=\"'Введите '+title+'...'\"\r\n [formControl]=\"inputCtrl\"\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n >\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\r\n @for (item of filteredItems$ | async; track item) {\r\n <mat-option [value]=\"item.value\"\r\n [disabled]=\"(selectedItems$ | async)?.includes(item.value)\">\r\n {{ item.viewValue }}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n @if (selectedItems.length>0) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onCloseClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n</mat-form-field>\r\n","import moment from \"moment\";\r\n\r\nexport interface DateRange {\r\n begin: string;\r\n end: string;\r\n}\r\n\r\nexport function dateFormat(date: Date): string {\r\n if (date)\r\n return moment(date).format(\"YYYY-MM-DD\")\r\n else\r\n return '';\r\n}\r\n","// See the Moment.js docs for the meaning of these formats:\r\n// https://momentjs.com/docs/#/displaying/format/\r\nexport const MY_FORMATS = {\r\n parse: {\r\n dateInput: 'DD.MM.YYYY',\r\n },\r\n display: {\r\n dateInput: 'DD.MM.YYYY',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n };","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { MatDatepickerToggle, MatDateRangeInput, MatDateRangePicker, MatEndDate, MatStartDate } from '@angular/material/datepicker';\r\nimport { MatError, MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';\r\nimport 'moment/locale/ru';\r\nimport { Subject, BehaviorSubject, Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\nimport { dateFormat, DateRange, MY_FORMATS } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-date-range-filter',\r\n templateUrl: './date-range-filter.component.html',\r\n styleUrls: ['./date-range-filter.component.scss'],\r\n imports: [MatFormField, MatLabel, MatDateRangeInput, FormsModule, ReactiveFormsModule, MatStartDate, MatEndDate,\r\n MatDatepickerToggle, MatSuffix, MatDateRangePicker, MatError],\r\n providers: [\r\n { provide: MAT_DATE_LOCALE, useValue: 'ru' },\r\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\r\n ]\r\n})\r\nexport class DateRangeFilterComponent implements OnInit, OnDestroy {\r\n @Input() label: string = '';\r\n @Input() dateRange$: BehaviorSubject<DateRange> = new BehaviorSubject<DateRange>(<DateRange>{ begin: '', end: '' });\r\n // eslint-disable-next-line no-magic-numbers\r\n @Input() minDate: Date = new Date(2020, 0, 1);\r\n @Input() clearFilter$: Subject<boolean> = new Subject<boolean>();\r\n @Input() required: boolean = false;\r\n @Output() dateRangeChange: EventEmitter<DateRange> = new EventEmitter<DateRange>();\r\n\r\n form: FormGroup;\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n this.form = new FormGroup({\r\n begin: new FormControl(),\r\n end: new FormControl(),\r\n });\r\n }\r\n\r\n\r\n\r\n ngOnInit() {\r\n this.subscription = this.dateRange$.subscribe((value: DateRange) => {\r\n console.log(value);\r\n if (this.form) {\r\n this.form.controls['begin'].setValue(value.begin ? new Date(value.begin) : null);\r\n this.form.controls['end'].setValue(value.end ? new Date(value.begin) : null);\r\n }\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(this.form.value));\r\n });\r\n\r\n if (this.required) {\r\n this.form.controls['begin'].addValidators(Validators.required);\r\n this.form.controls['end'].addValidators(Validators.required);\r\n }\r\n\r\n // подписка на изменение периода\r\n this.form.valueChanges\r\n .pipe(\r\n // eslint-disable-next-line no-magic-numbers\r\n debounceTime(500),\r\n distinctUntilChanged()\r\n )\r\n .subscribe({\r\n next: range => {\r\n if (this.required) {\r\n if (range.begin && range.end) {\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(range));\r\n }\r\n } else {\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(range));\r\n }\r\n }\r\n });\r\n\r\n const subs = this.clearFilter$.subscribe(() => {\r\n this.form.reset();\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n private rangeToDateDateRange(range: Partial<{ begin: Date; end: Date }>): DateRange {\r\n return {\r\n begin: range.begin ? dateFormat(range.begin) : '',\r\n end: range.end ? dateFormat(range.end) : ''\r\n };\r\n }\r\n\r\n}\r\n","<mat-form-field appearance=\"fill\">\n <mat-label>{{label}}</mat-label>\n <mat-date-range-input\n [rangePicker]=\"picker\"\n [formGroup]=\"form\"\n [min]=\"minDate\">\n <input matStartDate formControlName=\"begin\" placeholder=\"Дата начала\">\n <input matEndDate formControlName=\"end\" placeholder=\"Дата окончания\">\n </mat-date-range-input>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n <mat-error>Укажите период</mat-error>\n</mat-form-field>\n\n","export enum DialogAction {\r\n Add = 'Добавить',\r\n Edit = 'Изменить',\r\n Delete = 'Удалить',\r\n None = ''\r\n }","import { AsyncPipe } from '@angular/common';\r\nimport { Component, OnDestroy } from '@angular/core';\r\nimport { MatAnchor } from '@angular/material/button';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatDivider } from '@angular/material/divider';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { Router, RouterLink } from '@angular/router';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\nimport { AuthService, UserService } from '../../auth';\r\nimport { SafePipe } from '../../pipes';\r\nimport { AvatarService } from '../../services';\r\nimport { DialogComponent } from '../dialog';\r\n\r\n@Component({\r\n selector: 'ngx-uik-navbar',\r\n templateUrl: 'navbar.html',\r\n styleUrls: ['./navbar.scss'],\r\n imports: [RouterLink, MatAnchor, MatMenuTrigger, MatMenu, MatMenuItem, MatDivider, MatIcon, MatTooltip,\r\n AsyncPipe, SafePipe]\r\n})\r\nexport class NavBarComponent implements OnDestroy {\r\n loggedIn$: BehaviorSubject<boolean>;\r\n roles$: BehaviorSubject<string[]>;\r\n fioUser = '';\r\n photoURL: string = '';\r\n\r\n subscription: Subscription | undefined;\r\n\r\n constructor(private authService: AuthService,\r\n userService: UserService,\r\n private avatarService: AvatarService,\r\n private dialog: MatDialog,\r\n private router: Router,\r\n ) {\r\n this.loggedIn$ = this.authService.loggedIn$;\r\n this.roles$ = this.authService.roles$;\r\n\r\n this.fioUser = '';\r\n\r\n this.subscription = this.loggedIn$.subscribe({\r\n next: (value: boolean) => {\r\n if (value) {\r\n if (userService.userData) {\r\n if (userService.userData.lastName && userService.userData.firstName) {\r\n this.fioUser = userService.userData.lastName + ' ' + userService.userData.firstName;\r\n }\r\n if (userService.userData.idHuman) {\r\n // Аватар сотрудника.\r\n const subs = this.avatarService.getAvatarById(Number(userService.userData.idHuman))\r\n .subscribe((image: ArrayBuffer) => {\r\n if (image) {\r\n const blob = new Blob([image], { \"type\": \"image/jpeg\" });\r\n this.photoURL = URL.createObjectURL(blob);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n logout() {\r\n this.authService.logout(this.router.url);\r\n }\r\n\r\n openDialog(): void {\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n width: '400px',\r\n data: {\r\n id: 'logout',\r\n title: 'Подтверждение',\r\n message: 'Вы хотите выйти?',\r\n btnNoTitle: 'Отмена',\r\n btnYesTitle: 'Выйти'\r\n }\r\n });\r\n\r\n const subs = dialogRef.afterClosed().subscribe((id: any) => {\r\n if (id) {\r\n this.logout();\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n\r\n}\r\n","@if (loggedIn$ | async) {\r\n <nav class=\"lib-navbar-header\">\r\n \r\n <ng-content></ng-content>\r\n\r\n @if ((loggedIn$ | async) === false || !photoURL) {\r\n <mat-icon [matTooltip]=\"(roles$ | async)?.join(',')||''\">account_circle</mat-icon>\r\n }\r\n @if ((loggedIn$ | async) && photoURL) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"photoURL | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser\"\r\n [matTooltip]=\"(roles$ | async)?.join(',')||''\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"(roles$ | async)?.join(',') || ''\">\r\n {{ fioUser }}\r\n </span>\r\n\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">Выйти <mat-icon>logout</mat-icon></a>\r\n </nav>\r\n}","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ngx-uik-not-found',\r\n templateUrl: './not-found.component.html',\r\n styleUrls: ['./not-found.component.css'],\r\n standalone: true\r\n})\r\nexport class NotFoundComponent {\r\n\r\n constructor() {\r\n }\r\n\r\n}\r\n","<div class=\"center\">\r\n <h3 class=\"mat-display-1\">Страница не найдена</h3>\r\n</div>\r\n","import { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule, MatOption } from '@angular/material/autocomplete';\r\nimport { MatError, MatFormField, MatHint, MatLabel } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, map, startWith } from 'rxjs/operators';\r\n\r\nimport { SelectItem } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-select-autocomplete-with-virtual-scroll',\r\n templateUrl: './select-autocomplete-with-virtual-scroll.component.html',\r\n styleUrl: './select-autocomplete-with-virtual-scroll.component.css',\r\n imports: [FormsModule, ReactiveFormsModule, MatAutocompleteModule, MatHint, MatError, MatOption, MatIcon,\r\n MatFormField, ScrollingModule, MatInput, MatLabel]\r\n})\r\nexport class BaseSelectAutocompleteWithVirtualScrollComponent implements OnInit, OnDestroy {\r\n // https://stackblitz.com/edit/autocomplete-with-virtual-scroll-dc9u2g\r\n\r\n // Все элементы\r\n @Input() items$: BehaviorSubject<SelectItem[]> = new BehaviorSubject<SelectItem[]>([]);\r\n // Выбранный элемент\r\n @Input() selectedItem$: BehaviorSubject<SelectItem | undefined> = new BehaviorSubject<SelectItem | undefined>(undefined);\r\n // Заголовок\r\n @Input() title: string = '';\r\n // Видимость\r\n @Input() isVisible: boolean = true;\r\n // Обязательность\r\n @Input() isRequired: boolean = false;\r\n // Доступность\r\n @Input() isDisabled: boolean = false;\r\n // Доступность\r\n @Input() width: string = '200';\r\n // Событие изменения выбранного элемента\r\n @Output() selectedItemChange = new EventEmitter<string>();\r\n\r\n public height: string = '200px';\r\n // input элемент\r\n inputCtrl = new FormControl();\r\n // отфильтрованные (отображаемые) элементы\r\n filteredItems$: BehaviorSubject<SelectItem[]> = new BehaviorSubject<SelectItem[]>([]);\r\n\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n //console.log('isVisible = ', this.isVisible);\r\n //console.log('isDisabled = ', this.isDisabled);\r\n\r\n this.subscription = this.items$.subscribe(data => {\r\n console.log('ITEMS$ data', data);\r\n console.log('onLoad: this.selectedItem$.value =', this.selectedItem$.value);\r\n this.filteredItems$.next(data);\r\n if (this.selectedItem$.value)\r\n this.inputCtrl.setValue(this.selectedItem$.value);\r\n // if (this.items.length > 0) {\r\n // this.filteredItems$ = this.inputCtrl.valueChanges.pipe(\r\n // startWith(null),\r\n // map(item => (item ? this._filter(item) : this.items.slice())),\r\n // );\r\n\r\n const subs = this.selectedItem$.subscribe(item => {\r\n console.log('ITEM =', item);\r\n this.inputCtrl.setValue(item);\r\n // if (item)\r\n // this.selectedItems = this.items.filter(s => items.includes(s.value));\r\n });\r\n this.subscription?.add(subs);\r\n });\r\n\r\n // Listen for changes to the input\r\n const subs = this.inputCtrl.valueChanges\r\n .pipe(\r\n startWith(''),\r\n // eslint-disable-next-line no-magic-numbers\r\n debounceTime(500),\r\n distinctUntilChanged(),\r\n // Note: If the option value is bound to object, after selecting the option\r\n // Note: the value will change from string to {}. We want to perform search\r\n // Note: only when the type is string (no match)\r\n //filter(q => typeof q === 'string'),\r\n //tap((v) => console.log('v=', v)),\r\n map((value) => {\r\n // Filter the options\r\n if (typeof value === 'undefined') {\r\n this.filteredItems$.next(this.items$.value);\r\n } else {\r\n if (typeof value !== 'object') {\r\n console.log('v1=', value);\r\n this.filteredItems$.next(\r\n this.items$.value.filter(option =>\r\n option.viewValue\r\n .toLowerCase()\r\n .includes(value.toLowerCase())\r\n )\r\n );\r\n } else {\r\n // typeof value === 'object'\r\n console.log('v2=', value);\r\n if (value) {\r\n // this.predmet = value;\r\n this.filteredItems$.next(\r\n this.items$.value.filter((option) =>\r\n (option.viewValue)\r\n .toLowerCase()\r\n .includes(value.viewValue.toLowerCase())\r\n )\r\n );\r\n } else {\r\n this.filteredItems$.next(this.items$.value);\r\n }\r\n }\r\n }\r\n // Recompute how big the viewport should be.\r\n // eslint-disable-next-line no-magic-numbers\r\n if (this.filteredItems$.value.length < 4) {\r\n // eslint-disable-next-line no-magic-numbers\r\n this.height = this.filteredItems$.value.length * 50 + 'px';\r\n } else {\r\n this.height = '200px';\r\n }\r\n console.log('update filteredItems$.value=', this.filteredItems$.value);\r\n })\r\n )\r\n .subscribe();\r\n this.subscription?.add(subs);\r\n\r\n if (this.isDisabled) {\r\n this.inputCtrl.disable();\r\n } else {\r\n this.inputCtrl.enable();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n onSelectedItemChange(item: any) {\r\n console.log(\"onSelectedItemChange, item=\", item);\r\n // this.selectedItem$.next(item);\r\n this.selectedItemChange.emit(item);\r\n }\r\n\r\n onClearClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n this.inputCtrl.setValue(\"\");\r\n }\r\n\r\n displayWithFn(lookup: any) {\r\n return lookup\r\n ? lookup.viewValue\r\n : null;\r\n }\r\n\r\n}\r\n","@if (isVisible) {\r\n <mat-form-field [style.width.px]=\"width\">\r\n <mat-label>{{title}}</mat-label>\r\n <input type=\"text\"\r\n [placeholder]=title\r\n aria-label=\"Number\"\r\n matInput\r\n (ngModelChange)=\"onSelectedItemChange($event)\"\r\n [formControl]=\"inputCtrl\"\r\n [matAutocomplete]=\"auto\"\r\n [required]=\"isRequired ? 'required' : ''\"\r\n >\r\n @if (!isDisabled && selectedItem$.value) {\r\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onClearClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayWithFn\" showPanel=\"true\">\r\n <cdk-virtual-scroll-viewport class=\"autocomplete-test-viewport\" [style.height]=\"height\" itemSize=\"25\">\r\n <mat-option *cdkVirtualFor=\"let option of filteredItems$\" [value]=\"option\" class=\"autocomplete-item\">\r\n {{option.viewValue}}\r\n </mat-option>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n @if (inputCtrl.invalid) {\r\n <mat-error>Введите {{title}}</mat-error>\r\n }\r\n @if (!inputCtrl.value) {\r\n <mat-hint>Начните вводить ...</mat-hint>\r\n }\r\n </mat-form-field>\r\n}","import { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\nimport { AsyncPipe } from \"@angular/common\";\r\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { MatOptgroup, MatOption } from '@angular/material/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatSelect } from '@angular/material/select';\r\nimport { BehaviorSubject, Observable, Subscription } from \"rxjs\";\r\n\r\nimport { SelectGroup } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-select-with-group',\r\n templateUrl: './select-with-group.component.html',\r\n styleUrls: ['./select-with-group.component.css'],\r\n imports: [FormsModule, ReactiveFormsModule, MatIcon, MatOption, MatOptgroup, MatSelect, MatFormField, MatLabel,\r\n AsyncPipe]\r\n})\r\nexport class BaseSelectWithGroupComponent implements OnInit, OnDestroy {\r\n\r\n // Все группы\r\n @Input() groups$: BehaviorSubject<SelectGroup[]> = new BehaviorSubject<SelectGroup[]>([]);\r\n // Выбранные элементы, ключи (BaseSelectItem.value)\r\n @Input() selectedItems$: Observable<string[]> = new Observable<string[]>();\r\n // Заголовок\r\n @Input() title: string = '';\r\n // Событие изменения выбранных элементов\r\n @Output() selectedItemsChange = new EventEmitter<string[]>();\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n control = new FormControl<number[]>([]);\r\n\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.groups$.subscribe(data => {\r\n if (data.length > 0) {\r\n this.subscription = this.selectedItems$.subscribe(items => {\r\n this.control.setValue(items.map(i => Number(i)));\r\n });\r\n }\r\n });\r\n }\r\n \r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n selectionChange($event: any) {\r\n this.selectedItemsChange.emit($event.value.map((i: number) => i.toString()));\r\n }\r\n\r\n onClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n // this.control.setValue('');\r\n this.selectedItemsChange.emit([]);\r\n }\r\n}\r\n","<mat-form-field class=\"select-with-group\" appearance=\"fill\">\r\n <mat-label>{{ title }}</mat-label>\r\n <mat-select [formControl]=\"control\" (selectionChange)=\"selectionChange($event)\" multiple>\r\n @for (group of (groups$ | async); track group) {\r\n <mat-optgroup [label]=\"group.name\">\r\n @for (item of group.items; track item) {\r\n <mat-option [value]=\"item.value\" >\r\n {{item.viewValue}}\r\n </mat-option>\r\n }\r\n </mat-optgroup>\r\n }\r\n\r\n </mat-select>\r\n @if (control.value && control.value!.length > 0) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n</mat-form-field>\r\n","import { SelectionModel } from '@angular/cdk/collections';\r\nimport { AfterViewInit, Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, inject } from '@angular/core';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatDivider } from '@angular/material/divider';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuContent, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, MatSortHeader } from '@angular/material/sort';\r\nimport {\r\n MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef,\r\n MatNoDataRow, MatRow, MatRowDef, MatTable, MatTableDataSource\r\n} from '@angular/material/table';\r\nimport { RouterLink } from '@angular/router';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\nimport { AuthService } from '../../auth';\r\nimport { IColumnOptions } from './models/column-options.interface';\r\nimport { IContextMenuOptions } from './models/context-menu-options.interface';\r\nimport { IPageState, ISortState, ITableState } from './table.state';\r\n\r\n\r\n@Component({\r\n selector: 'ngx-uik-table',\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.css'],\r\n imports: [MatTable, MatSort, MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCheckbox, MatCellDef, MatCell,\r\n MatSortHeader, MatIcon, RouterLink, MatNoDataRow, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow,\r\n MatMenuTrigger, MatMenu, MatMenuContent, MatDivider, MatMenuItem, MatPaginator]\r\n})\r\nexport class TableComponent<T> implements OnInit, AfterViewInit, OnDestroy {\r\n /** Отображаемые данные. */\r\n @Input() data$ = new BehaviorSubject<T[]>([]);\r\n /** Настройки колонок. */\r\n @Input() columnOptions: IColumnOptions[] = [];\r\n /** Количество записе. */\r\n @Input() length$: BehaviorSubject<number> = new BehaviorSubject<number>(0);\r\n /** Состояние сортировки, пагинации. */\r\n @Input() tableState: ITableState = <ITableState>{};\r\n /** Разрешен выбор нескольких строк. */\r\n @Input() allowMultiSelect = false;\r\n /** Ссылка на страницу в приложении */\r\n @Input() rowRouterLinkField = '';\r\n /** Список элементов контекстного меню. */\r\n @Input() opt: IContextMenuOptions<T>[] = [];\r\n /** Роли которым разрешено отправлять событие rowDoubleClicked при двойном щелчке мышью. */\r\n @Input() rolesDblClickedEvent: string[] = [];\r\n\r\n /** */\r\n @Output() pageStateChange = new EventEmitter<IPageState>();\r\n /** */\r\n @Output() sortStateChange = new EventEmitter<ISortState>();\r\n /** */\r\n @Output() selectionChange = new EventEmitter<T[]>();\r\n /** */\r\n @Output() rowDoubleClicked = new EventEmitter<T>();\r\n\r\n @ViewChild(MatSort) sort: MatSort | undefined;\r\n @ViewChild(MatPaginator) paginator: MatPaginator | undefined;\r\n @ViewChild(MatMenuTrigger) contextMenu: MatMenuTrigger | undefined;\r\n\r\n /** Выбранная строка, для которого будет показываться меню при нажатии правой кнопки мыши. */\r\n itemForMenu: T | undefined;\r\n /** Позиция в которой отображается контекстное меню. */\r\n contextMenuPosition = { x: '0px', y: '0px' };\r\n\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageIndex = 0;\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageSize = 10;\r\n\r\n /** Источник данных для отображения. */\r\n dataSource = new MatTableDataSource<T>();\r\n\r\n /** Выбранные записи. */\r\n selection: SelectionModel<T> = new SelectionModel<T>();\r\n\r\n /** Список отображаемых колонок (формируется из @columnOptions). */\r\n displayedColumns: string[] | undefined;\r\n\r\n // DI\r\n protected authService = inject(AuthService);\r\n\r\n // Разрешено ли отправлять событие rowDoubleClicked при двойном щелчке мышью.\r\n dblClickedEventEnable = true;\r\n\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n // получить права пользователя\r\n this.subscription = this.authService.roles$.subscribe((userRoles) => {\r\n this.dblClickedEventEnable = !this.authService.isHideElement(this.rolesDblClickedEvent, userRoles);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.displayedColumns = ['select'].concat(this.columnOptions?.filter(c => !c.hide).map((item) => item.name) || []);\r\n\r\n const subs = this.data$.subscribe(data => {\r\n this.dataSource.data = data;\r\n\r\n // сохранить выделенные строки, если они все еще есть в данных\r\n const selected = this.selection.selected;\r\n this.selection.clear();\r\n data.filter(v => selected.map(s => JSON.stringify(s)).includes(JSON.stringify(v))).map(d => {\r\n this.selection.select(d);\r\n });\r\n });\r\n this.subscription?.add(subs);\r\n\r\n // пересоздаем, т.к. параметр allowMultiSelect появляется только сейчас\r\n this.selection = new SelectionModel<T>(this.allowMultiSelect);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n // подписи элементов управления пагинатора (MatPaginatorIntl)\r\n if (this.paginator) {\r\n this.paginator._intl.itemsPerPageLabel = 'Записей на странице';\r\n this.paginator._intl.firstPageLabel = 'Первая страница';\r\n this.paginator._intl.previousPageLabel = 'Предыдущая страница';\r\n this.paginator._intl.nextPageLabel = 'Следующая страница';\r\n this.paginator._intl.lastPageLabel = 'Последняя страница';\r\n\r\n // изменение пагинации\r\n const subs = this.paginator.page.subscribe(page => {\r\n this.tableState.pageSize = page.pageSize;\r\n this.tableState.pageIndex = page.pageIndex;\r\n this.pageStateChange.emit({\r\n pageIndex: page.pageIndex,\r\n pageSize: page.pageSize\r\n } as IPageState);\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n\r\n // изменение сортировки\r\n if (this.sort) {\r\n const subs = this.sort.sortChange\r\n .subscribe(sort => {\r\n this.tableState.sortActive = sort.active;\r\n this.tableState.sortDirection = sort.direction;\r\n this.sortStateChange.emit({\r\n sortActive: sort.active,\r\n sortDirection: sort.direction\r\n } as ISortState);\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n\r\n // изменение выбранных записей\r\n if (this.selection) {\r\n const subs = this.selection.changed.subscribe(change => {\r\n this.selectionChange.emit(change.source.selected);\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n }\r\n\r\n\r\n /** Whether the number of selected elements matches the total number of rows. */\r\n isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.dataSource.data.length;\r\n return numSelected === numRows;\r\n }\r\n\r\n /** Selects all rows if they are not all selected; otherwise clear selection. */\r\n masterToggle() {\r\n console.log(this.selection.isMultipleSelection());\r\n if (this.isAllSelected()) {\r\n this.selection.clear();\r\n } else {\r\n this.dataSource.data.forEach(row => this.selection.select(row));\r\n }\r\n }\r\n\r\n /** При щелчке по строке. */\r\n onRowClicked(row: T) {\r\n // выделение строки при щелчке по строке\r\n if (this.selection.isSelected(row)) {\r\n this.selection.deselect(row);\r\n } else {\r\n this.selection.select(row);\r\n }\r\n }\r\n\r\n /** При двойном щелчке по строке. */\r\n onRowDblClicked(row: T) {\r\n // выделение строки при двойном щелчке по строке\r\n this.selection.clear();\r\n this.selection.select(row);\r\n if (this.dblClickedEventEnable)\r\n this.rowDoubleClicked.emit(row);\r\n }\r\n\r\n /** При вызове контекстного меню. */\r\n onContextMenu(event: MouseEvent, itemForMenu: T | undefined) {\r\n if (this.opt && this.opt.length === 0) {\r\n // если нет пунктов меню, то не показываем меню\r\n return;\r\n }\r\n event.preventDefault();\r\n this.itemForMenu = itemForMenu;\r\n this.contextMenuPosition.x = event.clientX + 'px';\r\n this.contextMenuPosition.y = event.clientY + 'px';\r\n // как это (menuData) использовать в шаблоне не понятно, поэтому использую this.itemForMenu\r\n // https://www.concretepage.com/angular-material/passing-data-to-mat-menu-angular-material\r\n if (this.contextMenu) {\r\n this.contextMenu.menuData = { itemForMenu };\r\n this.contextMenu.menu?.focusFirstItem('mouse');\r\n this.contextMenu.openMenu();\r\n }\r\n }\r\n}\r\n","<div class=\"component-container\">\r\n <div class=\"table-container\">\r\n <table mat-table [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortActive]=\"tableState.sortActive || ''\"\r\n [matSortDirection]=\"tableState.sortDirection\"\r\n matSortDisableClear>\r\n\r\n <!-- Выбор строки Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n @if (allowMultiSelect) {\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n }\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n </td>\r\n <!-- <td mat-footer-cell *matFooterCellDef></td>-->\r\n </ng-container>\r\n\r\n @for (item of columnOptions; track item) {\r\n <ng-container matColumnDef={{item.name}}>\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [disabled]=\"item.titleSortDisable\">{{item.title}}</th>\r\n @if (!item.format) {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n {{element[item.name]}}\r\n </td>\r\n }\r\n @if (item.format === 'pre-wrap') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" class=\"pre-wrap\">\r\n {{element[item.name]}}\r\n </td>\r\n }\r\n @if (item.format === 'link') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n <a [href]=\"element[item.name]\" target=\"_blank\">{{element[item.name]}}</a>\r\n </td>\r\n }\r\n @if (item.format === 'linkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (element[item.name]) {\r\n <a [href]=\"element[item.name]\" target=\"_blank\">\r\n @if (item.icon) {\r\n <mat-icon>{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span class=\"material-symbols-outlined-light\">{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n }\r\n @if (item.format === 'routerLink') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n <a [routerLink]=\"[element[item.name]]\">{{element[item.name]}}</a>\r\n </td>\r\n }\r\n @if (item.format === 'routerLinkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (element[item.name]) {\r\n <a [routerLink]=\"[element[item.name]]\">\r\n @if (item.icon) {\r\n <mat-icon>{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span class=\"material-symbols-outlined-light\">{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n }\r\n @if (item.format === 'checkbox') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n <mat-checkbox [checked]=\"element[item.name] === 1\" [disabled]=\"true\"></mat-checkbox>\r\n </td>\r\n }\r\n <!-- <td mat-footer-cell *matFooterCellDef>-->\r\n <!-- </td>-->\r\n </ng-container>\r\n }\r\n\r\n <tr class=\"mat-row\" *matNoDataRow>\r\n <td class=\"mat-cell\" colspan=\"9999\">\r\n Нет данных для отображения\r\n </td>\r\n </tr>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let row;\r\n columns: displayedColumns;\" (click)=\"onRowClicked(row)\" (dblclick)=\"onRowDblClicked(row)\" class=\"element-row\"\r\n [class.selected-row]=\"selection.isSelected(row)\">\r\n <!-- [class.fact-done-row]=\"row.quantFact >= row.quantPlan\"-->\r\n </tr>\r\n <!-- <tr mat-footer-row *matFooterRowDef=\"displayedColumns\"></tr>-->\r\n </table>\r\n <div style=\"visibility: hidden; position: fixed\"\r\n [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\"\r\n [matMenuTriggerFor]=\"contextMenu\" #menuTrigger=\"matMenuTrigger\">\r\n </div>\r\n <mat-menu #contextMenu=\"matMenu\">\r\n <ng-template matMenuContent let-id=\"id\">\r\n @for (menuItem of opt; track menuItem) {\r\n @if (menuItem.title === '-' && !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (menuItem.title !== '-' && !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)) {\r\n <button mat-menu-item\r\n (click)=\"menuItem.onClickFn ? menuItem.onClickFn(itemForMenu) : ''\"\r\n (mousedown)=\"menuItem.onClickMiddleFn ? menuItem.onClickMiddleFn($event, itemForMenu, menuTrigger) : ''\"\r\n [disabled]=\"menuItem.disabledFn ? menuItem.disabledFn(itemForMenu) : menuItem.disabled\">\r\n @if (menuItem.icon) {\r\n <mat-icon>{{menuItem.icon}}</mat-icon>\r\n }\r\n @if (menuItem.symbol) {\r\n <span class=\"material-symbols-outlined-light\">{{menuItem.symbol}}</span>\r\n }\r\n {{ menuItem.title }}\r\n </button>\r\n }\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n</div>\r\n\r\n\r\n<mat-paginator [length]=\"length$.value\"\r\n [pageIndex]=\"tableState.pageIndex || defaultPageIndex\"\r\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n [pageSize]=\"tableState.pageSize || defaultPageSize\"\r\n showFirstLastButtons\r\n itemsPerPageLabel=\"\"\r\n></mat-paginator>\r\n</div>\r\n","/*\r\n * Public API Surface of uikit\r\n */\r\n\r\nexport * from './auth';\r\nexport * from './base';\r\nexport * from './core';\r\nexport * from './guards';\r\nexport * from './loader';\r\nexport * from './models';\r\nexport * from './pipes';\r\nexport * from './services';\r\nexport * from './shared';\r\nexport * from './types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.Environment","i1","i3.LogService","i4.AlertService","i5.UserService","i1.AuthService","i3.LoaderService","i2.AuthService","i2","i1.UserService","i2.AvatarService","i3","i4","startWith","MatOption","MatFormField","MatLabel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MASa,mBAAmB,CAAA;AACX,IAAA,IAAI;AAEb,IAAA,SAAS,GAAG,IAAI,YAAY,EAAU;IAExC,UAAU,GAAG,UAAU;AAE/B,IAAA,WAAA,GAAA;;IAIA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE;;IAGlC,QAAQ,GAAA;;AAEN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;;;AAInC;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAU,EAAA;AAClB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK;YAC7C,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;;;;uGAhCtB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECThC,wbAUqE,EDHzD,MAAA,EAAA,CAAA,uZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,oGAAE,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,CAAA;;2FAEnD,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;+BACE,qBAAqB,EAAA,OAAA,EAGtB,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,wbAAA,EAAA,MAAA,EAAA,CAAA,uZAAA,CAAA,EAAA;wDAG5C,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM;gBAEP,SAAS,EAAA,CAAA;sBAAlB;gBAQD,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;MEFjC,kBAAkB,CAAA;IACpB,YAAY,GAAW,EAAE;AAExB,IAAA,SAAS,GAAG,IAAI,YAAY,EAAgB;IACtD,IAAI,GAAG,IAAI;IAEX,IAAI,GAAc,IAAI,SAAS,CAAC;QAC9B,QAAQ,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpD,QAAQ,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACrD,KAAA,CAAC;IAEF,UAAU,GAAG,KAAK;AAElB,IAAA,WAAA,GAAA;IAEA,IACI,OAAO,CAAC,SAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC3B,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;;aACd;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;;IAItB,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;uGA3B7B,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjB/B,+yFAyDA,EAAA,MAAA,EAAA,CAAA,sVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1CY,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAEhK,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;+BACE,oBAAoB,EAAA,OAAA,EAGrB,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,+yFAAA,EAAA,MAAA,EAAA,CAAA,sVAAA,CAAA,EAAA;wDAGnK,YAAY,EAAA,CAAA;sBAApB;gBAES,SAAS,EAAA,CAAA;sBAAlB;gBAaG,OAAO,EAAA,CAAA;sBADV;;;MEhCmB,WAAW,CAAA;AAWhC;;MCJY,UAAU,CAAA;AAGD,IAAA,GAAA;IAFb,SAAS,GAAW,EAAE;AAE7B,IAAA,WAAA,CAAoB,GAAgB,EAAA;QAAhB,IAAG,CAAA,GAAA,GAAH,GAAG;;IAGvB,GAAG,CAAC,GAAG,IAAS,EAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;;YAEtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;;YAElC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;;uGAXtB,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA;;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACFD;MAIa,YAAY,CAAA;AAIH,IAAA,SAAA;;IAFH,QAAQ,GAAG,IAAI;AAEhC,IAAA,WAAA,CAAoB,SAAsB,EAAA;QAAtB,IAAS,CAAA,SAAA,GAAT,SAAS;;IAG7B,YAAY,CAAC,OAAe,EAAE,MAAc,EAAE,QAAmB,GAAA,IAAI,CAAC,QAAQ,EAAA;QAC5E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;YACnC,QAAQ;YACR,UAAU,EAAE,CAAC,cAAc,CAAC;AAC7B,SAAA,CAAC;;AAGJ,IAAA,OAAO,CAAC,OAAe,EAAE,QAAmB,GAAA,IAAI,CAAC,QAAQ,EAAA;QACvD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;;AAGjD,IAAA,IAAI,CAAC,OAAe,EAAE,QAAmB,GAAA,IAAI,CAAC,QAAQ,EAAA;QACpD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;;AAGjD,IAAA,MAAM,CAAC,OAAe,EAAE,QAAmB,GAAA,IAAI,CAAC,QAAQ,EAAA;QACtD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;;AAGjD,IAAA,OAAO,CAAC,OAAe,EAAE,QAAmB,GAAA,IAAI,CAAC,QAAQ,EAAA;QACvD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;;AAGjD,IAAA,KAAK,CAAC,OAAe,EAAE,QAAmB,GAAA,IAAI,CAAC,QAAQ,EAAA;QACrD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;;uGA/BtC,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACND;;AAEG;MACU,IAAI,CAAA;IACf,EAAE,GAAW,CAAC;IACd,QAAQ,GAAW,EAAE;IACrB,SAAS,GAAW,EAAE;IACtB,QAAQ,GAAW,EAAE;IACrB,IAAI,GAAW,EAAE;IACjB,MAAM,GAAW,CAAC;IAClB,IAAI,GAAW,EAAE;IACjB,MAAM,GAAW,EAAE;IACnB,IAAI,GAAW,EAAE;IACjB,KAAK,GAAW,EAAE;IAClB,KAAK,GAAW,EAAE;IAClB,UAAU,GAAa,EAAE;IACzB,QAAQ,GAAa,EAAE;IACvB,OAAO,GAAW,EAAE;IACpB,KAAK,GAAW,EAAE;;IAElB,UAAU,GAAW,CAAC;AACvB;AAID;;AAEG;MACU,WAAW,CAAA;AACd,IAAA,IAAI;AACZ,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;;aAChE;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE;;;AAI1B,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM;;;AAI1B,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,IAAI;;;IAIlB,IAAI,QAAQ,CAAC,IAAU,EAAA;AACrB,QAAA,YAAY,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;;;IAIvE,UAAU,GAAA;AACR,QAAA,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC;;uGA3BjC,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cALV,MAAM,EAAA,CAAA;;2FAKP,WAAW,EAAA,UAAA,EAAA,CAAA;kBANvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACfD;MAIa,WAAW,CAAA;AAoBF,IAAA,IAAA;AACV,IAAA,MAAA;AACA,IAAA,OAAA;AACA,IAAA,YAAA;AACA,IAAA,IAAA;;IAtBV,SAAS,GAAG,UAAU;;AAEtB,IAAA,WAAW,GAAa,CAAC,MAAM,CAAC;IACvB,YAAY,GAAG,EAAE;;AAE1B,IAAA,MAAM;AACN,IAAA,SAAS;;IAGQ,QAAQ,GAAG,MAAM;;AAGjB,IAAA,aAAa,GAAG;QAC/B,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC;KACnF;AAEO,IAAA,OAAO;IAEf,WAAoB,CAAA,IAAgB,EAC1B,MAAc,EACd,OAAmB,EACnB,YAA0B,EAC1B,IAAiB,EAAA;QAJP,IAAI,CAAA,IAAA,GAAJ,IAAI;QACd,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAI,CAAA,IAAA,GAAJ,IAAI;AAEZ,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,cAAc;QACvC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;QAC/C,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAW,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;;aACrE;YACL,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAW,IAAI,CAAC,YAAY,CAAC;;QAEhE,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,EAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;;;AAIrG,IAAA,aAAa,CAAC,cAA8B,EAAA;AAC1C,QAAA,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,cAAc,CAAC,CAAC;;;IAIhE,OAAO,CAAC,KAAe,EAAE,SAAiB,EAAA;QAC/C,IAAI,KAAK,EAAE;YACT,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC;;aAChE;AACL,YAAA,OAAO,KAAK;;;;IAKT,QAAQ,CAAC,KAAe,EAAE,UAAoB,EAAA;QACnD,IAAI,KAAK,EAAE;AACT,YAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAClC,gBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,EAAE;AAChE,oBAAA,OAAO,IAAI;;;;AAIjB,QAAA,OAAO,KAAK;;AAGd;AAC+C;IACxC,aAAa,CAAC,KAAe,EAAE,UAAoB,EAAA;AACxD,QAAA,IAAI,CAAC,KAAK;AACR,YAAA,OAAO,KAAK;QACd,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrC,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE;AACjE,gBAAA,OAAO,KAAK;;;AAGhB,QAAA,OAAO,IAAI;;;;;;;;;;;IAeb,KAAK,CAAC,QAAgB,EAAE,QAAgB,EAAE,KAAa,EAAE,SAAA,GAAoB,EAAE,EAAE,SAAqB,EAAA;AACpG,QAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC;AACpD,QAAA,IAAI,IAAI,GAAG,CAAA,SAAA,EAAY,QAAQ,CAAa,UAAA,EAAA,eAAe,EAAE;QAE7D,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,IAAI,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE;;AAG3B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,IAAI,CAAY,SAAA,EAAA,IAAI,CAAC,OAAO,EAAE;;AAGpC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa;AAC5D,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,IAAI,IAAG;AACX,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC;AACxC,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC;aAClD;AACD,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,0BAA0B,GAAG,KAAK,EAAE,CAAC,CAAC;gBAC9D,IAAI,SAAS,EAAE;AACb,oBAAA,SAAS,EAAE;;;AAGhB,SAAA,CAAC;;;AAIN,IAAA,aAAa,CAAC,MAAc,EAAE,KAAa,EAAE,YAAoB,EAAE,EAAA;AACjE,QAAA,IAAI,IAAI,GAAG,CAAU,OAAA,EAAA,MAAM,EAAE;QAE7B,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,IAAI,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE;;AAG3B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,IAAI,CAAY,SAAA,EAAA,IAAI,CAAC,OAAO,EAAE;;AAGpC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa;AACnE,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACb,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC;AACxC,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC;aAClD;AACD,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,0BAA0B,GAAG,KAAK,EAAE,CAAC,CAAC;;AAEjE,SAAA,CAAC;;;IAIN,MAAM,CAAC,YAAoB,EAAE,EAAA;;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;;;AAGtB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;;QAE1B,IAAI,SAAS,EAAE;;YAEb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;;aAClE;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE;;;;IAKnC,QAAQ,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAW,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC;;;;;;;;;;;;;;;;;AAoBzD,IAAA,kBAAkB,CAAC,IAAS,EAAE,SAAA,GAAoB,EAAE,EAAA;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEzB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAE7C,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC;;AAE/C,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;;AAE3B,gBAAA,MAAM,UAAU,GAAG,IAAI,oBAAoB,EAAE;;gBAE7C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW;;;AAGtD,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACtD,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;;iBAC/C;gBACL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;;;aAE9B;;YAEL,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;;;uGA5MnB,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA;;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MC6BY,wBAAwB,CAAA;AACf,IAAA,KAAA;AAApB,IAAA,WAAA,CAAoB,KAAwB,EAAA;QAAxB,IAAK,CAAA,KAAA,GAAL,KAAK;;IAEzB,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;;uGAJjB,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EArCvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;AAKX,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA6BW,kBAAkB,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAvCpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,CAAA;;;;;AAKX,EAAA,CAAA,EAAA,eAAA,EA4BkB,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA,CAAC,kBAAkB,CAAC,EAAA,MAAA,EAAA,CAAA,+OAAA,CAAA,EAAA;;;MC7BpB,aAAa,CAAA;AAGJ,IAAA,OAAA;IAFZ,UAAU,GAAsB,IAAI;AAE5C,IAAA,WAAA,CAAoB,OAAgB,EAAA;QAAhB,IAAO,CAAA,OAAA,GAAP,OAAO;;IAEpB,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;AAEzC,QAAA,MAAM,oBAAoB,GAAG,IAAI,eAAe,CAAC,wBAAwB,CAAC;;QAE1E,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE;AACnC,gBAAA,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,oBAAoB,CAAC;;AAEjD,SAAC,CAAC;;IAGG,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;;;uGApBjB,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAHZ,MAAM,EAAA,CAAA;;2FAGP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCQY,kBAAkB,CAAA;AAWT,IAAA,WAAA;AACV,IAAA,KAAA;AACA,IAAA,aAAA;IAZV,OAAO,GAAY,KAAK;IACxB,KAAK,GAAW,EAAE;IAClB,OAAO,GAAY,KAAK;;IAExB,KAAK,GAAW,CAAC;;AAEjB,IAAA,GAAG;;IAEH,SAAS,GAAW,EAAE;AAEtB,IAAA,WAAA,CAAoB,WAAwB,EAClC,KAAqB,EACrB,aAA4B,EAAA;QAFlB,IAAW,CAAA,WAAA,GAAX,WAAW;QACrB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAa,CAAA,aAAA,GAAb,aAAa;AAErB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAG;AAC1C,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,SAAC,CAAC;;IAGJ,QAAQ,GAAA;AACN,QAAA,IAAI,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE;;;QAGvF,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,IAAG;AACxC,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC;;;;AAItC,SAAC,CAAC;;IAIJ,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;;IAGxB,aAAa,GAAA;AACX,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AAC3B,SAAC;;AAGH,IAAA,QAAQ,CAAC,MAAoB,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;;AAG5G,IAAA,cAAc,CAAC,MAAc,EAAA;QAC3B,MAAM,MAAM,GAAG,MAAM;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;;uGApDzD,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAI,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EChB/B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,8UAYG,EDES,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,4HAAE,mBAAmB,EAAA,QAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAEtC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAGrB,OAAA,EAAA,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,8UAAA,EAAA;;;MENvC,8BAA8B,CAAA;AAGrB,IAAA,EAAA;AAAwB,IAAA,WAAA;AAFN,IAAA,UAAU;IAEhD,WAAoB,CAAA,EAAc,EAAU,WAAwB,EAAA;QAAhD,IAAE,CAAA,EAAA,GAAF,EAAE;QAAsB,IAAW,CAAA,WAAA,GAAX,WAAW;;IAEvD,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI;;;uGAP9B,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,CAAA,6BAAA,EAAA,YAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,UAAU,EAAE;AACf,iBAAA;sGAEuC,UAAU,EAAA,CAAA;sBAA/C,KAAK;uBAAC,6BAA6B;;;MCDzB,2BAA2B,CAAA;AAGlB,IAAA,EAAA;AAAwB,IAAA,WAAA;AAFT,IAAA,UAAU;IAE7C,WAAoB,CAAA,EAAc,EAAU,WAAwB,EAAA;QAAhD,IAAE,CAAA,EAAA,GAAF,EAAE;QAAsB,IAAW,CAAA,WAAA,GAAX,WAAW;;IAEvD,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;;;uGAPrC,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,CAAA,0BAAA,EAAA,YAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE;AACf,iBAAA;sGAEoC,UAAU,EAAA,CAAA;sBAA5C,KAAK;uBAAC,0BAA0B;;;MCFtB,sBAAsB,CAAA;AAGb,IAAA,EAAA;AAAwB,IAAA,WAAA;IAFd,IAAI,GAAW,EAAE;IAE/C,WAAoB,CAAA,EAAc,EAAU,WAAwB,EAAA;QAAhD,IAAE,CAAA,EAAA,GAAF,EAAE;QAAsB,IAAW,CAAA,WAAA,GAAX,WAAW;;IAEvD,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,KAAI;AAC9C,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;oBACnD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI;;qBAChC;oBACL,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK;;;AAG5C,SAAC,CAAC;;uGAdO,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,qBAAA,EAAA,MAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE;AACb,iBAAA;sGAE+B,IAAI,EAAA,CAAA;sBAAjC,KAAK;uBAAC,qBAAqB;;;MCDjB,sBAAsB,CAAA;AAGb,IAAA,EAAA;AAAwB,IAAA,WAAA;IAFd,KAAK,GAAa,EAAE;IAElD,WAAoB,CAAA,EAAc,EAAU,WAAwB,EAAA;QAAhD,IAAE,CAAA,EAAA,GAAF,EAAE;QAAsB,IAAW,CAAA,WAAA,GAAX,WAAW;;;;IAIvD,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,KAAI;AAC9C,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;gBAEpE,IAAI,MAAM,EAAE;oBACV,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;;qBACvC;oBACL,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS;;AAEnD,aAAC,CAAC;;;uGAjBK,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,qBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE;AACb,iBAAA;sGAE+B,KAAK,EAAA,CAAA;sBAAlC,KAAK;uBAAC,qBAAqB;;;ACH9B,MAGM,gBAAgB,CAAA;AAEA,IAAA,IAAA;AACV,IAAA,MAAA;IADV,WAAoB,CAAA,IAAiB,EAC3B,MAAc,EAAA;QADJ,IAAI,CAAA,IAAA,GAAJ,IAAI;QACd,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGhB,WAAW,CAAC,KAA6B,EACvC,KAA0B,EAAA;QAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;QACzC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC;;YAGrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;;AAG7E,QAAA,OAAO,OAAO;;uGAjBZ,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFR,MAAM,EAAA,CAAA;;2FAEd,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAHrB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;MAsBY,SAAS,GAAkB,CACtC,KAA6B,EAC7B,KAA0B,KACvB,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK;;ACzBtD,MAGM,gBAAgB,CAAA;AAGA,IAAA,MAAA;AAAwB,IAAA,WAAA;IAFrC,KAAK,GAAa,EAAE;IAE3B,WAAoB,CAAA,MAAc,EAAU,WAAwB,EAAA;QAAhD,IAAM,CAAA,MAAA,GAAN,MAAM;QAAkB,IAAW,CAAA,WAAA,GAAX,WAAW;;;IAIvD,WAAW,CAAC,KAA6B,EAAE,KAA0B,EAAA;QACnE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAa;AAC5C,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAmB,KAAK,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;;uGATjH,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAM,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFR,MAAM,EAAA,CAAA;;2FAEd,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAHrB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;MAcY,SAAS,GAAkB,CACtC,KAA6B,EAC7B,KAA0B,KACvB,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK;;ACpBtD;MACa,WAAW,CAAA;AAIF,IAAA,IAAA;;IAFpB,SAAS,GAAG,UAAU;AAEtB,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI;;;IAGtB,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC;;uGAR9C,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAHV,MAAM,EAAA,CAAA;;2FAGP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCCY,kBAAkB,CAAA;IAC7B,SAAS,GAAG,aAAa;AAEzB,IAAA,WAAA,GAAA;uGAHW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAHjB,MAAM,EAAA,CAAA;;2FAGP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCkBY,oBAAoB,CAAA;IACtB,WAAW,GAAa,EAAE;IAC1B,YAAY,GAAa,EAAE;IAC3B,cAAc,GAAa,EAAE;IAC7B,YAAY,GAAa,EAAE;IAC3B,aAAa,GAAa,EAAE;IAC5B,WAAW,GAAa,EAAE;IAC1B,WAAW,GAAa,EAAE;IAC1B,aAAa,GAAa,EAAE;IAC5B,eAAe,GAAa,EAAE;IAC9B,aAAa,GAAa,EAAE;IAE5B,cAAc,GAAY,KAAK;IAC/B,eAAe,GAAY,KAAK;IAChC,iBAAiB,GAAY,KAAK;IAClC,eAAe,GAAY,KAAK;IAChC,gBAAgB,GAAY,KAAK;IACjC,cAAc,GAAY,KAAK;IAC/B,cAAc,GAAY,KAAK;IAC/B,gBAAgB,GAAY,KAAK;IACjC,kBAAkB,GAAY,KAAK;IACnC,gBAAgB,GAAY,KAAK;IAEjC,aAAa,GAAG,UAAU;IAC1B,cAAc,GAAG,UAAU;IAC3B,gBAAgB,GAAG,SAAS;IAC5B,cAAc,GAAG,aAAa;IAC9B,eAAe,GAAG,wBAAwB;IAC1C,aAAa,GAAG,sBAAsB;IACtC,aAAa,GAAG,sBAAsB;IACtC,eAAe,GAAG,UAAU;IAC5B,iBAAiB,GAAG,iBAAiB;IACrC,eAAe,GAAG,iBAAiB;;IAGnC,SAAS,GAAkC,EAAE;AAE5C,IAAA,aAAa,GAAG,IAAI,YAAY,EAAE;AAClC,IAAA,cAAc,GAAG,IAAI,YAAY,EAAE;AACnC,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAE;AACrC,IAAA,cAAc,GAAG,IAAI,YAAY,EAAE;AACnC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAE;AACpC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAE;AAClC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAE;AAClC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAE;AACpC,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAE;AACtC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAE;;AAGpC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAE3C,SAAS,GAAa,EAAE;AACxB,IAAA,YAAY;AAEZ,IAAA,WAAA,GAAA;;AAEE,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,KAAI;AAClE,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC5B,SAAC,CAAC;;IAGJ,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;AAGnC,IAAA,MAAM,CAAC,KAAe,EAAA;AACpB,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;;IAG/D,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;;IAG3B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;IAG5B,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;;IAG9B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;IAG5B,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;;IAG7B,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;;IAG3B,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;;IAG3B,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;;IAG7B,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;;IAG/B,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;;uGA3GlB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAJpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAAA;YACT;AACD,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBH,6jIA0FA,EDzEY,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAU,EAAE,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,6FAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAE,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAU,EAAE,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,qSAAE,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAK/F,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAThC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,WAGvB,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,CAAC,EAChG,SAAA,EAAA;wBACT;AACD,qBAAA,EAAA,QAAA,EAAA,6jIAAA,EAAA;wDAGQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBACS,eAAe,EAAA,CAAA;sBAAxB;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBACS,eAAe,EAAA,CAAA;sBAAxB;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBACS,eAAe,EAAA,CAAA;sBAAxB;;;IE9DS;AAAZ,CAAA,UAAY,MAAM,EAAA;AAChB,IAAA,MAAA,CAAA,KAAA,CAAA,GAAA,8DAAkB;AAClB,IAAA,MAAA,CAAA,MAAA,CAAA,GAAA,wDAAkB;AACpB,CAAC,EAHW,MAAM,KAAN,MAAM,GAGjB,EAAA,CAAA,CAAA;;MCFY,aAAa,CAAA;IACtB,KAAK,GAAW,EAAE;AAClB,IAAA,UAAU;AACV,IAAA,IAAI;AACJ,IAAA,SAAS;AAET,IAAA,WAAA,GAAA;;AAGA,IAAA,SAAS,CAAC,KAAmB,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;AAC3B,QAAA,KAAK,CAAC,cAAc,EAAE,CAAC;;IAG3B,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACjB,IAAI,IAAI,CAAC,UAAU;AACf,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,UAAW,CAAC,MAAM,CAAC,WAAsB,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;gBACpJ,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;;iBACnC;AACH,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;;;;IAKpH,eAAe,GAAA;QACX,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG;;IAGjD,gBAAgB,GAAA;QACZ,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,IAAI;;uGA/BzC,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;ICDW;AAAZ,CAAA,UAAY,YAAY,EAAA;AACpB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,gFAAsB;AACtB,IAAA,YAAA,CAAA,KAAA,CAAA,GAAA,8DAAkB;AAClB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,wDAAkB;AAClB,IAAA,YAAA,CAAA,QAAA,CAAA,GAAA,kDAAmB;AACvB,CAAC,EALW,YAAY,KAAZ,YAAY,GAKvB,EAAA,CAAA,CAAA;;MCPY,eAAe,CAAA;;IAGxB,mBAAmB,GAAG,GAAG;AAEzB,IAAA,WAAA,GAAA;;uGALS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;MCGY,mBAAmB,CAAA;;AAG5B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAEvB,IAAA,WAAA,GAAA;;;AAIA,IAAA,aAAa,CAAC,KAAmB,EAAE,OAAe,EAAE,IAAoB,EAAA;;AAEpE,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;YAEpB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CACpC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAClC,CACJ;AACD,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;;;uGAlB7B,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;MCCY,iBAAiB,CAAA;AACpB,IAAA,OAAO,kBAAkB,GAAuB,KAAK;AAE7D,IAAA,WAAA,GAAA;AACE,QAAA,iBAAiB,CAAC,kBAAkB,GAAG,KAAK;;IAG9C,OAAO,qBAAqB,CAAC,IAAwB,EAAA;;AAEnD,QAAA,OAAO,iBAAiB,CAAC,kBAAkB,KAAK,IAAI;;IAGtD,wBAAwB,CACtB,cAAuB,EACvB,kBAA2B,EAAA;AAE3B,QAAA,iBAAiB,CAAC,kBAAkB;AAClC,YAAA,cAAc,IAAI;AAChB,kBAAE;AACF,kBAAE;AACF,sBAAE;AACF,sBAAE;AACF,0BAAE;0BACA,MAAM;;uGAvBH,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACOM,MAAM,yBAAyB,GAAG;AAEzC,MAAM,SAAS,GAAU;;AAEvB,IAAA,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE;AAC5D,QAAA,QAAQ,EAAE;KACX,CAAC;;AAEF,IAAA,KAAK,CAAC,UAAU,GAAG,yBAAyB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;AACnE,QAAA,QAAQ,EAAE;KACX,CAAC;;AAEF,IAAA,QAAQ,CAAC;QACP,KAAK,CACH,YAAY,EACZ;YACE,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAClD,YAAA,OAAO,CACL,kBAAkB,EAClB,KAAK,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CACpD;AACD,YAAA,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC5B,SAAA,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB;QACD,KAAK,CACH,YAAY,EACZ;AACE,YAAA,KAAK,CAAC;AACJ,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,QAAQ,EAAE;aACX,CAAC;AACF,YAAA,OAAO,CACL,kBAAkB,EAClB,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAErD,SAAA,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE;KAErB,CAAC;;IAEF,KAAK,CACH,UAAU,GAAG,yBAAyB;;IAEtC,OAAO,CAAC,EAAE,EAAE;QACV,KAAK,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACnD,QAAA,OAAO,CACL,kBAAkB,EAClB,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAErD,KAAA,CAAC,EACF,EAAE,QAAQ,EAAE,IAAI,EAAE;CAErB;AACD,MAAM,UAAU,GAAU,EAAE;AAC5B,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAE5C,MAAM,oBAAoB,GAAG,MAAM,iBAAiB,CAAC,qBAAqB,CAAC,KAAK;AAChF,MAAM,qBAAqB,GAAG,MAAM,iBAAiB,CAAC,qBAAqB,CAAC,MAAM;AAClF,MAAM,qBAAqB,GAAG,MAAM,iBAAiB,CAAC,qBAAqB,CAAC,MAAM;AAClF,MAAM,yBAAyB,GAAG,MAAM,iBAAiB,CAAC,qBAAqB,CAAC,UAAU;AAEpF,MAAA,eAAe,GAAG,OAAO,CAAC,iBAAiB,EAAE;AACxD,IAAA,UAAU,CAAC,oBAAoB,EAAE,SAAS,CAAC;AAC3C,IAAA,UAAU,CAAC,qBAAqB,EAAE,UAAU,CAAC;AAC7C,IAAA,UAAU,CAAC,qBAAqB,EAAE,UAAU,CAAC;AAC7C,IAAA,UAAU,CAAC,yBAAyB,EAAE,cAAc;AACrD,CAAA;;MC3EY,mBAAmB,CAAA;AAE9B,IAAA,WAAA,GAAA;IAEO,QAAQ,CAAC,GAAW,EAAE,KAAa,EAAA;AACxC,QAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;;AAG3B,IAAA,OAAO,CAAC,GAAW,EAAA;AACxB,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;;AAE3B,IAAA,UAAU,CAAC,GAAW,EAAA;AAC3B,QAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;;IAGvB,SAAS,GAAA;QACd,YAAY,CAAC,KAAK,EAAE;;uGAhBX,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCQY,eAAe,CAAA;AAEP,IAAA,SAAA;AACe,IAAA,IAAA;IADlC,WAAmB,CAAA,SAAwC,EACzB,IAAgB,EAAA;QAD/B,IAAS,CAAA,SAAA,GAAT,SAAS;QACM,IAAI,CAAA,IAAA,GAAJ,IAAI;AAEpC,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,KAAK,GAAG,eAAe;;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;AAEzB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;;IAI3B,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;AAjBb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,gDAGhB,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAHd,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ5B,kZASA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDCc,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAE9E,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;+BACI,gBAAgB,EAAA,OAAA,EAGjB,CAAC,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,kZAAA,EAAA;;0BAKvF,MAAM;2BAAC,eAAe;;;MEAd,aAAa,CAAA;IAExB,uBAAuB,GAAG,yBAAyB;;AAGnD,IAAA,KAAK,GAAyB,IAAI,eAAe,CAAM,EAAE,CAAC;;AAE1D,IAAA,OAAO,GAA4B,IAAI,eAAe,CAAS,CAAC,CAAC;AAEjE,IAAA,aAAa;AACb,IAAA,UAAU;AACV,IAAA,mBAAmB;AACnB,IAAA,SAAS;;IAGT,gBAAgB,GAAG,CAAC;;IAEpB,eAAe,GAAG,EAAE;AAEpB,IAAA,MAAM;IACN,eAAe,GAAG,MAAM;IACxB,iBAAiB,GAAG,OAAO;AAE3B,IAAA,YAAY;IAEZ,YAAY,GAAW,EAAE;;IAGzB,cAAc,GAAW,EAAE;;IAE3B,SAAS,GAAW,EAAE;AAGtB;;AAEG;AACH,IAAA,0BAA0B;AAC1B;;AAEG;AACH,IAAA,2BAA2B;AAC3B;;AAEG;AACH,IAAA,oBAAoB;AACpB;;AAEG;AACH,IAAA,qBAAqB;AACrB;;AAEG;AACH,IAAA,mBAAmB;AACnB;;AAEG;AACH,IAAA,oBAAoB;IAEpB,WAAW,GAAa,EAAE;IAC1B,YAAY,GAAa,EAAE;;AAE3B,IAAA,SAAS,GAAa,CAAC,MAAM,CAAC;;AAG9B,IAAA,SAAS,GAAkB,IAAI,OAAO,EAAQ;;AAE9C,IAAA,WAAW,GAAkB,IAAI,OAAO,EAAQ;;AAEhD,IAAA,YAAY,GAAkB,IAAI,OAAO,EAAQ;;IAGjD,gBAAgB,GAAG,KAAK;;IAExB,QAAQ,GAAQ,EAAE;;AAGlB,IAAA,UAAU;;IAGV,eAAe,GAAG,IAAI;;IAEtB,iBAAiB,GAAG,IAAI;;IAGxB,qBAAqB,GAAG,IAAI;;IAG5B,GAAG,GAA6B,EAAE;;AAGxB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEpD,IAAA,YAAY,GAA6B,IAAI,YAAY,EAAE;AAE3D,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,UAAU,GAAG;AAChB,YAAA,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE;AACjF,YAAA,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,CAAkB;YAC1G,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB;YAC1G,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC;SACzF;;IAGH,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;AAGnC,IAAA,YAAY,CAAC,SAAqB,EAAA;QAChC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC/F,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAE7F,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG7B,IAAA,YAAY,CAAC,SAAqB,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,YAAY,EAAE,SAAS,CAAC,UAAU,CAAC;AACtF,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,eAAe,EAAE,SAAS,CAAC,aAAa,CAAC;AAE5F,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG7B,IAAA,aAAa,CAAC,IAAiB,EAAA;QAC7B,OAAO,IAAI,IAAI,EAAE;;;AAInB,IAAA,iBAAiB,CAAC,QAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACzC,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;;;AAI7C,IAAA,qBAAqB,CAAC,QAAa,EAAA;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;;;AAI7D,IAAA,uBAAuB,CAAC,QAAa,EAAA;AACnC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;;;IAI7D,kBAAkB,GAAA;QAChB,IAAI,CAAC,SAAS,EAAE;;;IAIlB,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,MAAM,IAAI,GAAuB,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;;AAG1F,YAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE;gBACnC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC;;;AAI9D,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;;AAG9E,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAA0B,KAAI;;gBAE5E,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;;oBAExE,IAAI,IAAI,CAAC,oBAAoB;wBAC3B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;oBAE5D,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM;AACpD,yBAAA,SAAS,CAAC;AACT,wBAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;;AAEjB,4BAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;gCAC5B,MAAM,QAAQ,GAAG,MAAK;oCACpB,IAAI,CAAC,YAAY,EAAE;AACnB,oCAAA,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,mBAAmB,CAAC;AACjD,iCAAC;AACD,gCAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;;iCAC/D;gCACL,IAAI,CAAC,YAAY,EAAE;AACnB,gCAAA,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,mBAAmB,CAAC;;yBAElD;AACD,wBAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,4BAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;4BAC3B,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,0CAA0C,GAAG,KAAK,EAAE,CAAC,CAAC;;AAElF,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;AAElC,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;AAG5B,YAAA,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;AAC/D,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AAC1B,oBAAA,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;;AAEzB,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC;;aACxB;AACL,YAAA,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC;;;;IAKvD,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,YAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,gBAAA,MAAM,IAAI,GAAuB,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;AAGlF,gBAAA,IAAI,IAAI,CAAC,2BAA2B,EAAE;oBACpC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC;;;AAI/D,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;;AAG9E,gBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAA0B,KAAI;;oBAE5E,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;;wBAExE,IAAI,IAAI,CAAC,qBAAqB;4BAC5B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;wBAE7D,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM;AACrD,6BAAA,SAAS,CAAC;4BACT,IAAI,EAAE,MAAK;;AAET,gCAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;oCAC7B,MAAM,QAAQ,GAAG,MAAK;wCACpB,IAAI,CAAC,YAAY,EAAE;AACnB,wCAAA,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,kBAAkB,CAAC;AAChD,qCAAC;AACD,oCAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;;qCAC1E;oCACL,IAAI,CAAC,YAAY,EAAE;AACnB,oCAAA,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,kBAAkB,CAAC;;6BAEjD;AACD,4BAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gCAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;gCAC3B,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,yCAAyC,GAAG,KAAK,EAAE,CAAC,CAAC;;AAEjF,yBAAA,CAAC;AACF,wBAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;AAElC,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;AAG5B,gBAAA,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;AAC/D,oBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AAC1B,wBAAA,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;;AAEzB,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC;;iBACxB;AACL,gBAAA,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC;;;;;IAOzD,WAAW,GAAA;;AAET,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC;YACnE,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAW,KAAI;;AAE7D,oBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;wBAKvB,MAAM,aAAa,GAAe,EAAE;AACpC,wBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;;AAE5G,wBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa;AAChC,6BAAA,SAAS,CAAC;4BACT,IAAI,EAAE,MAAK;gCACT,IAAI,CAAC,YAAY,EAAE;AACnB,gCAAA,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,2BAA2B,CAAC;6BACxD;AACD,4BAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gCAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;gCAC3B,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,wCAAwC,GAAG,KAAK,EAAE,CAAC,CAAC;;AAEhF,yBAAA,CAAC;AACF,wBAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;AAElC,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;AAG5B,gBAAA,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;AAC/D,oBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AAC1B,wBAAA,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;;AAEzB,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC;;;;;IAMnC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;;IAI7B,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAI9B,IAAA,sBAAsB,CAAC,OAAe,EAAA;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO;;;AAI/B,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAGxB,IAAA,UAAU,CAAC,eAAoB,EAAE,IAAwB,EAAE,MAAW,EAAA;;AAEpE,QAAA,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE;AAC1C,QAAA,YAAY,CAAC,YAAY,GAAG,IAAI;AAChC,QAAA,YAAY,CAAC,SAAS,GAAG,IAAI;AAC7B,QAAA,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe;AACzC,QAAA,YAAY,CAAC,IAAI,GAAG,IAAI;QACxB,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,cAAc;;QAE/D,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC;;AAGnD,IAAA,uBAAuB,CAAC,cAAsB,EAAA;QAC5C,IAAI,OAAO,GAAG,oBAAoB;QAClC,OAAO,IAAI,cAAc;AACvB,YAAA,cAAc;AACd,YAAA,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAI,EAAA,CAAA,GAAG,mBAAmB;AAC7F,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE;YACxC,KAAK,EAAE,IAAI,CAAC,iBAAiB;AAC7B,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,WAAW,EAAE;AACd;AACF,SAAA,CAAC;;;AAIM,IAAA,cAAc,CAAC,OAAe,EAAE,cAAuB,EAAE,eAAwB,EAAA;AACzF,QAAA,OAAO,CAAC,MAAkB,EAAE,IAAO,EAAE,WAA2B,KAAI;;;AAGlE,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;;gBAEvB,WAAW,CAAC,SAAS,EAAE;;;AAGvB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAClC,cAAc,IAAI,eAAe;oBAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,eAA0B,CAAC,EAAE,EAAE;AAC5G,sBAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CACzC;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;;AAE9B,SAAC;;AAGO,IAAA,YAAY,CAAC,IAA4B,EAAA;AACjD,QAAA,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC;;uGAhYpF,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;MCJY,gBAAgB,CAAA;IAC3B,SAAS,GAAW,EAAE;AACtB,IAAA,UAAU;IAEV,UAAU,GAAG,OAAO;IACpB,aAAa,GAAG,MAAM;IACtB,iBAAiB,GAAG,UAAU;AAEpB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEnC,IAAA,WAAA,GAAA;IAEA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,IAAI,CAAC,SAAS;AACrC,aAAA,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;AAGrF,IAAA,SAAS,CAAC,EAAU,EAAA;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,SAAS,GAAG,EAAE;aACxC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;;IAGnE,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;;AAGhE,IAAA,kBAAkB,CAAC,SAAiB,EAAE,QAAgB,EAAE,UAAkB,EAAE,SAAiB,EAAA;AAC3F,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC;AACzE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAM,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE;AACjD,aAAA,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;AAGrF,IAAA,SAAS,CAAC,MAAS,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;;AAG/C,IAAA,UAAU,CAAC,MAAS,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;;AAG1D,IAAA,YAAY,CAAC,MAAS,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC;;AAG3C,IAAA,SAAS,CAAC,SAAiB,EAAE,QAAgB,EAAE,UAAkB,EAAE,SAAiB,EAAA;AAC5F,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;AAC7B,QAAA,IAAI,SAAS;YACX,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;AAC3C,QAAA,IAAI,QAAQ;YACV,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC3C,QAAA,IAAI,UAAU;YACZ,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC9C,QAAA,IAAI,SAAS;YACX,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC;AAChD,QAAA,OAAO,MAAM;;uGAtDJ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;2FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCHY,aAAa,CAAA;AAExB,IAAA,WAAA,GAAA;;IAGA,WAAW,CAAC,KAA6B,EAAE,KAA0B,EAAA;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEtC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AAChD,QAAA,OAAO,IAAI;;uGATF,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCFY,OAAO,CAAA;IAClB,EAAE,GAAW,CAAC;IACd,KAAK,GAAW,EAAE;IAClB,GAAG,GAAW,EAAE;IAChB,IAAI,GAAW,CAAC;IAChB,MAAM,GAAW,CAAC;AAClB,IAAA,QAAQ;AAER,IAAA,WAAA,CAAmB,IAAa,EAAA;QAC9B,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;;aACpB;AACL,YAAA,IAAI,CAAC,EAAE,GAAG,CAAC;AACX,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,YAAA,IAAI,CAAC,GAAG,GAAG,EAAE;;;AAIjB,IAAA,WAAW,CAAC,KAAU,EAAA;AACpB,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1B,QAAA,OAAO,IAAI;;AAEd;;MCrBY,QAAQ,CAAA;AAEC,IAAA,SAAA;AAApB,IAAA,WAAA,CAAoB,SAAuB,EAAA;QAAvB,IAAS,CAAA,SAAA,GAAT,SAAS;;AAE7B,IAAA,SAAS,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,GAAG,CAAC;;uGALhD,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAHpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCAY,QAAQ,CAAA;AAEnB,IAAA,SAAS,CAAC,KAAa,EAAA;;;;AAKrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAC,GAAG,CAAC,GAAG,IAAI;QACvG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAC,GAAG,CAAC;AAC9D,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM;AAChC,QAAA,OAAO,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI;;uGAV3B,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAHpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCCY,YAAY,CAAA;;;;IAIvB,SAAS,CAAC,KAAa,EAAE,IAAW,EAAA;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE;AAC1D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK;QAC/C,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK;;uGAP9D,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCGY,aAAa,CAAA;AAGJ,IAAA,IAAA;IAFpB,SAAS,GAAG,eAAe;AAE3B,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI;;AAGxB,IAAA,aAAa,CAAC,OAAe,EAAA;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;;uGAPlF,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCAY,aAAa,CAAA;AAEtB,IAAA,WAAA,GAAA;;;IAKA,SAAS,CAAC,IAAS,EAAE,QAAQ,GAAG,MAAM,EAAE,SAAc,EAAE,UAAe,EAAA;AACnE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;AAC9D,QAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;QAChF,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;QAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QACrC,MAAM,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpH,QAAA,IAAI,eAAe,EAAE;AACjB,YAAA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;;AAE7C,QAAA,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC;QAClC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC;AACpD,QAAA,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AACpC,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QACnC,QAAQ,CAAC,KAAK,EAAE;AAChB,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;;AAGvC,IAAA,YAAY,CAAC,QAAa,EAAE,UAAe,EAAE,UAAe,EAAA;AACxD,QAAA,MAAM,KAAK,GAAG,OAAO,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ;QAC3E,IAAI,GAAG,GAAG,EAAE;QACZ,IAAI,GAAG,GAAG,OAAO;AACjB,QAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;AAC5B,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;AACzD,gBAAA,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG;;;QAGtC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,QAAA,GAAG,IAAI,GAAG,GAAG,MAAM;AACnB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;AACvB,YAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;AAC5B,gBAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;AACzD,oBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;oBAC9B,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;;AAGpC,YAAA,GAAG,IAAI,IAAI,GAAG,MAAM;;AAExB,QAAA,OAAO,GAAG;;;IAId,WAAW,CAAC,IAAS,EAAE,OAAY,EAAE,SAAS,GAAG,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAA;QACxE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;QAChC,MAAM,EAAE,GAAmB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACvE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC;;uGAxDjC,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA;;2FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCcY,oBAAoB,CAAA;;AAGtB,IAAA,MAAM,GAAgC,IAAI,eAAe,CAAa,EAAE,CAAC;;AAEzE,IAAA,cAAc,GAAyB,IAAI,UAAU,EAAY;;IAEjE,KAAK,GAAW,EAAE;;AAEjB,IAAA,mBAAmB,GAAG,IAAI,YAAY,EAAY;AAExC,IAAA,KAAK;AAEzB,IAAA,kBAAkB,GAAa,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7C,IAAA,SAAS,GAAG,IAAI,WAAW,EAAE;AAC7B,IAAA,cAAc;IACd,aAAa,GAAe,EAAE;;IAE9B,KAAK,GAAe,EAAE;AAEtB,IAAA,YAAY;AAEZ,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAG;;AAE/C,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;YAEjB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CACpD,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAC9D;gBAED,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,IAAG;;AAEjD,oBAAA,IAAI,KAAK;wBACP,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACxE,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;AAEhC,SAAC,CACA;;IAGH,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;AAGnC,IAAA,MAAM,CAAC,KAAa,EAAA;QAClB,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AACjE,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;;;AAIvE,IAAA,QAAQ,CAAC,KAAmC,EAAA;QAC1C,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAChE,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;;QAE/B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,KAAK;YACZ,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAGvB,IAAA,OAAO,CAAC,KAAa,EAAA;AAC3B,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;;AAGtF,IAAA,YAAY,CAAC,MAAkB,EAAA;QAC7B,MAAM,CAAC,eAAe,EAAE;AACxB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;;uGAhFxB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,oUCnBjC,k1CAmCA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlBY,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,SAAS,EAAE,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,iNAAE,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAa,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,6uBAAE,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAE7H,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,WAGlC,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAA,QAAA,EAAA,k1CAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA;wDAKhI,MAAM,EAAA,CAAA;sBAAd;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAES,mBAAmB,EAAA,CAAA;sBAA5B;gBAEmB,KAAK,EAAA,CAAA;sBAAxB,SAAS;uBAAC,OAAO;;;AEvBd,SAAU,UAAU,CAAC,IAAU,EAAA;AACnC,IAAA,IAAI,IAAI;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;;AAExC,QAAA,OAAO,EAAE;AACb;;ACZA;AACA;AACa,MAAA,UAAU,GAAG;AACtB,IAAA,KAAK,EAAE;AACL,QAAA,SAAS,EAAE,YAAY;AACxB,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,SAAS,EAAE,YAAY;AACvB,QAAA,cAAc,EAAE,UAAU;AAC1B,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,kBAAkB,EAAE,WAAW;AAChC,KAAA;;;MCWQ,wBAAwB,CAAA;IAC1B,KAAK,GAAW,EAAE;AAClB,IAAA,UAAU,GAA+B,IAAI,eAAe,CAAuB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;;IAE1G,OAAO,GAAS,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AACpC,IAAA,YAAY,GAAqB,IAAI,OAAO,EAAW;IACvD,QAAQ,GAAY,KAAK;AACxB,IAAA,eAAe,GAA4B,IAAI,YAAY,EAAa;AAElF,IAAA,IAAI;AACJ,IAAA,YAAY;AAEZ,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC;YACxB,KAAK,EAAE,IAAI,WAAW,EAAE;YACxB,GAAG,EAAE,IAAI,WAAW,EAAE;AACvB,SAAA,CAAC;;IAKJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,KAAgB,KAAI;AACjE,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAClB,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAChF,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;;AAE9E,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvE,SAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC9D,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;;;QAI9D,IAAI,CAAC,IAAI,CAAC;aACP,IAAI;;AAEH,QAAA,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE;AAEvB,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,KAAK,IAAG;AACZ,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;AAC5B,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;;;qBAExD;AACL,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;;;AAGhE,SAAA,CAAC;QAEJ,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC5C,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;IAG9B,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;AAG3B,IAAA,oBAAoB,CAAC,KAA0C,EAAA;QACrE,OAAO;AACL,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;AACjD,YAAA,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;SAC1C;;uGAtEQ,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EALxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC5C,YAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE;SACpD,ECpBH,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,8uBAcA,6FDCY,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAE,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EAAE,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,gVAAE,YAAY,EAAA,QAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAC7G,QAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,6KAAE,SAAS,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAMnD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAXpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAG5B,OAAA,EAAA,CAAC,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,UAAU;AAC7G,wBAAA,mBAAmB,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EACpD,SAAA,EAAA;AACT,wBAAA,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC5C,wBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE;AACpD,qBAAA,EAAA,QAAA,EAAA,8uBAAA,EAAA,MAAA,EAAA,CAAA,qCAAA,CAAA,EAAA;wDAGQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,eAAe,EAAA,CAAA;sBAAxB;;;IE7BS;AAAZ,CAAA,UAAY,YAAY,EAAA;AACpB,IAAA,YAAA,CAAA,KAAA,CAAA,GAAA,kDAAgB;AAChB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,kDAAiB;AACjB,IAAA,YAAA,CAAA,QAAA,CAAA,GAAA,4CAAkB;AAClB,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,EAAS;AACX,CAAC,EALS,YAAY,KAAZ,YAAY,GAKrB,EAAA,CAAA,CAAA;;MCkBU,eAAe,CAAA;AAQN,IAAA,WAAA;AAEV,IAAA,aAAA;AACA,IAAA,MAAA;AACA,IAAA,MAAA;AAXV,IAAA,SAAS;AACT,IAAA,MAAM;IACN,OAAO,GAAG,EAAE;IACZ,QAAQ,GAAW,EAAE;AAErB,IAAA,YAAY;IAEZ,WAAoB,CAAA,WAAwB,EAC1C,WAAwB,EAChB,aAA4B,EAC5B,MAAiB,EACjB,MAAc,EAAA;QAJJ,IAAW,CAAA,WAAA,GAAX,WAAW;QAErB,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAM,CAAA,MAAA,GAAN,MAAM;QAEd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS;QAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;AAErC,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QAEjB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AAC3C,YAAA,IAAI,EAAE,CAAC,KAAc,KAAI;gBACvB,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,WAAW,CAAC,QAAQ,EAAE;AACxB,wBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE;AACnE,4BAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,GAAG,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS;;AAErF,wBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE;;AAEhC,4BAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/E,iCAAA,SAAS,CAAC,CAAC,KAAkB,KAAI;gCAChC,IAAI,KAAK,EAAE;AACT,oCAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;oCACxD,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;;AAE7C,6BAAC,CAAC;AACJ,4BAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;;;;AAKrC,SAAA,CAAC;;IAGJ,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;IAGnC,MAAM,GAAA;QACJ,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;IAG1C,UAAU,GAAA;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;AAClD,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,eAAe;AACtB,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,WAAW,EAAE;AACd;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAO,KAAI;YACzD,IAAI,EAAE,EAAE;gBACN,IAAI,CAAC,MAAM,EAAE;;AAEjB,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;uGArEnB,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvB5B,wyBAuBC,EAAA,MAAA,EAAA,CAAA,6VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDHuB,SAAS,EAAA,QAAA,EAAA,gFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAoD,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACpG,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;2FAEV,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,WAGjB,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU;wBACpG,SAAS,EAAE,QAAQ,CAAC,EAAA,QAAA,EAAA,wyBAAA,EAAA,MAAA,EAAA,CAAA,6VAAA,CAAA,EAAA;;;MEbX,iBAAiB,CAAA;AAE5B,IAAA,WAAA,GAAA;;uGAFW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,6ECR9B,qLAGA,EAAA,MAAA,EAAA,CAAA,4DAAA,CAAA,EAAA,CAAA;;2FDKa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,IAAI,EAAA,QAAA,EAAA,qLAAA,EAAA,MAAA,EAAA,CAAA,4DAAA,CAAA,EAAA;;;MEaP,gDAAgD,CAAA;;;AAIlD,IAAA,MAAM,GAAkC,IAAI,eAAe,CAAe,EAAE,CAAC;;AAE7E,IAAA,aAAa,GAA4C,IAAI,eAAe,CAAyB,SAAS,CAAC;;IAE/G,KAAK,GAAW,EAAE;;IAElB,SAAS,GAAY,IAAI;;IAEzB,UAAU,GAAY,KAAK;;IAE3B,UAAU,GAAY,KAAK;;IAE3B,KAAK,GAAW,KAAK;;AAEpB,IAAA,kBAAkB,GAAG,IAAI,YAAY,EAAU;IAElD,MAAM,GAAW,OAAO;;AAE/B,IAAA,SAAS,GAAG,IAAI,WAAW,EAAE;;AAE7B,IAAA,cAAc,GAAkC,IAAI,eAAe,CAAe,EAAE,CAAC;AAErF,IAAA,YAAY;AAEZ,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;;;QAIN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAG;AAC/C,YAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC3E,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK;gBAC1B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;;;;;;YAOnD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,IAAG;AAC/C,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;;;AAG/B,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;AAC9B,SAAC,CAAC;;AAGF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AACzB,aAAA,IAAI,CACHC,WAAS,CAAC,EAAE,CAAC;;AAEb,QAAA,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE;;;;;;AAMtB,QAAA,GAAG,CAAC,CAAC,KAAK,KAAI;;AAEZ,YAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;gBAChC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;iBACtC;AACL,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,oBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;AACzB,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAC7B,MAAM,CAAC;AACJ,yBAAA,WAAW;yBACX,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CACjC,CACF;;qBACI;;AAEL,oBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;oBACzB,IAAI,KAAK,EAAE;;wBAET,IAAI,CAAC,cAAc,CAAC,IAAI,CACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,KAC9B,CAAC,MAAM,CAAC,SAAS;AACd,6BAAA,WAAW;6BACX,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAC3C,CACF;;yBACI;wBACL,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;;;;;;YAMjD,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;AAExC,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI;;iBACrD;AACL,gBAAA,IAAI,CAAC,MAAM,GAAG,OAAO;;YAEvB,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AACxE,SAAC,CAAC;AAEH,aAAA,SAAS,EAAE;AACd,QAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;AAE5B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;;aACnB;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;;;IAI3B,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;AAGnC,IAAA,oBAAoB,CAAC,IAAS,EAAA;AAC5B,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC;;AAEhD,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGpC,IAAA,YAAY,CAAC,MAAkB,EAAA;QAC7B,MAAM,CAAC,eAAe,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAG7B,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,OAAO;cACH,MAAM,CAAC;cACP,IAAI;;uGA3IC,gDAAgD,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhD,gDAAgD,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnB7D,85CA+BC,EDfW,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,mnBAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,8EAAE,QAAQ,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAa,OAAO,EACtG,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,YAAY,2LAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAExC,gDAAgD,EAAA,UAAA,EAAA,CAAA;kBAP5D,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iDAAiD,EAGlD,OAAA,EAAA,CAAC,WAAW,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO;AACtG,wBAAA,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAA,QAAA,EAAA,85CAAA,EAAA,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA;wDAM3C,MAAM,EAAA,CAAA;sBAAd;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAES,kBAAkB,EAAA,CAAA;sBAA3B;;;MEnBU,4BAA4B,CAAA;;AAG9B,IAAA,OAAO,GAAmC,IAAI,eAAe,CAAgB,EAAE,CAAC;;AAEhF,IAAA,cAAc,GAAyB,IAAI,UAAU,EAAY;;IAEjE,KAAK,GAAW,EAAE;;AAEjB,IAAA,mBAAmB,GAAG,IAAI,YAAY,EAAY;AAE5D,IAAA,kBAAkB,GAAa,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7C,IAAA,OAAO,GAAG,IAAI,WAAW,CAAW,EAAE,CAAC;AAEvC,IAAA,YAAY;AAEZ,IAAA,WAAA,GAAA;;IAGA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAG;AAC5B,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,IAAG;AACxD,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,iBAAC,CAAC;;AAEN,SAAC,CAAC;;IAGJ,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;AAGnC,IAAA,eAAe,CAAC,MAAW,EAAA;QACzB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAG9E,IAAA,OAAO,CAAC,MAAkB,EAAA;QACxB,MAAM,CAAC,eAAe,EAAE;;AAExB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;;uGAzCxB,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,gOClBzC,qwBAoBA,EAAA,MAAA,EAAA,CAAA,kCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDLY,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,kNAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAEE,WAAS,EAAE,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,mHAAE,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAEC,cAAY,EAAE,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,UAAQ,iDAC5G,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;2FAEA,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,WAG5B,CAAC,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAEF,WAAS,EAAE,WAAW,EAAE,SAAS,EAAEC,cAAY,EAAEC,UAAQ;AAC5G,wBAAA,SAAS,CAAC,EAAA,QAAA,EAAA,qwBAAA,EAAA,MAAA,EAAA,CAAA,kCAAA,CAAA,EAAA;wDAKH,OAAO,EAAA,CAAA;sBAAf;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAES,mBAAmB,EAAA,CAAA;sBAA5B;;;MEEU,cAAc,CAAA;;AAEhB,IAAA,KAAK,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;;IAEpC,aAAa,GAAqB,EAAE;;AAEpC,IAAA,OAAO,GAA4B,IAAI,eAAe,CAAS,CAAC,CAAC;;IAEjE,UAAU,GAA6B,EAAE;;IAEzC,gBAAgB,GAAG,KAAK;;IAExB,kBAAkB,GAAG,EAAE;;IAEvB,GAAG,GAA6B,EAAE;;IAElC,oBAAoB,GAAa,EAAE;;AAGlC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAc;;AAEhD,IAAA,eAAe,GAAG,IAAI,YAAY,EAAc;;AAEhD,IAAA,eAAe,GAAG,IAAI,YAAY,EAAO;;AAEzC,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAK;AAE9B,IAAA,IAAI;AACC,IAAA,SAAS;AACP,IAAA,WAAW;;AAGtC,IAAA,WAAW;;IAEX,mBAAmB,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;;IAG5C,gBAAgB,GAAG,CAAC;;IAEpB,eAAe,GAAG,EAAE;;AAGpB,IAAA,UAAU,GAAG,IAAI,kBAAkB,EAAK;;AAGxC,IAAA,SAAS,GAAsB,IAAI,cAAc,EAAK;;AAGtD,IAAA,gBAAgB;;AAGN,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;;IAG3C,qBAAqB,GAAG,IAAI;AAE5B,IAAA,YAAY;AAEZ,IAAA,WAAA,GAAA;;AAEE,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,KAAI;AAClE,YAAA,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;AACpG,SAAC,CAAC;;IAGJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAElH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAG;AACvC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI;;AAG3B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ;AACxC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;AACzF,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1B,aAAC,CAAC;AACJ,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;QAG5B,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAI,IAAI,CAAC,gBAAgB,CAAC;;IAG/D,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;IAGnC,eAAe,GAAA;;AAEb,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,GAAG,qBAAqB;YAC9D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,GAAG,iBAAiB;YACvD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,GAAG,qBAAqB;YAC9D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,oBAAoB;YACzD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,oBAAoB;;AAGzD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAG;gBAChD,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;gBACxC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC1C,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBACxB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,QAAQ,EAAE,IAAI,CAAC;AACF,iBAAA,CAAC;AAClB,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;;AAI9B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;iBACpB,SAAS,CAAC,IAAI,IAAG;gBAChB,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM;gBACxC,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS;AAC9C,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBACxB,UAAU,EAAE,IAAI,CAAC,MAAM;oBACvB,aAAa,EAAE,IAAI,CAAC;AACP,iBAAA,CAAC;AAClB,aAAC,CAAC;AACJ,YAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;;AAI9B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAG;gBACrD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AACnD,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;;;;IAMhC,aAAa,GAAA;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM;QAC3C,OAAO,WAAW,KAAK,OAAO;;;IAIhC,YAAY,GAAA;QACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;AACjD,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;aACjB;YACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;;;AAKnE,IAAA,YAAY,CAAC,GAAM,EAAA;;QAEjB,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;;aACvB;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;;;;AAK9B,IAAA,eAAe,CAAC,GAAM,EAAA;;AAEpB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC1B,IAAI,IAAI,CAAC,qBAAqB;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;;;IAInC,aAAa,CAAC,KAAiB,EAAE,WAA0B,EAAA;AACzD,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;;YAErC;;QAEF,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;QAC9B,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI;QACjD,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI;;;AAGjD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,EAAE,WAAW,EAAE;YAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC;AAC9C,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;;;uGAzLpB,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,GAAA,EAAA,KAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA2Bd,OAAO,EACP,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,YAAY,8EACZ,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1D3B,s7MA2IA,EAAA,MAAA,EAAA,CAAA,44BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlHY,QAAQ,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAE,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,YAAY,EAAE,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,iFAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1G,aAAa,EAAE,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EAAE,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAU,EAAE,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,YAAY,sEAAE,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAClG,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,EAAE,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EAAE,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,wEAAE,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAErE,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,WAGhB,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO;AAC1G,wBAAA,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM;wBAClG,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,EAAA,QAAA,EAAA,s7MAAA,EAAA,MAAA,EAAA,CAAA,44BAAA,CAAA,EAAA;wDAIxE,KAAK,EAAA,CAAA;sBAAb;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAEQ,kBAAkB,EAAA,CAAA;sBAA1B;gBAEQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAGS,eAAe,EAAA,CAAA;sBAAxB;gBAES,eAAe,EAAA,CAAA;sBAAxB;gBAES,eAAe,EAAA,CAAA;sBAAxB;gBAES,gBAAgB,EAAA,CAAA;sBAAzB;gBAEmB,IAAI,EAAA,CAAA;sBAAvB,SAAS;uBAAC,OAAO;gBACO,SAAS,EAAA,CAAA;sBAAjC,SAAS;uBAAC,YAAY;gBACI,WAAW,EAAA,CAAA;sBAArC,SAAS;uBAAC,cAAc;;;AE1D3B;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"kuzntsv-uikit.mjs","sources":["../../../projects/uikit/src/auth/components/permit-form/permit-form.component.ts","../../../projects/uikit/src/auth/components/permit-form/permit-form.component.html","../../../projects/uikit/src/auth/components/login-form/login-form.component.ts","../../../projects/uikit/src/auth/components/login-form/login-form.component.html","../../../projects/uikit/src/models/environment.model.ts","../../../projects/uikit/src/services/log.service.ts","../../../projects/uikit/src/services/alert.service.ts","../../../projects/uikit/src/auth/services/auth-user.service.ts","../../../projects/uikit/src/auth/services/auth.service.ts","../../../projects/uikit/src/loader/progress-spinner.component.ts","../../../projects/uikit/src/loader/loader.service.ts","../../../projects/uikit/src/auth/components/login-page/login-page.component.ts","../../../projects/uikit/src/auth/components/login-page/login-page.component.html","../../../projects/uikit/src/auth/directives/disable-if-unauthorized.directive.ts","../../../projects/uikit/src/auth/directives/hide-if-unauthorized.directive.ts","../../../projects/uikit/src/auth/directives/disable-if-role.directive.ts","../../../projects/uikit/src/auth/directives/hide-if-role-not.directive.ts","../../../projects/uikit/src/auth/services/auth-guard.service.ts","../../../projects/uikit/src/auth/services/role-guard.service.ts","../../../projects/uikit/src/auth/services/auth-role.service.ts","../../../projects/uikit/src/base/base-toolbar/base-toolbar.service.ts","../../../projects/uikit/src/base/base-toolbar/components/base-toolbar.component.ts","../../../projects/uikit/src/base/base-toolbar/components/base-toolbar.component.html","../../../projects/uikit/src/base/base-classes/base-edit-dialog-data.ts","../../../projects/uikit/src/base/base-classes/base-edit-class.ts","../../../projects/uikit/src/base/base-classes/base-entity-action.ts","../../../projects/uikit/src/base/base-classes/base-filter-class.ts","../../../projects/uikit/src/base/base-classes/base-nav-bar-menu-class.ts","../../../projects/uikit/src/core/animations/animations.service.ts","../../../projects/uikit/src/core/animations/route.animations.ts","../../../projects/uikit/src/services/local-storage-service.ts","../../../projects/uikit/src/shared/dialog/dialog.component.ts","../../../projects/uikit/src/shared/dialog/dialog.component.html","../../../projects/uikit/src/base/base-classes/base-page-class.ts","../../../projects/uikit/src/base/base-classes/base-service-class.ts","../../../projects/uikit/src/guards/redirect-guard.ts","../../../projects/uikit/src/models/sec-user.model.ts","../../../projects/uikit/src/pipes/safe.pipe.ts","../../../projects/uikit/src/pipes/time.pipe.ts","../../../projects/uikit/src/pipes/truncate.pipe.ts","../../../projects/uikit/src/services/avatar.service.ts","../../../projects/uikit/src/services/export.service.ts","../../../projects/uikit/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.ts","../../../projects/uikit/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.html","../../../projects/uikit/src/shared/date-range-filter/models/date-range.ts","../../../projects/uikit/src/shared/date-range-filter/models/date-formats.ts","../../../projects/uikit/src/shared/date-range-filter/date-range-filter.component.ts","../../../projects/uikit/src/shared/date-range-filter/date-range-filter.component.html","../../../projects/uikit/src/shared/dialog/models/dialog-action.ts","../../../projects/uikit/src/shared/navbar/navbar.ts","../../../projects/uikit/src/shared/navbar/navbar.html","../../../projects/uikit/src/shared/not-found/not-found.component.ts","../../../projects/uikit/src/shared/not-found/not-found.component.html","../../../projects/uikit/src/shared/select-autocomplete-with-virtual-scroll/select-autocomplete-with-virtual-scroll.component.ts","../../../projects/uikit/src/shared/select-autocomplete-with-virtual-scroll/select-autocomplete-with-virtual-scroll.component.html","../../../projects/uikit/src/shared/select-with-group/select-with-group.component.ts","../../../projects/uikit/src/shared/select-with-group/select-with-group.component.html","../../../projects/uikit/src/shared/table/table.component.ts","../../../projects/uikit/src/shared/table/table.component.html","../../../projects/uikit/src/public-api.ts","../../../projects/uikit/src/kuzntsv-uikit.ts"],"sourcesContent":["import { Component, ElementRef, EventEmitter, HostListener, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';\r\n\r\n@Component({\r\n selector: 'ngx-uik-permit-form',\r\n templateUrl: 'permit-form.component.html',\r\n styleUrls: ['permit-form.component.scss'],\r\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardContent]\r\n})\r\nexport class PermitFormComponent implements OnInit {\r\n @ViewChild('hidy') hidy: ElementRef | undefined;\r\n\r\n @Output() submitted = new EventEmitter<string>();\r\n\r\n private mouseEvent = MouseEvent;\r\n\r\n constructor() {\r\n }\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n mouseHandling() {\r\n this.hidy?.nativeElement.focus();\r\n }\r\n\r\n ngOnInit() {\r\n // Обнуляем значение Input\r\n if (this.hidy) {\r\n this.hidy.nativeElement.value = null;\r\n this.hidy.nativeElement.focus();\r\n }\r\n }\r\n\r\n /**\r\n * Поле ввода\r\n *\r\n * @param событие нажатия на клавишу\r\n */\r\n onKeydown(event: any): void {\r\n if (event.key === 'Enter') {\r\n const permit = this.hidy?.nativeElement.value;\r\n if (permit) {\r\n this.submitted.emit(permit);\r\n }\r\n }\r\n }\r\n\r\n}\r\n","<mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n Приложите пропуск\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <div class=\"permit\"></div>\r\n </mat-card-content>\r\n</mat-card>\r\n<input #hidy class=\"hidy\" type=\"text\" (keydown)=\"onKeydown($event)\"/>","\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';\r\nimport { MatError, MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInput } from '@angular/material/input';\r\n\r\nimport { Authenticate } from '../../models/user';\r\n\r\n@Component({\r\n selector: 'ngx-uik-login-form',\r\n templateUrl: 'login-form.component.html',\r\n styleUrls: ['login-form.component.scss'],\r\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardContent, FormsModule, ReactiveFormsModule, MatFormField, MatLabel, MatInput, MatError, MatIcon, MatSuffix, MatButton]\r\n})\r\nexport class LoginFormComponent {\r\n @Input() errorMessage: string = '';\r\n\r\n @Output() submitted = new EventEmitter<Authenticate>();\r\n hide = true;\r\n\r\n form: FormGroup = new FormGroup({\r\n username: new FormControl('', [Validators.required]),\r\n password: new FormControl('', [Validators.required]),\r\n });\r\n\r\n isDisabled = false;\r\n\r\n constructor() { }\r\n\r\n @Input()\r\n set pending(isPending: boolean) {\r\n this.isDisabled = isPending;\r\n if (isPending) {\r\n this.form.disable();\r\n } else {\r\n this.form.enable();\r\n }\r\n }\r\n\r\n submit() {\r\n if (this.form.valid) {\r\n this.submitted.emit(this.form.value);\r\n }\r\n }\r\n}\r\n","<mat-card appearance=\"outlined\">\r\n <mat-card-header>\r\n <mat-card-title>\r\n Авторизация\r\n </mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\r\n <p>\r\n <mat-form-field>\r\n <mat-label>Имя пользователя</mat-label>\r\n <input type=\"text\" pattern=\"[A-Za-z]{1,}.[A-Za-z]{1,}.[A-Za-z]*\"\r\n matInput\r\n autocomplete=\"on\"\r\n name=\"login-form-username\"\r\n placeholder=\"Имя пользователя\"\r\n formControlName=\"username\">\r\n @if (form.controls['username'].hasError('pattern')) {\r\n <mat-error>\r\n Пожалуйста, используйте требуемый формат (Пример: a.p.petrov)\r\n </mat-error>\r\n }\r\n @if (form.controls['username'].hasError('required')) {\r\n <mat-error>\r\n Пожалуйста, заполните это поле\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n </p>\r\n\r\n <p>\r\n <mat-form-field>\r\n <mat-label>Пароль</mat-label>\r\n <input [type]=\"hide ? 'password' : 'text'\" matInput placeholder=\"Пароль\" formControlName=\"password\">\r\n <mat-icon class=\"watcher\" matSuffix (mousedown)=\"hide=false\" (mouseup)=\"hide=true\"\r\n >{{ hide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n @if (form.controls['password'].hasError('required')) {\r\n <mat-error>\r\n Пожалуйста, заполните это поле\r\n </mat-error>\r\n }\r\n </mat-form-field>\r\n </p>\r\n\r\n @if (errorMessage) {\r\n <p class=\"loginError\">\r\n {{ errorMessage }}\r\n </p>\r\n }\r\n\r\n <p class=\"loginButtons\">\r\n <button type=\"submit\" mat-button mat-stroked-button color=\"primary\" [disabled]=\"isDisabled\">Войти</button>\r\n </p>\r\n\r\n </form>\r\n </mat-card-content>\r\n </mat-card>\r\n","export abstract class Environment {\r\n abstract readonly appVersion: string;\r\n abstract readonly production: boolean;\r\n abstract readonly endpoints: {\r\n readonly common: string;\r\n readonly integration: string;\r\n readonly integration1c: string;\r\n readonly main: string;\r\n readonly scheduler: string;\r\n readonly elasticSearch: string;\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { Environment } from '../models/environment.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LogService {\r\n public logPrefix: string = '';\r\n\r\n constructor(private env: Environment\r\n ) {\r\n }\r\n log(...args: any) {\r\n if (!this.env.production) {\r\n // Prepend log prefix log string\r\n args.unshift(this.logPrefix + ' ');\r\n // Pass along arguments to console.log\r\n console.log(args.join(' '));\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { IAlertService } from '../base/interfaces';\r\n\r\n// Сервис для вывода сообщений(ошибки, успеха)\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlertService implements IAlertService{\r\n // eslint-disable-next-line no-magic-numbers\r\n private readonly duration = 5000;\r\n\r\n constructor(private _snackBar: MatSnackBar) {\r\n }\r\n\r\n openSnackBar(message: string, action: string, duration: number = this.duration) {\r\n this._snackBar.open(message, action, {\r\n duration,\r\n panelClass: ['red-snackbar'],\r\n });\r\n }\r\n\r\n success(message: string, duration: number = this.duration) {\r\n this.openSnackBar(message, 'Закрыть', duration);\r\n }\r\n\r\n info(message: string, duration: number = this.duration) {\r\n this.openSnackBar(message, 'Закрыть', duration);\r\n }\r\n\r\n helper(message: string, duration: number = this.duration) {\r\n this.openSnackBar(message, 'Закрыть', duration);\r\n }\r\n\r\n warning(message: string, duration: number = this.duration) {\r\n this.openSnackBar(message, 'Закрыть', duration);\r\n }\r\n\r\n error(message: string, duration: number = this.duration) {\r\n this.openSnackBar(message, 'Закрыть', duration);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\n/**\r\n * Сущность пользователя из API\r\n */\r\nexport class User {\r\n id: number = 0;\r\n username: string = '';\r\n firstName: string = '';\r\n lastName: string = '';\r\n prof: string = '';\r\n depart: number = 0;\r\n area: string = '';\r\n tabnum: string = '';\r\n mail: string = '';\r\n phone: string = '';\r\n roles: string = '';\r\n rolesArray: string[] = [];\r\n roleList: string[] = [];\r\n idHuman: string = '';\r\n token: string = '';\r\n // Время действия токена\r\n expires_in: number = 0;\r\n}\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n/**\r\n * Сервис для работы с объектом в local Storage\r\n */\r\nexport class UserService {\r\n private user: User;\r\n constructor() {\r\n if (localStorage.getItem('sed_currentUser')) {\r\n this.user = JSON.parse(localStorage.getItem('sed_currentUser') || '');\r\n } else {\r\n this.user = new User();\r\n }\r\n }\r\n\r\n get dept(): number {\r\n return this.user?.depart;\r\n }\r\n\r\n /** Получить данные о пользователе */\r\n get userData(): User {\r\n return this.user;\r\n }\r\n\r\n /** Изменить данные пользователя в localStorage */\r\n set userData(user: User) {\r\n localStorage.setItem('sed_currentUser', JSON.stringify(user));\r\n this.user = JSON.parse(localStorage.getItem('sed_currentUser') || '');\r\n }\r\n\r\n /** Удаляет данные о пользователе из localStorage. */\r\n removeUser() {\r\n localStorage.removeItem('sed_currentUser');\r\n }\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { DefaultUrlSerializer, Router } from '@angular/router';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nimport { AlertService } from '../../services/alert.service';\r\nimport { LogService } from '../../services/log.service';\r\nimport { AuthPermission } from '../auth.types';\r\nimport { UserService } from './auth-user.service';\r\n\r\n// Сервис авторизации\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthService {\r\n // Указываем какой сервер использовать\r\n baseRoute = 'mainApi/';\r\n // Хранит доступные пользователю действия\r\n permissions: string[] = ['VIEW'];\r\n readonly defaultRoles = [];\r\n // Хранит роли пользователя\r\n roles$: BehaviorSubject<string[]>;\r\n loggedIn$: BehaviorSubject<boolean>;\r\n\r\n // Роль для скрытия элементов.\r\n private readonly hideRole = 'HIDE';\r\n\r\n // Объект, хранящий статус авторизации\r\n private readonly defaultHeader = {\r\n headers: new HttpHeaders().set('content-type', 'application/x-www-form-urlencoded')\r\n };\r\n\r\n private idHuman: string | null;\r\n\r\n constructor(private http: HttpClient,\r\n private router: Router,\r\n private console: LogService,\r\n private alertService: AlertService,\r\n private user: UserService,\r\n ) {\r\n this.console.logPrefix = 'Auth Service';\r\n this.idHuman = localStorage.getItem('id_human');\r\n if (this.user?.userData?.roleList) {\r\n this.roles$ = new BehaviorSubject<string[]>(this.user?.userData?.roleList);\r\n } else {\r\n this.roles$ = new BehaviorSubject<string[]>(this.defaultRoles);\r\n }\r\n this.loggedIn$ = new BehaviorSubject<boolean>((!!this.user.userData && !!this.user.userData.token));\r\n }\r\n\r\n /** Проверка разрешений */\r\n hasPermission(authPermission: AuthPermission) {\r\n return !!(this.permissions &&\r\n this.permissions.find(permission => permission === authPermission));\r\n }\r\n\r\n /** Проверка ролей */\r\n public hasRole(roles: string[], checkRole: string): boolean {\r\n if (roles) {\r\n return !!roles.find(role => (role === checkRole || role === 'ADMIN'));\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /** Проверка массива ролей */\r\n public hasRoles(roles: string[], checkRoles: string[]): boolean {\r\n if (roles) {\r\n for (const checkRole of checkRoles) {\r\n if (roles.find(role => (role === checkRole || role === 'ADMIN'))) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Элемент скрывается, если у пользователя нет ни одной роли из перереданных в \"roles\"\r\n или в списке \"roles\" есть роль \"hideRole\". */\r\n public isHideElement(roles: string[], checkRoles: string[]): boolean {\r\n if (!roles)\r\n return false;\r\n if (roles.indexOf(this.hideRole) !== -1)\r\n return true;\r\n for (const role of roles) {\r\n if (role && (role.length !== 0) && this.hasRole(checkRoles, role)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n\r\n // /** Сменить роль без side эффекта */\r\n // public changeRole(role: string) {\r\n // this.roles$.next([role]);\r\n // }\r\n\r\n // /** Сменить роли без side эффекта */\r\n // public changeRoles(roles: string[]) {\r\n // this.roles$.next(roles);\r\n // }\r\n\r\n /** Запрос авторизации */\r\n login(username: string, password: string, idCas: number, returnUrl: string = '', onErrorFn: () => void) {\r\n const passwordEncoded = encodeURIComponent(password);\r\n let body = `username=${username}&password=${passwordEncoded}`;\r\n\r\n if (idCas) {\r\n body += `&idcas=${idCas}`;\r\n }\r\n\r\n if (this.idHuman) {\r\n body += `&idhuman=${this.idHuman}`;\r\n }\r\n\r\n this.http.post(this.baseRoute + 'jwt', body, this.defaultHeader)\r\n .subscribe({\r\n next: data => {\r\n this.successLoginAction(data, returnUrl);\r\n this.alertService.success('Успешная авторизация');\r\n },\r\n error: (error: any) => {\r\n this.console.log(error);\r\n this.alertService.error('Ошибка при авторизации: ' + error, 0);\r\n if (onErrorFn) {\r\n onErrorFn();\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** Aвторизация по пропуску */\r\n loginByPermit(permit: string, idCas: number, returnUrl: string = '') {\r\n let body = `permit=${permit}`;\r\n\r\n if (idCas) {\r\n body += `&idcas=${idCas}`;\r\n }\r\n\r\n if (this.idHuman) {\r\n body += `&idhuman=${this.idHuman}`;\r\n }\r\n\r\n return this.http.post(this.baseRoute + 'jwt', body, this.defaultHeader)\r\n .subscribe({\r\n next: (data) => {\r\n this.successLoginAction(data, returnUrl);\r\n this.alertService.success('Успешная авторизация');\r\n },\r\n error: (error: any) => {\r\n this.console.log(error);\r\n this.alertService.error('Ошибка при авторизации: ' + error, 0);\r\n }\r\n });\r\n }\r\n\r\n /** Разлогиниться */\r\n logout(returnUrl: string = '') {\r\n // Убирает(удаляет) пользователя из локального хранилища когда он разлогинивается\r\n this.user.removeUser();\r\n // localStorage.removeItem('sed_currentUser');\r\n // Отправляем подписчикам события что человек вышел\r\n this.loggedIn$.next(false);\r\n // Переход на страницу авторизации\r\n if (returnUrl) {\r\n // указываем целевой маршрут в параметре\r\n this.router.navigate(['/login'], { queryParams: { returnUrl } }).then();\r\n } else {\r\n this.router.navigate(['/login']).then();\r\n }\r\n }\r\n\r\n // Получить роли пользователя\r\n private getRoles(): Observable<string[]> {\r\n return this.http.get<string[]>(this.baseRoute + 'jwt/webroles');\r\n }\r\n\r\n // /** Инициализация ролей */\r\n // private initRole() {\r\n // if (this.hasRole(this.roles$.getValue(), this.defaultRole)) {\r\n // this.roleService.getRoles().subscribe({\r\n // next: (data: string[]) => {\r\n // this.roles$.next(data['Roles']);\r\n // },\r\n // error: (error: any) => {\r\n // this.console.log(error);\r\n // this.alert.error('Ошибка при получении списка ролей пользователя: ' + error);\r\n // }\r\n // });\r\n // }\r\n // }\r\n\r\n\r\n /** При успешной авторизации */\r\n private successLoginAction(user: any, returnUrl: string = '') {\r\n this.user.userData = user;\r\n this.loggedIn$.next(true);\r\n // init roles\r\n this.roles$.next(this.user.userData.roleList);\r\n\r\n if (returnUrl) {\r\n const decodeUrl = decodeURIComponent(returnUrl);\r\n // указан целевой маршрут\r\n if (decodeUrl.includes('?')) {\r\n // есть параметры строки запроса\r\n const serializer = new DefaultUrlSerializer();\r\n // параметры строки запроса\r\n const params = serializer.parse(decodeUrl).queryParams;\r\n //console.log('successLoginAction params = ', params);\r\n // выделение маршрута\r\n const url = decodeUrl.slice(0, decodeUrl.indexOf('?'));\r\n this.router.navigate([url], { queryParams: params });\r\n } else {\r\n this.router.navigate([decodeUrl]);\r\n }\r\n } else {\r\n // не указан целевой маршрут, переход на главную\r\n this.router.navigate(['']);\r\n }\r\n }\r\n}\r\n","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, AfterViewInit } from '@angular/core';\r\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\r\n\r\n@Component({\r\n selector: 'ngx-uik-loader',\r\n template: `\r\n <div class=\"loading-indicator\" mat-dialog-content>\r\n <mat-progress-spinner mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </div>\r\n `,\r\n styles: [`\r\n /* Разместить по центру */\r\n .loading-indicator {\r\n position: fixed;\r\n z-index: 999;\r\n height: 2em;\r\n width: 2em;\r\n overflow: initial;\r\n margin: auto;\r\n top: 0;\r\n left: 0;\r\n bottom: 0;\r\n right: 0;\r\n }\r\n\r\n /* Заблокировать оверлей */\r\n .loading-indicator:before {\r\n content: '';\r\n display: block;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(0,0,0,0.3);\r\n }\r\n `],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatProgressSpinner]\r\n})\r\n\r\nexport class ProgressSpinnerComponent implements AfterViewInit {\r\n constructor(private cdRef: ChangeDetectorRef) { }\r\n\r\n ngAfterViewInit() {\r\n this.cdRef.detectChanges();\r\n }\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { ProgressSpinnerComponent } from './progress-spinner.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class LoaderService {\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n constructor(private overlay: Overlay) { }\r\n\r\n public show() {\r\n if (!this.overlayRef) {\r\n this.overlayRef = this.overlay.create();\r\n }\r\n const spinnerOverlayPortal = new ComponentPortal(ProgressSpinnerComponent);\r\n // Иправление ошибки Expression has changed after it was checked\r\n setTimeout(() => {\r\n if (!this.overlayRef?.hasAttached()) {\r\n this.overlayRef?.attach(spinnerOverlayPortal);\r\n }\r\n });\r\n }\r\n\r\n public hide() {\r\n if (this.overlayRef) {\r\n this.overlayRef.detach();\r\n }\r\n }\r\n}\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { LoaderService } from '../../../loader';\r\nimport { Authenticate } from '../../models/user';\r\nimport { AuthService } from '../../services/auth.service';\r\nimport { PermitFormComponent } from '../permit-form/permit-form.component';\r\nimport { LoginFormComponent } from '../login-form/login-form.component';\r\n\r\n@Component({\r\n selector: 'ngx-uik-login-page',\r\n templateUrl: 'login-page.component.html',\r\n styleUrls: ['login-page.component.scss'],\r\n imports: [LoginFormComponent, PermitFormComponent]\r\n})\r\nexport class LoginPageComponent implements OnInit, OnDestroy {\r\n pending: boolean = false;\r\n error: string = '';\r\n isKiosk: boolean = false;\r\n /** Идентификатор АС */\r\n idCas: number = 0;\r\n /** Подписка на Идентификатор АС */\r\n sub: Subscription;\r\n /** Url страницы, с которой был переход (после входа вернет на неё) */\r\n returnUrl: string = '';\r\n\r\n constructor(private authService: AuthService,\r\n private route: ActivatedRoute,\r\n private loaderService: LoaderService\r\n ) {\r\n this.sub = this.route.data.subscribe(data => {\r\n this.idCas = data['idCas'];\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (localStorage.getItem('id_human') || localStorage.getItem('kiosk-keyboard-layout')) {\r\n // this.isKiosk = true;\r\n }\r\n this.route.queryParams.subscribe(params => {\r\n this.returnUrl = params['returnUrl'];\r\n //console.log('constructor this.returnUrl = ', this.returnUrl);\r\n //this.returnUrl = this.returnUrl.slice(this.returnUrl.lastIndexOf('returnUrl=') + 'returnUrl='.length);\r\n //console.log('constructor NEW this.returnUrl = ', this.returnUrl);\r\n });\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sub.unsubscribe();\r\n }\r\n\r\n onSubmitError() {\r\n return () => {\r\n this.pending = false;\r\n this.loaderService.hide();\r\n };\r\n }\r\n\r\n onSubmit($event: Authenticate) {\r\n this.loaderService.show();\r\n this.pending = true;\r\n this.authService.login($event.username, $event.password, this.idCas, this.returnUrl, this.onSubmitError());\r\n }\r\n\r\n onSubmitPermit($event: string) {\r\n const permit = $event;\r\n this.authService.loginByPermit(permit, this.idCas, this.returnUrl);\r\n }\r\n}\r\n","@if (!isKiosk) {\r\n <ngx-uik-login-form\r\n (submitted)=\"onSubmit($event)\"\r\n [pending]=\"pending\"\r\n [errorMessage]=\"error\">\r\n </ngx-uik-login-form>\r\n }\r\n @if (isKiosk) {\r\n <ngx-uik-permit-form\r\n (submitted)=\"onSubmitPermit($event)\"\r\n >\r\n </ngx-uik-permit-form>\r\n }","import { Directive, Input, OnInit, ElementRef } from '@angular/core';\r\nimport { AuthPermission } from '../auth.types';\r\nimport { AuthService } from '../services/auth.service';\r\n\r\n@Directive({\r\n selector: '[ngxUikDisableIfUnauthorized]',\r\n standalone: true\r\n})\r\nexport class DisableIfUnauthorizedDirective implements OnInit {\r\n @Input('ngxUikDisableIfUnauthorized') permission: AuthPermission | undefined;\r\n\r\n constructor(private el: ElementRef, private authservice: AuthService) { }\r\n\r\n ngOnInit() {\r\n if (this.permission && !this.authservice.hasPermission(this.permission)) {\r\n this.el.nativeElement.disabled = true;\r\n }\r\n }\r\n}\r\n","import { Directive, OnInit, ElementRef, Input } from '@angular/core';\r\nimport { AuthService } from '../services/auth.service';\r\nimport { AuthPermission } from '../auth.types';\r\n\r\n@Directive({\r\n selector: '[ngxUikHideIfUnauthorized]',\r\n standalone: true\r\n})\r\nexport class HideIfUnauthorizedDirective implements OnInit {\r\n @Input('ngxUikHideIfUnauthorized') permission: AuthPermission | undefined;\r\n\r\n constructor(private el: ElementRef, private authService: AuthService) { }\r\n\r\n ngOnInit() {\r\n if (this.permission && !this.authService.hasPermission(this.permission)) {\r\n this.el.nativeElement.style.display = 'none';\r\n }\r\n }\r\n}\r\n","import { Directive, Input, OnInit, ElementRef } from '@angular/core';\r\nimport { AuthService } from '../services/auth.service';\r\n\r\n@Directive({\r\n selector: '[ngxUikDisableIfRole]',\r\n standalone: true\r\n})\r\nexport class DisableIfRoleDirective implements OnInit {\r\n @Input('ngxUikDisableIfRole') role: string = '';\r\n\r\n constructor(private el: ElementRef, private authService: AuthService) { }\r\n\r\n ngOnInit() {\r\n this.authService.roles$.subscribe((userRoles) => {\r\n if (this.role) {\r\n if (!this.authService.hasRole(userRoles, this.role)) {\r\n this.el.nativeElement.disabled = true;\r\n } else {\r\n this.el.nativeElement.disabled = false;\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import { Directive, OnInit, ElementRef, Input } from '@angular/core';\r\nimport { AuthService } from '../services/auth.service';\r\n\r\n@Directive({\r\n selector: '[ngxUikHideIfRoleNot]',\r\n standalone: true\r\n})\r\nexport class HideIfRoleNotDirective implements OnInit {\r\n @Input('ngxUikHideIfRoleNot') roles: string[] = [];\r\n\r\n constructor(private el: ElementRef, private authService: AuthService) { }\r\n\r\n // Элемент скрывается, если у пользователя нет ни одной роли из перереданных в \"roles\"\r\n // или в списке \"roles\" есть роль \"hideRole\".\r\n ngOnInit() {\r\n if (this.roles) {\r\n this.authService.roles$.subscribe((userRoles) => {\r\n const isHide = this.authService.isHideElement(this.roles, userRoles);\r\n\r\n if (isHide) {\r\n this.el.nativeElement.style.display = 'none';\r\n } else {\r\n this.el.nativeElement.style.display = 'inherit';\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot } from '@angular/router';\r\n\r\nimport { AuthService } from './auth.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nclass AuthGuardService {\r\n\r\n constructor(private auth: AuthService,\r\n private router: Router) {\r\n }\r\n\r\n canActivate(route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ) {\r\n const isLogin = this.auth.loggedIn$.value;\r\n if (!isLogin) {\r\n console.log('state.url =', state.url);\r\n\r\n // Если не зарегистрирован вернуть в форму авторизации\r\n this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } });\r\n }\r\n\r\n return isLogin;\r\n }\r\n}\r\n\r\nexport const authGuard: CanActivateFn = (\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n) => inject(AuthGuardService).canActivate(route, state);\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { AuthService } from './auth.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nclass RoleGuardService {\r\n public roles: string[] = [];\r\n\r\n constructor(private router: Router, private authService: AuthService) {\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\r\n this.roles = route.data['roles'] as string[];\r\n return this.authService.roles$.pipe(map((userRoles: string[]) => this.authService.hasRoles(userRoles, this.roles)));\r\n }\r\n}\r\n\r\nexport const roleGuard: CanActivateFn = (\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n) => inject(RoleGuardService).canActivate(route, state);\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n// Вычисление разрешений на модули по ролям\r\nexport class RoleService {\r\n // Указываем какой сервер использовать\r\n baseRoute = 'mainApi/';\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n // Получить роли пользователя\r\n getRoles() {\r\n return this.http.get(this.baseRoute + 'jwt/webroles');\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class BaseToolbarService {\r\n baseRoute = 'BaseToolbar';\r\n\r\n constructor() {}\r\n\r\n}\r\n","import { Component, EventEmitter, inject, Input, OnDestroy, Output } from '@angular/core';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatToolbar } from '@angular/material/toolbar';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { IContextMenuOptions } from '../../../shared/table/models/context-menu-options.interface';\r\n\r\nimport { AuthService } from '../../../auth';\r\nimport { BaseToolbarService } from '../base-toolbar.service';\r\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatDivider } from '@angular/material/divider';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'ngx-uik-base-toolbar',\r\n templateUrl: 'base-toolbar.component.html',\r\n styleUrls: ['base-toolbar.component.scss'],\r\n imports: [MatToolbar, MatIconButton, MatTooltip, MatIcon, MatMenu, MatDivider, MatMenuTrigger, MatMenuItem],\r\n providers: [\r\n BaseToolbarService\r\n ]\r\n})\r\nexport class BaseToolbarComponent implements OnDestroy {\r\n @Input() rolesNewBtn: string[] = [];\r\n @Input() rolesEditBtn: string[] = [];\r\n @Input() rolesRemoveBtn: string[] = [];\r\n @Input() rolesCopyBtn: string[] = [];\r\n @Input() rolesExcelBtn: string[] = [];\r\n @Input() rolesCsvBtn: string[] = [];\r\n @Input() rolesPdfBtn: string[] = [];\r\n @Input() rolesPrintBtn: string[] = [];\r\n @Input() rolesRefreshBtn: string[] = [];\r\n @Input() rolesClearBtn: string[] = [];\r\n\r\n @Input() newBtnDisabled: boolean = false;\r\n @Input() editBtnDisabled: boolean = false;\r\n @Input() removeBtnDisabled: boolean = false;\r\n @Input() copyBtnDisabled: boolean = false;\r\n @Input() excelBtnDisabled: boolean = false;\r\n @Input() csvBtnDisabled: boolean = false;\r\n @Input() pdfBtnDisabled: boolean = false;\r\n @Input() printBtnDisabled: boolean = false;\r\n @Input() refreshBtnDisabled: boolean = false;\r\n @Input() clearBtnDisabled: boolean = false;\r\n\r\n @Input() newBtnTooltip = 'Добавить';\r\n @Input() editBtnTooltip = 'Изменить';\r\n @Input() removeBtnTooltip = 'Удалить';\r\n @Input() copyBtnTooltip = 'Скопировать';\r\n @Input() excelBtnTooltip = 'Экспортировать в Excel';\r\n @Input() csvBtnTooltip = 'Экспортировать в Csv';\r\n @Input() pdfBtnTooltip = 'Экспортировать в Pdf';\r\n @Input() printBtnTooltip = 'Печатать';\r\n @Input() refreshBtnTooltip = 'Обновить данные';\r\n @Input() clearBtnTooltip = 'Очистить фильтр';\r\n\r\n /** Список элементов контекстного меню. */\r\n @Input() newBtnOpt: IContextMenuOptions<string>[] = [];\r\n\r\n @Output() clickedNewBtn = new EventEmitter();\r\n @Output() clickedEditBtn = new EventEmitter();\r\n @Output() clickedRemoveBtn = new EventEmitter();\r\n @Output() clickedCopyBtn = new EventEmitter();\r\n @Output() clickedExcelBtn = new EventEmitter();\r\n @Output() clickedCsvBtn = new EventEmitter();\r\n @Output() clickedPdfBtn = new EventEmitter();\r\n @Output() clickedPrintBtn = new EventEmitter();\r\n @Output() clickedRefreshBtn = new EventEmitter();\r\n @Output() clickedClearBtn = new EventEmitter();\r\n\r\n // DI\r\n protected authService = inject(AuthService);\r\n\r\n userRoles: string[] = [];\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n // получить права пользователя\r\n this.subscription = this.authService.roles$.subscribe((userRoles) => {\r\n this.userRoles = userRoles;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n isShow(roles: string[]) {\r\n return !this.authService.isHideElement(roles, this.userRoles);\r\n }\r\n\r\n onNewClick() {\r\n this.clickedNewBtn.emit();\r\n }\r\n\r\n onEditClick() {\r\n this.clickedEditBtn.emit();\r\n }\r\n\r\n onRemoveClick() {\r\n this.clickedRemoveBtn.emit();\r\n }\r\n\r\n onCopyClick() {\r\n this.clickedCopyBtn.emit();\r\n }\r\n\r\n onExcelClick() {\r\n this.clickedExcelBtn.emit();\r\n }\r\n\r\n onCsvClick() {\r\n this.clickedCsvBtn.emit();\r\n }\r\n\r\n onPdfClick() {\r\n this.clickedPdfBtn.emit();\r\n }\r\n\r\n onPrintClick() {\r\n this.clickedPrintBtn.emit();\r\n }\r\n\r\n onRefreshGridClick() {\r\n this.clickedRefreshBtn.emit();\r\n }\r\n\r\n onClearClick() {\r\n this.clickedClearBtn.emit();\r\n }\r\n}\r\n\r\n","<mat-toolbar>\r\n @if (isShow(rolesNewBtn)) {\r\n @if (newBtnOpt && newBtnOpt.length > 0) {\r\n <button [disabled]=\"newBtnDisabled\" [matMenuTriggerFor]=\"menuNewBtn\"\r\n mat-icon-button [matTooltip]=\"newBtnTooltip\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n <mat-menu #menuNewBtn=\"matMenu\">\r\n\r\n @for (menuItem of newBtnOpt; track menuItem) {\r\n @if (menuItem.title === '-' && !(menuItem.hideFn ? menuItem.hideFn(\"\") : menuItem.hide)) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (menuItem.title !== '-' && !(menuItem.hideFn ? menuItem.hideFn(\"\") : menuItem.hide)) {\r\n <button mat-menu-item\r\n (click)=\"menuItem.onClickFn ? menuItem.onClickFn('') : ''\"\r\n [disabled]=\"menuItem.disabledFn ? menuItem.disabledFn('') : menuItem.disabled\">\r\n @if (menuItem.icon) {\r\n <mat-icon>{{menuItem.icon}}</mat-icon>\r\n }\r\n {{ menuItem.title }}\r\n </button>\r\n }\r\n }\r\n\r\n </mat-menu>\r\n } \r\n @else {\r\n <button [disabled]=\"newBtnDisabled\" (click)=\"onNewClick()\"\r\n mat-icon-button routerLink=\"new\" routerLinkActive=\"active\" [matTooltip]=\"newBtnTooltip\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n }\r\n\r\n @if (isShow(rolesEditBtn)) {\r\n <button [disabled]=\"editBtnDisabled\" (click)=\"onEditClick()\"\r\n mat-icon-button routerLink=\"edit\" color=\"primary\" routerLinkActive=\"active\" [matTooltip]=\"editBtnTooltip\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesRemoveBtn)) {\r\n <button [disabled]=\"removeBtnDisabled\" (click)=\"onRemoveClick()\"\r\n mat-icon-button routerLink=\"delete\" color=\"warn\" routerLinkActive=\"active\" [matTooltip]=\"removeBtnTooltip\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesCopyBtn)) {\r\n <button [disabled]=\"copyBtnDisabled\" (click)=\"onCopyClick()\"\r\n mat-icon-button routerLink=\"delete\" routerLinkActive=\"active\" [matTooltip]=\"copyBtnTooltip\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesExcelBtn)) {\r\n <button [disabled]=\"excelBtnDisabled\" (click)=\"onExcelClick()\"\r\n mat-icon-button routerLink=\"excel\" routerLinkActive=\"active\" [matTooltip]=\"excelBtnTooltip\">\r\n <mat-icon class=\"material-icons-outlined\">explicit</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesCsvBtn)) {\r\n <button [disabled]=\"csvBtnDisabled\" (click)=\"onCsvClick()\"\r\n mat-icon-button routerLink=\"csv\" routerLinkActive=\"active\" [matTooltip]=\"csvBtnTooltip\">\r\n <mat-icon class=\"material-icons-outlined\">download</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesPdfBtn)) {\r\n <button [disabled]=\"pdfBtnDisabled\" (click)=\"onPdfClick()\"\r\n mat-icon-button routerLink=\"pdf\" routerLinkActive=\"active\" [matTooltip]=\"pdfBtnTooltip\">\r\n <mat-icon class=\"material-icons-outlined\">picture_as_pdf</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesPrintBtn)) {\r\n <button [disabled]=\"printBtnDisabled\" (click)=\"onPrintClick()\"\r\n mat-icon-button routerLink=\"print\" routerLinkActive=\"active\" [matTooltip]=\"printBtnTooltip\">\r\n <mat-icon class=\"material-icons-outlined\">print_outline</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesRefreshBtn)) {\r\n <button [disabled]=\"refreshBtnDisabled\" (click)=\"onRefreshGridClick()\"\r\n mat-icon-button routerLink=\"refresh\" routerLinkActive=\"active\" [matTooltip]=\"refreshBtnTooltip\">\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n }\r\n @if (isShow(rolesClearBtn)) {\r\n <button [disabled]=\"clearBtnDisabled\" (click)=\"onClearClick()\"\r\n mat-icon-button routerLink=\"clear\" routerLinkActive=\"active\" [matTooltip]=\"clearBtnTooltip\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n</mat-toolbar>\r\n","export interface IEditDialogData<T, K = any> {\r\n action: Action;\r\n entity: T;\r\n extraData?: K;\r\n}\r\n\r\nexport enum Action {\r\n Add = 'Добавление',\r\n Edit = 'Изменение'\r\n}\r\n","import { Directive } from \"@angular/core\";\r\nimport { FormGroup } from \"@angular/forms\";\r\nimport { MatDialogRef } from \"@angular/material/dialog\";\r\n\r\nimport { Action, IEditDialogData } from \"./base-edit-dialog-data\";\r\n\r\n@Directive()\r\nexport class BaseEditClass<T> {\r\n title: string = '';\r\n dialogData: IEditDialogData<T> | undefined;\r\n form: FormGroup | undefined;\r\n dialogRef: MatDialogRef<any, IEditDialogData<T> | null> | undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n onNoClick(event: PointerEvent): void {\r\n this.dialogRef?.close(null);\r\n event.preventDefault(); // иначе сработает onSubmit\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.form) {\r\n if (this.form.valid) {\r\n if (this.dialogData)\r\n Object.keys(this.form.controls).forEach(controlName => this.dialogData!.entity[controlName as keyof T] = this.form?.controls[controlName].value);\r\n this.dialogRef?.close(this.dialogData);\r\n } else {\r\n Object.keys(this.form.controls).forEach(controlName => this.form?.controls[controlName].markAsTouched());\r\n }\r\n }\r\n }\r\n\r\n formActionIsAdd(): boolean {\r\n return this.dialogData?.action === Action.Add;\r\n }\r\n\r\n formActionIsEdit(): boolean {\r\n return this.dialogData?.action === Action.Edit;\r\n }\r\n}","export interface IEntityAction<T> {\r\n action: EntityAction;\r\n entity: T;\r\n}\r\n\r\nexport enum EntityAction {\r\n Init = 'Инициализация',\r\n Add = 'Добавление',\r\n Edit = 'Изменение',\r\n Delete = 'Удаление'\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\n@Directive()\r\nexport class BaseFilterClass {\r\n\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultDebounceTime = 500;\r\n\r\n constructor() {\r\n }\r\n\r\n}\r\n","import { Directive, inject } from \"@angular/core\";\r\nimport { MatMenuTrigger } from \"@angular/material/menu\";\r\nimport { Router } from \"@angular/router\";\r\n\r\n@Directive()\r\nexport class BaseNavBarMenuClass {\r\n\r\n // DI\r\n router = inject(Router);\r\n\r\n constructor() {\r\n }\r\n \r\n /** Нажата средняя кнопка (открыть ссылку в новой вкладке). */ \r\n onMiddleClick(event: PointerEvent, baseUrl: string, menu: MatMenuTrigger) {\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if (event.button === 1) {\r\n // event.preventDefault();\r\n menu.closeMenu();\r\n const urlTree = this.router.serializeUrl(\r\n this.router.createUrlTree([baseUrl]\r\n )\r\n );\r\n window.open(urlTree, '_blank');\r\n }\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AnimationsService {\r\n private static routeAnimationType: RouteAnimationType = 'ALL';\r\n\r\n constructor() {\r\n AnimationsService.routeAnimationType = 'ALL';\r\n }\r\n\r\n static isRouteAnimationsType(type: RouteAnimationType) {\r\n // console.log('isRouteAnimationsType ', AnimationsService.routeAnimationType, type, AnimationsService.routeAnimationType === type);\r\n return AnimationsService.routeAnimationType === type;\r\n }\r\n\r\n updateRouteAnimationType(\r\n pageAnimations: boolean,\r\n elementsAnimations: boolean\r\n ) {\r\n AnimationsService.routeAnimationType =\r\n pageAnimations && elementsAnimations\r\n ? 'ALL'\r\n : pageAnimations\r\n ? 'PAGE'\r\n : elementsAnimations\r\n ? 'ELEMENTS'\r\n : 'NONE';\r\n }\r\n}\r\n\r\nexport type RouteAnimationType = 'ALL' | 'PAGE' | 'ELEMENTS' | 'NONE';\r\n","import {\r\n animate,\r\n query,\r\n style,\r\n transition,\r\n trigger,\r\n stagger,\r\n sequence\r\n} from '@angular/animations';\r\nimport { AnimationsService } from './animations.service';\r\n\r\nexport const ROUTE_ANIMATIONS_ELEMENTS = 'route-animations-elements';\r\n\r\nconst STEPS_ALL: any[] = [\r\n // PAGE\r\n query(':enter > *', style({ opacity: 0, position: 'fixed' }), {\r\n optional: true\r\n }),\r\n // ELEMENTS\r\n query(':enter .' + ROUTE_ANIMATIONS_ELEMENTS, style({ opacity: 0 }), {\r\n optional: true\r\n }),\r\n // PAGE\r\n sequence([\r\n query(\r\n ':leave > *',\r\n [\r\n style({ transform: 'translateY(0%)', opacity: 1 }),\r\n animate(\r\n '0.2s ease-in-out',\r\n style({ transform: 'translateY(-3%)', opacity: 0 })\r\n ),\r\n style({ position: 'fixed' })\r\n ],\r\n { optional: true }\r\n ),\r\n query(\r\n ':enter > *',\r\n [\r\n style({\r\n transform: 'translateY(-3%)',\r\n opacity: 0,\r\n position: 'static'\r\n }),\r\n animate(\r\n '0.5s ease-in-out',\r\n style({ transform: 'translateY(0%)', opacity: 1 })\r\n )\r\n ],\r\n { optional: true }\r\n )\r\n ]),\r\n // ELEMENTS\r\n query(\r\n ':enter .' + ROUTE_ANIMATIONS_ELEMENTS,\r\n // eslint-disable-next-line no-magic-numbers\r\n stagger(75, [\r\n style({ transform: 'translateY(10%)', opacity: 0 }),\r\n animate(\r\n '0.5s ease-in-out',\r\n style({ transform: 'translateY(0%)', opacity: 1 })\r\n )\r\n ]),\r\n { optional: true }\r\n )\r\n];\r\nconst STEPS_NONE: any[] = [];\r\nconst STEPS_PAGE = [STEPS_ALL[0], STEPS_ALL[2]];\r\nconst STEPS_ELEMENTS = [STEPS_ALL[1], STEPS_ALL[3]];\r\n\r\nexport const isRouteAnimationsAll = () => AnimationsService.isRouteAnimationsType('ALL');\r\nexport const isRouteAnimationsNone = () => AnimationsService.isRouteAnimationsType('NONE');\r\nexport const isRouteAnimationsPage = () => AnimationsService.isRouteAnimationsType('PAGE');\r\nexport const isRouteAnimationsElements = () => AnimationsService.isRouteAnimationsType('ELEMENTS');\r\n\r\nexport const routeAnimations = trigger('routeAnimations', [\r\n transition(isRouteAnimationsAll, STEPS_ALL),\r\n transition(isRouteAnimationsNone, STEPS_NONE),\r\n transition(isRouteAnimationsPage, STEPS_PAGE),\r\n transition(isRouteAnimationsElements, STEPS_ELEMENTS)\r\n]);\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalStorageService {\r\n\r\n constructor() { }\r\n\r\n public saveData(key: string, value: string) {\r\n localStorage.setItem(key, value);\r\n }\r\n\r\n public getData(key: string) {\r\n return localStorage.getItem(key)\r\n }\r\n public removeData(key: string) {\r\n localStorage.removeItem(key);\r\n }\r\n\r\n public clearData() {\r\n localStorage.clear();\r\n }\r\n\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\nimport { DialogData } from '.';\r\n\r\n@Component({\r\n selector: 'ngx-uik-dialog',\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.css'],\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, MatButton, MatDialogClose]\r\n})\r\nexport class DialogComponent {\r\n\r\n constructor(public dialogRef: MatDialogRef<DialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: DialogData\r\n ) {\r\n if (!data.title) {\r\n data.title = 'Подтверждение';\r\n }\r\n if (!data.btnNoTitle) {\r\n data.btnNoTitle = 'Нет';\r\n }\r\n if (!data.btnYesTitle) {\r\n data.btnYesTitle = 'Да';\r\n }\r\n }\r\n\r\n onNoClick(): void {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<h1 mat-dialog-title>{{ data.title }}</h1>\n<div mat-dialog-content>\n <div style=\"white-space: pre-line\">{{ data.message }}</div>\n</div>\n<div mat-dialog-actions align=\"end\">\n <button mat-raised-button (click)=\"onNoClick()\" cdkFocusInitial>{{ data.btnNoTitle }}</button>\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"data.id\">{{ data.btnYesTitle }}</button>\n</div>\n\n","import { Directive, OnDestroy, inject } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport { Router } from '@angular/router';\r\nimport { BehaviorSubject, forkJoin, ObservableInput, Subject, Subscription } from 'rxjs';\r\n\r\nimport { ROUTE_ANIMATIONS_ELEMENTS } from '../../core';\r\nimport { LocalStorageService } from '../../services/local-storage-service';\r\nimport { DialogComponent } from '../../shared/dialog/dialog.component';\r\nimport { IContextMenuOptions, IPageState, ISortState, ITableState } from '../../shared/table';\r\nimport { IAlertService } from '../interfaces';\r\nimport { Action, IEditDialogData } from './base-edit-dialog-data';\r\nimport { ObjectKeys, SortDirection, fnCbType, fnType } from '../../types/types';\r\n\r\n@Directive()\r\nexport class BasePageClass<T> implements OnDestroy {\r\n\r\n routeAnimationsElements = ROUTE_ANIMATIONS_ELEMENTS;\r\n\r\n /** Данные для табличного компонента. */\r\n data$: BehaviorSubject<T[]> = new BehaviorSubject<T[]>([]);\r\n /** Количество записей по фильтру. */\r\n length$: BehaviorSubject<number> = new BehaviorSubject<number>(0);\r\n\r\n entityService: any;\r\n entityType: any;\r\n entityEditComponent: any;\r\n extraData?: any;\r\n\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageIndex = 0;\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageSize = 10;\r\n\r\n dialog: MatDialog | undefined;\r\n dialogEditWidth = 'auto';\r\n dialogRemoveWidth = '400px';\r\n\r\n alertService: IAlertService | undefined;\r\n\r\n routeAddress: string = '';\r\n\r\n /** Сообщение при удалении записе(й). */\r\n removalMessage: string = '';\r\n /** Заголовок страницы. */\r\n pageTitle: string = '';\r\n\r\n\r\n /**\r\n * Создание записи: вызывается перед окрытием диалога.\r\n */\r\n beforeOpenDialogOnNewEvent: fnType<T>;\r\n /**\r\n * Редактирование записи: вызывается перед окрытием диалога.\r\n */\r\n beforeOpenDialogOnEditEvent: fnType<T>;\r\n /**\r\n * Создание записи: вызывается перед сохранением объекта.\r\n */\r\n beforeSaveOnNewEvent: fnType<T>;\r\n /**\r\n * Редактирование записи: вызывается перед сохранением объекта.\r\n */\r\n beforeSaveOnEditEvent: fnType<T>;\r\n /**\r\n * Создание записи: вызывается после сохранения объекта.\r\n */\r\n afterSaveOnNewEvent: fnCbType<T>;\r\n /**\r\n * Редактирование записи: вызывается после сохранения объекта.\r\n */\r\n afterSaveOnEditEvent: fnCbType<T>;\r\n\r\n editorRoles: string[] = [];\r\n executeRoles: string[] = [];\r\n /** Список ролей, для которых скрыть элемент. */\r\n hideRoles: string[] = ['HIDE'];\r\n\r\n /** Загрузка данных. */\r\n loadData$: Subject<null> = new Subject<null>();\r\n /** Загрузка количества записей. */\r\n loadLength$: Subject<null> = new Subject<null>();\r\n /** Очистка фильтра. */\r\n clearFilter$: Subject<null> = new Subject<null>();\r\n\r\n /** Разрешен выбор нескольких строк. */\r\n allowMultiSelect = false;\r\n /** Выбранные строки в таблице. */\r\n selected: T[] = [];\r\n\r\n /** Состояние сортировки, пагинации. */\r\n tableState: ITableState;\r\n\r\n /** Доступность кнопки \"Изменить\". */\r\n editBtnDisabled = true;\r\n /** Доступность кнопки \"Удалить\". */\r\n removeBtnDisabled = true;\r\n\r\n /** Разрешено ли отправлять событие rowDoubleClicked при двойном щелчке мышью. */\r\n dblClickedEventEnable = true;\r\n\r\n // Список элементов контекстного меню.\r\n opt: IContextMenuOptions<T>[] = [];\r\n\r\n // DI\r\n protected router = inject(Router);\r\n protected localStorage = inject(LocalStorageService);\r\n\r\n subscription: Subscription | undefined = new Subscription();\r\n\r\n constructor() {\r\n this.tableState = {\r\n sortActive: this.localStorage.getData(this.constructor.name + 'SortActive') || '',\r\n sortDirection: (this.localStorage.getData(this.constructor.name + 'SortDirection') || '') as SortDirection,\r\n pageIndex: Number(this.localStorage.getData(this.constructor.name + 'PageIndex')) || this.defaultPageIndex,\r\n pageSize: Number(this.localStorage.getData(this.constructor.name + 'PageSize')) || this.defaultPageSize\r\n };\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n onPageChange(pageState: IPageState) {\r\n this.localStorage.saveData(this.constructor.name + 'PageIndex', pageState.pageIndex.toString());\r\n this.localStorage.saveData(this.constructor.name + 'PageSize', pageState.pageSize.toString());\r\n\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n onSortChange(sortState: ISortState) {\r\n this.localStorage.saveData(this.constructor.name + 'SortActive', sortState.sortActive);\r\n this.localStorage.saveData(this.constructor.name + 'SortDirection', sortState.sortDirection);\r\n\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n entityFactory(type: new () => T): T {\r\n return new type();\r\n }\r\n\r\n /** Cобытие изменение выбранных записей. */\r\n onSelectionChange(selected: T[]) {\r\n this.selected = selected;\r\n this.editBtnDisabledUpdate(this.selected);\r\n this.removeBtnDisabledUpdate(this.selected);\r\n }\r\n\r\n /** Обновление доступности кнопки \"Изменить\" - вызывается при изменении выбранных записей. */\r\n editBtnDisabledUpdate(selected: T[]) {\r\n this.editBtnDisabled = !(selected && selected.length === 1);\r\n }\r\n\r\n /** Обновление доступности кнопки \"Удалить\" - вызывается при изменении выбранных записей. */\r\n removeBtnDisabledUpdate(selected: T[]) {\r\n this.removeBtnDisabled = !(selected && selected.length > 0);\r\n }\r\n\r\n /** Cобытие двойной клик. */\r\n onRowDoubleClicked() {\r\n this.editEvent();\r\n }\r\n\r\n /** Cобытие создание. */\r\n newEvent() {\r\n if (this.entityEditComponent) {\r\n const data: IEditDialogData<T> = { action: Action.Add, entity: new this.entityType(null) };\r\n\r\n // Назначить значения полей объекта перед окрытием диалога.\r\n if (this.beforeOpenDialogOnNewEvent) {\r\n this.beforeOpenDialogOnNewEvent(data.entity, data.extraData);\r\n }\r\n\r\n // Открытие окна\r\n const dialogRef = this.openDialog(this.entityEditComponent, data, this.dialog);\r\n\r\n // Обработка закрытия окна\r\n const subs = dialogRef.afterClosed().subscribe((result: IEditDialogData<T>) => {\r\n // Проверка результата\r\n if (result && result.entity && (Object.keys(result.entity).length !== 0)) {\r\n // Дополнительные действия перед сохранением объекта.\r\n if (this.beforeSaveOnNewEvent)\r\n this.beforeSaveOnNewEvent(result.entity, result.extraData);\r\n\r\n const subs = this.entityService.newObject(result.entity)\r\n .subscribe({\r\n next: (obj: any) => {\r\n // Дополнительные действия после сохранения объекта.\r\n if (this.afterSaveOnNewEvent) {\r\n const callback = () => {\r\n this.refreshEvent();\r\n this.alertService?.success('Запись добавлена.');\r\n }\r\n this.afterSaveOnNewEvent(callback.bind(this), obj, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.alertService?.success('Запись добавлена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.alertService?.error('Произошла ошибка при добавлении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription?.add(subs2);\r\n } else {\r\n this.alertService?.warning('Действие не доступно.');\r\n }\r\n }\r\n\r\n /** Cобытие редактирование. */\r\n editEvent() {\r\n if (this.selected && this.selected.length === 1) {\r\n if (this.entityEditComponent) {\r\n const data: IEditDialogData<T> = { action: Action.Edit, entity: this.selected[0] };\r\n\r\n // Назначить значения полей объекта перед окрытием диалога.\r\n if (this.beforeOpenDialogOnEditEvent) {\r\n this.beforeOpenDialogOnEditEvent(data.entity, data.extraData);\r\n }\r\n\r\n // Открытие окна\r\n const dialogRef = this.openDialog(this.entityEditComponent, data, this.dialog);\r\n\r\n // Обработка закрытия окна\r\n const subs = dialogRef.afterClosed().subscribe((result: IEditDialogData<T>) => {\r\n // Проверка результата\r\n if (result && result.entity && (Object.keys(result.entity).length !== 0)) {\r\n // Дополнительные действия перед сохранением объекта.\r\n if (this.beforeSaveOnEditEvent)\r\n this.beforeSaveOnEditEvent(result.entity, result.extraData);\r\n\r\n const subs = this.entityService.editObject(result.entity)\r\n .subscribe({\r\n next: () => {\r\n // Дополнительные действия после сохранения объекта.\r\n if (this.afterSaveOnEditEvent) {\r\n const callback = () => {\r\n this.refreshEvent();\r\n this.alertService?.success('Запись изменена.');\r\n }\r\n this.afterSaveOnEditEvent(callback.bind(this), result.entity, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.alertService?.success('Запись изменена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.alertService?.error('Произошла ошибка при изменении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription?.add(subs2);\r\n } else {\r\n this.alertService?.warning('Действие не доступно.');\r\n }\r\n }\r\n }\r\n\r\n\r\n /** Cобытие удаление. */\r\n removeEvent() {\r\n // если вырбана запись(и)\r\n if (this.selected && this.selected.length > 0) {\r\n const dialogRef = this.openDialogRemoveConfirm(this.removalMessage);\r\n if (dialogRef) {\r\n const subs = dialogRef.afterClosed().subscribe((result: any) => {\r\n // при подтверждении возвращается 'delete'\r\n if (result === 'delete') {\r\n // готовим объект с запросами на удаление\r\n type tplotOptions = {\r\n [key: string]: ObservableInput<T>\r\n }\r\n const sourcesObject: ObjectKeys = {};\r\n this.selected.forEach((item, index) => sourcesObject['obj' + index] = this.entityService.deleteObject(item));\r\n // ждем, когда выполнятся все запросы\r\n const subs = forkJoin(sourcesObject)\r\n .subscribe({\r\n next: () => {\r\n this.refreshEvent();\r\n this.alertService?.success('Выбранные записи удалены.');\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.alertService?.error('Произошла ошибка при удалении записи: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n\r\n // Закрытие окна по нажатию Escape\r\n const subs2 = dialogRef.keydownEvents().subscribe((event: any) => {\r\n if (event.key === 'Escape') {\r\n dialogRef.close(null);\r\n }\r\n });\r\n this.subscription?.add(subs2);\r\n }\r\n }\r\n }\r\n\r\n /** Событие обновления данных. */\r\n refreshEvent() {\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n /** Cобытие очистки фильтра. */\r\n clearEvent() {\r\n this.clearFilter$.next(null);\r\n }\r\n\r\n /** Изменение сообщения об удалении. */\r\n onRemovalMessageChange(message: string) {\r\n this.removalMessage = message;\r\n }\r\n\r\n /** Изменение заголовка страницы. */\r\n onPageTitleChange(title: string) {\r\n this.pageTitle = title;\r\n }\r\n\r\n openDialog(entityComponent: any, data: IEditDialogData<T>, dialog: any) {\r\n // create dialog config\r\n const dialogConfig = new MatDialogConfig();\r\n dialogConfig.disableClose = true;\r\n dialogConfig.autoFocus = true;\r\n dialogConfig.width = this.dialogEditWidth;\r\n dialogConfig.data = data;\r\n dialogConfig.panelClass = this.entityType.name + '-edit-dialog';\r\n // return dialog\r\n return dialog.open(entityComponent, dialogConfig);\r\n }\r\n\r\n openDialogRemoveConfirm(removalMessage: string): MatDialogRef<DialogComponent> | undefined {\r\n let message = 'Вы хотите удалить ';\r\n message += removalMessage ?\r\n removalMessage :\r\n this.allowMultiSelect ? `выбранные записи (${this.selected.length})?` : 'выбранную запись?';\r\n return this.dialog?.open(DialogComponent, {\r\n width: this.dialogRemoveWidth,\r\n data: {\r\n id: 'delete',\r\n title: 'Подтверждение',\r\n message: message,\r\n btnNoTitle: 'Отмена',\r\n btnYesTitle: 'Удалить'\r\n }\r\n });\r\n }\r\n\r\n // contextMenu: Документы потока (в новой вкладке).\r\n protected onMiddleButton(baseUrl: string, queryParamName?: string, queryParamValue?: string) {\r\n return ($event: MouseEvent, item: T, contextMenu: MatMenuTrigger) => {\r\n // Нажата средняя кнопка (в новой вкладке).\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if ($event.button === 1) {\r\n //$event.preventDefault();\r\n contextMenu.closeMenu();\r\n // Converts the route into a string that can be used\r\n // with the window.open() function\r\n const url = this.router.serializeUrl(\r\n queryParamName && queryParamValue ?\r\n this.router.createUrlTree([baseUrl], { queryParams: { [queryParamName]: item[queryParamValue as keyof T] } })\r\n : this.router.createUrlTree([baseUrl])\r\n );\r\n window.open(url, '_blank');\r\n }\r\n };\r\n }\r\n\r\n protected dateToString(date: string | number | Date) {\r\n return date ? (new Date(date)).toLocaleString('ru-RU', { timeZone: 'Europe/Samara' }) : null; // MSK+01\r\n }\r\n\r\n}\r\n\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { BaseClass } from './base-class';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BaseServiceClass<T extends BaseClass> {\r\n baseRoute: string = '';\r\n entityType: any;\r\n\r\n countRoute = 'count';\r\n basePageRoute = 'page';\r\n basePageSizeRoute = 'pageSize';\r\n\r\n protected http = inject(HttpClient);\r\n\r\n constructor() { }\r\n\r\n getObjects(): Observable<T[]> {\r\n return this.http.get<T[]>(this.baseRoute)\r\n .pipe(map(data => data.map(item => new this.entityType(item).deserialize(item))));\r\n }\r\n\r\n getObject(id: number): any {\r\n return this.http.get<T>(this.baseRoute + id)\r\n .pipe(map(data => new this.entityType(data).deserialize(data)));\r\n }\r\n\r\n getCount(): Observable<number> {\r\n return this.http.get<number>(this.baseRoute + this.countRoute);\r\n }\r\n\r\n getObjectsByPaging(pageIndex: number, pageSize: number, sortColumn: string, direction: string): Observable<T[]> {\r\n const params = this.getParams(pageIndex, pageSize, sortColumn, direction);\r\n return this.http.get<T[]>(this.baseRoute, { params })\r\n .pipe(map(data => data.map(item => new this.entityType(item).deserialize(item))));\r\n }\r\n\r\n newObject(entity: T): any {\r\n return this.http.post(this.baseRoute, entity);\r\n }\r\n\r\n editObject(entity: T): any {\r\n return this.http.put(this.baseRoute + entity.id, entity);\r\n }\r\n\r\n deleteObject(entity: T): any {\r\n return this.http.delete(this.baseRoute + entity.id);\r\n }\r\n\r\n protected getParams(pageIndex: number, pageSize: number, sortColumn: string, direction: string): HttpParams {\r\n let params = new HttpParams();\r\n if (pageIndex)\r\n params = params.append('page', pageIndex);\r\n if (pageSize)\r\n params = params.append('limit', pageSize);\r\n if (sortColumn)\r\n params = params.append('column', sortColumn);\r\n if (direction)\r\n params = params.append('direction', direction);\r\n return params;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RedirectGuard {\r\n\r\n constructor() { }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\r\n console.log(route.data['externalUrl']);\r\n\r\n window.location.href = route.data['externalUrl'];\r\n return true;\r\n }\r\n}\r\n","import { Deserializable } from './deserializable.model';\r\nimport { SecUserView } from './sec-user-view.model';\r\n\r\nexport class SecUser implements Deserializable {\r\n id: number = 0;\r\n login: string = '';\r\n fio: string = '';\r\n dept: number = 0;\r\n tabnum: number = 0;\r\n userView: SecUserView | undefined;\r\n\r\n public constructor(init: SecUser) {\r\n if (init) {\r\n Object.assign(this, init);\r\n } else {\r\n this.id = 0;\r\n this.login = '';\r\n this.dept = 0;\r\n this.tabnum = 0;\r\n this.fio = '';\r\n }\r\n }\r\n\r\n deserialize(input: any): this {\r\n Object.assign(this, input);\r\n return this;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer} from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safe'\r\n})\r\nexport class SafePipe implements PipeTransform {\r\n\r\n constructor(private sanitizer: DomSanitizer) {}\r\n\r\n transform(url: string) {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'time'\n})\nexport class TimePipe implements PipeTransform {\n\n transform(value: number): string {\n // const hour = Math.abs(value) >= 60 ? Math.round(value / 60) + 'ч.' : '';\n // const minute = ' ' + Math.abs(value % 60) + 'м.';\n // return value === 0 ? '0' : hour + ' ' + minute;\n\n const hour = Math.abs(value) >= 60 ? Math.floor(Math.abs(value) / 60).toString().padStart(2,'0') : '00';\n const minute = Math.abs(value % 60).toString().padStart(2,'0');\n const time = hour + ':' + minute;\n return value < 0 ? '-' + time : time;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'truncate'\n})\nexport class TruncatePipe implements PipeTransform {\n // Usage:\n // {{ str | truncate:[20] }} // or\n // {{ str | truncate:[20, '...'] }} // or|\n transform(value: string, args: any[]): string {\n const limit = args.length > 0 ? parseInt(args[0], 10) : 20;\n const trail = args.length > 1 ? args[1] : '...';\n return value.length > limit ? value.substring(0, limit) + trail : value;\n }\n\n}\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AvatarService {\r\n baseRoute = 'common/human/';\r\n\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getAvatarById(idHuman: number): Observable<ArrayBuffer> {\r\n return this.http.get(this.baseRoute + idHuman + '/avatar', { responseType: 'arraybuffer' });\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport * as XLSX from 'xlsx';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExportService {\r\n\r\n constructor(\r\n ) {\r\n }\r\n\r\n // Экспорт в CSV\r\n exportCSV(data: any, filename = 'data', arrHeader: any, newHeaders: any) {\r\n const csvData = this.convertToCSV(data, arrHeader, newHeaders);\r\n console.log(csvData);\r\n const blob = new Blob(['\\ufeff' + csvData], { type: 'text/csv;charset=utf-8;' });\r\n const dwldLink = document.createElement('a');\r\n const url = URL.createObjectURL(blob);\r\n const isSafariBrowser = navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1;\r\n if (isSafariBrowser) { //if Safari open in new window to save file with random filename.\r\n dwldLink.setAttribute('target', '_blank');\r\n }\r\n dwldLink.setAttribute('href', url);\r\n dwldLink.setAttribute('download', filename + '.csv');\r\n dwldLink.style.visibility = 'hidden';\r\n document.body.appendChild(dwldLink);\r\n dwldLink.click();\r\n document.body.removeChild(dwldLink);\r\n }\r\n\r\n convertToCSV(objArray: any, headerList: any, newHeaders: any) {\r\n const array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;\r\n let str = '';\r\n let row = 'S.No,';\r\n for (const index in newHeaders) {\r\n if (Object.prototype.hasOwnProperty.call(newHeaders, index)) {\r\n row += newHeaders[index] + ',';\r\n }\r\n }\r\n row = row.slice(0, -1);\r\n str += row + '\\r\\n';\r\n for (let i = 0; i < array.length; i++) {\r\n let line = (i + 1) + '';\r\n for (const index in headerList) {\r\n if (Object.prototype.hasOwnProperty.call(newHeaders, index)) {\r\n const head = headerList[index];\r\n line += ',' + array[i][head];\r\n }\r\n }\r\n str += line + '\\r\\n';\r\n }\r\n return str;\r\n }\r\n\r\n // Экспорт в Excel\r\n exportExcel(data: any, heading: any, sheetName = 'sheet1', filename = 'data') {\r\n const wb = XLSX.utils.book_new();\r\n const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet([]);\r\n XLSX.utils.sheet_add_aoa(ws, heading);\r\n XLSX.utils.sheet_add_json(ws, data, { origin: 'A2', skipHeader: true });\r\n XLSX.utils.book_append_sheet(wb, ws, sheetName);\r\n XLSX.writeFile(wb, filename + '.xlsx');\r\n }\r\n\r\n}\r\n","import { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { MatAutocompleteModule, MatAutocompleteSelectedEvent, MatOption } from \"@angular/material/autocomplete\";\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { BehaviorSubject, Observable, Subscription, startWith } from \"rxjs\";\r\nimport { map } from \"rxjs/operators\";\r\n\r\nimport { ChipItem } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-chip-input-autocomplete',\r\n templateUrl: './chip-input-autocomplete.component.html',\r\n styleUrl: './chip-input-autocomplete.component.css',\r\n imports: [MatFormField, AsyncPipe, FormsModule, ReactiveFormsModule, MatAutocompleteModule, MatIcon, MatOption, MatChipsModule, MatLabel]\r\n})\r\nexport class BaseMatChipComponent implements OnInit, OnDestroy {\r\n\r\n // Все элементы\r\n @Input() items$: BehaviorSubject<ChipItem[]> = new BehaviorSubject<ChipItem[]>([]);\r\n // Выбранные элементы, ключи (ChipItem.value)\r\n @Input() selectedItems$: Observable<string[]> = new Observable<string[]>();\r\n // Заголовок\r\n @Input() title: string = '';\r\n // Событие изменения выбранных элементов\r\n @Output() selectedItemsChange = new EventEmitter<string[]>();\r\n\r\n @ViewChild('input') input: ElementRef<HTMLInputElement> | undefined;\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n inputCtrl = new FormControl();\r\n filteredItems$: Observable<ChipItem[]> | undefined;\r\n selectedItems: ChipItem[] = [];\r\n // Все элементы\r\n items: ChipItem[] = [];\r\n\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n this.subscription = this.items$.subscribe(data => {\r\n // console.log('ITEMS$ data', data);\r\n this.items = data;\r\n\r\n if (this.items.length > 0) {\r\n this.filteredItems$ = this.inputCtrl.valueChanges.pipe(\r\n startWith(null),\r\n map(item => (item ? this._filter(item) : this.items.slice())),\r\n );\r\n\r\n const subs = this.selectedItems$.subscribe(items => {\r\n // console.log('ITEMS', items);\r\n if (items)\r\n this.selectedItems = this.items.filter(s => items.includes(s.value));\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n }\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n remove(value: string): void {\r\n this.selectedItems = [...this.selectedItems];\r\n const index = this.selectedItems.map(i => i.value).indexOf(value);\r\n if (index >= 0) {\r\n this.selectedItems.splice(index, 1);\r\n this.selectedItemsChange.emit(this.selectedItems.map(i => i.value));\r\n }\r\n }\r\n\r\n selected(event: MatAutocompleteSelectedEvent): void {\r\n this.selectedItems = [...this.selectedItems];\r\n const item = this.items.find(s => s.value == event.option.value)\r\n if (item) {\r\n this.selectedItems.push(item);\r\n }\r\n this.selectedItemsChange.emit(this.selectedItems.map(i => i.value));\r\n if (this.input)\r\n this.input.nativeElement.value = '';\r\n this.inputCtrl.setValue(null);\r\n }\r\n\r\n private _filter(value: string): ChipItem[] {\r\n const filterValue = value.toLowerCase();\r\n return this.items.filter(item => item.viewValue.toLowerCase().includes(filterValue));\r\n }\r\n\r\n onCloseClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n this.selectedItemsChange.emit([]);\r\n }\r\n}\r\n","<mat-form-field class=\"chip-list\" appearance=\"fill\">\r\n <mat-label>{{ title }}</mat-label>\r\n <mat-chip-grid #chipList aria-label=\"'Выбор '+title\">\r\n @for (item of selectedItems; track item) {\r\n <mat-chip-row color=\"primary\"\r\n (removed)=\"remove(item.value)\">\r\n {{ item.viewValue }}\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input\r\n #input\r\n [placeholder]=\"'Введите '+title+'...'\"\r\n [formControl]=\"inputCtrl\"\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n >\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\r\n @for (item of filteredItems$ | async; track item) {\r\n <mat-option [value]=\"item.value\"\r\n [disabled]=\"(selectedItems$ | async)?.includes(item.value)\">\r\n {{ item.viewValue }}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n @if (selectedItems.length>0) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onCloseClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n</mat-form-field>\r\n","import moment from \"moment\";\r\n\r\nexport interface DateRange {\r\n begin: string;\r\n end: string;\r\n}\r\n\r\nexport function dateFormat(date: Date): string {\r\n if (date)\r\n return moment(date).format(\"YYYY-MM-DD\")\r\n else\r\n return '';\r\n}\r\n","// See the Moment.js docs for the meaning of these formats:\r\n// https://momentjs.com/docs/#/displaying/format/\r\nexport const MY_FORMATS = {\r\n parse: {\r\n dateInput: 'DD.MM.YYYY',\r\n },\r\n display: {\r\n dateInput: 'DD.MM.YYYY',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n };","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { MatDatepickerToggle, MatDateRangeInput, MatDateRangePicker, MatEndDate, MatStartDate } from '@angular/material/datepicker';\r\nimport { MatError, MatFormField, MatLabel, MatSuffix } from '@angular/material/form-field';\r\nimport 'moment/locale/ru';\r\nimport { Subject, BehaviorSubject, Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\nimport { dateFormat, DateRange, MY_FORMATS } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-date-range-filter',\r\n templateUrl: './date-range-filter.component.html',\r\n styleUrls: ['./date-range-filter.component.scss'],\r\n imports: [MatFormField, MatLabel, MatDateRangeInput, FormsModule, ReactiveFormsModule, MatStartDate, MatEndDate,\r\n MatDatepickerToggle, MatSuffix, MatDateRangePicker, MatError],\r\n providers: [\r\n { provide: MAT_DATE_LOCALE, useValue: 'ru' },\r\n { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\r\n ]\r\n})\r\nexport class DateRangeFilterComponent implements OnInit, OnDestroy {\r\n @Input() label: string = '';\r\n @Input() dateRange$: BehaviorSubject<DateRange> = new BehaviorSubject<DateRange>(<DateRange>{ begin: '', end: '' });\r\n // eslint-disable-next-line no-magic-numbers\r\n @Input() minDate: Date = new Date(2020, 0, 1);\r\n @Input() clearFilter$: Subject<boolean> = new Subject<boolean>();\r\n @Input() required: boolean = false;\r\n @Output() dateRangeChange: EventEmitter<DateRange> = new EventEmitter<DateRange>();\r\n\r\n form: FormGroup;\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n this.form = new FormGroup({\r\n begin: new FormControl(),\r\n end: new FormControl(),\r\n });\r\n }\r\n\r\n\r\n\r\n ngOnInit() {\r\n this.subscription = this.dateRange$.subscribe((value: DateRange) => {\r\n console.log(value);\r\n if (this.form) {\r\n this.form.controls['begin'].setValue(value.begin ? new Date(value.begin) : null);\r\n this.form.controls['end'].setValue(value.end ? new Date(value.begin) : null);\r\n }\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(this.form.value));\r\n });\r\n\r\n if (this.required) {\r\n this.form.controls['begin'].addValidators(Validators.required);\r\n this.form.controls['end'].addValidators(Validators.required);\r\n }\r\n\r\n // подписка на изменение периода\r\n this.form.valueChanges\r\n .pipe(\r\n // eslint-disable-next-line no-magic-numbers\r\n debounceTime(500),\r\n distinctUntilChanged()\r\n )\r\n .subscribe({\r\n next: range => {\r\n if (this.required) {\r\n if (range.begin && range.end) {\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(range));\r\n }\r\n } else {\r\n this.dateRangeChange.emit(this.rangeToDateDateRange(range));\r\n }\r\n }\r\n });\r\n\r\n const subs = this.clearFilter$.subscribe(() => {\r\n this.form.reset();\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n private rangeToDateDateRange(range: Partial<{ begin: Date; end: Date }>): DateRange {\r\n return {\r\n begin: range.begin ? dateFormat(range.begin) : '',\r\n end: range.end ? dateFormat(range.end) : ''\r\n };\r\n }\r\n\r\n}\r\n","<mat-form-field appearance=\"fill\">\n <mat-label>{{label}}</mat-label>\n <mat-date-range-input\n [rangePicker]=\"picker\"\n [formGroup]=\"form\"\n [min]=\"minDate\">\n <input matStartDate formControlName=\"begin\" placeholder=\"Дата начала\">\n <input matEndDate formControlName=\"end\" placeholder=\"Дата окончания\">\n </mat-date-range-input>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n <mat-error>Укажите период</mat-error>\n</mat-form-field>\n\n","export enum DialogAction {\r\n Add = 'Добавить',\r\n Edit = 'Изменить',\r\n Delete = 'Удалить',\r\n None = ''\r\n }","import { AsyncPipe } from '@angular/common';\r\nimport { Component, OnDestroy } from '@angular/core';\r\nimport { MatAnchor } from '@angular/material/button';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatDivider } from '@angular/material/divider';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { Router, RouterLink } from '@angular/router';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\nimport { AuthService, UserService } from '../../auth';\r\nimport { SafePipe } from '../../pipes';\r\nimport { AvatarService } from '../../services';\r\nimport { DialogComponent } from '../dialog';\r\n\r\n@Component({\r\n selector: 'ngx-uik-navbar',\r\n templateUrl: 'navbar.html',\r\n styleUrls: ['./navbar.scss'],\r\n imports: [RouterLink, MatAnchor, MatMenuTrigger, MatMenu, MatMenuItem, MatDivider, MatIcon, MatTooltip,\r\n AsyncPipe, SafePipe]\r\n})\r\nexport class NavBarComponent implements OnDestroy {\r\n loggedIn$: BehaviorSubject<boolean>;\r\n roles$: BehaviorSubject<string[]>;\r\n fioUser = '';\r\n photoURL: string = '';\r\n\r\n subscription: Subscription | undefined;\r\n\r\n constructor(private authService: AuthService,\r\n userService: UserService,\r\n private avatarService: AvatarService,\r\n private dialog: MatDialog,\r\n private router: Router,\r\n ) {\r\n this.loggedIn$ = this.authService.loggedIn$;\r\n this.roles$ = this.authService.roles$;\r\n\r\n this.fioUser = '';\r\n\r\n this.subscription = this.loggedIn$.subscribe({\r\n next: (value: boolean) => {\r\n if (value) {\r\n if (userService.userData) {\r\n if (userService.userData.lastName && userService.userData.firstName) {\r\n this.fioUser = userService.userData.lastName + ' ' + userService.userData.firstName;\r\n }\r\n if (userService.userData.idHuman) {\r\n // Аватар сотрудника.\r\n const subs = this.avatarService.getAvatarById(Number(userService.userData.idHuman))\r\n .subscribe((image: ArrayBuffer) => {\r\n if (image) {\r\n const blob = new Blob([image], { \"type\": \"image/jpeg\" });\r\n this.photoURL = URL.createObjectURL(blob);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n logout() {\r\n this.authService.logout(this.router.url);\r\n }\r\n\r\n openDialog(): void {\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n width: '400px',\r\n data: {\r\n id: 'logout',\r\n title: 'Подтверждение',\r\n message: 'Вы хотите выйти?',\r\n btnNoTitle: 'Отмена',\r\n btnYesTitle: 'Выйти'\r\n }\r\n });\r\n\r\n const subs = dialogRef.afterClosed().subscribe((id: any) => {\r\n if (id) {\r\n this.logout();\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n\r\n}\r\n","@if (loggedIn$ | async) {\r\n <nav class=\"ngx-uik-navbar-header\">\r\n \r\n <ng-content></ng-content>\r\n\r\n <div class=\"flex-spacer\"></div>\r\n \r\n @if ((loggedIn$ | async) === false || !photoURL) {\r\n <mat-icon [matTooltip]=\"(roles$ | async)?.join(',')||''\">account_circle</mat-icon>\r\n }\r\n @if ((loggedIn$ | async) && photoURL) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"photoURL | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser\"\r\n [matTooltip]=\"(roles$ | async)?.join(',')||''\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"(roles$ | async)?.join(',') || ''\">\r\n {{ fioUser }}\r\n </span>\r\n\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">Выйти <mat-icon>logout</mat-icon></a>\r\n </nav>\r\n}","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ngx-uik-not-found',\r\n templateUrl: './not-found.component.html',\r\n styleUrls: ['./not-found.component.css'],\r\n standalone: true\r\n})\r\nexport class NotFoundComponent {\r\n\r\n constructor() {\r\n }\r\n\r\n}\r\n","<div class=\"center\">\r\n <h3 class=\"mat-display-1\">Страница не найдена</h3>\r\n</div>\r\n","import { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocompleteModule, MatOption } from '@angular/material/autocomplete';\r\nimport { MatError, MatFormField, MatHint, MatLabel } from '@angular/material/form-field';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, map, startWith } from 'rxjs/operators';\r\n\r\nimport { SelectItem } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-select-autocomplete-with-virtual-scroll',\r\n templateUrl: './select-autocomplete-with-virtual-scroll.component.html',\r\n styleUrl: './select-autocomplete-with-virtual-scroll.component.css',\r\n imports: [FormsModule, ReactiveFormsModule, MatAutocompleteModule, MatHint, MatError, MatOption, MatIcon,\r\n MatFormField, ScrollingModule, MatInput, MatLabel]\r\n})\r\nexport class BaseSelectAutocompleteWithVirtualScrollComponent implements OnInit, OnDestroy {\r\n // https://stackblitz.com/edit/autocomplete-with-virtual-scroll-dc9u2g\r\n\r\n // Все элементы\r\n @Input() items$: BehaviorSubject<SelectItem[]> = new BehaviorSubject<SelectItem[]>([]);\r\n // Выбранный элемент\r\n @Input() selectedItem$: BehaviorSubject<SelectItem | undefined> = new BehaviorSubject<SelectItem | undefined>(undefined);\r\n // Заголовок\r\n @Input() title: string = '';\r\n // Видимость\r\n @Input() isVisible: boolean = true;\r\n // Обязательность\r\n @Input() isRequired: boolean = false;\r\n // Доступность\r\n @Input() isDisabled: boolean = false;\r\n // Доступность\r\n @Input() width: string = '200';\r\n // Событие изменения выбранного элемента\r\n @Output() selectedItemChange = new EventEmitter<string>();\r\n\r\n public height: string = '200px';\r\n // input элемент\r\n inputCtrl = new FormControl();\r\n // отфильтрованные (отображаемые) элементы\r\n filteredItems$: BehaviorSubject<SelectItem[]> = new BehaviorSubject<SelectItem[]>([]);\r\n\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n //console.log('isVisible = ', this.isVisible);\r\n //console.log('isDisabled = ', this.isDisabled);\r\n\r\n this.subscription = this.items$.subscribe(data => {\r\n console.log('ITEMS$ data', data);\r\n console.log('onLoad: this.selectedItem$.value =', this.selectedItem$.value);\r\n this.filteredItems$.next(data);\r\n if (this.selectedItem$.value)\r\n this.inputCtrl.setValue(this.selectedItem$.value);\r\n // if (this.items.length > 0) {\r\n // this.filteredItems$ = this.inputCtrl.valueChanges.pipe(\r\n // startWith(null),\r\n // map(item => (item ? this._filter(item) : this.items.slice())),\r\n // );\r\n\r\n const subs = this.selectedItem$.subscribe(item => {\r\n console.log('ITEM =', item);\r\n this.inputCtrl.setValue(item);\r\n // if (item)\r\n // this.selectedItems = this.items.filter(s => items.includes(s.value));\r\n });\r\n this.subscription?.add(subs);\r\n });\r\n\r\n // Listen for changes to the input\r\n const subs = this.inputCtrl.valueChanges\r\n .pipe(\r\n startWith(''),\r\n // eslint-disable-next-line no-magic-numbers\r\n debounceTime(500),\r\n distinctUntilChanged(),\r\n // Note: If the option value is bound to object, after selecting the option\r\n // Note: the value will change from string to {}. We want to perform search\r\n // Note: only when the type is string (no match)\r\n //filter(q => typeof q === 'string'),\r\n //tap((v) => console.log('v=', v)),\r\n map((value) => {\r\n // Filter the options\r\n if (typeof value === 'undefined') {\r\n this.filteredItems$.next(this.items$.value);\r\n } else {\r\n if (typeof value !== 'object') {\r\n console.log('v1=', value);\r\n this.filteredItems$.next(\r\n this.items$.value.filter(option =>\r\n option.viewValue\r\n .toLowerCase()\r\n .includes(value.toLowerCase())\r\n )\r\n );\r\n } else {\r\n // typeof value === 'object'\r\n console.log('v2=', value);\r\n if (value) {\r\n // this.predmet = value;\r\n this.filteredItems$.next(\r\n this.items$.value.filter((option) =>\r\n (option.viewValue)\r\n .toLowerCase()\r\n .includes(value.viewValue.toLowerCase())\r\n )\r\n );\r\n } else {\r\n this.filteredItems$.next(this.items$.value);\r\n }\r\n }\r\n }\r\n // Recompute how big the viewport should be.\r\n // eslint-disable-next-line no-magic-numbers\r\n if (this.filteredItems$.value.length < 4) {\r\n // eslint-disable-next-line no-magic-numbers\r\n this.height = this.filteredItems$.value.length * 50 + 'px';\r\n } else {\r\n this.height = '200px';\r\n }\r\n console.log('update filteredItems$.value=', this.filteredItems$.value);\r\n })\r\n )\r\n .subscribe();\r\n this.subscription?.add(subs);\r\n\r\n if (this.isDisabled) {\r\n this.inputCtrl.disable();\r\n } else {\r\n this.inputCtrl.enable();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n onSelectedItemChange(item: any) {\r\n console.log(\"onSelectedItemChange, item=\", item);\r\n // this.selectedItem$.next(item);\r\n this.selectedItemChange.emit(item);\r\n }\r\n\r\n onClearClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n this.inputCtrl.setValue(\"\");\r\n }\r\n\r\n displayWithFn(lookup: any) {\r\n return lookup\r\n ? lookup.viewValue\r\n : null;\r\n }\r\n\r\n}\r\n","@if (isVisible) {\r\n <mat-form-field [style.width.px]=\"width\">\r\n <mat-label>{{title}}</mat-label>\r\n <input type=\"text\"\r\n [placeholder]=title\r\n aria-label=\"Number\"\r\n matInput\r\n (ngModelChange)=\"onSelectedItemChange($event)\"\r\n [formControl]=\"inputCtrl\"\r\n [matAutocomplete]=\"auto\"\r\n [required]=\"isRequired ? 'required' : ''\"\r\n >\r\n @if (!isDisabled && selectedItem$.value) {\r\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onClearClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayWithFn\" showPanel=\"true\">\r\n <cdk-virtual-scroll-viewport class=\"autocomplete-test-viewport\" [style.height]=\"height\" itemSize=\"25\">\r\n <mat-option *cdkVirtualFor=\"let option of filteredItems$\" [value]=\"option\" class=\"autocomplete-item\">\r\n {{option.viewValue}}\r\n </mat-option>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n @if (inputCtrl.invalid) {\r\n <mat-error>Введите {{title}}</mat-error>\r\n }\r\n @if (!inputCtrl.value) {\r\n <mat-hint>Начните вводить ...</mat-hint>\r\n }\r\n </mat-form-field>\r\n}","import { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\nimport { AsyncPipe } from \"@angular/common\";\r\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { MatOptgroup, MatOption } from '@angular/material/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatFormField, MatLabel, MatSelect } from '@angular/material/select';\r\nimport { BehaviorSubject, Observable, Subscription } from \"rxjs\";\r\n\r\nimport { SelectGroup } from './models';\r\n\r\n@Component({\r\n selector: 'ngx-uik-select-with-group',\r\n templateUrl: './select-with-group.component.html',\r\n styleUrls: ['./select-with-group.component.css'],\r\n imports: [FormsModule, ReactiveFormsModule, MatIcon, MatOption, MatOptgroup, MatSelect, MatFormField, MatLabel,\r\n AsyncPipe]\r\n})\r\nexport class BaseSelectWithGroupComponent implements OnInit, OnDestroy {\r\n\r\n // Все группы\r\n @Input() groups$: BehaviorSubject<SelectGroup[]> = new BehaviorSubject<SelectGroup[]>([]);\r\n // Выбранные элементы, ключи (BaseSelectItem.value)\r\n @Input() selectedItems$: Observable<string[]> = new Observable<string[]>();\r\n // Заголовок\r\n @Input() title: string = '';\r\n // Событие изменения выбранных элементов\r\n @Output() selectedItemsChange = new EventEmitter<string[]>();\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n control = new FormControl<number[]>([]);\r\n\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.groups$.subscribe(data => {\r\n if (data.length > 0) {\r\n this.subscription = this.selectedItems$.subscribe(items => {\r\n this.control.setValue(items.map(i => Number(i)));\r\n });\r\n }\r\n });\r\n }\r\n \r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n selectionChange($event: any) {\r\n this.selectedItemsChange.emit($event.value.map((i: number) => i.toString()));\r\n }\r\n\r\n onClick($event: MouseEvent) {\r\n $event.stopPropagation();\r\n // this.control.setValue('');\r\n this.selectedItemsChange.emit([]);\r\n }\r\n}\r\n","<mat-form-field class=\"select-with-group\" appearance=\"fill\">\r\n <mat-label>{{ title }}</mat-label>\r\n <mat-select [formControl]=\"control\" (selectionChange)=\"selectionChange($event)\" multiple>\r\n @for (group of (groups$ | async); track group) {\r\n <mat-optgroup [label]=\"group.name\">\r\n @for (item of group.items; track item) {\r\n <mat-option [value]=\"item.value\" >\r\n {{item.viewValue}}\r\n </mat-option>\r\n }\r\n </mat-optgroup>\r\n }\r\n\r\n </mat-select>\r\n @if (control.value && control.value!.length > 0) {\r\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"onClick($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n</mat-form-field>\r\n","import { SelectionModel } from '@angular/cdk/collections';\r\nimport { AfterViewInit, Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, inject } from '@angular/core';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\nimport { MatDivider } from '@angular/material/divider';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuContent, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, MatSortHeader } from '@angular/material/sort';\r\nimport {\r\n MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef,\r\n MatNoDataRow, MatRow, MatRowDef, MatTable, MatTableDataSource\r\n} from '@angular/material/table';\r\nimport { RouterLink } from '@angular/router';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\n\r\nimport { AuthService } from '../../auth';\r\nimport { IColumnOptions } from './models/column-options.interface';\r\nimport { IContextMenuOptions } from './models/context-menu-options.interface';\r\nimport { IPageState, ISortState, ITableState } from './table.state';\r\n\r\n\r\n@Component({\r\n selector: 'ngx-uik-table',\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.css'],\r\n imports: [MatTable, MatSort, MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCheckbox, MatCellDef, MatCell,\r\n MatSortHeader, MatIcon, RouterLink, MatNoDataRow, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow,\r\n MatMenuTrigger, MatMenu, MatMenuContent, MatDivider, MatMenuItem, MatPaginator]\r\n})\r\nexport class TableComponent<T> implements OnInit, AfterViewInit, OnDestroy {\r\n /** Отображаемые данные. */\r\n @Input() data$ = new BehaviorSubject<T[]>([]);\r\n /** Настройки колонок. */\r\n @Input() columnOptions: IColumnOptions[] = [];\r\n /** Количество записе. */\r\n @Input() length$: BehaviorSubject<number> = new BehaviorSubject<number>(0);\r\n /** Состояние сортировки, пагинации. */\r\n @Input() tableState: ITableState = <ITableState>{};\r\n /** Разрешен выбор нескольких строк. */\r\n @Input() allowMultiSelect = false;\r\n /** Ссылка на страницу в приложении */\r\n @Input() rowRouterLinkField = '';\r\n /** Список элементов контекстного меню. */\r\n @Input() opt: IContextMenuOptions<T>[] = [];\r\n /** Роли которым разрешено отправлять событие rowDoubleClicked при двойном щелчке мышью. */\r\n @Input() rolesDblClickedEvent: string[] = [];\r\n\r\n /** */\r\n @Output() pageStateChange = new EventEmitter<IPageState>();\r\n /** */\r\n @Output() sortStateChange = new EventEmitter<ISortState>();\r\n /** */\r\n @Output() selectionChange = new EventEmitter<T[]>();\r\n /** */\r\n @Output() rowDoubleClicked = new EventEmitter<T>();\r\n\r\n @ViewChild(MatSort) sort: MatSort | undefined;\r\n @ViewChild(MatPaginator) paginator: MatPaginator | undefined;\r\n @ViewChild(MatMenuTrigger) contextMenu: MatMenuTrigger | undefined;\r\n\r\n /** Выбранная строка, для которого будет показываться меню при нажатии правой кнопки мыши. */\r\n itemForMenu: T | undefined;\r\n /** Позиция в которой отображается контекстное меню. */\r\n contextMenuPosition = { x: '0px', y: '0px' };\r\n\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageIndex = 0;\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultPageSize = 10;\r\n\r\n /** Источник данных для отображения. */\r\n dataSource = new MatTableDataSource<T>();\r\n\r\n /** Выбранные записи. */\r\n selection: SelectionModel<T> = new SelectionModel<T>();\r\n\r\n /** Список отображаемых колонок (формируется из @columnOptions). */\r\n displayedColumns: string[] | undefined;\r\n\r\n // DI\r\n protected authService = inject(AuthService);\r\n\r\n // Разрешено ли отправлять событие rowDoubleClicked при двойном щелчке мышью.\r\n dblClickedEventEnable = true;\r\n\r\n subscription: Subscription | undefined;\r\n\r\n constructor() {\r\n // получить права пользователя\r\n this.subscription = this.authService.roles$.subscribe((userRoles) => {\r\n this.dblClickedEventEnable = !this.authService.isHideElement(this.rolesDblClickedEvent, userRoles);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.displayedColumns = ['select'].concat(this.columnOptions?.filter(c => !c.hide).map((item) => item.name) || []);\r\n\r\n const subs = this.data$.subscribe(data => {\r\n this.dataSource.data = data;\r\n\r\n // сохранить выделенные строки, если они все еще есть в данных\r\n const selected = this.selection.selected;\r\n this.selection.clear();\r\n data.filter(v => selected.map(s => JSON.stringify(s)).includes(JSON.stringify(v))).map(d => {\r\n this.selection.select(d);\r\n });\r\n });\r\n this.subscription?.add(subs);\r\n\r\n // пересоздаем, т.к. параметр allowMultiSelect появляется только сейчас\r\n this.selection = new SelectionModel<T>(this.allowMultiSelect);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n // подписи элементов управления пагинатора (MatPaginatorIntl)\r\n if (this.paginator) {\r\n this.paginator._intl.itemsPerPageLabel = 'Записей на странице';\r\n this.paginator._intl.firstPageLabel = 'Первая страница';\r\n this.paginator._intl.previousPageLabel = 'Предыдущая страница';\r\n this.paginator._intl.nextPageLabel = 'Следующая страница';\r\n this.paginator._intl.lastPageLabel = 'Последняя страница';\r\n\r\n // изменение пагинации\r\n const subs = this.paginator.page.subscribe(page => {\r\n this.tableState.pageSize = page.pageSize;\r\n this.tableState.pageIndex = page.pageIndex;\r\n this.pageStateChange.emit({\r\n pageIndex: page.pageIndex,\r\n pageSize: page.pageSize\r\n } as IPageState);\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n\r\n // изменение сортировки\r\n if (this.sort) {\r\n const subs = this.sort.sortChange\r\n .subscribe(sort => {\r\n this.tableState.sortActive = sort.active;\r\n this.tableState.sortDirection = sort.direction;\r\n this.sortStateChange.emit({\r\n sortActive: sort.active,\r\n sortDirection: sort.direction\r\n } as ISortState);\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n\r\n // изменение выбранных записей\r\n if (this.selection) {\r\n const subs = this.selection.changed.subscribe(change => {\r\n this.selectionChange.emit(change.source.selected);\r\n });\r\n this.subscription?.add(subs);\r\n }\r\n }\r\n\r\n\r\n /** Whether the number of selected elements matches the total number of rows. */\r\n isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.dataSource.data.length;\r\n return numSelected === numRows;\r\n }\r\n\r\n /** Selects all rows if they are not all selected; otherwise clear selection. */\r\n masterToggle() {\r\n console.log(this.selection.isMultipleSelection());\r\n if (this.isAllSelected()) {\r\n this.selection.clear();\r\n } else {\r\n this.dataSource.data.forEach(row => this.selection.select(row));\r\n }\r\n }\r\n\r\n /** При щелчке по строке. */\r\n onRowClicked(row: T) {\r\n // выделение строки при щелчке по строке\r\n if (this.selection.isSelected(row)) {\r\n this.selection.deselect(row);\r\n } else {\r\n this.selection.select(row);\r\n }\r\n }\r\n\r\n /** При двойном щелчке по строке. */\r\n onRowDblClicked(row: T) {\r\n // выделение строки при двойном щелчке по строке\r\n this.selection.clear();\r\n this.selection.select(row);\r\n if (this.dblClickedEventEnable)\r\n this.rowDoubleClicked.emit(row);\r\n }\r\n\r\n /** При вызове контекстного меню. */\r\n onContextMenu(event: MouseEvent, itemForMenu: T | undefined) {\r\n if (this.opt && this.opt.length === 0) {\r\n // если нет пунктов меню, то не показываем меню\r\n return;\r\n }\r\n event.preventDefault();\r\n this.itemForMenu = itemForMenu;\r\n this.contextMenuPosition.x = event.clientX + 'px';\r\n this.contextMenuPosition.y = event.clientY + 'px';\r\n // как это (menuData) использовать в шаблоне не понятно, поэтому использую this.itemForMenu\r\n // https://www.concretepage.com/angular-material/passing-data-to-mat-menu-angular-material\r\n if (this.contextMenu) {\r\n this.contextMenu.menuData = { itemForMenu };\r\n this.contextMenu.menu?.focusFirstItem('mouse');\r\n this.contextMenu.openMenu();\r\n }\r\n }\r\n}\r\n","<div class=\"component-container\">\r\n <div class=\"table-container\">\r\n <table mat-table [dataSource]=\"dataSource\"\r\n matSort\r\n [matSortActive]=\"tableState.sortActive || ''\"\r\n [matSortDirection]=\"tableState.sortDirection\"\r\n matSortDisableClear>\r\n\r\n <!-- Выбор строки Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n @if (allowMultiSelect) {\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n }\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n </td>\r\n <!-- <td mat-footer-cell *matFooterCellDef></td>-->\r\n </ng-container>\r\n\r\n @for (item of columnOptions; track item) {\r\n <ng-container matColumnDef={{item.name}}>\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [disabled]=\"item.titleSortDisable\">{{item.title}}</th>\r\n @if (!item.format) {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n {{element[item.name]}}\r\n </td>\r\n }\r\n @if (item.format === 'pre-wrap') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" class=\"pre-wrap\">\r\n {{element[item.name]}}\r\n </td>\r\n }\r\n @if (item.format === 'link') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n <a [href]=\"element[item.name]\" target=\"_blank\">{{element[item.name]}}</a>\r\n </td>\r\n }\r\n @if (item.format === 'linkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (element[item.name]) {\r\n <a [href]=\"element[item.name]\" target=\"_blank\">\r\n @if (item.icon) {\r\n <mat-icon>{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span class=\"material-symbols-outlined-light\">{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n }\r\n @if (item.format === 'routerLink') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n <a [routerLink]=\"[element[item.name]]\">{{element[item.name]}}</a>\r\n </td>\r\n }\r\n @if (item.format === 'routerLinkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (element[item.name]) {\r\n <a [routerLink]=\"[element[item.name]]\">\r\n @if (item.icon) {\r\n <mat-icon>{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span class=\"material-symbols-outlined-light\">{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n }\r\n @if (item.format === 'checkbox') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n <mat-checkbox [checked]=\"element[item.name] === 1\" [disabled]=\"true\"></mat-checkbox>\r\n </td>\r\n }\r\n <!-- <td mat-footer-cell *matFooterCellDef>-->\r\n <!-- </td>-->\r\n </ng-container>\r\n }\r\n\r\n <tr class=\"mat-row\" *matNoDataRow>\r\n <td class=\"mat-cell\" colspan=\"9999\">\r\n Нет данных для отображения\r\n </td>\r\n </tr>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let row;\r\n columns: displayedColumns;\" (click)=\"onRowClicked(row)\" (dblclick)=\"onRowDblClicked(row)\" class=\"element-row\"\r\n [class.selected-row]=\"selection.isSelected(row)\">\r\n <!-- [class.fact-done-row]=\"row.quantFact >= row.quantPlan\"-->\r\n </tr>\r\n <!-- <tr mat-footer-row *matFooterRowDef=\"displayedColumns\"></tr>-->\r\n </table>\r\n <div style=\"visibility: hidden; position: fixed\"\r\n [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\"\r\n [matMenuTriggerFor]=\"contextMenu\" #menuTrigger=\"matMenuTrigger\">\r\n </div>\r\n <mat-menu #contextMenu=\"matMenu\">\r\n <ng-template matMenuContent let-id=\"id\">\r\n @for (menuItem of opt; track menuItem) {\r\n @if (menuItem.title === '-' && !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (menuItem.title !== '-' && !(menuItem.hideFn ? menuItem.hideFn(itemForMenu) : menuItem.hide)) {\r\n <button mat-menu-item\r\n (click)=\"menuItem.onClickFn ? menuItem.onClickFn(itemForMenu) : ''\"\r\n (mousedown)=\"menuItem.onClickMiddleFn ? menuItem.onClickMiddleFn($event, itemForMenu, menuTrigger) : ''\"\r\n [disabled]=\"menuItem.disabledFn ? menuItem.disabledFn(itemForMenu) : menuItem.disabled\">\r\n @if (menuItem.icon) {\r\n <mat-icon>{{menuItem.icon}}</mat-icon>\r\n }\r\n @if (menuItem.symbol) {\r\n <span class=\"material-symbols-outlined-light\">{{menuItem.symbol}}</span>\r\n }\r\n {{ menuItem.title }}\r\n </button>\r\n }\r\n }\r\n </ng-template>\r\n </mat-menu>\r\n</div>\r\n\r\n\r\n<mat-paginator [length]=\"length$.value\"\r\n [pageIndex]=\"tableState.pageIndex || defaultPageIndex\"\r\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n [pageSize]=\"tableState.pageSize || defaultPageSize\"\r\n showFirstLastButtons\r\n itemsPerPageLabel=\"\"\r\n></mat-paginator>\r\n</div>\r\n","/*\r\n * Public API Surface of uikit\r\n */\r\n\r\nexport * from './auth';\r\nexport * from './base';\r\nexport * from './core';\r\nexport * from './guards';\r\nexport * from './loader';\r\nexport * from './models';\r\nexport * from './pipes';\r\nexport * from './services';\r\nexport * from './shared';\r\nexport * from './types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.Environment","i1","i3.LogService","i4.AlertService","i5.UserService","i1.AuthService","i3.LoaderService","i2.AuthService","i2","i1.UserService","i2.AvatarService","i3","i4","startWith","MatOption","MatFormField","MatLabel"],"mappings":"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"}
|