@kuzntsv/uikit 1.0.2 → 1.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.
- package/fesm2022/kuzntsv-uikit-interceptors.mjs +20 -3
- package/fesm2022/kuzntsv-uikit-interceptors.mjs.map +1 -1
- package/fesm2022/kuzntsv-uikit-ui.mjs +241 -171
- package/fesm2022/kuzntsv-uikit-ui.mjs.map +1 -1
- package/fesm2022/kuzntsv-uikit.mjs +27 -19
- package/fesm2022/kuzntsv-uikit.mjs.map +1 -1
- package/package.json +1 -1
- package/types/kuzntsv-uikit-ui.d.ts +57 -4
- package/types/kuzntsv-uikit.d.ts +3 -1
- package/ui/assets/_navbar-theme.scss +25 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kuzntsv-uikit-ui.mjs","sources":["../../ui/src/auth/components/login-form/login-form.component.ts","../../ui/src/auth/components/login-form/login-form.component.html","../../ui/src/auth/components/permit-form/permit-form.component.ts","../../ui/src/auth/components/permit-form/permit-form.component.html","../../ui/src/services/avatar.service.ts","../../ui/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.ts","../../ui/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.html","../../ui/src/shared/date-range-input/models/date-range.ts","../../ui/src/shared/date-range-input/models/date-formats.ts","../../ui/src/shared/date-range-input/date-range-input.component.ts","../../ui/src/shared/date-range-input/date-range-input.component.html","../../ui/src/shared/dialog/dialog.component.ts","../../ui/src/shared/dialog/dialog.component.html","../../ui/src/shared/dialog/models/dialog-action.ts","../../ui/src/shared/empty/empty.ts","../../ui/src/base/base-toolbar/components/base-toolbar.component.ts","../../ui/src/base/base-toolbar/components/base-toolbar.component.html","../../ui/src/base/base-classes/base-edit-dialog-data.ts","../../ui/src/base/base-classes/base-edit-class.ts","../../ui/src/base/base-classes/base-entity-action.ts","../../ui/src/base/base-classes/base-filter-class.ts","../../ui/src/base/base-classes/base-nav-bar-menu-class.ts","../../ui/src/services/local-storage-service.ts","../../ui/src/base/base-classes/base-page-class.ts","../../ui/src/base/base-classes/base-service-class.ts","../../ui/src/pipes/safe.pipe.ts","../../ui/src/pipes/time.pipe.ts","../../ui/src/pipes/truncate.pipe.ts","../../ui/src/shared/navbar/navbar.ts","../../ui/src/shared/navbar/navbar.html","../../ui/src/shared/not-found/not-found.component.ts","../../ui/src/shared/not-found/not-found.component.html","../../ui/src/shared/progress-spinner/progress-spinner.component.ts","../../ui/src/shared/select-autocomplete-with-vs/select-autocomplete-with-vs.component.ts","../../ui/src/shared/select-autocomplete-with-vs/select-autocomplete-with-vs.component.html","../../ui/src/shared/select-with-group/select-with-group.component.ts","../../ui/src/shared/select-with-group/select-with-group.component.html","../../ui/src/shared/table/table.component.ts","../../ui/src/shared/table/table.component.html","../../ui/src/services/loader.service.ts","../../ui/src/services/export.service.ts","../../ui/src/services/sse/sse.service.ts","../../ui/src/auth/components/login-page/login-page.component.ts","../../ui/src/auth/components/login-page/login-page.component.html","../../ui/src/directives/disable-if-role.directive.ts","../../ui/src/directives/hide-if-role-not.directive.ts","../../ui/src/directives/set-value.directive.ts","../../ui/src/guards/auth-guard.service.ts","../../ui/src/guards/redirect-guard.ts","../../ui/src/guards/role-guard.service.ts","../../ui/src/public-api.ts","../../ui/src/kuzntsv-uikit-ui.ts"],"sourcesContent":["\r\nimport { Component, effect, 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/authenticate';\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, \r\n MatLabel, MatInput, MatError, MatIcon, MatSuffix, MatButton]\r\n})\r\nexport class LoginFormComponent {\r\n pending = input<boolean>(false);\r\n errorMessage = input<string>('');\r\n submitted = output<Authenticate>();\r\n\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 constructor() { \r\n effect(() => {\r\n if (this.pending()) {\r\n this.form.disable();\r\n } else {\r\n this.form.enable();\r\n }\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]=\"pending()\">Войти</button>\r\n </p>\r\n\r\n </form>\r\n </mat-card-content>\r\n </mat-card>\r\n","import { Component, ElementRef, 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 readonly hidy = viewChild<ElementRef>('hidy');\r\n\r\n submitted = output<string>();\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n mouseHandling(event: MouseEvent) {\r\n this.hidy()?.nativeElement.focus();\r\n }\r\n\r\n ngOnInit() {\r\n // Обнуляем значение Input\r\n const hidy = this.hidy();\r\n if (hidy) {\r\n hidy.nativeElement.value = null;\r\n 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)\"/>","import { HttpClient } from '@angular/common/http';\r\nimport { inject, 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 private readonly http = inject(HttpClient);\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 { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { Component, effect, ElementRef, input, 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 { Observable, 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,\r\n MatChipsModule, MatLabel]\r\n})\r\nexport class BaseMatChipComponent {\r\n\r\n // Все элементы\r\n items = input<ChipItem[]>([]);\r\n // Выбранные элементы, ключи (ChipItem.value)\r\n selectedItemsInput = input<string[]>([]);\r\n // Заголовок\r\n title = input<string>('');\r\n // Событие изменения выбранных элементов\r\n selectedItemsChange = output<string[]>();\r\n\r\n readonly input = viewChild<ElementRef<HTMLInputElement>>('input');\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n inputCtrl = new FormControl();\r\n filteredItems$?: Observable<ChipItem[]>;\r\n selectedItems: ChipItem[] = [];\r\n\r\n constructor() {\r\n effect(() => {\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 });\r\n\r\n effect(() => {\r\n if (this.selectedItemsInput())\r\n this.selectedItems = this.items().filter(s => this.selectedItemsInput().includes(s.value));\r\n });\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 const inputValue = this.input();\r\n if (inputValue)\r\n inputValue.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]=\"selectedItemsInput()?.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, effect, 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 { 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-input',\r\n templateUrl: './date-range-input.component.html',\r\n styleUrls: ['./date-range-input.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 DateRangeInputComponent implements OnInit, OnDestroy {\r\n label = input<string>('');\r\n dateRange = input<DateRange>(<DateRange>{ begin: '', end: '' });\r\n // eslint-disable-next-line no-magic-numbers\r\n minDate = input<Date>(new Date(2020, 0, 1));\r\n clearInput = input<any>(null);\r\n required = input<boolean>(false);\r\n dateRangeChange = output<DateRange>();\r\n\r\n form = new FormGroup({\r\n begin: new FormControl(),\r\n end: new FormControl(),\r\n });\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.clearInput())\r\n this.form.reset();\r\n });\r\n\r\n effect(() => {\r\n const value = this.dateRange();\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\r\n ngOnInit() {\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\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\">\r\n <mat-label>{{label()}}</mat-label>\r\n <mat-date-range-input\r\n [rangePicker]=\"picker\"\r\n [formGroup]=\"form\"\r\n [min]=\"minDate()\">\r\n <input matStartDate formControlName=\"begin\" placeholder=\"Дата начала\">\r\n <input matEndDate formControlName=\"end\" placeholder=\"Дата окончания\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n <mat-error>Укажите период</mat-error>\r\n</mat-form-field>\r\n\r\n","import { Component, inject } from '@angular/core';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\n\r\nimport { DialogData } from './models';\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 readonly data = inject<DialogData>(MAT_DIALOG_DATA);\r\n readonly dialogRef = inject(MatDialogRef<DialogComponent>);\r\n\r\n constructor() {\r\n if (!this.data.title) {\r\n this.data.title = 'Подтверждение';\r\n }\r\n if (!this.data.btnNoTitle) {\r\n this.data.btnNoTitle = 'Нет';\r\n }\r\n if (!this.data.btnYesTitle) {\r\n this.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>\r\n<div mat-dialog-content>\r\n <div style=\"white-space: pre-line\">{{ data.message }}</div>\r\n</div>\r\n<div mat-dialog-actions align=\"end\">\r\n <button mat-raised-button (click)=\"onNoClick()\" cdkFocusInitial>{{ data.btnNoTitle }}</button>\r\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"data.id\">{{ data.btnYesTitle }}</button>\r\n</div>\r\n\r\n","export enum DialogAction {\r\n Add = 'Добавить',\r\n Edit = 'Изменить',\r\n Delete = 'Удалить',\r\n None = ''\r\n }","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n standalone: true,\r\n template: '' // пустой шаблон, так как гуард сразу уводит пользователя со страницы\r\n})\r\nexport class EmptyComponent {}\r\n","import {\r\n Component,\r\n inject,\r\n input,\r\n output\r\n} from '@angular/core';\r\nimport { MatIconButton } from '@angular/material/button';\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 { MatToolbar } from '@angular/material/toolbar';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { AuthService, RoleService } from '@kuzntsv/uikit';\r\nimport { IContextMenuOptions } from '../../../shared/table';\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: [\r\n MatToolbar,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatMenu,\r\n MatDivider,\r\n MatMenuTrigger,\r\n MatMenuItem,\r\n ],\r\n})\r\nexport class BaseToolbarComponent {\r\n // Роли для кнопок\r\n rolesNewBtn = input<string[]>([]);\r\n rolesEditBtn = input<string[]>([]);\r\n rolesRemoveBtn = input<string[]>([]);\r\n rolesCopyBtn = input<string[]>([]);\r\n rolesExcelBtn = input<string[]>([]);\r\n rolesCsvBtn = input<string[]>([]);\r\n rolesPdfBtn = input<string[]>([]);\r\n rolesPrintBtn = input<string[]>([]);\r\n rolesRefreshBtn = input<string[]>([]);\r\n rolesClearBtn = input<string[]>([]);\r\n\r\n // Состояния блокировки\r\n newBtnDisabled = input<boolean>(false);\r\n editBtnDisabled = input<boolean>(false);\r\n removeBtnDisabled = input<boolean>(false);\r\n copyBtnDisabled = input<boolean>(false);\r\n excelBtnDisabled = input<boolean>(false);\r\n csvBtnDisabled = input<boolean>(false);\r\n pdfBtnDisabled = input<boolean>(false);\r\n printBtnDisabled = input<boolean>(false);\r\n refreshBtnDisabled = input<boolean>(false);\r\n clearBtnDisabled = input<boolean>(false);\r\n\r\n // Тултипы\r\n newBtnTooltip = input<string>('Добавить');\r\n editBtnTooltip = input<string>('Изменить');\r\n removeBtnTooltip = input<string>('Удалить');\r\n copyBtnTooltip = input<string>('Скопировать');\r\n excelBtnTooltip = input<string>('Экспортировать в Excel');\r\n csvBtnTooltip = input<string>('Экспортировать в Csv');\r\n pdfBtnTooltip = input<string>('Экспортировать в Pdf');\r\n printBtnTooltip = input<string>('Печатать');\r\n refreshBtnTooltip = input<string>('Обновить данные');\r\n clearBtnTooltip = input<string>('Очистить фильтр');\r\n\r\n /** Список элементов контекстного меню. */\r\n newBtnOpt = input<IContextMenuOptions<string>[]>([]);\r\n\r\n // События\r\n clickedNewBtn = output();\r\n clickedEditBtn = output();\r\n clickedRemoveBtn = output();\r\n clickedCopyBtn = output();\r\n clickedExcelBtn = output();\r\n clickedCsvBtn = output();\r\n clickedPdfBtn = output();\r\n clickedPrintBtn = output();\r\n clickedRefreshBtn = output();\r\n clickedClearBtn = output();\r\n\r\n // DI\r\n protected authService = inject(AuthService);\r\n protected roleService = inject(RoleService);\r\n\r\n isShow(roles: string[]): boolean {\r\n return !this.roleService.isHideElement(roles, this.authService.roles());\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","<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 @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 </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, inject, OnDestroy } from \"@angular/core\";\r\nimport { FormGroup } from \"@angular/forms\";\r\nimport { MatDialogRef } from \"@angular/material/dialog\";\r\nimport { Subscription } from \"rxjs\";\r\n\r\nimport { Action, IEditDialogData } from \"./base-edit-dialog-data\";\r\nimport { LoaderService } from \"../../services\";\r\nimport { NotificationService } from \"@kuzntsv/uikit\";\r\n\r\n\r\n@Directive()\r\nexport abstract class BaseEditClass<T> implements OnDestroy {\r\n\r\n /** Заголовок. */\r\n public abstract title: string;\r\n /** Данные диалога. */\r\n protected abstract dialogData?: IEditDialogData<T>;\r\n /** Форма. */\r\n public abstract form?: FormGroup;\r\n /** Ссылка на диалог. */\r\n protected abstract dialogRef?: MatDialogRef<any, IEditDialogData<T> | null>;\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(NotificationService);\r\n\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n protected subscription = new Subscription();\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n onNoClick(event: MouseEvent): 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, inject, OnDestroy } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { LocalStorageService, LoaderService } from '../../services';\r\nimport { NotificationService } from '@kuzntsv/uikit';\r\n\r\n@Directive()\r\nexport class BaseFilterClass implements OnDestroy {\r\n\r\n /** Сервис для работы с LocalStorage. */\r\n protected localStorageService = inject(LocalStorageService);\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(NotificationService);\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultDebounceTime = 500;\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","import { Directive, inject, OnDestroy } from \"@angular/core\";\r\nimport { MatMenuTrigger } from \"@angular/material/menu\";\r\nimport { Router } from \"@angular/router\";\r\nimport { Subscription } from \"rxjs\";\r\n\r\n@Directive()\r\nexport class BaseNavBarMenuClass implements OnDestroy {\r\n\r\n protected subscription = new Subscription();\r\n\r\n protected router = inject(Router);\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n /** Нажата средняя кнопка (открыть ссылку в новой вкладке). */\r\n onMiddleClick(event: MouseEvent, 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 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 { Directive, OnDestroy, inject, signal } 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 { Subject, Subscription, forkJoin, map, switchMap, tap } from 'rxjs';\r\n\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 { ObjectKeys, SortDirection, fnCbType, fnGetCountType, fnGetDataType, fnMapEntityType, fnType } from '../../types/types';\r\nimport { Action, IEditDialogData } from './base-edit-dialog-data';\r\n\r\nimport { LoaderService } from '../../services';\r\nimport { UIKIT_NOTIFICATION_TOKEN } from '@kuzntsv/uikit';\r\n\r\n\r\n@Directive()\r\nexport class BasePageClass<T> implements OnDestroy {\r\n\r\n protected dialog = inject(MatDialog);\r\n\r\n /** Данные для табличного компонента. */\r\n data = signal<T[]>([]);\r\n /** Количество записей по фильтру. */\r\n length = signal<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 dialogEditWidth = 'auto';\r\n dialogRemoveWidth = '400px';\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 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 clearFilter: any = 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 /** Сервис для работы с LocalStorage. */\r\n protected localStorageService = inject(LocalStorageService);\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(UIKIT_NOTIFICATION_TOKEN);\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n this.tableState = {\r\n sortActive: this.localStorageService.getData(this.constructor.name + 'SortActive') || '',\r\n sortDirection: (this.localStorageService.getData(this.constructor.name + 'SortDirection') || '') as SortDirection,\r\n pageIndex: Number(this.localStorageService.getData(this.constructor.name + 'PageIndex')) || this.defaultPageIndex,\r\n pageSize: Number(this.localStorageService.getData(this.constructor.name + 'PageSize')) || this.defaultPageSize\r\n };\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n subscribeToLoadData( fnGetData: fnGetDataType<T>, fnGetCount: fnGetCountType<T>, fnMapEntity?: fnMapEntityType<T>) {\r\n // отменять стримы, созданные ранее\r\n const subs = this.loadData$\r\n .pipe(\r\n tap(() => this.loaderService.show()),\r\n switchMap(() => fnGetData()),\r\n map(v => fnMapEntity ? v.map(fnMapEntity()) : v),\r\n )\r\n .subscribe({\r\n next: (response: T[]) => {\r\n this.data.set(response);\r\n this.loaderService.hide();\r\n },\r\n error: (error: any) => {\r\n this.loaderService.hide();\r\n console.log(error);\r\n this.notificationService?.error('Произошла ошибка: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n\r\n const subs2 = this.loadLength$\r\n .pipe(\r\n switchMap(() => fnGetCount())\r\n )\r\n .subscribe({\r\n next: (response: number) => {\r\n this.length.set(response);\r\n },\r\n error: (error: any) => {\r\n console.log(error);\r\n this.notificationService.error('Произошла ошибка: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs2);\r\n\r\n // загрузить данные и количество записей\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n onPageChange(pageState: IPageState) {\r\n this.tableState.pageIndex = pageState.pageIndex;\r\n this.tableState.pageSize = pageState.pageSize;\r\n this.localStorageService.saveData(this.constructor.name + 'PageIndex', pageState.pageIndex.toString());\r\n this.localStorageService.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.tableState.sortActive = sortState.sortActive;\r\n this.tableState.sortDirection = sortState.sortDirection;\r\n this.localStorageService.saveData(this.constructor.name + 'SortActive', sortState.sortActive);\r\n this.localStorageService.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 /** Событие изменение выбранных записей. */\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 /** Событие двойной клик. */\r\n onRowDoubleClicked() {\r\n this.editEvent();\r\n }\r\n\r\n /** Событие создание. */\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.notificationService.success('Запись добавлена.');\r\n }\r\n this.afterSaveOnNewEvent(callback.bind(this), obj, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.notificationService?.success('Запись добавлена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService.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.notificationService.warning('Действие не доступно.');\r\n }\r\n }\r\n\r\n /** Событие редактирование. */\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.notificationService.success('Запись изменена.');\r\n }\r\n this.afterSaveOnEditEvent(callback.bind(this), result.entity, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.notificationService.success('Запись изменена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService.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.notificationService.warning('Действие не доступно.');\r\n }\r\n }\r\n }\r\n\r\n /** Событие удаление. */\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 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.notificationService.success('Выбранные записи удалены.');\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService?.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 /** Событие очистки фильтра. */\r\n clearEvent() {\r\n this.clearFilter$.next(null);\r\n this.clearFilter = {};\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 // Action в таблице: При щелчке ПКМ открыть в новой вкладке.\r\n protected onActionMiddleButton(baseUrl: string, queryParamName?: string, queryParamValue?: string) {\r\n return ($event: MouseEvent, item: T) => {\r\n // Нажата средняя кнопка (в новой вкладке).\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if ($event.button === 1) {\r\n //$event.preventDefault();\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 abstract class BaseServiceClass<T extends BaseClass> {\r\n abstract baseRoute: string;\r\n abstract entityType: any;\r\n\r\n protected countRoute = 'count';\r\n\r\n protected pageIndexParam = 'page';\r\n protected pageSizeParam = 'limit';\r\n protected sortColumnParam = 'column';\r\n protected directionParam = 'direction';\r\n\r\n protected http = inject(HttpClient);\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 + 1)\r\n // переход от индекса к номеру страницы\r\n params = params.append(this.pageIndexParam, pageIndex + 1);\r\n if (pageSize)\r\n params = params.append(this.pageSizeParam, pageSize);\r\n if (sortColumn)\r\n params = params.append(this.sortColumnParam, sortColumn);\r\n if (direction)\r\n params = params.append(this.directionParam, direction);\r\n return params;\r\n }\r\n}\r\n","import { inject, 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 private readonly sanitizer = inject(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';\r\n\r\n@Pipe({\r\n name: 'time'\r\n})\r\nexport class TimePipe implements PipeTransform {\r\n\r\n transform(value: number): string {\r\n // const hour = Math.abs(value) >= 60 ? Math.round(value / 60) + 'ч.' : '';\r\n // const minute = ' ' + Math.abs(value % 60) + 'м.';\r\n // return value === 0 ? '0' : hour + ' ' + minute;\r\n\r\n const hour = Math.abs(value) >= 60 ? Math.floor(Math.abs(value) / 60).toString().padStart(2,'0') : '00';\r\n const minute = Math.abs(value % 60).toString().padStart(2,'0');\r\n const time = hour + ':' + minute;\r\n return value < 0 ? '-' + time : time;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'truncate'\r\n})\r\nexport class TruncatePipe implements PipeTransform {\r\n // Usage:\r\n // {{ str | truncate:[20] }} // or\r\n // {{ str | truncate:[20, '...'] }} // or|\r\n transform(value: string, args: any[]): string {\r\n const limit = args.length > 0 ? parseInt(args[0], 10) : 20;\r\n const trail = args.length > 1 ? args[1] : '...';\r\n return value.length > limit ? value.substring(0, limit) + trail : value;\r\n }\r\n\r\n}\r\n","import { Component, inject, input, output } from '@angular/core';\r\nimport { MatAnchor } from '@angular/material/button';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { BaseNavBarMenuClass } from '../../base';\r\nimport { SafePipe } from '../../pipes';\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: [MatAnchor, MatIcon, MatTooltip, SafePipe]\r\n})\r\nexport class NavBarComponent extends BaseNavBarMenuClass {\r\n\r\n /** Видимость панели, когда loggedIn === false. */\r\n visibleOnLogout = input<boolean>(false);\r\n /** Видимость аватара. */\r\n visibleAvatar = input<boolean>(true);\r\n /** Видимость кнопки \"Выйти\". */\r\n visibleLogoutBtn = input<boolean>(true);\r\n\r\n /** Признак, что пользователь авторизован. */\r\n loggedIn = input<boolean>(false);\r\n /** ФИО пользователя. */\r\n fioUser = input<string>('');\r\n /** Всплывающая подсказка о пользователе. */\r\n userTooltip = input<string>('');\r\n /** URL аватара */\r\n avatarURL = input<string>('');\r\n\r\n /** Нажата кнопка \"Выйти\". */\r\n logout = output<string>();\r\n\r\n private readonly dialog = inject(MatDialog);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n onLogout() {\r\n this.logout.emit(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.onLogout();\r\n }\r\n });\r\n this.subscription.add(subs);\r\n }\r\n\r\n}\r\n","@if (visibleOnLogout() || loggedIn()) {\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 (visibleAvatar() && (loggedIn() === false || !avatarURL)) {\r\n <mat-icon [matTooltip]=\"userTooltip()\">account_circle</mat-icon>\r\n }\r\n @if (visibleAvatar() && loggedIn() && avatarURL()) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"avatarURL() | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser()\"\r\n [matTooltip]=\"userTooltip()\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"userTooltip()\">\r\n {{ fioUser() }}\r\n </span>\r\n\r\n @if (visibleLogoutBtn()) {\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">Выйти <mat-icon>logout</mat-icon></a>\r\n }\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}\r\n","<div class=\"center\">\r\n <h3 class=\"mat-display-1\">Страница не найдена</h3>\r\n</div>\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } 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\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n\r\n ngAfterViewInit() {\r\n this.cdRef.detectChanges();\r\n }\r\n}\r\n","import { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { Component, effect, input, linkedSignal, 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 { 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-vs',\r\n templateUrl: './select-autocomplete-with-vs.component.html',\r\n styleUrl: './select-autocomplete-with-vs.component.css',\r\n imports: [FormsModule, ReactiveFormsModule, MatAutocompleteModule, MatHint, MatError, MatOption, MatIcon,\r\n MatFormField, ScrollingModule, MatInput, MatLabel]\r\n})\r\nexport class BaseSelectAutocompleteWithVsComponent implements OnInit, OnDestroy {\r\n // https://stackblitz.com/edit/autocomplete-with-virtual-scroll-dc9u2g\r\n\r\n // Все элементы\r\n items = input<SelectItem[]>([]);\r\n // Выбранный элемент (входной параметр)\r\n selectedItemInput = input<SelectItem | undefined>(undefined);\r\n // Заголовок\r\n title = input<string>('');\r\n // Видимость\r\n isVisible = input<boolean>(true);\r\n // Обязательность\r\n isRequired = input<boolean>(false);\r\n // Доступность\r\n isDisabled = input<boolean>(false);\r\n // Доступность\r\n width = input<string>('200');\r\n\r\n // Выбранный элемент\r\n selectedItem = linkedSignal(() => this.selectedItemInput());\r\n // Событие изменения выбранного элемента\r\n selectedItemChange = output<string>();\r\n\r\n public height: string = '200px';\r\n // input элемент\r\n inputCtrl = new FormControl();\r\n // отфильтрованные (отображаемые) элементы\r\n filteredItems: SelectItem[] = [];\r\n\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n console.log('ITEMS =', this.items());\r\n //this.filteredItems = this.items();\r\n\r\n console.log('selectedItem =', this.selectedItemInput());\r\n if (this.items().length > 0) {\r\n console.log('filteredItems SET');\r\n this.setFileredItems(this.items());\r\n this.inputCtrl.setValue(this.selectedItemInput());\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\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 console.log('typeof value =', typeof value);\r\n\r\n if (typeof value === 'undefined') {\r\n this.setFileredItems(this.items());\r\n } else {\r\n if (typeof value !== 'object') {\r\n console.log('v1=', value);\r\n this.setFileredItems(this.items()\r\n .filter(option => option.viewValue.toLowerCase().includes(value.toLowerCase())));\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.setFileredItems(this.items()\r\n .filter((option) => option.viewValue.toLowerCase().includes(value.viewValue.toLowerCase())));\r\n console.log('v3=', value);\r\n } else {\r\n this.setFileredItems(this.items());\r\n console.log('v4=', value);\r\n }\r\n }\r\n }\r\n\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.set(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 ? lookup.viewValue : null;\r\n }\r\n\r\n private setFileredItems(items: SelectItem[]) {\r\n this.filteredItems = items;\r\n // Recompute how big the viewport should be.\r\n // eslint-disable-next-line no-magic-numbers\r\n if (items.length < 4) {\r\n // eslint-disable-next-line no-magic-numbers\r\n this.height = items.length * 50 + 'px';\r\n } else {\r\n this.height = '200px';\r\n }\r\n console.log('update filteredItems =', this.filteredItems);\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()) {\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\n\r\nimport { Component, effect, input, 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\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})\r\nexport class BaseSelectWithGroupComponent {\r\n\r\n // Все группы\r\n groups = input<SelectGroup[]>([]);\r\n // Выбранные элементы, ключи (BaseSelectItem.value)\r\n selectedItems = input<string[]>([]);\r\n // Заголовок\r\n title = input<string>('');\r\n // Событие изменения выбранных элементов\r\n selectedItemsChange = output<string[]>();\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n control = new FormControl<number[]>([]);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.groups().length > 0) {\r\n this.control.setValue(this.selectedItems().map(i => Number(i)));\r\n }\r\n });\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 onClearClick($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(); 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)=\"onClearClick($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, OnDestroy, OnInit, effect, input, linkedSignal, output, viewChild } 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, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef,\r\n MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRow, MatRowDef,\r\n MatTable, MatTableDataSource, MatTableModule\r\n} from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { RouterLink } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { IColumnOptions } from './models/column-options.interface';\r\nimport { IContextMenuOptions } from './models/context-menu-options.interface';\r\nimport { IPageState, ISortState, ITableState } from './models/table-state';\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, MatFooterRowDef, MatFooterRow,\r\n MatFooterCellDef, MatFooterCell, MatTableModule, MatTooltipModule, MatIconButton]\r\n})\r\nexport class TableComponent<T> implements OnInit, AfterViewInit, OnDestroy {\r\n /** Отображаемые данные. */\r\n data = input<T[]>([]);\r\n /** Количество записей. */\r\n length = input<number>(0);\r\n /** Настройки колонок. */\r\n columnOptions = input<IColumnOptions<T>[]>([]);\r\n /** Состояние сортировки, пагинации. */\r\n tableState = input.required<ITableState>();\r\n /** Разрешен выбор нескольких строк. */\r\n allowMultiSelect = input<boolean>(false);\r\n /** Список элементов контекстного меню. */\r\n opt = input<IContextMenuOptions<T>[]>([]);\r\n /** Отправка события rowDoubleClicked (при двойном щелчке мышью) отключена. */\r\n rowDblClickedDisable = input<boolean>(false);\r\n /** Отображать строку с итогом. */\r\n footer = input<boolean>(false);\r\n\r\n /** Изменение страницы. */\r\n pageStateChange = output<IPageState>();\r\n /** Изменение сортировки. */\r\n sortStateChange = output<ISortState>();\r\n /** Изменение выбранных записей. */\r\n selectionChange = output<T[]>();\r\n /** Двойной щелчек ЛКМ*/\r\n rowDoubleClicked = output<T>();\r\n\r\n readonly sort = viewChild(MatSort);\r\n readonly paginator = viewChild(MatPaginator);\r\n readonly contextMenu = viewChild(MatMenuTrigger);\r\n\r\n pageState = linkedSignal<IPageState>(() => {\r\n return { pageIndex: this.tableState().pageIndex, pageSize: this.tableState().pageSize };\r\n });\r\n\r\n sortState = linkedSignal<ISortState>(() => {\r\n return { sortActive: this.tableState().sortActive, sortDirection: this.tableState().sortDirection };\r\n });\r\n\r\n /** Выбранная строка, для которого будет показываться меню при нажатии правой кнопки мыши. */\r\n itemForMenu?: T;\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[];\r\n\r\n\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n this.dataSource.data = this.data();\r\n\r\n // сохранить выделенные строки, если они все еще есть в данных\r\n const selected = this.selection.selected;\r\n this.selection.clear();\r\n this.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 }\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 // пересоздаем, т.к. параметр 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 const paginator = this.paginator();\r\n if (paginator) {\r\n paginator._intl.itemsPerPageLabel = 'Записей на странице';\r\n paginator._intl.firstPageLabel = 'Первая страница';\r\n paginator._intl.previousPageLabel = 'Предыдущая страница';\r\n paginator._intl.nextPageLabel = 'Следующая страница';\r\n paginator._intl.lastPageLabel = 'Последняя страница';\r\n\r\n // изменение пагинации\r\n const subs = paginator.page.subscribe(page => {\r\n const pageState = {\r\n pageIndex: page.pageIndex,\r\n pageSize: page.pageSize\r\n } as IPageState;\r\n this.pageState.set(pageState);\r\n this.pageStateChange.emit(pageState);\r\n });\r\n this.subscription.add(subs);\r\n }\r\n\r\n // изменение сортировки\r\n const sortValue = this.sort();\r\n if (sortValue) {\r\n const subs = sortValue.sortChange\r\n .subscribe(sort => {\r\n const sortState = {\r\n sortActive: sort.active,\r\n sortDirection: sort.direction\r\n } as ISortState;\r\n this.sortState.set(sortState);\r\n this.sortStateChange.emit(sortState);\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.rowDblClickedDisable())\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 const contextMenu = this.contextMenu();\r\n if (contextMenu) {\r\n contextMenu.menuData = { itemForMenu };\r\n contextMenu.menu?.focusFirstItem('mouse');\r\n contextMenu.openMenu();\r\n }\r\n }\r\n\r\n getTotal(columnName: string) {\r\n const arr = this.dataSource.data\r\n .filter(t => typeof t[columnName as keyof T] === 'number')\r\n .map(t => t[columnName as keyof T]);\r\n if (arr.length === 0)\r\n return ''\r\n else\r\n return arr.reduce((acc, value) => acc + <number>value, 0);\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]=\"sortState().sortActive || ''\"\r\n [matSortDirection]=\"sortState().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 @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n }\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)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n {{element[item.name]}}\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footer) {\r\n <strong>{{ getTotal(item.name) }}</strong>\r\n }\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n } \r\n }\r\n @if (item.format === 'pre-wrap') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" class=\"pre-wrap\" [matTooltip]=\"item.tooltip ?? ''\">\r\n {{element[item.name]}}\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'link') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <a [href]=\"element[item.name]\" target=\"_blank\">{{element[item.name]}}</a>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'linkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <a [href]=\"element[item.name]\" target=\"_blank\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'routerLink') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <a [routerLink]=\"[element[item.name]]\">{{element[item.name]}}</a>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'routerLinkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <a [routerLink]=\"[element[item.name]]\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'checkbox') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <mat-checkbox [checked]=\"element[item.name] === 1\" [disabled]=\"true\"></mat-checkbox>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'icon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'icons') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (item.icons) {\r\n <mat-icon [class]=\"item.classList ? item.classList[element[item.name]] : ''\" \r\n [matTooltip]=\"item.tooltips ? item.tooltips[element[item.name]] : ''\">{{item.icons[element[item.name]]}}</mat-icon>\r\n } \r\n @if (item.symbols) {\r\n <span [class]=\"item.classList ? item.classList[element[item.name]] : ''\" >{{item.symbols[element[item.name]]}}</span>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'actions') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (item.actions) {\r\n <div class=\"actions-container\">\r\n @for (action of item.actions; track action) {\r\n @if (!(action.hideFn ? action.hideFn(element) : action.hide)) {\r\n <button mat-icon-button\r\n (click)=\"action.onClickFn ? action.onClickFn(element) : ''\"\r\n (mousedown)=\"action.onClickMiddleFn ? action.onClickMiddleFn($event, element) : ''\"\r\n [disabled]=\"action.disabledFn ? action.disabledFn(element) : action.disabled\"\r\n [matTooltip]=\"action.tooltip ? action.tooltip : ''\" >\r\n @if (action.icon) {\r\n <mat-icon [class]=\"action.classList ? action.classList : ''\" >{{action.icon}}</mat-icon>\r\n }\r\n @if (action.symbol) {\r\n <span [class]=\"action.classList ? action.classList : ''\" >{{action.symbol}}</span>\r\n }\r\n {{ action.title }}\r\n </button>\r\n }\r\n }\r\n </div>\r\n } \r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'image') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <img\r\n [src]=\"element[item.name]\"\r\n [alt]=\"item.imageAlt && element[item.imageAlt] ? element[item.imageAlt] : ''\"\r\n [class]=\"item.classList ? item.classList : ''\"\r\n />\r\n } \r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\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; columns: displayedColumns;\" \r\n (click)=\"onRowClicked(row)\" (dblclick)=\"onRowDblClicked(row)\" \r\n class=\"element-row\" [class.selected-row]=\"selection.isSelected(row)\">\r\n </tr>\r\n @if (footer()) {\r\n <tr mat-footer-row *matFooterRowDef=\"displayedColumns; sticky: true\"></tr>\r\n }\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 [class]=\"menuItem.classList ? menuItem.classList : ''\">{{menuItem.icon}}</mat-icon>\r\n }\r\n @if (menuItem.symbol) {\r\n <span [class]=\"menuItem.classList ? menuItem.classList : ''\">{{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()\"\r\n [pageIndex]=\"pageState().pageIndex || defaultPageIndex\"\r\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n [pageSize]=\"pageState().pageSize || defaultPageSize\"\r\n showFirstLastButtons\r\n itemsPerPageLabel=\"\"\r\n></mat-paginator>\r\n</div>\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { inject, Injectable } from '@angular/core';\r\n\r\nimport { ProgressSpinnerComponent } from '../shared';\r\n\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 private readonly overlay = inject(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 { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExportService {\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}\r\n","import { Injectable, inject, NgZone } from \"@angular/core\";\r\nimport { Observable, ReplaySubject } from \"rxjs\";\r\n\r\nimport { SseUser } from \"./models/sse-user\";\r\nimport { Topic } from \"./models/topic\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SseService<T> {\r\n\r\n private zone = inject(NgZone);\r\n\r\n private eventSource: EventSource | null = null;\r\n private isConnected = false;\r\n\r\n constructor() { }\r\n\r\n createSseEventSource(baseUrl: string, user: SseUser, topic: Topic): Observable<T> {\r\n const subject = new ReplaySubject<T>(1);\r\n\r\n // Close any existing connection\r\n this.closeSseEventSource();\r\n\r\n const topicUri = topic.getTopic(baseUrl, user);\r\n // environment.sse_url\r\n this.eventSource = new EventSource(topicUri\r\n //, {withCredentials: true}\r\n );\r\n\r\n if (this.eventSource) {\r\n this.isConnected = true;\r\n\r\n // Listen for messages\r\n this.eventSource.onmessage = (event: MessageEvent) => {\r\n console.log(event);\r\n const messageData: T = JSON.parse(event.data);\r\n this.zone.run(() => {\r\n subject.next(messageData);\r\n });\r\n };\r\n this.eventSource.onopen = () => {\r\n console.log('SSE connection opened.');\r\n };\r\n // Process error\r\n this.eventSource.onerror = (error: any) => {\r\n console.error('SSE error:', error);\r\n this.reconnectOnError(baseUrl, user, topic, subject);\r\n };\r\n }\r\n return subject.asObservable();\r\n }\r\n\r\n private reconnectOnError(baseUrl: string, user: SseUser, topic: Topic, subject: ReplaySubject<T>): void {\r\n\r\n this.closeSseEventSource();\r\n if (this.isConnected) return; // Prevent duplicate connections\r\n\r\n console.log('Reconnecting to SSE in 1 second...');\r\n setTimeout(() => {\r\n this.zone.run(() => {\r\n this.createSseEventSource(baseUrl, user, topic).subscribe(subject);\r\n });\r\n }, 1000);\r\n }\r\n\r\n closeSseEventSource(): void {\r\n if (this.eventSource) {\r\n this.eventSource.close();\r\n this.eventSource = null;\r\n this.isConnected = false;\r\n console.log('SSE Connection closed');\r\n }\r\n }\r\n}","import { Component, inject, OnDestroy, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { Authenticate } from '../../models/authenticate';\r\nimport { AuthService } from '@kuzntsv/uikit';\r\nimport { LoginFormComponent } from '../login-form/login-form.component';\r\nimport { PermitFormComponent } from '../permit-form/permit-form.component';\r\nimport { LoaderService } from '../../../services';\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\r\n private readonly authService = inject(AuthService);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly loaderService = inject(LoaderService);\r\n\r\n constructor() {\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 }\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.onSubmitError());\r\n }\r\n\r\n onSubmitPermit($event: string) {\r\n const permit = $event;\r\n this.authService.loginByPermit(permit, this.idCas);\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, effect, ElementRef, inject, input } from '@angular/core';\r\nimport { AuthService, RoleService } from '@kuzntsv/uikit';\r\n\r\n@Directive({\r\n selector: '[ngxUikDisableIfRole]',\r\n standalone: true\r\n})\r\nexport class DisableIfRoleDirective {\r\n readonly roles = input<string[]>([], { alias: 'ngxUikDisableIfRole' });\r\n\r\n private readonly el = inject(ElementRef);\r\n private readonly authService = inject(AuthService);\r\n private readonly roleService = inject(RoleService);\r\n\r\n constructor() {\r\n effect(() => {\r\n const hasRequiredRole = this.roleService.hasRoles(this.authService.roles(), this.roles());\r\n\r\n // Блокируем, если ролей НЕТ\r\n const shouldDisable = !hasRequiredRole;\r\n\r\n // 2. Безопасное управление атрибутом для любых элементов\r\n const nativeEl = this.el.nativeElement;\r\n \r\n if ('disabled' in nativeEl) {\r\n nativeEl.disabled = shouldDisable;\r\n } else {\r\n // Для элементов вроде <a>, у которых нет свойства disabled в DOM API\r\n if (shouldDisable) {\r\n nativeEl.setAttribute('disabled', 'true');\r\n } else {\r\n nativeEl.removeAttribute('disabled');\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\r\n\r\nimport { AuthService, RoleService } from '@kuzntsv/uikit';\r\n\r\n@Directive({\r\n selector: '[ngxUikHideIfRoleNot]',\r\n standalone: true\r\n})\r\nexport class HideIfRoleNotDirective {\r\n readonly roles = input<string[]>([], { alias: 'ngxUikHideIfRoleNot' });\r\n\r\n private readonly el = inject(ElementRef);\r\n private readonly authService = inject(AuthService);\r\n private readonly roleService = inject(RoleService);\r\n\r\n constructor() {\r\n effect(() => {\r\n // Элемент скрывается, если у пользователя нет ни одной роли из перереданных в \"roles\"\r\n // или в списке \"roles\" есть роль \"hideRole\".\r\n const isHide = this.roleService.isHideElement(this.roles(), this.authService.roles());\r\n \r\n // Управляем отображением. Пустая строка возвращает дефолтный CSS-стиль элемента.\r\n this.el.nativeElement.style.display = isHide ? 'none' : '';\r\n });\r\n }\r\n}\r\n","import { Directive, effect, inject, input } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[setValue]',\r\n standalone: true,\r\n})\r\nexport class SetValueDirective {\r\n readonly value = input<any>(undefined, { alias: 'setValue' });\r\n\r\n // 3. Используем опциональный inject, чтобы директива не падала, если формы нет\r\n private readonly ngControl = inject(NgControl, { optional: true });\r\n\r\n constructor() {\r\n effect(() => {\r\n // Эффект автоматически отслеживает изменение входного значения\r\n const val = this.value();\r\n\r\n if (this.ngControl?.control) {\r\n this.ngControl.control.setValue(val, { emitEvent: false });\r\n }\r\n });\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn, Router } from '@angular/router';\r\nimport { AuthService } from '@kuzntsv/uikit';\r\n\r\nexport const authGuard = (allowedRoles: string[]): CanActivateFn => {\r\n return (route, state) => {\r\n const authService = inject(AuthService);\r\n const router = inject(Router);\r\n\r\n const isLogin = authService.loggedIn();\r\n if (!isLogin) {\r\n console.log('state.url =', state.url);\r\n\r\n // Если не зарегистрирован вернуть в форму авторизации\r\n return router.createUrlTree(['/login'], { queryParams: { returnUrl: state.url } });\r\n }\r\n\r\n return isLogin;\r\n };\r\n};","import { ActivatedRouteSnapshot, CanActivateFn } from '@angular/router';\r\n\r\nexport const redirectGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\r\n const externalUrl = route.data?.['externalUrl'];\r\n \r\n if (externalUrl) {\r\n window.location.href = externalUrl;\r\n }\r\n \r\n return true;\r\n};\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn } from '@angular/router';\r\nimport { AuthService, RoleService } from '@kuzntsv/uikit';\r\n\r\nexport const roleGuard = (allowedRoles: string[]): CanActivateFn => {\r\n return (route, state) => {\r\n const authService = inject(AuthService);\r\n const roleService = inject(RoleService);\r\n\r\n // Читаем роли из Сигнала\r\n const userRoles = authService.roles();\r\n\r\n // Проверяем доступ на основе аргумента allowedRoles\r\n return roleService.hasRoles(userRoles, allowedRoles);\r\n };\r\n};","/*\r\n * Public API Surface of uikit\r\n */\r\n\r\nexport * from './auth';\r\nexport * from './base';\r\nexport * from './directives';\r\nexport * from './guards';\r\nexport * from './pipes';\r\nexport * from './services';\r\nexport * from './shared';\r\nexport * from './types';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map","startWith","i3","MatOption","MatFormField","MatLabel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkBa,kBAAkB,CAAA;AAC7B,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,mDAAC;AAC/B,IAAA,YAAY,GAAG,KAAK,CAAS,EAAE,wDAAC;IAChC,SAAS,GAAG,MAAM,EAAgB;IAElC,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;AAEF,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACrB;iBAAO;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACpB;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACtC;IACF;uGA1BW,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB/B,kzFAyDA,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,sGAAA,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,EAC5G,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,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAElD,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,OAAA,EAGrB,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY;wBAC5G,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,kzFAAA,EAAA,MAAA,EAAA,CAAA,sVAAA,CAAA,EAAA;;;MEPnD,mBAAmB,CAAA;AACrB,IAAA,IAAI,GAAG,SAAS,CAAa,MAAM,gDAAC;IAE7C,SAAS,GAAG,MAAM,EAAU;AAG5B,IAAA,aAAa,CAAC,KAAiB,EAAA;QAC7B,IAAI,CAAC,IAAI,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;IACpC;IAEA,QAAQ,GAAA;;AAEN,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI;AAC/B,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;QAC5B;IACF;AAEA;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAU,EAAA;AAClB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,aAAa,CAAC,KAAK;YAC/C,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7B;QACF;IACF;uGA/BW,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,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECThC,wbAUqE,EAAA,MAAA,EAAA,CAAA,uZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDHzD,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;kEAGzB,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA;sBAI3C,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;MEPjC,aAAa,CAAA;IACxB,SAAS,GAAG,eAAe;AAEV,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAE1C,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;IAC7F;uGAPW,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;;;MCcY,oBAAoB,CAAA;;AAG/B,IAAA,KAAK,GAAG,KAAK,CAAa,EAAE,iDAAC;;AAE7B,IAAA,kBAAkB,GAAG,KAAK,CAAW,EAAE,8DAAC;;AAExC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;IAEzB,mBAAmB,GAAG,MAAM,EAAY;AAE/B,IAAA,KAAK,GAAG,SAAS,CAA+B,OAAO,iDAAC;AAEjE,IAAA,kBAAkB,GAAa,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7C,IAAA,SAAS,GAAG,IAAI,WAAW,EAAE;AAC7B,IAAA,cAAc;IACd,aAAa,GAAe,EAAE;AAE9B,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,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,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAChE;YACH;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9F,QAAA,CAAC,CAAC;IACJ;AAEA,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;QACrE;IACF;AAEA,IAAA,QAAQ,CAAC,KAAmC,EAAA;QAC1C,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAClE,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B;QACA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACnE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE;AAC/B,QAAA,IAAI,UAAU;AACZ,YAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC/B;AAEQ,IAAA,OAAO,CAAC,KAAa,EAAA;AAC3B,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;QACvC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxF;AAEA,IAAA,YAAY,CAAC,MAAkB,EAAA;QAC7B,MAAM,CAAC,eAAe,EAAE;AACxB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;IACnC;uGAhEW,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,+pBCpBjC,s1CAmCA,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,UAAA,EAAA,IAAA,EAAa,WAAW,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,UAAA,EAAA,IAAA,EAAE,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,y1BAAE,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,EACjG,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,IAAA,EAAA,UAAA,EAAA,UAAA,EAAA,iCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,wEAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,iDADF,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;2FAGtB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAAA,OAAA,EAGlC,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,OAAO,EAAE,SAAS;wBAC5G,cAAc,EAAE,QAAQ,CAAC,EAAA,QAAA,EAAA,s1CAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA;gdAa8B,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AExB5D,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;AACO,MAAM,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,uBAAuB,CAAA;AAClC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AACzB,IAAA,SAAS,GAAG,KAAK,CAAuB,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,qDAAC;;AAE/D,IAAA,OAAO,GAAG,KAAK,CAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,mDAAC;AAC3C,IAAA,UAAU,GAAG,KAAK,CAAM,IAAI,sDAAC;AAC7B,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;IAChC,eAAe,GAAG,MAAM,EAAa;IAErC,IAAI,GAAG,IAAI,SAAS,CAAC;QACnB,KAAK,EAAE,IAAI,WAAW,EAAE;QACxB,GAAG,EAAE,IAAI,WAAW,EAAE;AACvB,KAAA,CAAC;AACF,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAEjC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACnB,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC9B,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;YAC9E;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvE,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,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;QAC9D;;QAGA,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,EAAE;oBACnB,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;AAC5B,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;oBAC7D;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAC7D;YACF;AACD,SAAA,CAAC;IACN;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACnC;AAEQ,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;IACH;uGAnEW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EALvB;AACT,YAAA,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC5C,YAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE;SACpD,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBH,8wBAcA,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,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,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,EAAE,WAAW,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,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,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,EAAA,QAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7G,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,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAXnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,OAAA,EAG3B,CAAC,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,UAAU;AAC7G,wBAAA,mBAAmB,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAA,SAAA,EACpD;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,8wBAAA,EAAA,MAAA,EAAA,CAAA,qCAAA,CAAA,EAAA;;;MERU,eAAe,CAAA;AAEjB,IAAA,IAAI,GAAG,MAAM,CAAa,eAAe,CAAC;AAC1C,IAAA,SAAS,GAAG,MAAM,EAAC,YAA6B,EAAC;AAE1D,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACpB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,eAAe;QACnC;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK;QAC9B;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI;QAC9B;IACF;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;uGAnBW,eAAe,EAAA,IAAA,EAAA,EAAA,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,ECZ5B,oaASA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDCY,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,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,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;;2FAE5E,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;+BACE,gBAAgB,EAAA,OAAA,EAGjB,CAAC,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,oaAAA,EAAA;;;IEV9E;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,GAAA,EAAA,CAAA,CAAA;;MCMX,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAFf,EAAE;;;2FAED,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;oBAChB,QAAQ,EAAE,EAAE;AACb,iBAAA;;;MC0BY,oBAAoB,CAAA;;AAE/B,IAAA,WAAW,GAAG,KAAK,CAAW,EAAE,uDAAC;AACjC,IAAA,YAAY,GAAG,KAAK,CAAW,EAAE,wDAAC;AAClC,IAAA,cAAc,GAAG,KAAK,CAAW,EAAE,0DAAC;AACpC,IAAA,YAAY,GAAG,KAAK,CAAW,EAAE,wDAAC;AAClC,IAAA,aAAa,GAAG,KAAK,CAAW,EAAE,yDAAC;AACnC,IAAA,WAAW,GAAG,KAAK,CAAW,EAAE,uDAAC;AACjC,IAAA,WAAW,GAAG,KAAK,CAAW,EAAE,uDAAC;AACjC,IAAA,aAAa,GAAG,KAAK,CAAW,EAAE,yDAAC;AACnC,IAAA,eAAe,GAAG,KAAK,CAAW,EAAE,2DAAC;AACrC,IAAA,aAAa,GAAG,KAAK,CAAW,EAAE,yDAAC;;AAGnC,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,0DAAC;AACtC,IAAA,eAAe,GAAG,KAAK,CAAU,KAAK,2DAAC;AACvC,IAAA,iBAAiB,GAAG,KAAK,CAAU,KAAK,6DAAC;AACzC,IAAA,eAAe,GAAG,KAAK,CAAU,KAAK,2DAAC;AACvC,IAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,4DAAC;AACxC,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,0DAAC;AACtC,IAAA,cAAc,GAAG,KAAK,CAAU,KAAK,0DAAC;AACtC,IAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,4DAAC;AACxC,IAAA,kBAAkB,GAAG,KAAK,CAAU,KAAK,8DAAC;AAC1C,IAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,4DAAC;;AAGxC,IAAA,aAAa,GAAG,KAAK,CAAS,UAAU,yDAAC;AACzC,IAAA,cAAc,GAAG,KAAK,CAAS,UAAU,0DAAC;AAC1C,IAAA,gBAAgB,GAAG,KAAK,CAAS,SAAS,4DAAC;AAC3C,IAAA,cAAc,GAAG,KAAK,CAAS,aAAa,0DAAC;AAC7C,IAAA,eAAe,GAAG,KAAK,CAAS,wBAAwB,2DAAC;AACzD,IAAA,aAAa,GAAG,KAAK,CAAS,sBAAsB,yDAAC;AACrD,IAAA,aAAa,GAAG,KAAK,CAAS,sBAAsB,yDAAC;AACrD,IAAA,eAAe,GAAG,KAAK,CAAS,UAAU,2DAAC;AAC3C,IAAA,iBAAiB,GAAG,KAAK,CAAS,iBAAiB,6DAAC;AACpD,IAAA,eAAe,GAAG,KAAK,CAAS,iBAAiB,2DAAC;;AAGlD,IAAA,SAAS,GAAG,KAAK,CAAgC,EAAE,qDAAC;;IAGpD,aAAa,GAAG,MAAM,EAAE;IACxB,cAAc,GAAG,MAAM,EAAE;IACzB,gBAAgB,GAAG,MAAM,EAAE;IAC3B,cAAc,GAAG,MAAM,EAAE;IACzB,eAAe,GAAG,MAAM,EAAE;IAC1B,aAAa,GAAG,MAAM,EAAE;IACxB,aAAa,GAAG,MAAM,EAAE;IACxB,eAAe,GAAG,MAAM,EAAE;IAC1B,iBAAiB,GAAG,MAAM,EAAE;IAC5B,eAAe,GAAG,MAAM,EAAE;;AAGhB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAE3C,IAAA,MAAM,CAAC,KAAe,EAAA;AACpB,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IACzE;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;IAC5B;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;IAC9B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;IAC5B;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;IAC/B;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B;uGAlGW,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,o5JC/BjC,2nIAwFA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnEI,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,aAAa,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,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,EACV,OAAO,2IACP,OAAO,EAAA,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,EACP,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,cAAc,qSACd,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;;2FAGF,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAfhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,OAAA,EAGvB;wBACP,UAAU;wBACV,aAAa;wBACb,UAAU;wBACV,OAAO;wBACP,OAAO;wBACP,UAAU;wBACV,cAAc;wBACd,WAAW;AACZ,qBAAA,EAAA,QAAA,EAAA,2nIAAA,EAAA;;;IEvBS;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,GAAA,EAAA,CAAA,CAAA;;MCKI,aAAa,CAAA;;AAWvB,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;;AAErC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAGjD,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;IAE3C,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,SAAS,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;AAC3B,QAAA,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACnB,IAAI,IAAI,CAAC,UAAU;AACjB,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;gBAClJ,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YACxC;iBAAO;AACL,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;YAC1G;QACF;IACF;IAEA,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG;IAC/C;IAEA,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,IAAI;IAChD;uGA7CoB,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;kBADlC;;;ICLW;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,GAAA,EAAA,CAAA,CAAA;;MCEX,eAAe,CAAA;;AAGhB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAEjD,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;;AAErC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;IAE3D,mBAAmB,GAAG,GAAG;;AAEzB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAEjC,IAAA,WAAA,GAAA;IACA;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;uGAlBW,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;;;MCAY,mBAAmB,CAAA;AAEpB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAEjC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAEjC,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACnC;;AAGA,IAAA,aAAa,CAAC,KAAiB,EAAE,OAAe,EAAE,IAAoB,EAAA;;AAEpE,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;YAEtB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAClC,CACF;AACD,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QAChC;IACF;uGAvBW,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;;;MCAY,mBAAmB,CAAA;AAE9B,IAAA,WAAA,GAAA,EAAgB;IAET,QAAQ,CAAC,GAAW,EAAE,KAAa,EAAA;AACxC,QAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;IAClC;AAEO,IAAA,OAAO,CAAC,GAAW,EAAA;AACxB,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;IAClC;AACO,IAAA,UAAU,CAAC,GAAW,EAAA;AAC3B,QAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;IAC9B;IAEO,SAAS,GAAA;QACd,YAAY,CAAC,KAAK,EAAE;IACtB;uGAjBW,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;;;MCaY,aAAa,CAAA;AAEd,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;;AAGpC,IAAA,IAAI,GAAG,MAAM,CAAM,EAAE,gDAAC;;AAEtB,IAAA,MAAM,GAAG,MAAM,CAAS,CAAC,kDAAC;AAE1B,IAAA,aAAa;AACb,IAAA,UAAU;AACV,IAAA,mBAAmB;AACnB,IAAA,SAAS;;IAGT,gBAAgB,GAAG,CAAC;;IAEpB,eAAe,GAAG,EAAE;IAEpB,eAAe,GAAG,MAAM;IACxB,iBAAiB,GAAG,OAAO;IAE3B,YAAY,GAAW,EAAE;;IAGzB,cAAc,GAAW,EAAE;;IAE3B,SAAS,GAAW,EAAE;AAEtB;;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,WAAW,GAAQ,IAAI;;IAGvB,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;;AAEvB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;AAEjD,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;;AAErC,IAAA,mBAAmB,GAAG,MAAM,CAAC,wBAAwB,CAAC;;AAEhE,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAEjC,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,UAAU,GAAG;AAChB,YAAA,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE;AACxF,YAAA,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,CAAkB;YACjH,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB;YACjH,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC;SAChG;IACH;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,mBAAmB,CAAE,SAA2B,EAAE,UAA6B,EAAE,WAAgC,EAAA;;AAE/G,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC;aACf,IAAI,CACH,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,EACpC,SAAS,CAAC,MAAM,SAAS,EAAE,CAAC,EAC5BA,KAAG,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;AAEjD,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;YAC3B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACzB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAClB,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,oBAAoB,GAAG,KAAK,EAAE,CAAC,CAAC;YAClE;AACD,SAAA,CAAC;AACJ,QAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC;AAE5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC;aAChB,IAAI,CACH,SAAS,CAAC,MAAM,UAAU,EAAE,CAAC;AAE9B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAgB,KAAI;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC3B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAClB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,oBAAoB,GAAG,KAAK,EAAE,CAAC,CAAC;YACjE;AACD,SAAA,CAAC;AACJ,QAAA,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC;;AAG7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,YAAY,CAAC,SAAqB,EAAA;QAChC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS;QAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ;QAC7C,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACtG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAEpG,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,YAAY,CAAC,SAAqB,EAAA;QAChC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU;QACjD,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa;AACvD,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,YAAY,EAAE,SAAS,CAAC,UAAU,CAAC;AAC7F,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,eAAe,EAAE,SAAS,CAAC,aAAa,CAAC;AAEnG,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,aAAa,CAAC,IAAiB,EAAA;QAC7B,OAAO,IAAI,IAAI,EAAE;IACnB;;AAGA,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;IAC7C;;AAGA,IAAA,qBAAqB,CAAC,QAAa,EAAA;AACjC,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7D;;AAGA,IAAA,uBAAuB,CAAC,QAAa,EAAA;AACnC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7D;;IAGA,kBAAkB,GAAA;QAChB,IAAI,CAAC,SAAS,EAAE;IAClB;;IAGA,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;YAC9D;;AAGA,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,mBAAmB,CAAC,OAAO,CAAC,mBAAmB,CAAC;AACvD,gCAAA,CAAC;AACD,gCAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;4BACtE;iCAAO;gCACL,IAAI,CAAC,YAAY,EAAE;AACnB,gCAAA,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,CAAC;4BACxD;wBACF,CAAC;AACD,wBAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,4BAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;4BAC3B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,0CAA0C,GAAG,KAAK,EAAE,CAAC,CAAC;wBACvF;AACD,qBAAA,CAAC;AACJ,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC7B;AACF,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG3B,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;gBACvB;AACF,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAC9B;aAAO;AACL,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,uBAAuB,CAAC;QAC3D;IACF;;IAGA,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;gBAC/D;;AAGA,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,mBAAmB,CAAC,OAAO,CAAC,kBAAkB,CAAC;AACtD,oCAAA,CAAC;AACD,oCAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;gCACjF;qCAAO;oCACL,IAAI,CAAC,YAAY,EAAE;AACnB,oCAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,kBAAkB,CAAC;gCACtD;4BACF,CAAC;AACD,4BAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gCAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;gCAC3B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,yCAAyC,GAAG,KAAK,EAAE,CAAC,CAAC;4BACtF;AACD,yBAAA,CAAC;AACJ,wBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC7B;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG3B,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;oBACvB;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAC9B;iBAAO;AACL,gBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,uBAAuB,CAAC;YAC3D;QACF;IACF;;IAGA,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;;wBAEvB,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,mBAAmB,CAAC,OAAO,CAAC,2BAA2B,CAAC;4BAC/D,CAAC;AACD,4BAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gCAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;gCAC3B,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,wCAAwC,GAAG,KAAK,EAAE,CAAC,CAAC;4BACtF;AACD,yBAAA,CAAC;AACJ,wBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC7B;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG3B,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;oBACvB;AACF,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAC9B;QACF;IACF;;IAGA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;;IAGA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACvB;;AAGA,IAAA,sBAAsB,CAAC,OAAe,EAAA;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO;IAC/B;;AAGA,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;AAEA,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;IACnD;AAEA,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,CAAA,EAAA,CAAI,GAAG,mBAAmB;AAC7F,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;YACvC,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;IACJ;;AAGU,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;YAC5B;AACF,QAAA,CAAC;IACH;;AAGU,IAAA,oBAAoB,CAAC,OAAe,EAAE,cAAuB,EAAE,eAAwB,EAAA;AAC/F,QAAA,OAAO,CAAC,MAAkB,EAAE,IAAO,KAAI;;;AAGrC,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;;;;AAIvB,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;YAC5B;AACF,QAAA,CAAC;IACH;AAEU,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;IAC/F;uGAjcW,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;;;MCNqB,gBAAgB,CAAA;IAI1B,UAAU,GAAG,OAAO;IAEpB,cAAc,GAAG,MAAM;IACvB,aAAa,GAAG,OAAO;IACvB,eAAe,GAAG,QAAQ;IAC1B,cAAc,GAAG,WAAW;AAE5B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAEnC,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;IACrF;AAEA,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;IACnE;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;IAChE;AAEA,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;IACrF;AAEA,IAAA,SAAS,CAAC,MAAS,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;IAC/C;AAEA,IAAA,UAAU,CAAC,MAAS,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;IAC1D;AAEA,IAAA,YAAY,CAAC,MAAS,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC;IACrD;AAEU,IAAA,SAAS,CAAC,SAAiB,EAAE,QAAgB,EAAE,UAAkB,EAAE,SAAiB,EAAA;AAC5F,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;QAC7B,IAAI,SAAS,GAAG,CAAC;;AAEf,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,CAAC,CAAC;AAC5D,QAAA,IAAI,QAAQ;YACV,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;AACtD,QAAA,IAAI,UAAU;YACZ,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;AAC1D,QAAA,IAAI,SAAS;YACX,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;AACxD,QAAA,OAAO,MAAM;IACf;uGAzDoB,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,cAFxB,MAAM,EAAA,CAAA;;2FAEE,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCHY,QAAQ,CAAA;AAEF,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAEjD,IAAA,SAAS,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,GAAG,CAAC;IAC3D;uGANW,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;;;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;IACtC;uGAXW,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;IACzE;uGARW,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;;;ACYK,MAAO,eAAgB,SAAQ,mBAAmB,CAAA;;AAGtD,IAAA,eAAe,GAAG,KAAK,CAAU,KAAK,2DAAC;;AAEvC,IAAA,aAAa,GAAG,KAAK,CAAU,IAAI,yDAAC;;AAEpC,IAAA,gBAAgB,GAAG,KAAK,CAAU,IAAI,4DAAC;;AAGvC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;;AAEhC,IAAA,OAAO,GAAG,KAAK,CAAS,EAAE,mDAAC;;AAE3B,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,uDAAC;;AAE/B,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,qDAAC;;IAG7B,MAAM,GAAG,MAAM,EAAU;AAER,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AAE3C,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;IACT;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACnC;IAEA,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,QAAQ,EAAE;YACjB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B;uGAjDW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChB5B,i4BA2BC,EAAA,MAAA,EAAA,CAAA,0XAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDbW,SAAS,yUAAE,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,EAAE,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;2FAEvC,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;+BACE,gBAAgB,EAAA,OAAA,EAGjB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAA,QAAA,EAAA,i4BAAA,EAAA,MAAA,EAAA,CAAA,0XAAA,CAAA,EAAA;;;MENxC,iBAAiB,CAAA;uGAAjB,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;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,IAAI,EAAA,QAAA,EAAA,qLAAA,EAAA,MAAA,EAAA,CAAA,4DAAA,CAAA,EAAA;;;MEoCL,wBAAwB,CAAA;AAElB,IAAA,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAElD,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;IAC5B;uGANW,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArCzB,CAAA;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA6BS,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;;2FAGjB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAvCpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,QAAA,EAChB,CAAA;;;;;AAKT,EAAA,CAAA,EAAA,eAAA,EA4BgB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,kBAAkB,CAAC,EAAA,MAAA,EAAA,CAAA,+OAAA,CAAA,EAAA;;;MCpBlB,qCAAqC,CAAA;;;AAIhD,IAAA,KAAK,GAAG,KAAK,CAAe,EAAE,iDAAC;;AAE/B,IAAA,iBAAiB,GAAG,KAAK,CAAyB,SAAS,6DAAC;;AAE5D,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;AAEzB,IAAA,SAAS,GAAG,KAAK,CAAU,IAAI,qDAAC;;AAEhC,IAAA,UAAU,GAAG,KAAK,CAAU,KAAK,sDAAC;;AAElC,IAAA,UAAU,GAAG,KAAK,CAAU,KAAK,sDAAC;;AAElC,IAAA,KAAK,GAAG,KAAK,CAAS,KAAK,iDAAC;;IAG5B,YAAY,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAE3D,kBAAkB,GAAG,MAAM,EAAU;IAE9B,MAAM,GAAW,OAAO;;AAE/B,IAAA,SAAS,GAAG,IAAI,WAAW,EAAE;;IAE7B,aAAa,GAAiB,EAAE;AAEhC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAEjC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;YAGpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;gBAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACnD;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;;AAEN,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;;YAEZ,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,KAAK,CAAC;AAE3C,YAAA,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;gBAChC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC;iBAAO;AACL,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,oBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;AACzB,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK;yBAC5B,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACpF;qBAAO;;AAEL,oBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;oBACzB,IAAI,KAAK,EAAE;;AAET,wBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK;6BAC5B,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC9F,wBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;oBAC3B;yBAAO;wBACL,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClC,wBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;oBAC3B;gBACF;YACF;AAEF,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,EAAE;AACd,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAE3B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QAC1B;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;QACzB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACnC;AAEA,IAAA,oBAAoB,CAAC,IAAS,EAAA;AAC5B,QAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpC;AAEA,IAAA,YAAY,CAAC,MAAkB,EAAA;QAC7B,MAAM,CAAC,eAAe,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7B;AAEA,IAAA,aAAa,CAAC,MAAW,EAAA;QACvB,OAAO,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI;IACzC;AAEQ,IAAA,eAAe,CAAC,KAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;;AAG1B,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;YAEpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI;QACxC;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,GAAG,OAAO;QACvB;QACA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,aAAa,CAAC;IAC3D;uGA/HW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArC,qCAAqC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBlD,s6CA+BC,EAAA,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDfW,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,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,EAAA,EAAA,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,8EAAE,QAAQ,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAa,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,EACtG,YAAY,2LAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAPjD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qCAAqC,EAAA,OAAA,EAGtC,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,s6CAAA,EAAA,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA;;;MEDzC,4BAA4B,CAAA;;AAGvC,IAAA,MAAM,GAAG,KAAK,CAAgB,EAAE,kDAAC;;AAEjC,IAAA,aAAa,GAAG,KAAK,CAAW,EAAE,yDAAC;;AAEnC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;;IAEzB,mBAAmB,GAAG,MAAM,EAAY;AAExC,IAAA,kBAAkB,GAAa,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7C,IAAA,OAAO,GAAG,IAAI,WAAW,CAAW,EAAE,CAAC;AAEvC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,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;IAC9E;AAEA,IAAA,YAAY,CAAC,MAAkB,EAAA;QAC7B,MAAM,CAAC,eAAe,EAAE;;AAExB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;IACnC;uGA9BW,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,6hBChBzC,mwBAoBA,EAAA,MAAA,EAAA,CAAA,kCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDNY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,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,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,EAAEC,WAAS,qJAAE,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,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,4LAAEC,UAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAEnG,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBANxC,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,CAAC,EAAA,QAAA,EAAA,mwBAAA,EAAA,MAAA,EAAA,CAAA,kCAAA,CAAA,EAAA;;;MEiBpG,cAAc,CAAA;;AAEzB,IAAA,IAAI,GAAG,KAAK,CAAM,EAAE,gDAAC;;AAErB,IAAA,MAAM,GAAG,KAAK,CAAS,CAAC,kDAAC;;AAEzB,IAAA,aAAa,GAAG,KAAK,CAAsB,EAAE,yDAAC;;AAE9C,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAe;;AAE1C,IAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,4DAAC;;AAExC,IAAA,GAAG,GAAG,KAAK,CAA2B,EAAE,+CAAC;;AAEzC,IAAA,oBAAoB,GAAG,KAAK,CAAU,KAAK,gEAAC;;AAE5C,IAAA,MAAM,GAAG,KAAK,CAAU,KAAK,kDAAC;;IAG9B,eAAe,GAAG,MAAM,EAAc;;IAEtC,eAAe,GAAG,MAAM,EAAc;;IAEtC,eAAe,GAAG,MAAM,EAAO;;IAE/B,gBAAgB,GAAG,MAAM,EAAK;AAErB,IAAA,IAAI,GAAG,SAAS,CAAC,OAAO,gDAAC;AACzB,IAAA,SAAS,GAAG,SAAS,CAAC,YAAY,qDAAC;AACnC,IAAA,WAAW,GAAG,SAAS,CAAC,cAAc,uDAAC;AAEhD,IAAA,SAAS,GAAG,YAAY,CAAa,MAAK;AACxC,QAAA,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE;AACzF,IAAA,CAAC,qDAAC;AAEF,IAAA,SAAS,GAAG,YAAY,CAAa,MAAK;AACxC,QAAA,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;AACrG,IAAA,CAAC,qDAAC;;AAGF,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;AAGhB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AAEjC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;;AAGlC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ;AACxC,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,EAAE,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;AAChG,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;;QAGpH,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACjE;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;IACnC;IAEA,eAAe,GAAA;;AAEb,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAClC,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,CAAC,KAAK,CAAC,iBAAiB,GAAG,qBAAqB;AACzD,YAAA,SAAS,CAAC,KAAK,CAAC,cAAc,GAAG,iBAAiB;AAClD,YAAA,SAAS,CAAC,KAAK,CAAC,iBAAiB,GAAG,qBAAqB;AACzD,YAAA,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,oBAAoB;AACpD,YAAA,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,oBAAoB;;YAGpD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAG;AAC3C,gBAAA,MAAM,SAAS,GAAG;oBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,QAAQ,EAAE,IAAI,CAAC;iBACF;AACf,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7B,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;AACtC,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B;;AAGA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE;QAC7B,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC;iBACpB,SAAS,CAAC,IAAI,IAAG;AAChB,gBAAA,MAAM,SAAS,GAAG;oBAChB,UAAU,EAAE,IAAI,CAAC,MAAM;oBACvB,aAAa,EAAE,IAAI,CAAC;iBACP;AACf,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7B,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;AACtC,YAAA,CAAC,CAAC;AACJ,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B;;AAGA,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,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B;IACF;;IAIA,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;IAChC;;IAGA,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;QACxB;aAAO;YACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE;IACF;;AAGA,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;QAC9B;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC5B;IACF;;AAGA,IAAA,eAAe,CAAC,GAAM,EAAA;;AAEpB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC9B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;IACnC;;IAGA,aAAa,CAAC,KAAiB,EAAE,WAA0B,EAAA;AACzD,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;;YAEzC;QACF;QACA,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,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;QACtC,IAAI,WAAW,EAAE;AACf,YAAA,WAAW,CAAC,QAAQ,GAAG,EAAE,WAAW,EAAE;AACtC,YAAA,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC;YACzC,WAAW,CAAC,QAAQ,EAAE;QACxB;IACF;AAEA,IAAA,QAAQ,CAAC,UAAkB,EAAA;AACzB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;AACzB,aAAA,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,UAAqB,CAAC,KAAK,QAAQ;aACxD,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAqB,CAAC,CAAC;AACrC,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAClB,YAAA,OAAO,EAAE;;AAET,YAAA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAW,KAAK,EAAE,CAAC,CAAC;IAC7D;uGArMW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,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,EA2BC,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACF,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACV,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5DjD,ovZAqRA,EAAA,MAAA,EAAA,CAAA,27BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3PY,QAAQ,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,kNAAE,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,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,EAAA,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,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,UAAU,EAAA,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,EAAE,YAAY,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,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,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClG,cAAc,EAAA,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,EAAE,OAAO,EAAA,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,EAAE,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,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,EAC7G,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,+TAAE,aAAa,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAEvE,cAAc,EAAA,UAAA,EAAA,CAAA;kBAT1B,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;AAClG,wBAAA,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY;wBAC7G,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,ovZAAA,EAAA,MAAA,EAAA,CAAA,27BAAA,CAAA,EAAA;ypCA6BzD,OAAO,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACF,YAAY,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACV,cAAc,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEjDpC,aAAa,CAAA;IAChB,UAAU,GAAsB,IAAI;AAE3B,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAEnC,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACzC;AACA,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;YAC/C;AACF,QAAA,CAAC,CAAC;IACJ;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;QAC1B;IACF;uGAtBW,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,cAHZ,MAAM,EAAA,CAAA;;2FAGP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCJY,aAAa,CAAA;;IAGxB,SAAS,CAAC,IAAS,EAAE,QAAQ,GAAG,MAAM,EAAE,SAAc,EAAE,UAAe,EAAA;AACrE,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;AACnB,YAAA,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC3C;AACA,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;IACrC;AAEA,IAAA,YAAY,CAAC,QAAa,EAAE,UAAe,EAAE,UAAe,EAAA;AAC1D,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;AAC9B,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;AAC3D,gBAAA,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG;YAChC;QACF;QACA,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;YACrC,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;AACvB,YAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;AAC9B,gBAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;AAC3D,oBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;oBAC9B,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9B;YACF;AACA,YAAA,GAAG,IAAI,IAAI,GAAG,MAAM;QACtB;AACA,QAAA,OAAO,GAAG;IACZ;uGA3CW,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;;;MCKY,UAAU,CAAA;AAEb,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IAErB,WAAW,GAAuB,IAAI;IACtC,WAAW,GAAG,KAAK;AAE3B,IAAA,WAAA,GAAA,EAAgB;AAEhB,IAAA,oBAAoB,CAAC,OAAe,EAAE,IAAa,EAAE,KAAY,EAAA;AAC/D,QAAA,MAAM,OAAO,GAAG,IAAI,aAAa,CAAI,CAAC,CAAC;;QAGvC,IAAI,CAAC,mBAAmB,EAAE;QAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;;AAE9C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;;SAElC;AAED,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;YAGvB,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,KAAmB,KAAI;AACnD,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAClB,MAAM,WAAW,GAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;AAC7C,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,oBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3B,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC;AACD,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAK;AAC7B,gBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACvC,YAAA,CAAC;;YAED,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,KAAU,KAAI;AACxC,gBAAA,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC;gBAClC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;AACtD,YAAA,CAAC;QACH;AACA,QAAA,OAAO,OAAO,CAAC,YAAY,EAAE;IAC/B;AAEQ,IAAA,gBAAgB,CAAC,OAAe,EAAE,IAAa,EAAE,KAAY,EAAE,OAAyB,EAAA;QAE9F,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO;AAE7B,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC;QACjD,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;AACjB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;AACpE,YAAA,CAAC,CAAC;QACJ,CAAC,EAAE,IAAI,CAAC;IACV;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACtC;IACF;uGAhEW,UAAU,EAAA,IAAA,EAAA,EAAA,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;;;MCQY,kBAAkB,CAAA;IAC7B,OAAO,GAAY,KAAK;IACxB,KAAK,GAAW,EAAE;IAClB,OAAO,GAAY,KAAK;;IAExB,KAAK,GAAW,CAAC;;AAEjB,IAAA,GAAG;AAEc,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAEtD,IAAA,WAAA,GAAA;AACE,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,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE;;QAEvF;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;IACxB;IAEA,aAAa,GAAA;AACX,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AAC3B,QAAA,CAAC;IACH;AAEA,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,aAAa,EAAE,CAAC;IAC5F;AAEA,IAAA,cAAc,CAAC,MAAc,EAAA;QAC3B,MAAM,MAAM,GAAG,MAAM;QACrB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;IACpD;uGA7CW,kBAAkB,EAAA,IAAA,EAAA,EAAA,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChB/B,8UAYG,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDES,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,EAAA,OAAA,EAGrB,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,8UAAA,EAAA;;;MEPvC,sBAAsB,CAAA;IACxB,KAAK,GAAG,KAAK,CAAW,EAAE,kDAAI,KAAK,EAAE,qBAAqB,EAAA,CAAG;AAErD,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAElD,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;AAGzF,YAAA,MAAM,aAAa,GAAG,CAAC,eAAe;;AAGtC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AAEtC,YAAA,IAAI,UAAU,IAAI,QAAQ,EAAE;AAC1B,gBAAA,QAAQ,CAAC,QAAQ,GAAG,aAAa;YACnC;iBAAO;;gBAEL,IAAI,aAAa,EAAE;AACjB,oBAAA,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;gBAC3C;qBAAO;AACL,oBAAA,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC;gBACtC;YACF;AACF,QAAA,CAAC,CAAC;IACJ;uGA5BW,sBAAsB,EAAA,IAAA,EAAA,EAAA,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,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,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;;;MCEY,sBAAsB,CAAA;IACxB,KAAK,GAAG,KAAK,CAAW,EAAE,kDAAI,KAAK,EAAE,qBAAqB,EAAA,CAAG;AAErD,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAElD,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;;;YAGR,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;;AAGrF,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE;AAC9D,QAAA,CAAC,CAAC;IACJ;uGAhBW,sBAAsB,EAAA,IAAA,EAAA,EAAA,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,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,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;;;MCAY,iBAAiB,CAAA;IACnB,KAAK,GAAG,KAAK,CAAM,SAAS,kDAAI,KAAK,EAAE,UAAU,EAAA,CAAG;;IAG5C,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAElE,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;;AAEV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AAExB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC5D;AACF,QAAA,CAAC,CAAC;IACJ;uGAfW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACFM,MAAM,SAAS,GAAG,CAAC,YAAsB,KAAmB;AACjE,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,KAAI;AACtB,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACvC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAE7B,QAAA,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE;QACtC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC;;YAGrC,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;QACpF;AAEA,QAAA,OAAO,OAAO;AAChB,IAAA,CAAC;AACH;;ACjBO,MAAM,aAAa,GAAkB,CAAC,KAA6B,KAAI;IAC5E,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,GAAG,aAAa,CAAC;IAE/C,IAAI,WAAW,EAAE;AACf,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW;IACpC;AAEA,IAAA,OAAO,IAAI;AACb;;ACNO,MAAM,SAAS,GAAG,CAAC,YAAsB,KAAmB;AACjE,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,KAAI;AACtB,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACvC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;;AAGvC,QAAA,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE;;QAGrC,OAAO,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;AACtD,IAAA,CAAC;AACH;;ACfA;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"kuzntsv-uikit-ui.mjs","sources":["../../ui/src/auth/components/login-form/login-form.component.ts","../../ui/src/auth/components/login-form/login-form.component.html","../../ui/src/auth/components/permit-form/permit-form.component.ts","../../ui/src/auth/components/permit-form/permit-form.component.html","../../ui/src/services/avatar.service.ts","../../ui/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.ts","../../ui/src/shared/chip-input-autocomplete/chip-input-autocomplete.component.html","../../ui/src/shared/date-range-input/models/date-range.ts","../../ui/src/shared/date-range-input/models/date-formats.ts","../../ui/src/shared/date-range-input/date-range-input.component.ts","../../ui/src/shared/date-range-input/date-range-input.component.html","../../ui/src/shared/dialog/dialog.component.ts","../../ui/src/shared/dialog/dialog.component.html","../../ui/src/shared/dialog/models/dialog-action.ts","../../ui/src/shared/empty/empty.ts","../../ui/src/base/base-toolbar/components/base-toolbar.component.ts","../../ui/src/base/base-toolbar/components/base-toolbar.component.html","../../ui/src/base/base-classes/base-edit-dialog-data.ts","../../ui/src/base/base-classes/base-edit-class.ts","../../ui/src/base/base-classes/base-entity-action.ts","../../ui/src/base/base-classes/base-filter-class.ts","../../ui/src/base/base-classes/base-nav-bar-menu-class.ts","../../ui/src/services/local-storage-service.ts","../../ui/src/base/base-classes/base-page-class.ts","../../ui/src/base/base-classes/base-service-class.ts","../../ui/src/pipes/safe.pipe.ts","../../ui/src/pipes/time.pipe.ts","../../ui/src/pipes/truncate.pipe.ts","../../ui/src/shared/navbar/navbar.ts","../../ui/src/shared/navbar/navbar.html","../../ui/src/shared/not-found/not-found.component.ts","../../ui/src/shared/not-found/not-found.component.html","../../ui/src/shared/progress-spinner/progress-spinner.component.ts","../../ui/src/shared/select-autocomplete-with-vs/select-autocomplete-with-vs.component.ts","../../ui/src/shared/select-autocomplete-with-vs/select-autocomplete-with-vs.component.html","../../ui/src/shared/select-with-group/select-with-group.component.ts","../../ui/src/shared/select-with-group/select-with-group.component.html","../../ui/src/shared/table/table.component.ts","../../ui/src/shared/table/table.component.html","../../ui/src/services/loader.service.ts","../../ui/src/services/export.service.ts","../../ui/src/services/sse/sse.service.ts","../../ui/src/auth/components/login-page/login-page.component.ts","../../ui/src/auth/components/login-page/login-page.component.html","../../ui/src/directives/disable-if-role.directive.ts","../../ui/src/directives/hide-if-role-not.directive.ts","../../ui/src/directives/set-value.directive.ts","../../ui/src/guards/auth-guard.service.ts","../../ui/src/guards/redirect-guard.ts","../../ui/src/guards/role-guard.service.ts","../../ui/src/logger/logger.config.ts","../../ui/src/logger/logger.service.ts","../../ui/src/logger/logger.provider.ts","../../ui/src/models/sec-user.model.ts","../../ui/src/public-api.ts","../../ui/src/kuzntsv-uikit-ui.ts"],"sourcesContent":["\r\nimport { Component, effect, 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/authenticate';\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, \r\n MatLabel, MatInput, MatError, MatIcon, MatSuffix, MatButton]\r\n})\r\nexport class LoginFormComponent {\r\n pending = input<boolean>(false);\r\n errorMessage = input<string>('');\r\n submitted = output<Authenticate>();\r\n\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 constructor() { \r\n effect(() => {\r\n if (this.pending()) {\r\n this.form.disable();\r\n } else {\r\n this.form.enable();\r\n }\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]=\"pending()\">Войти</button>\r\n </p>\r\n\r\n </form>\r\n </mat-card-content>\r\n </mat-card>\r\n","import { Component, ElementRef, 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 readonly hidy = viewChild<ElementRef>('hidy');\r\n\r\n submitted = output<string>();\r\n\r\n @HostListener('document:mouseup', ['$event'])\r\n mouseHandling(event: MouseEvent) {\r\n this.hidy()?.nativeElement.focus();\r\n }\r\n\r\n ngOnInit() {\r\n // Обнуляем значение Input\r\n const hidy = this.hidy();\r\n if (hidy) {\r\n hidy.nativeElement.value = null;\r\n 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)\"/>","import { HttpClient } from '@angular/common/http';\r\nimport { inject, 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 private readonly http = inject(HttpClient);\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 { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { Component, effect, ElementRef, input, 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 { Observable, 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,\r\n MatChipsModule, MatLabel]\r\n})\r\nexport class BaseMatChipComponent {\r\n\r\n // Все элементы\r\n items = input<ChipItem[]>([]);\r\n // Выбранные элементы, ключи (ChipItem.value)\r\n selectedItemsInput = input<string[]>([]);\r\n // Заголовок\r\n title = input<string>('');\r\n // Событие изменения выбранных элементов\r\n selectedItemsChange = output<string[]>();\r\n\r\n readonly input = viewChild<ElementRef<HTMLInputElement>>('input');\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n inputCtrl = new FormControl();\r\n filteredItems$?: Observable<ChipItem[]>;\r\n selectedItems: ChipItem[] = [];\r\n\r\n constructor() {\r\n effect(() => {\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 });\r\n\r\n effect(() => {\r\n if (this.selectedItemsInput())\r\n this.selectedItems = this.items().filter(s => this.selectedItemsInput().includes(s.value));\r\n });\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 const inputValue = this.input();\r\n if (inputValue)\r\n inputValue.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]=\"selectedItemsInput()?.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, effect, 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 { 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-input',\r\n templateUrl: './date-range-input.component.html',\r\n styleUrls: ['./date-range-input.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 DateRangeInputComponent implements OnInit, OnDestroy {\r\n label = input<string>('');\r\n dateRange = input<DateRange>(<DateRange>{ begin: '', end: '' });\r\n // eslint-disable-next-line no-magic-numbers\r\n minDate = input<Date>(new Date(2020, 0, 1));\r\n clearInput = input<any>(null);\r\n required = input<boolean>(false);\r\n dateRangeChange = output<DateRange>();\r\n\r\n form = new FormGroup({\r\n begin: new FormControl(),\r\n end: new FormControl(),\r\n });\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.clearInput())\r\n this.form.reset();\r\n });\r\n\r\n effect(() => {\r\n const value = this.dateRange();\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\r\n ngOnInit() {\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\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\">\r\n <mat-label>{{label()}}</mat-label>\r\n <mat-date-range-input\r\n [rangePicker]=\"picker\"\r\n [formGroup]=\"form\"\r\n [min]=\"minDate()\">\r\n <input matStartDate formControlName=\"begin\" placeholder=\"Дата начала\">\r\n <input matEndDate formControlName=\"end\" placeholder=\"Дата окончания\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n <mat-error>Укажите период</mat-error>\r\n</mat-form-field>\r\n\r\n","import { Component, inject } from '@angular/core';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\n\r\nimport { DialogData } from './models';\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 readonly data = inject<DialogData>(MAT_DIALOG_DATA);\r\n readonly dialogRef = inject(MatDialogRef<DialogComponent>);\r\n\r\n constructor() {\r\n if (!this.data.title) {\r\n this.data.title = 'Подтверждение';\r\n }\r\n if (!this.data.btnNoTitle) {\r\n this.data.btnNoTitle = 'Нет';\r\n }\r\n if (!this.data.btnYesTitle) {\r\n this.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>\r\n<div mat-dialog-content>\r\n <div style=\"white-space: pre-line\">{{ data.message }}</div>\r\n</div>\r\n<div mat-dialog-actions align=\"end\">\r\n <button mat-raised-button (click)=\"onNoClick()\" cdkFocusInitial>{{ data.btnNoTitle }}</button>\r\n <button mat-raised-button color=\"warn\" [mat-dialog-close]=\"data.id\">{{ data.btnYesTitle }}</button>\r\n</div>\r\n\r\n","export enum DialogAction {\r\n Add = 'Добавить',\r\n Edit = 'Изменить',\r\n Delete = 'Удалить',\r\n None = ''\r\n }","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n standalone: true,\r\n template: '' // пустой шаблон, так как гуард сразу уводит пользователя со страницы\r\n})\r\nexport class EmptyComponent {}\r\n","import {\r\n Component,\r\n inject,\r\n input,\r\n output\r\n} from '@angular/core';\r\nimport { MatIconButton } from '@angular/material/button';\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 { MatToolbar } from '@angular/material/toolbar';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { AuthService, RoleService } from '@kuzntsv/uikit';\r\nimport { IContextMenuOptions } from '../../../shared/table';\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: [\r\n MatToolbar,\r\n MatIconButton,\r\n MatTooltip,\r\n MatIcon,\r\n MatMenu,\r\n MatDivider,\r\n MatMenuTrigger,\r\n MatMenuItem,\r\n ],\r\n})\r\nexport class BaseToolbarComponent {\r\n // Роли для кнопок\r\n rolesNewBtn = input<string[]>([]);\r\n rolesEditBtn = input<string[]>([]);\r\n rolesRemoveBtn = input<string[]>([]);\r\n rolesCopyBtn = input<string[]>([]);\r\n rolesExcelBtn = input<string[]>([]);\r\n rolesCsvBtn = input<string[]>([]);\r\n rolesPdfBtn = input<string[]>([]);\r\n rolesPrintBtn = input<string[]>([]);\r\n rolesRefreshBtn = input<string[]>([]);\r\n rolesClearBtn = input<string[]>([]);\r\n\r\n // Состояния блокировки\r\n newBtnDisabled = input<boolean>(false);\r\n editBtnDisabled = input<boolean>(false);\r\n removeBtnDisabled = input<boolean>(false);\r\n copyBtnDisabled = input<boolean>(false);\r\n excelBtnDisabled = input<boolean>(false);\r\n csvBtnDisabled = input<boolean>(false);\r\n pdfBtnDisabled = input<boolean>(false);\r\n printBtnDisabled = input<boolean>(false);\r\n refreshBtnDisabled = input<boolean>(false);\r\n clearBtnDisabled = input<boolean>(false);\r\n\r\n // Тултипы\r\n newBtnTooltip = input<string>('Добавить');\r\n editBtnTooltip = input<string>('Изменить');\r\n removeBtnTooltip = input<string>('Удалить');\r\n copyBtnTooltip = input<string>('Скопировать');\r\n excelBtnTooltip = input<string>('Экспортировать в Excel');\r\n csvBtnTooltip = input<string>('Экспортировать в Csv');\r\n pdfBtnTooltip = input<string>('Экспортировать в Pdf');\r\n printBtnTooltip = input<string>('Печатать');\r\n refreshBtnTooltip = input<string>('Обновить данные');\r\n clearBtnTooltip = input<string>('Очистить фильтр');\r\n\r\n /** Список элементов контекстного меню. */\r\n newBtnOpt = input<IContextMenuOptions<string>[]>([]);\r\n\r\n // События\r\n clickedNewBtn = output();\r\n clickedEditBtn = output();\r\n clickedRemoveBtn = output();\r\n clickedCopyBtn = output();\r\n clickedExcelBtn = output();\r\n clickedCsvBtn = output();\r\n clickedPdfBtn = output();\r\n clickedPrintBtn = output();\r\n clickedRefreshBtn = output();\r\n clickedClearBtn = output();\r\n\r\n // DI\r\n protected authService = inject(AuthService);\r\n protected roleService = inject(RoleService);\r\n\r\n isShow(roles: string[]): boolean {\r\n return !this.roleService.isHideElement(roles, this.authService.roles());\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","<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 @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 </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, inject, OnDestroy } from \"@angular/core\";\r\nimport { FormGroup } from \"@angular/forms\";\r\nimport { MatDialogRef } from \"@angular/material/dialog\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { NotificationService } from \"@kuzntsv/uikit\";\r\n\r\nimport { Action, IEditDialogData } from \"./base-edit-dialog-data\";\r\nimport { LoaderService } from \"../../services\";\r\n\r\n\r\n@Directive()\r\nexport abstract class BaseEditClass<T> implements OnDestroy {\r\n\r\n /** Заголовок. */\r\n public abstract title: string;\r\n /** Данные диалога. */\r\n protected abstract dialogData?: IEditDialogData<T>;\r\n /** Форма. */\r\n public abstract form?: FormGroup<any>;\r\n /** Ссылка на диалог. */\r\n protected abstract dialogRef?: MatDialogRef<any, IEditDialogData<T> | null>;\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(NotificationService);\r\n\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n protected subscription = new Subscription();\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n onNoClick(event: MouseEvent): 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, inject, OnDestroy } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { LocalStorageService, LoaderService } from '../../services';\r\nimport { NotificationService } from '@kuzntsv/uikit';\r\n\r\n@Directive()\r\nexport class BaseFilterClass implements OnDestroy {\r\n\r\n /** Сервис для работы с LocalStorage. */\r\n protected localStorageService = inject(LocalStorageService);\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(NotificationService);\r\n // eslint-disable-next-line no-magic-numbers\r\n defaultDebounceTime = 500;\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n}\r\n","import { Directive, inject, OnDestroy } from \"@angular/core\";\r\nimport { MatMenuTrigger } from \"@angular/material/menu\";\r\nimport { Router } from \"@angular/router\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { AuthService, RoleService } from '@kuzntsv/uikit';\r\n\r\n@Directive()\r\nexport class BaseNavBarMenuClass implements OnDestroy {\r\n\r\n protected subscription = new Subscription();\r\n protected authService = inject(AuthService);\r\n protected roleService = inject(RoleService);\r\n protected router = inject(Router);\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n \r\n \r\n isShow(roles: string[]): boolean {\r\n return !this.roleService.isHideElement(roles, this.authService.roles());\r\n }\r\n\r\n /** Нажата средняя кнопка (открыть ссылку в новой вкладке). */\r\n onMiddleClick(event: MouseEvent, 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 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 { Directive, OnDestroy, inject, signal } 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 { Subject, Subscription, forkJoin, map, switchMap, tap } from 'rxjs';\r\n\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 { ObjectKeys, SortDirection, fnCbType, fnGetCountType, fnGetDataType, fnMapEntityType, fnType } from '../../types/types';\r\nimport { Action, IEditDialogData } from './base-edit-dialog-data';\r\n\r\nimport { LoaderService } from '../../services';\r\nimport { UIKIT_NOTIFICATION_TOKEN } from '@kuzntsv/uikit';\r\n\r\n\r\n@Directive()\r\nexport class BasePageClass<T> implements OnDestroy {\r\n\r\n protected dialog = inject(MatDialog);\r\n\r\n /** Данные для табличного компонента. */\r\n data = signal<T[]>([]);\r\n /** Количество записей по фильтру. */\r\n length = signal<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 dialogEditWidth = 'auto';\r\n dialogRemoveWidth = '400px';\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 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 clearFilter: any = 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 /** Сервис для работы с LocalStorage. */\r\n protected localStorageService = inject(LocalStorageService);\r\n /** Сервис индикатор загрузки. */\r\n protected loaderService = inject(LoaderService);\r\n /** Сервис уведомлений. */\r\n protected notificationService = inject(UIKIT_NOTIFICATION_TOKEN);\r\n /** Объект для отписки (вызывается метод unsubscribe при уничтожении компонента). */\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n this.tableState = {\r\n sortActive: this.localStorageService.getData(this.constructor.name + 'SortActive') || '',\r\n sortDirection: (this.localStorageService.getData(this.constructor.name + 'SortDirection') || '') as SortDirection,\r\n pageIndex: Number(this.localStorageService.getData(this.constructor.name + 'PageIndex')) || this.defaultPageIndex,\r\n pageSize: Number(this.localStorageService.getData(this.constructor.name + 'PageSize')) || this.defaultPageSize\r\n };\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n subscribeToLoadData( fnGetData: fnGetDataType<T>, fnGetCount: fnGetCountType<T>, fnMapEntity?: fnMapEntityType<T>) {\r\n // отменять стримы, созданные ранее\r\n const subs = this.loadData$\r\n .pipe(\r\n tap(() => this.loaderService.show()),\r\n switchMap(() => fnGetData()),\r\n map(v => fnMapEntity ? v.map(fnMapEntity()) : v),\r\n )\r\n .subscribe({\r\n next: (response: T[]) => {\r\n this.data.set(response);\r\n this.loaderService.hide();\r\n },\r\n error: (error: any) => {\r\n this.loaderService.hide();\r\n console.log(error);\r\n this.notificationService?.error('Произошла ошибка: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs);\r\n\r\n const subs2 = this.loadLength$\r\n .pipe(\r\n switchMap(() => fnGetCount())\r\n )\r\n .subscribe({\r\n next: (response: number) => {\r\n this.length.set(response);\r\n },\r\n error: (error: any) => {\r\n console.log(error);\r\n this.notificationService.error('Произошла ошибка: ' + error, 0);\r\n }\r\n });\r\n this.subscription?.add(subs2);\r\n\r\n // загрузить данные и количество записей\r\n this.loadData$.next(null);\r\n this.loadLength$.next(null);\r\n }\r\n\r\n onPageChange(pageState: IPageState) {\r\n this.tableState.pageIndex = pageState.pageIndex;\r\n this.tableState.pageSize = pageState.pageSize;\r\n this.localStorageService.saveData(this.constructor.name + 'PageIndex', pageState.pageIndex.toString());\r\n this.localStorageService.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.tableState.sortActive = sortState.sortActive;\r\n this.tableState.sortDirection = sortState.sortDirection;\r\n this.localStorageService.saveData(this.constructor.name + 'SortActive', sortState.sortActive);\r\n this.localStorageService.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 /** Событие изменение выбранных записей. */\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 /** Событие двойной клик. */\r\n onRowDoubleClicked() {\r\n this.editEvent();\r\n }\r\n\r\n /** Событие создание. */\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.notificationService.success('Запись добавлена.');\r\n }\r\n this.afterSaveOnNewEvent(callback.bind(this), obj, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.notificationService?.success('Запись добавлена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService.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.notificationService.warning('Действие не доступно.');\r\n }\r\n }\r\n\r\n /** Событие редактирование. */\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.notificationService.success('Запись изменена.');\r\n }\r\n this.afterSaveOnEditEvent(callback.bind(this), result.entity, result.extraData);\r\n } else {\r\n this.refreshEvent();\r\n this.notificationService.success('Запись изменена.');\r\n }\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService.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.notificationService.warning('Действие не доступно.');\r\n }\r\n }\r\n }\r\n\r\n /** Событие удаление. */\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 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.notificationService.success('Выбранные записи удалены.');\r\n },\r\n error: (error: any) => {\r\n console.log('error', error);\r\n this.notificationService?.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 /** Событие очистки фильтра. */\r\n clearEvent() {\r\n this.clearFilter$.next(null);\r\n this.clearFilter = {};\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 // Action в таблице: При щелчке ПКМ открыть в новой вкладке.\r\n protected onActionMiddleButton(baseUrl: string, queryParamName?: string, queryParamValue?: string) {\r\n return ($event: MouseEvent, item: T) => {\r\n // Нажата средняя кнопка (в новой вкладке).\r\n // 1 -\tAuxiliary button pressed (usually the middle button)\r\n if ($event.button === 1) {\r\n //$event.preventDefault();\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 abstract class BaseServiceClass<T extends BaseClass> {\r\n abstract baseRoute: string;\r\n abstract entityType: any;\r\n\r\n protected countRoute = 'count';\r\n\r\n protected pageIndexParam = 'page';\r\n protected pageSizeParam = 'limit';\r\n protected sortColumnParam = 'column';\r\n protected directionParam = 'direction';\r\n\r\n protected http = inject(HttpClient);\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 + 1)\r\n // переход от индекса к номеру страницы\r\n params = params.append(this.pageIndexParam, pageIndex + 1);\r\n if (pageSize)\r\n params = params.append(this.pageSizeParam, pageSize);\r\n if (sortColumn)\r\n params = params.append(this.sortColumnParam, sortColumn);\r\n if (direction)\r\n params = params.append(this.directionParam, direction);\r\n return params;\r\n }\r\n}\r\n","import { inject, 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 private readonly sanitizer = inject(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';\r\n\r\n@Pipe({\r\n name: 'time'\r\n})\r\nexport class TimePipe implements PipeTransform {\r\n\r\n transform(value: number): string {\r\n // const hour = Math.abs(value) >= 60 ? Math.round(value / 60) + 'ч.' : '';\r\n // const minute = ' ' + Math.abs(value % 60) + 'м.';\r\n // return value === 0 ? '0' : hour + ' ' + minute;\r\n\r\n const hour = Math.abs(value) >= 60 ? Math.floor(Math.abs(value) / 60).toString().padStart(2,'0') : '00';\r\n const minute = Math.abs(value % 60).toString().padStart(2,'0');\r\n const time = hour + ':' + minute;\r\n return value < 0 ? '-' + time : time;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'truncate'\r\n})\r\nexport class TruncatePipe implements PipeTransform {\r\n // Usage:\r\n // {{ str | truncate:[20] }} // or\r\n // {{ str | truncate:[20, '...'] }} // or|\r\n transform(value: string, args: any[]): string {\r\n const limit = args.length > 0 ? parseInt(args[0], 10) : 20;\r\n const trail = args.length > 1 ? args[1] : '...';\r\n return value.length > limit ? value.substring(0, limit) + trail : value;\r\n }\r\n\r\n}\r\n","import { Component, inject, input, output } from '@angular/core';\r\nimport { MatAnchor } from '@angular/material/button';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\n\r\nimport { BaseNavBarMenuClass } from '../../base';\r\nimport { SafePipe } from '../../pipes';\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: [MatAnchor, MatIcon, MatTooltip, SafePipe]\r\n})\r\nexport class NavBarComponent extends BaseNavBarMenuClass {\r\n\r\n /** Видимость панели, когда loggedIn === false. */\r\n visibleOnLogout = input<boolean>(false);\r\n /** Видимость аватара. */\r\n visibleAvatar = input<boolean>(true);\r\n /** Видимость кнопки \"Выйти\". */\r\n visibleLogoutBtn = input<boolean>(true);\r\n\r\n /** Признак, что пользователь авторизован. */\r\n loggedIn = input<boolean>(false);\r\n /** ФИО пользователя. */\r\n fioUser = input<string>('');\r\n /** Всплывающая подсказка о пользователе. */\r\n userTooltip = input<string>('');\r\n /** URL аватара */\r\n avatarURL = input<string>('');\r\n\r\n /** Нажата кнопка \"Выйти\". */\r\n logout = output<string>();\r\n\r\n private readonly dialog = inject(MatDialog);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n onLogout() {\r\n this.logout.emit(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.onLogout();\r\n }\r\n });\r\n this.subscription.add(subs);\r\n }\r\n\r\n}\r\n","@if (visibleOnLogout() || loggedIn()) {\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 (visibleAvatar() && (loggedIn() === false || !avatarURL)) {\r\n <mat-icon [matTooltip]=\"userTooltip()\">account_circle</mat-icon>\r\n }\r\n @if (visibleAvatar() && loggedIn() && avatarURL()) {\r\n <img\r\n class=\"user-photo\"\r\n [src]=\"avatarURL() | safe\"\r\n loading=\"lazy\"\r\n [alt]=\"fioUser()\"\r\n [matTooltip]=\"userTooltip()\">\r\n }\r\n\r\n <span class = \"user-name\" [matTooltip]=\"userTooltip()\">\r\n {{ fioUser() }}\r\n </span>\r\n\r\n @if (visibleLogoutBtn()) {\r\n <a mat-button class=\"pm-button\" (click)=\"openDialog()\">Выйти <mat-icon>logout</mat-icon></a>\r\n }\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}\r\n","<div class=\"center\">\r\n <h3 class=\"mat-display-1\">Страница не найдена</h3>\r\n</div>\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject } 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\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n\r\n ngAfterViewInit() {\r\n this.cdRef.detectChanges();\r\n }\r\n}\r\n","import { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { Component, effect, input, linkedSignal, 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 { 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-vs',\r\n templateUrl: './select-autocomplete-with-vs.component.html',\r\n styleUrl: './select-autocomplete-with-vs.component.css',\r\n imports: [FormsModule, ReactiveFormsModule, MatAutocompleteModule, MatHint, MatError, MatOption, MatIcon,\r\n MatFormField, ScrollingModule, MatInput, MatLabel]\r\n})\r\nexport class BaseSelectAutocompleteWithVsComponent implements OnInit, OnDestroy {\r\n // https://stackblitz.com/edit/autocomplete-with-virtual-scroll-dc9u2g\r\n\r\n // Все элементы\r\n items = input<SelectItem[]>([]);\r\n // Выбранный элемент (входной параметр)\r\n selectedItemInput = input<SelectItem | undefined>(undefined);\r\n // Заголовок\r\n title = input<string>('');\r\n // Видимость\r\n isVisible = input<boolean>(true);\r\n // Обязательность\r\n isRequired = input<boolean>(false);\r\n // Доступность\r\n isDisabled = input<boolean>(false);\r\n // Доступность\r\n width = input<string>('200');\r\n\r\n // Выбранный элемент\r\n selectedItem = linkedSignal(() => this.selectedItemInput());\r\n // Событие изменения выбранного элемента\r\n selectedItemChange = output<string>();\r\n\r\n public height: string = '200px';\r\n // input элемент\r\n inputCtrl = new FormControl();\r\n // отфильтрованные (отображаемые) элементы\r\n filteredItems: SelectItem[] = [];\r\n\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n console.log('ITEMS =', this.items());\r\n //this.filteredItems = this.items();\r\n\r\n console.log('selectedItem =', this.selectedItemInput());\r\n if (this.items().length > 0) {\r\n console.log('filteredItems SET');\r\n this.setFileredItems(this.items());\r\n this.inputCtrl.setValue(this.selectedItemInput());\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\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 console.log('typeof value =', typeof value);\r\n\r\n if (typeof value === 'undefined') {\r\n this.setFileredItems(this.items());\r\n } else {\r\n if (typeof value !== 'object') {\r\n console.log('v1=', value);\r\n this.setFileredItems(this.items()\r\n .filter(option => option.viewValue.toLowerCase().includes(value.toLowerCase())));\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.setFileredItems(this.items()\r\n .filter((option) => option.viewValue.toLowerCase().includes(value.viewValue.toLowerCase())));\r\n console.log('v3=', value);\r\n } else {\r\n this.setFileredItems(this.items());\r\n console.log('v4=', value);\r\n }\r\n }\r\n }\r\n\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.set(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 ? lookup.viewValue : null;\r\n }\r\n\r\n private setFileredItems(items: SelectItem[]) {\r\n this.filteredItems = items;\r\n // Recompute how big the viewport should be.\r\n // eslint-disable-next-line no-magic-numbers\r\n if (items.length < 4) {\r\n // eslint-disable-next-line no-magic-numbers\r\n this.height = items.length * 50 + 'px';\r\n } else {\r\n this.height = '200px';\r\n }\r\n console.log('update filteredItems =', this.filteredItems);\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()) {\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\n\r\nimport { Component, effect, input, 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\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})\r\nexport class BaseSelectWithGroupComponent {\r\n\r\n // Все группы\r\n groups = input<SelectGroup[]>([]);\r\n // Выбранные элементы, ключи (BaseSelectItem.value)\r\n selectedItems = input<string[]>([]);\r\n // Заголовок\r\n title = input<string>('');\r\n // Событие изменения выбранных элементов\r\n selectedItemsChange = output<string[]>();\r\n\r\n separatorKeysCodes: number[] = [ENTER, COMMA];\r\n control = new FormControl<number[]>([]);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.groups().length > 0) {\r\n this.control.setValue(this.selectedItems().map(i => Number(i)));\r\n }\r\n });\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 onClearClick($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(); 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)=\"onClearClick($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, OnDestroy, OnInit, effect, input, linkedSignal, output, viewChild } 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, MatFooterCell, MatFooterCellDef, MatFooterRow, MatFooterRowDef,\r\n MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRow, MatRowDef,\r\n MatTable, MatTableDataSource, MatTableModule\r\n} from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatIconButton } from '@angular/material/button';\r\nimport { RouterLink } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { IColumnOptions } from './models/column-options.interface';\r\nimport { IContextMenuOptions } from './models/context-menu-options.interface';\r\nimport { IPageState, ISortState, ITableState } from './models/table-state';\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, MatFooterRowDef, MatFooterRow,\r\n MatFooterCellDef, MatFooterCell, MatTableModule, MatTooltipModule, MatIconButton]\r\n})\r\nexport class TableComponent<T> implements OnInit, AfterViewInit, OnDestroy {\r\n /** Отображаемые данные. */\r\n data = input<T[]>([]);\r\n /** Количество записей. */\r\n length = input<number>(0);\r\n /** Настройки колонок. */\r\n columnOptions = input<IColumnOptions<T>[]>([]);\r\n /** Состояние сортировки, пагинации. */\r\n tableState = input.required<ITableState>();\r\n /** Разрешен выбор нескольких строк. */\r\n allowMultiSelect = input<boolean>(false);\r\n /** Список элементов контекстного меню. */\r\n opt = input<IContextMenuOptions<T>[]>([]);\r\n /** Отправка события rowDoubleClicked (при двойном щелчке мышью) отключена. */\r\n rowDblClickedDisable = input<boolean>(false);\r\n /** Отображать строку с итогом. */\r\n footer = input<boolean>(false);\r\n\r\n /** Изменение страницы. */\r\n pageStateChange = output<IPageState>();\r\n /** Изменение сортировки. */\r\n sortStateChange = output<ISortState>();\r\n /** Изменение выбранных записей. */\r\n selectionChange = output<T[]>();\r\n /** Двойной щелчек ЛКМ*/\r\n rowDoubleClicked = output<T>();\r\n\r\n readonly sort = viewChild(MatSort);\r\n readonly paginator = viewChild(MatPaginator);\r\n readonly contextMenu = viewChild(MatMenuTrigger);\r\n\r\n pageState = linkedSignal<IPageState>(() => {\r\n return { pageIndex: this.tableState().pageIndex, pageSize: this.tableState().pageSize };\r\n });\r\n\r\n sortState = linkedSignal<ISortState>(() => {\r\n return { sortActive: this.tableState().sortActive, sortDirection: this.tableState().sortDirection };\r\n });\r\n\r\n /** Выбранная строка, для которого будет показываться меню при нажатии правой кнопки мыши. */\r\n itemForMenu?: T;\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[];\r\n\r\n\r\n subscription = new Subscription();\r\n\r\n constructor() {\r\n effect(() => {\r\n this.dataSource.data = this.data();\r\n\r\n // сохранить выделенные строки, если они все еще есть в данных\r\n const selected = this.selection.selected;\r\n this.selection.clear();\r\n this.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 }\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 // пересоздаем, т.к. параметр 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 const paginator = this.paginator();\r\n if (paginator) {\r\n paginator._intl.itemsPerPageLabel = 'Записей на странице';\r\n paginator._intl.firstPageLabel = 'Первая страница';\r\n paginator._intl.previousPageLabel = 'Предыдущая страница';\r\n paginator._intl.nextPageLabel = 'Следующая страница';\r\n paginator._intl.lastPageLabel = 'Последняя страница';\r\n\r\n // изменение пагинации\r\n const subs = paginator.page.subscribe(page => {\r\n const pageState = {\r\n pageIndex: page.pageIndex,\r\n pageSize: page.pageSize\r\n } as IPageState;\r\n this.pageState.set(pageState);\r\n this.pageStateChange.emit(pageState);\r\n });\r\n this.subscription.add(subs);\r\n }\r\n\r\n // изменение сортировки\r\n const sortValue = this.sort();\r\n if (sortValue) {\r\n const subs = sortValue.sortChange\r\n .subscribe(sort => {\r\n const sortState = {\r\n sortActive: sort.active,\r\n sortDirection: sort.direction\r\n } as ISortState;\r\n this.sortState.set(sortState);\r\n this.sortStateChange.emit(sortState);\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.rowDblClickedDisable())\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 const contextMenu = this.contextMenu();\r\n if (contextMenu) {\r\n contextMenu.menuData = { itemForMenu };\r\n contextMenu.menu?.focusFirstItem('mouse');\r\n contextMenu.openMenu();\r\n }\r\n }\r\n\r\n getTotal(columnName: string) {\r\n const arr = this.dataSource.data\r\n .filter(t => typeof t[columnName as keyof T] === 'number')\r\n .map(t => t[columnName as keyof T]);\r\n if (arr.length === 0)\r\n return ''\r\n else\r\n return arr.reduce((acc, value) => acc + <number>value, 0);\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]=\"sortState().sortActive || ''\"\r\n [matSortDirection]=\"sortState().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 @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n }\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)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n {{element[item.name]}}\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footer) {\r\n <strong>{{ getTotal(item.name) }}</strong>\r\n }\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n } \r\n }\r\n @if (item.format === 'pre-wrap') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" class=\"pre-wrap\" [matTooltip]=\"item.tooltip ?? ''\">\r\n {{element[item.name]}}\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'link') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <a [href]=\"element[item.name]\" target=\"_blank\">{{element[item.name]}}</a>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'linkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <a [href]=\"element[item.name]\" target=\"_blank\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'routerLink') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <a [routerLink]=\"[element[item.name]]\">{{element[item.name]}}</a>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'routerLinkIcon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <a [routerLink]=\"[element[item.name]]\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </a>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'checkbox') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n <mat-checkbox [checked]=\"element[item.name] === 1\" [disabled]=\"true\"></mat-checkbox>\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'icon') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (item.icon) {\r\n <mat-icon [class]=\"item.classList ? item.classList : ''\" >{{item.icon}}</mat-icon>\r\n } \r\n @if (item.symbol) {\r\n <span [class]=\"item.classList ? item.classList : ''\" >{{item.symbol}}</span>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'icons') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (item.icons) {\r\n <mat-icon [class]=\"item.classList ? item.classList[element[item.name]] : ''\" \r\n [matTooltip]=\"item.tooltips ? item.tooltips[element[item.name]] : ''\">{{item.icons[element[item.name]]}}</mat-icon>\r\n } \r\n @if (item.symbols) {\r\n <span [class]=\"item.classList ? item.classList[element[item.name]] : ''\" >{{item.symbols[element[item.name]]}}</span>\r\n }\r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'actions') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\">\r\n @if (item.actions) {\r\n <div class=\"actions-container\">\r\n @for (action of item.actions; track action) {\r\n @if (!(action.hideFn ? action.hideFn(element) : action.hide)) {\r\n <button mat-icon-button\r\n (click)=\"action.onClickFn ? action.onClickFn(element) : ''\"\r\n (mousedown)=\"action.onClickMiddleFn ? action.onClickMiddleFn($event, element) : ''\"\r\n [disabled]=\"action.disabledFn ? action.disabledFn(element) : action.disabled\"\r\n [matTooltip]=\"action.tooltip ? action.tooltip : ''\" >\r\n @if (action.icon) {\r\n <mat-icon [class]=\"action.classList ? action.classList : ''\" >{{action.icon}}</mat-icon>\r\n }\r\n @if (action.symbol) {\r\n <span [class]=\"action.classList ? action.classList : ''\" >{{action.symbol}}</span>\r\n }\r\n {{ action.title }}\r\n </button>\r\n }\r\n }\r\n </div>\r\n } \r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\r\n @if (item.format === 'image') {\r\n <td mat-cell *matCellDef=\"let element\" (contextmenu)=\"onContextMenu($event, element)\" [matTooltip]=\"item.tooltip ?? ''\">\r\n @if (element[item.name]) {\r\n <img\r\n [src]=\"element[item.name]\"\r\n [alt]=\"item.imageAlt && element[item.imageAlt] ? element[item.imageAlt] : ''\"\r\n [class]=\"item.classList ? item.classList : ''\"\r\n />\r\n } \r\n </td>\r\n @if (footer()) {\r\n <td mat-footer-cell *matFooterCellDef>\r\n @if (item.footerTitle) {\r\n <strong>{{ item.footerTitle }}</strong>\r\n }\r\n </td>\r\n }\r\n }\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; columns: displayedColumns;\" \r\n (click)=\"onRowClicked(row)\" (dblclick)=\"onRowDblClicked(row)\" \r\n class=\"element-row\" [class.selected-row]=\"selection.isSelected(row)\">\r\n </tr>\r\n @if (footer()) {\r\n <tr mat-footer-row *matFooterRowDef=\"displayedColumns; sticky: true\"></tr>\r\n }\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 [class]=\"menuItem.classList ? menuItem.classList : ''\">{{menuItem.icon}}</mat-icon>\r\n }\r\n @if (menuItem.symbol) {\r\n <span [class]=\"menuItem.classList ? menuItem.classList : ''\">{{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()\"\r\n [pageIndex]=\"pageState().pageIndex || defaultPageIndex\"\r\n [pageSizeOptions]=\"[5, 10, 20, 50, 100]\"\r\n [pageSize]=\"pageState().pageSize || defaultPageSize\"\r\n showFirstLastButtons\r\n itemsPerPageLabel=\"\"\r\n></mat-paginator>\r\n</div>\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { inject, Injectable } from '@angular/core';\r\n\r\nimport { ProgressSpinnerComponent } from '../shared';\r\n\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 private readonly overlay = inject(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 { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExportService {\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}\r\n","import { Injectable, inject, NgZone } from \"@angular/core\";\r\nimport { Observable, ReplaySubject } from \"rxjs\";\r\n\r\nimport { SseUser } from \"./models/sse-user\";\r\nimport { Topic } from \"./models/topic\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SseService<T> {\r\n\r\n private zone = inject(NgZone);\r\n\r\n private eventSource: EventSource | null = null;\r\n private isConnected = false;\r\n\r\n constructor() { }\r\n\r\n createSseEventSource(baseUrl: string, user: SseUser, topic: Topic): Observable<T> {\r\n const subject = new ReplaySubject<T>(1);\r\n\r\n // Close any existing connection\r\n this.closeSseEventSource();\r\n\r\n const topicUri = topic.getTopic(baseUrl, user);\r\n // environment.sse_url\r\n this.eventSource = new EventSource(topicUri\r\n //, {withCredentials: true}\r\n );\r\n\r\n if (this.eventSource) {\r\n this.isConnected = true;\r\n\r\n // Listen for messages\r\n this.eventSource.onmessage = (event: MessageEvent) => {\r\n console.log(event);\r\n const messageData: T = JSON.parse(event.data);\r\n this.zone.run(() => {\r\n subject.next(messageData);\r\n });\r\n };\r\n this.eventSource.onopen = () => {\r\n console.log('SSE connection opened.');\r\n };\r\n // Process error\r\n this.eventSource.onerror = (error: any) => {\r\n console.error('SSE error:', error);\r\n this.reconnectOnError(baseUrl, user, topic, subject);\r\n };\r\n }\r\n return subject.asObservable();\r\n }\r\n\r\n private reconnectOnError(baseUrl: string, user: SseUser, topic: Topic, subject: ReplaySubject<T>): void {\r\n\r\n this.closeSseEventSource();\r\n if (this.isConnected) return; // Prevent duplicate connections\r\n\r\n console.log('Reconnecting to SSE in 1 second...');\r\n setTimeout(() => {\r\n this.zone.run(() => {\r\n this.createSseEventSource(baseUrl, user, topic).subscribe(subject);\r\n });\r\n }, 1000);\r\n }\r\n\r\n closeSseEventSource(): void {\r\n if (this.eventSource) {\r\n this.eventSource.close();\r\n this.eventSource = null;\r\n this.isConnected = false;\r\n console.log('SSE Connection closed');\r\n }\r\n }\r\n}","import { Component, inject, OnDestroy, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { Authenticate } from '../../models/authenticate';\r\nimport { AuthService } from '@kuzntsv/uikit';\r\nimport { LoginFormComponent } from '../login-form/login-form.component';\r\nimport { PermitFormComponent } from '../permit-form/permit-form.component';\r\nimport { LoaderService } from '../../../services';\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\r\n private readonly authService = inject(AuthService);\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly loaderService = inject(LoaderService);\r\n\r\n constructor() {\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 }\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.onSubmitError());\r\n }\r\n\r\n onSubmitPermit($event: string) {\r\n const permit = $event;\r\n this.authService.loginByPermit(permit, this.idCas);\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, effect, ElementRef, inject, input } from '@angular/core';\r\nimport { AuthService, RoleService } from '@kuzntsv/uikit';\r\n\r\n@Directive({\r\n selector: '[ngxUikDisableIfRole]',\r\n standalone: true\r\n})\r\nexport class DisableIfRoleDirective {\r\n readonly roles = input<string[]>([], { alias: 'ngxUikDisableIfRole' });\r\n\r\n private readonly el = inject(ElementRef);\r\n private readonly authService = inject(AuthService);\r\n private readonly roleService = inject(RoleService);\r\n\r\n constructor() {\r\n effect(() => {\r\n const hasRequiredRole = this.roleService.hasRoles(this.authService.roles(), this.roles());\r\n\r\n // Блокируем, если ролей НЕТ\r\n const shouldDisable = !hasRequiredRole;\r\n\r\n // 2. Безопасное управление атрибутом для любых элементов\r\n const nativeEl = this.el.nativeElement;\r\n \r\n if ('disabled' in nativeEl) {\r\n nativeEl.disabled = shouldDisable;\r\n } else {\r\n // Для элементов вроде <a>, у которых нет свойства disabled в DOM API\r\n if (shouldDisable) {\r\n nativeEl.setAttribute('disabled', 'true');\r\n } else {\r\n nativeEl.removeAttribute('disabled');\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\r\n\r\nimport { AuthService, RoleService } from '@kuzntsv/uikit';\r\n\r\n@Directive({\r\n selector: '[ngxUikHideIfRoleNot]',\r\n standalone: true\r\n})\r\nexport class HideIfRoleNotDirective {\r\n readonly roles = input<string[]>([], { alias: 'ngxUikHideIfRoleNot' });\r\n\r\n private readonly el = inject(ElementRef);\r\n private readonly authService = inject(AuthService);\r\n private readonly roleService = inject(RoleService);\r\n\r\n constructor() {\r\n effect(() => {\r\n // Элемент скрывается, если у пользователя нет ни одной роли из перереданных в \"roles\"\r\n // или в списке \"roles\" есть роль \"hideRole\".\r\n const isHide = this.roleService.isHideElement(this.roles(), this.authService.roles());\r\n \r\n // Управляем отображением. Пустая строка возвращает дефолтный CSS-стиль элемента.\r\n this.el.nativeElement.style.display = isHide ? 'none' : '';\r\n });\r\n }\r\n}\r\n","import { Directive, effect, inject, input } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[setValue]',\r\n standalone: true,\r\n})\r\nexport class SetValueDirective {\r\n readonly value = input<any>(undefined, { alias: 'setValue' });\r\n\r\n // 3. Используем опциональный inject, чтобы директива не падала, если формы нет\r\n private readonly ngControl = inject(NgControl, { optional: true });\r\n\r\n constructor() {\r\n effect(() => {\r\n // Эффект автоматически отслеживает изменение входного значения\r\n const val = this.value();\r\n\r\n if (this.ngControl?.control) {\r\n this.ngControl.control.setValue(val, { emitEvent: false });\r\n }\r\n });\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn, Router } from '@angular/router';\r\nimport { AuthService } from '@kuzntsv/uikit';\r\n\r\nexport const authGuard = (allowedRoles: string[]): CanActivateFn => {\r\n return (route, state) => {\r\n const authService = inject(AuthService);\r\n const router = inject(Router);\r\n\r\n const isLogin = authService.loggedIn();\r\n if (!isLogin) {\r\n console.log('state.url =', state.url);\r\n\r\n // Если не зарегистрирован вернуть в форму авторизации\r\n return router.createUrlTree(['/login'], { queryParams: { returnUrl: state.url } });\r\n }\r\n\r\n return isLogin;\r\n };\r\n};","import { ActivatedRouteSnapshot, CanActivateFn } from '@angular/router';\r\n\r\nexport const redirectGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\r\n const externalUrl = route.data?.['externalUrl'];\r\n \r\n if (externalUrl) {\r\n window.location.href = externalUrl;\r\n }\r\n \r\n return true;\r\n};\r\n","import { inject } from '@angular/core';\r\nimport { CanActivateFn } from '@angular/router';\r\nimport { AuthService, RoleService } from '@kuzntsv/uikit';\r\n\r\nexport const roleGuard = (allowedRoles: string[]): CanActivateFn => {\r\n return (route, state) => {\r\n const authService = inject(AuthService);\r\n const roleService = inject(RoleService);\r\n\r\n // Читаем роли из Сигнала\r\n const userRoles = authService.roles();\r\n\r\n // Проверяем доступ на основе аргумента allowedRoles\r\n return roleService.hasRoles(userRoles, allowedRoles);\r\n };\r\n};","import { InjectionToken } from '@angular/core';\r\n\r\nexport interface LoggerConfig {\r\n isProduction: boolean;\r\n logLevel?: 'debug' | 'info' | 'warn' | 'error';\r\n}\r\n\r\nexport const LOGGER_CONFIG = new InjectionToken<LoggerConfig>('LOGGER_CONFIG');\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { LOGGER_CONFIG } from './logger.config';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoggerService {\r\n public logPrefix: string = '';\r\n private isProduction: boolean;\r\n private readonly config = inject(LOGGER_CONFIG);\r\n\r\n constructor() {\r\n this.isProduction = this.config.isProduction;\r\n }\r\n\r\n log(message: string, ...args: any[]) {\r\n if (!this.isProduction) {\r\n // Prepend log prefix log string\r\n args.unshift(this.logPrefix + ' ');\r\n console.log(`[DEV LOG]: ${message}`, ...args);\r\n }else {\r\n console.log(`[PROD LOG]: ${message}`, ...args);\r\n }\r\n }\r\n\r\n error(message: string, ...args: any[]): void {\r\n console.error(`[ERROR]: ${message}`, ...args);\r\n }\r\n}\r\n\r\n\r\n\r\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\nimport { LOGGER_CONFIG, LoggerConfig } from './logger.config';\r\nimport { LoggerService } from './logger.service';\r\n\r\n\r\nexport function provideLogger(config: LoggerConfig): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n { provide: LOGGER_CONFIG, useValue: config },\r\n LoggerService\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","/*\r\n * Public API Surface of uikit\r\n */\r\n\r\nexport * from './auth';\r\nexport * from './base';\r\nexport * from './directives';\r\nexport * from './guards';\r\nexport * from './logger';\r\nexport * from './models';\r\nexport * from './pipes';\r\nexport * from './services';\r\nexport * from './shared';\r\nexport * from './types';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map","startWith","i3","MatOption","MatFormField","MatLabel"],"mappings":"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"}
|