@nettyapps/ntyux 21.0.21 → 21.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, NgModule, inject, Injectable, input, output, ViewContainerRef, ViewChild, Input, ViewEncapsulation, signal, effect, computed, forwardRef, ChangeDetectionStrategy, model, ElementRef } from '@angular/core';
|
|
2
|
+
import { Component, NgModule, inject, Injectable, input, output, ViewContainerRef, ViewChild, Input, ViewEncapsulation, signal, effect, computed, forwardRef, ChangeDetectionStrategy, model, ElementRef, Renderer2, EventEmitter, Output, Directive } from '@angular/core';
|
|
3
3
|
import * as i1$1 from '@angular/material/form-field';
|
|
4
4
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
5
5
|
import * as i2$1 from '@angular/material/autocomplete';
|
|
@@ -11,7 +11,7 @@ import * as i4 from '@angular/material/input';
|
|
|
11
11
|
import { MatInputModule } from '@angular/material/input';
|
|
12
12
|
import * as i2 from '@angular/material/icon';
|
|
13
13
|
import { MatIconModule } from '@angular/material/icon';
|
|
14
|
-
import { UiBase, NettyUINumberInput, NettyUISearchInput } from '@nettyapps/ntyui';
|
|
14
|
+
import { UiBase, NettyUINumberInput, NettyUISearchInput, NettyUIButton } from '@nettyapps/ntyui';
|
|
15
15
|
import { HttpClient } from '@angular/common/http';
|
|
16
16
|
import { EnvironmentProxy } from '@nettyapps/ntycontract';
|
|
17
17
|
import { MAT_DIALOG_DATA, MatDialog, MatDialogConfig, MatDialogModule } from '@angular/material/dialog';
|
|
@@ -22,7 +22,7 @@ import { TranslateModule } from '@ngx-translate/core';
|
|
|
22
22
|
import { Clipboard } from '@angular/cdk/clipboard';
|
|
23
23
|
import { AlertService, CommonService, AuthenticationService, NettyMenuService, CredentialsService, NettyImageService } from '@nettyapps/ntybase';
|
|
24
24
|
import * as i5 from '@angular/router';
|
|
25
|
-
import { Router, ActivatedRoute, RouterLink, RouterModule } from '@angular/router';
|
|
25
|
+
import { Router, ActivatedRoute, RouterLink, RouterModule, RouterOutlet } from '@angular/router';
|
|
26
26
|
import * as i3$2 from '@angular/material/list';
|
|
27
27
|
import { MatListModule } from '@angular/material/list';
|
|
28
28
|
import * as i4$1 from '@angular/material/menu';
|
|
@@ -34,6 +34,10 @@ import * as i2$2 from '@angular/material/button';
|
|
|
34
34
|
import { MatButtonModule } from '@angular/material/button';
|
|
35
35
|
import * as i1$2 from '@angular/material/card';
|
|
36
36
|
import { MatCardModule } from '@angular/material/card';
|
|
37
|
+
import * as i1$3 from '@angular/material/sidenav';
|
|
38
|
+
import { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';
|
|
39
|
+
import * as i2$3 from '@angular/cdk/drag-drop';
|
|
40
|
+
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
37
41
|
|
|
38
42
|
class Ntyux {
|
|
39
43
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: Ntyux, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -1164,6 +1168,243 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1164
1168
|
args: [{ selector: 'ntyux-filter-card', standalone: true, imports: [MatCardModule, MatButtonModule, FormsModule], template: "<mat-card class=\"filter-card\" apperance=\"outlined\">\n <mat-card-title>{{Title()}}</mat-card-title>\n <mat-card-subtitle>{{SubTitle()}}</mat-card-subtitle>\n <mat-card-content>\n <ng-content>\n No content provided\n </ng-content>\n </mat-card-content>\n <mat-card-actions class=\"mat-card-actions\">\n <button matButton=\"outlined\" (click)=\"onReset.emit()\">Reset</button>\n @if (isExportVisible()) {\n <button matButton=\"outlined\" [disabled]=\"!isFormValid()\" (click)=\"onExport.emit()\">Export</button>\n }\n <button matButton=\"filled\" [disabled]=\"!isFormValid()\" (click)=\"onApply.emit()\">Apply</button>\n </mat-card-actions>\n</mat-card>", styles: [".filter-card{padding:1rem 1rem 0}.mat-card-actions{justify-content:flex-end}\n"] }]
|
|
1165
1169
|
}], propDecorators: { Title: [{ type: i0.Input, args: [{ isSignal: true, alias: "Title", required: false }] }], SubTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "SubTitle", required: false }] }], isExportVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "isExportVisible", required: false }] }], isFormValid: [{ type: i0.Input, args: [{ isSignal: true, alias: "isFormValid", required: false }] }], onExport: [{ type: i0.Output, args: ["onExport"] }], onReset: [{ type: i0.Output, args: ["onReset"] }], onApply: [{ type: i0.Output, args: ["onApply"] }] } });
|
|
1166
1170
|
|
|
1171
|
+
class NtySidenavResizableDirective {
|
|
1172
|
+
el = inject(ElementRef);
|
|
1173
|
+
renderer = inject(Renderer2);
|
|
1174
|
+
sidenav = inject(MatSidenav, { host: true, optional: true });
|
|
1175
|
+
side = 'left';
|
|
1176
|
+
minWidth = 100;
|
|
1177
|
+
maxWidth = 1200;
|
|
1178
|
+
widthChange = new EventEmitter();
|
|
1179
|
+
isResizing = false;
|
|
1180
|
+
startX = 0;
|
|
1181
|
+
startWidth = 0;
|
|
1182
|
+
dragCleanup = [];
|
|
1183
|
+
handle = null;
|
|
1184
|
+
ngOnInit() {
|
|
1185
|
+
this.createHandle();
|
|
1186
|
+
}
|
|
1187
|
+
ngOnDestroy() {
|
|
1188
|
+
this.stopResize();
|
|
1189
|
+
if (this.handle) {
|
|
1190
|
+
this.handle.remove();
|
|
1191
|
+
}
|
|
1192
|
+
}
|
|
1193
|
+
createHandle() {
|
|
1194
|
+
this.handle = this.renderer.createElement('div');
|
|
1195
|
+
this.renderer.addClass(this.handle, 'sidenav-resize-handle');
|
|
1196
|
+
this.renderer.addClass(this.handle, `handle-${this.side}`);
|
|
1197
|
+
// Ensure handle is always on top
|
|
1198
|
+
this.renderer.setStyle(this.handle, 'z-index', '99999');
|
|
1199
|
+
this.renderer.setStyle(this.handle, 'pointer-events', 'auto');
|
|
1200
|
+
this.renderer.appendChild(this.el.nativeElement, this.handle);
|
|
1201
|
+
this.renderer.listen(this.handle, 'mousedown', (event) => this.initResize(event));
|
|
1202
|
+
}
|
|
1203
|
+
initResize(event) {
|
|
1204
|
+
event.preventDefault();
|
|
1205
|
+
event.stopPropagation();
|
|
1206
|
+
this.isResizing = true;
|
|
1207
|
+
this.startX = event.clientX;
|
|
1208
|
+
this.startWidth = this.el.nativeElement.offsetWidth;
|
|
1209
|
+
this.dragCleanup.push(this.renderer.listen('window', 'mousemove', (e) => this.resize(e)));
|
|
1210
|
+
this.dragCleanup.push(this.renderer.listen('window', 'mouseup', () => this.stopResize()));
|
|
1211
|
+
}
|
|
1212
|
+
resize(event) {
|
|
1213
|
+
if (!this.isResizing)
|
|
1214
|
+
return;
|
|
1215
|
+
let newWidth;
|
|
1216
|
+
if (this.side === 'left') {
|
|
1217
|
+
// Dragging left edge of a right-aligned sidenav
|
|
1218
|
+
newWidth = this.startWidth + (this.startX - event.clientX);
|
|
1219
|
+
}
|
|
1220
|
+
else {
|
|
1221
|
+
// Dragging right edge of a left-aligned sidenav
|
|
1222
|
+
newWidth = this.startWidth + (event.clientX - this.startX);
|
|
1223
|
+
}
|
|
1224
|
+
if (newWidth >= this.minWidth && newWidth <= this.maxWidth) {
|
|
1225
|
+
this.renderer.setStyle(this.el.nativeElement, 'width', `${newWidth}px`);
|
|
1226
|
+
this.renderer.setStyle(this.el.nativeElement, 'max-width', 'none');
|
|
1227
|
+
this.renderer.setStyle(this.el.nativeElement, 'min-width', '0');
|
|
1228
|
+
this.widthChange.emit(newWidth);
|
|
1229
|
+
// Trigger window resize event to notify components like Ag-Grid to recalculate their size
|
|
1230
|
+
window.dispatchEvent(new Event('resize'));
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1233
|
+
stopResize() {
|
|
1234
|
+
this.isResizing = false;
|
|
1235
|
+
this.dragCleanup.forEach(cleanup => cleanup());
|
|
1236
|
+
this.dragCleanup = [];
|
|
1237
|
+
}
|
|
1238
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NtySidenavResizableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1239
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: NtySidenavResizableDirective, isStandalone: true, selector: "[ntySidenavResizable]", inputs: { side: "side", minWidth: "minWidth", maxWidth: "maxWidth" }, outputs: { widthChange: "widthChange" }, ngImport: i0 });
|
|
1240
|
+
}
|
|
1241
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NtySidenavResizableDirective, decorators: [{
|
|
1242
|
+
type: Directive,
|
|
1243
|
+
args: [{
|
|
1244
|
+
selector: '[ntySidenavResizable]',
|
|
1245
|
+
standalone: true
|
|
1246
|
+
}]
|
|
1247
|
+
}], propDecorators: { side: [{
|
|
1248
|
+
type: Input
|
|
1249
|
+
}], minWidth: [{
|
|
1250
|
+
type: Input
|
|
1251
|
+
}], maxWidth: [{
|
|
1252
|
+
type: Input
|
|
1253
|
+
}], widthChange: [{
|
|
1254
|
+
type: Output
|
|
1255
|
+
}] } });
|
|
1256
|
+
|
|
1257
|
+
class NtyUXLayout {
|
|
1258
|
+
commonService = inject(CommonService);
|
|
1259
|
+
// Header
|
|
1260
|
+
leftSidenavOpen = true;
|
|
1261
|
+
toggleLeftSidenav() {
|
|
1262
|
+
this.leftSidenavOpen = !this.leftSidenavOpen;
|
|
1263
|
+
}
|
|
1264
|
+
// Left sidenav
|
|
1265
|
+
isMinimized = false;
|
|
1266
|
+
currentSidenavWidth = 350; // Default width
|
|
1267
|
+
toggleMinimize() {
|
|
1268
|
+
this.isMinimized = !this.isMinimized;
|
|
1269
|
+
}
|
|
1270
|
+
onSidenavResize(width) {
|
|
1271
|
+
this.currentSidenavWidth = width;
|
|
1272
|
+
}
|
|
1273
|
+
// Minimize fixed
|
|
1274
|
+
get drawerWidth() {
|
|
1275
|
+
return this.isMinimized ? '80px' : `${this.currentSidenavWidth}px`;
|
|
1276
|
+
}
|
|
1277
|
+
// Right sidenav
|
|
1278
|
+
get rightSidenavOpen() {
|
|
1279
|
+
return this.commonService.rightSidenavOpen();
|
|
1280
|
+
}
|
|
1281
|
+
// Language
|
|
1282
|
+
showIcon = signal(true, ...(ngDevMode ? [{ debugName: "showIcon" }] : []));
|
|
1283
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NtyUXLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1284
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: NtyUXLayout, isStandalone: true, selector: "app-layout", ngImport: i0, template: "<ntybase-toolbar [(icon)]=\"showIcon\" (toggleSidenav)=\"toggleLeftSidenav()\"></ntybase-toolbar>\n\n<mat-sidenav-container class=\"netty-sidenav-container\" [autosize]=\"true\">\n <!-- Left Sidenav -->\n <mat-sidenav #leftSidenav mode=\"side\" [opened]=\"leftSidenavOpen\" position=\"start\" [class.minimized]=\"isMinimized\"\n ntySidenavResizable side=\"right\" (widthChange)=\"onSidenavResize($event)\">\n <ntybase-left-sidenav [isMinimized]=\"isMinimized\" (toggleMinimize)=\"toggleMinimize()\">\n </ntybase-left-sidenav>\n </mat-sidenav>\n\n <!-- Main Content -->\n <mat-sidenav-content [style.margin-left]=\"leftSidenavOpen ? drawerWidth : '0'\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n\n <!-- Right Sidenav -->\n <mat-sidenav #rightSidenav mode=\"side\" position=\"end\" [opened]=\"rightSidenavOpen\" class=\"netty-right-sidenav\"\n ntySidenavResizable side=\"left\">\n <router-outlet name=\"rightSidenav\"></router-outlet>\n </mat-sidenav>\n</mat-sidenav-container>", styles: [":host ::ng-deep .sidenav-resize-handle{position:absolute;top:0;bottom:0;width:10px;background-color:transparent;z-index:99999!important;transition:background-color .2s;pointer-events:auto}:host ::ng-deep .sidenav-resize-handle:hover{background-color:#0000000d;cursor:ew-resize!important}:host ::ng-deep .sidenav-resize-handle.handle-left{left:0}:host ::ng-deep .sidenav-resize-handle.handle-right{right:0}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i1$3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i1$3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i1$3.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: Toolbar, selector: "ntybase-toolbar", inputs: ["icon"], outputs: ["toggleSidenav", "iconChange"] }, { kind: "component", type: LeftSidenav, selector: "ntybase-left-sidenav", inputs: ["isMinimized"], outputs: ["toggleMinimize"] }, { kind: "directive", type: NtySidenavResizableDirective, selector: "[ntySidenavResizable]", inputs: ["side", "minWidth", "maxWidth"], outputs: ["widthChange"] }] });
|
|
1285
|
+
}
|
|
1286
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NtyUXLayout, decorators: [{
|
|
1287
|
+
type: Component,
|
|
1288
|
+
args: [{ selector: 'app-layout', imports: [RouterOutlet, MatSidenavModule, Toolbar, LeftSidenav, NtySidenavResizableDirective], template: "<ntybase-toolbar [(icon)]=\"showIcon\" (toggleSidenav)=\"toggleLeftSidenav()\"></ntybase-toolbar>\n\n<mat-sidenav-container class=\"netty-sidenav-container\" [autosize]=\"true\">\n <!-- Left Sidenav -->\n <mat-sidenav #leftSidenav mode=\"side\" [opened]=\"leftSidenavOpen\" position=\"start\" [class.minimized]=\"isMinimized\"\n ntySidenavResizable side=\"right\" (widthChange)=\"onSidenavResize($event)\">\n <ntybase-left-sidenav [isMinimized]=\"isMinimized\" (toggleMinimize)=\"toggleMinimize()\">\n </ntybase-left-sidenav>\n </mat-sidenav>\n\n <!-- Main Content -->\n <mat-sidenav-content [style.margin-left]=\"leftSidenavOpen ? drawerWidth : '0'\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n\n <!-- Right Sidenav -->\n <mat-sidenav #rightSidenav mode=\"side\" position=\"end\" [opened]=\"rightSidenavOpen\" class=\"netty-right-sidenav\"\n ntySidenavResizable side=\"left\">\n <router-outlet name=\"rightSidenav\"></router-outlet>\n </mat-sidenav>\n</mat-sidenav-container>", styles: [":host ::ng-deep .sidenav-resize-handle{position:absolute;top:0;bottom:0;width:10px;background-color:transparent;z-index:99999!important;transition:background-color .2s;pointer-events:auto}:host ::ng-deep .sidenav-resize-handle:hover{background-color:#0000000d;cursor:ew-resize!important}:host ::ng-deep .sidenav-resize-handle.handle-left{left:0}:host ::ng-deep .sidenav-resize-handle.handle-right{right:0}\n"] }]
|
|
1289
|
+
}] });
|
|
1290
|
+
|
|
1291
|
+
class NtyResizableDirective {
|
|
1292
|
+
el = inject(ElementRef);
|
|
1293
|
+
renderer = inject(Renderer2);
|
|
1294
|
+
isEnabled = true;
|
|
1295
|
+
isResizing = false;
|
|
1296
|
+
startX = 0;
|
|
1297
|
+
startY = 0;
|
|
1298
|
+
startWidth = 0;
|
|
1299
|
+
startHeight = 0;
|
|
1300
|
+
dragCleanup = [];
|
|
1301
|
+
handle = null;
|
|
1302
|
+
ngOnInit() {
|
|
1303
|
+
if (this.isEnabled) {
|
|
1304
|
+
this.createHandle();
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
ngOnDestroy() {
|
|
1308
|
+
this.stopResize();
|
|
1309
|
+
if (this.handle) {
|
|
1310
|
+
this.handle.remove();
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
createHandle() {
|
|
1314
|
+
this.handle = this.renderer.createElement('div');
|
|
1315
|
+
this.renderer.addClass(this.handle, 'resize-handle');
|
|
1316
|
+
const icon = this.renderer.createElement('mat-icon');
|
|
1317
|
+
this.renderer.addClass(icon, 'mat-icon');
|
|
1318
|
+
this.renderer.addClass(icon, 'material-icons');
|
|
1319
|
+
const iconText = this.renderer.createText('open_with');
|
|
1320
|
+
this.renderer.appendChild(icon, iconText);
|
|
1321
|
+
this.renderer.appendChild(this.handle, icon);
|
|
1322
|
+
this.renderer.appendChild(this.el.nativeElement, this.handle);
|
|
1323
|
+
this.renderer.listen(this.handle, 'mousedown', (event) => this.initResize(event));
|
|
1324
|
+
}
|
|
1325
|
+
initResize(event) {
|
|
1326
|
+
event.preventDefault();
|
|
1327
|
+
event.stopPropagation();
|
|
1328
|
+
this.isResizing = true;
|
|
1329
|
+
this.startX = event.clientX;
|
|
1330
|
+
this.startY = event.clientY;
|
|
1331
|
+
const dialogContainer = this.el.nativeElement.closest('.cdk-overlay-pane');
|
|
1332
|
+
if (!dialogContainer)
|
|
1333
|
+
return;
|
|
1334
|
+
const rect = dialogContainer.getBoundingClientRect();
|
|
1335
|
+
this.startWidth = rect.width;
|
|
1336
|
+
this.startHeight = rect.height;
|
|
1337
|
+
this.dragCleanup.push(this.renderer.listen('window', 'mousemove', (e) => this.resize(e)));
|
|
1338
|
+
this.dragCleanup.push(this.renderer.listen('window', 'mouseup', () => this.stopResize()));
|
|
1339
|
+
}
|
|
1340
|
+
resize(event) {
|
|
1341
|
+
if (!this.isResizing)
|
|
1342
|
+
return;
|
|
1343
|
+
const dx = event.clientX - this.startX;
|
|
1344
|
+
const dy = event.clientY - this.startY;
|
|
1345
|
+
const dialogContainer = this.el.nativeElement.closest('.cdk-overlay-pane');
|
|
1346
|
+
if (dialogContainer) {
|
|
1347
|
+
this.renderer.setStyle(dialogContainer, 'width', `${this.startWidth + dx}px`);
|
|
1348
|
+
this.renderer.setStyle(dialogContainer, 'height', `${this.startHeight + dy}px`);
|
|
1349
|
+
this.renderer.setStyle(dialogContainer, 'max-width', 'unset');
|
|
1350
|
+
this.renderer.setStyle(dialogContainer, 'max-height', 'unset');
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
stopResize() {
|
|
1354
|
+
this.isResizing = false;
|
|
1355
|
+
this.dragCleanup.forEach(cleanup => cleanup());
|
|
1356
|
+
this.dragCleanup = [];
|
|
1357
|
+
}
|
|
1358
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NtyResizableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1359
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.6", type: NtyResizableDirective, isStandalone: true, selector: "[ntyResizable]", inputs: { isEnabled: ["ntyResizable", "isEnabled"] }, ngImport: i0 });
|
|
1360
|
+
}
|
|
1361
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NtyResizableDirective, decorators: [{
|
|
1362
|
+
type: Directive,
|
|
1363
|
+
args: [{
|
|
1364
|
+
selector: '[ntyResizable]',
|
|
1365
|
+
standalone: true
|
|
1366
|
+
}]
|
|
1367
|
+
}], propDecorators: { isEnabled: [{
|
|
1368
|
+
type: Input,
|
|
1369
|
+
args: ['ntyResizable']
|
|
1370
|
+
}] } });
|
|
1371
|
+
|
|
1372
|
+
class NtyUXSaveLayout {
|
|
1373
|
+
title = '';
|
|
1374
|
+
identifier = '';
|
|
1375
|
+
viewMode = 'dialog';
|
|
1376
|
+
saveDisabled = false;
|
|
1377
|
+
showClose = true;
|
|
1378
|
+
save = new EventEmitter();
|
|
1379
|
+
cancel = new EventEmitter();
|
|
1380
|
+
onSave() {
|
|
1381
|
+
this.save.emit();
|
|
1382
|
+
}
|
|
1383
|
+
onCancel() {
|
|
1384
|
+
this.cancel.emit();
|
|
1385
|
+
}
|
|
1386
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NtyUXSaveLayout, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1387
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: NtyUXSaveLayout, isStandalone: true, selector: "ntyux-save-layout", inputs: { title: "title", identifier: "identifier", viewMode: "viewMode", saveDisabled: "saveDisabled", showClose: "showClose" }, outputs: { save: "save", cancel: "cancel" }, ngImport: i0, template: "<div [class.fullscreen-container]=\"viewMode === 'fullscreen'\" [class.sidenav-container]=\"viewMode === 'sidenav'\"\n [class.popup-container]=\"viewMode === 'dialog'\" [class.dialog-drag-container]=\"viewMode === 'dialog'\" cdkDrag\n [cdkDragDisabled]=\"viewMode !== 'dialog'\" cdkDragRootElement=\".cdk-overlay-pane\"\n [ntyResizable]=\"viewMode === 'dialog'\">\n\n <div class='menu-button'>\n <ntyui-button type='menu' icon='arrow_back' [disableOnClick]='true' [disableDuration]='6'\n (clicked)='onCancel()' />\n <ntyui-button type='menu' icon='save' [disableOnClick]='true' [disableDuration]='6' (clicked)='onSave()' />\n <ng-content select=\"[additional-menu-item]\"></ng-content>\n <ng-container *ngIf=\"viewMode === 'dialog' && showClose\">\n <ntyui-button type='close' class='list-close-button' [toolTip]=\"'@close'|translate\"\n (clicked)='onCancel()' />\n </ng-container>\n </div>\n\n <!-- Header -->\n <div class='nettybase-save-record-header-bar' cdkDragHandle>\n <div class='nettybase-save-record-title-info'>\n <span class='nettybase-save-record-identifier'>\n {{ title }}: {{ identifier }}\n </span>\n </div>\n </div>\n\n <!-- Scrollable Content Area -->\n <div class='nettybase-container'>\n <ng-content></ng-content>\n </div>\n\n <!-- Footer Buttons -->\n <div class='nettybase-save-button-container'>\n <ntyui-button [label]=\"'@btnSave' | translate\" class='ntyui-form-button-save' isFilled='true' icon='save'\n type='regular' (clicked)=\"onSave()\" [disabled]=\"saveDisabled\" />\n <ntyui-button [label]=\"'@btnCancel' | translate\" class='ntyui-form-button-cancel' icon='close' type='regular'\n (clicked)='onCancel()' />\n </div>\n\n</div>", styles: [":host{display:block;height:100%;width:100%}.fullscreen-container,.sidenav-container,.popup-container{height:100%;display:flex;flex-direction:column;overflow:hidden}.nettybase-container{padding:16px;flex:1;overflow-y:auto}.resize-handle{position:absolute;right:1px;bottom:1px;width:24px;height:24px;cursor:nwse-resize;display:flex;align-items:center;justify-content:center;z-index:9999;color:#0006;transition:color .2s,transform .2s;background:transparent;pointer-events:auto}.resize-handle:hover{color:#000c;transform:scale(1.1)}.resize-handle mat-icon{font-size:20px;width:20px;height:20px}:host-context(.cdk-overlay-pane){display:flex!important;flex-direction:column!important;height:100%!important;width:100%!important;margin:0!important;padding:0!important;overflow:hidden!important;border-radius:8px}:host-context(.cdk-overlay-pane) form{height:100%!important;display:flex!important;flex-direction:column!important;overflow:hidden!important;margin:0}:host-context(.cdk-overlay-pane) .popup-container{flex:1!important;display:flex!important;flex-direction:column!important;overflow:hidden!important;position:relative!important;height:100%!important;background:#fff}:host-context(.cdk-overlay-pane) .nettybase-container{flex:1!important;overflow-y:auto!important;overflow-x:hidden!important;padding:16px;position:relative}:host-context(.cdk-overlay-pane) .nettybase-save-button-container{flex-shrink:0!important;padding:12px 16px;background:#f8f9fa;border-top:1px solid #eee;display:flex;justify-content:flex-end;gap:8px}:host-context(.cdk-overlay-pane) .nettybase-save-record-header-bar{flex-shrink:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2$3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2$3.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: NettyUIButton, selector: "ntyui-button", inputs: ["icon", "isFilled", "menuReference", "disableOnClick", "disableDuration", "waitingText", "type", "toolTip"], outputs: ["clicked"] }, { kind: "directive", type: NtyResizableDirective, selector: "[ntyResizable]", inputs: ["ntyResizable"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
1388
|
+
}
|
|
1389
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: NtyUXSaveLayout, decorators: [{
|
|
1390
|
+
type: Component,
|
|
1391
|
+
args: [{ selector: 'ntyux-save-layout', standalone: true, imports: [CommonModule, TranslateModule, DragDropModule, MatIconModule, NettyUIButton, NtyResizableDirective], template: "<div [class.fullscreen-container]=\"viewMode === 'fullscreen'\" [class.sidenav-container]=\"viewMode === 'sidenav'\"\n [class.popup-container]=\"viewMode === 'dialog'\" [class.dialog-drag-container]=\"viewMode === 'dialog'\" cdkDrag\n [cdkDragDisabled]=\"viewMode !== 'dialog'\" cdkDragRootElement=\".cdk-overlay-pane\"\n [ntyResizable]=\"viewMode === 'dialog'\">\n\n <div class='menu-button'>\n <ntyui-button type='menu' icon='arrow_back' [disableOnClick]='true' [disableDuration]='6'\n (clicked)='onCancel()' />\n <ntyui-button type='menu' icon='save' [disableOnClick]='true' [disableDuration]='6' (clicked)='onSave()' />\n <ng-content select=\"[additional-menu-item]\"></ng-content>\n <ng-container *ngIf=\"viewMode === 'dialog' && showClose\">\n <ntyui-button type='close' class='list-close-button' [toolTip]=\"'@close'|translate\"\n (clicked)='onCancel()' />\n </ng-container>\n </div>\n\n <!-- Header -->\n <div class='nettybase-save-record-header-bar' cdkDragHandle>\n <div class='nettybase-save-record-title-info'>\n <span class='nettybase-save-record-identifier'>\n {{ title }}: {{ identifier }}\n </span>\n </div>\n </div>\n\n <!-- Scrollable Content Area -->\n <div class='nettybase-container'>\n <ng-content></ng-content>\n </div>\n\n <!-- Footer Buttons -->\n <div class='nettybase-save-button-container'>\n <ntyui-button [label]=\"'@btnSave' | translate\" class='ntyui-form-button-save' isFilled='true' icon='save'\n type='regular' (clicked)=\"onSave()\" [disabled]=\"saveDisabled\" />\n <ntyui-button [label]=\"'@btnCancel' | translate\" class='ntyui-form-button-cancel' icon='close' type='regular'\n (clicked)='onCancel()' />\n </div>\n\n</div>", styles: [":host{display:block;height:100%;width:100%}.fullscreen-container,.sidenav-container,.popup-container{height:100%;display:flex;flex-direction:column;overflow:hidden}.nettybase-container{padding:16px;flex:1;overflow-y:auto}.resize-handle{position:absolute;right:1px;bottom:1px;width:24px;height:24px;cursor:nwse-resize;display:flex;align-items:center;justify-content:center;z-index:9999;color:#0006;transition:color .2s,transform .2s;background:transparent;pointer-events:auto}.resize-handle:hover{color:#000c;transform:scale(1.1)}.resize-handle mat-icon{font-size:20px;width:20px;height:20px}:host-context(.cdk-overlay-pane){display:flex!important;flex-direction:column!important;height:100%!important;width:100%!important;margin:0!important;padding:0!important;overflow:hidden!important;border-radius:8px}:host-context(.cdk-overlay-pane) form{height:100%!important;display:flex!important;flex-direction:column!important;overflow:hidden!important;margin:0}:host-context(.cdk-overlay-pane) .popup-container{flex:1!important;display:flex!important;flex-direction:column!important;overflow:hidden!important;position:relative!important;height:100%!important;background:#fff}:host-context(.cdk-overlay-pane) .nettybase-container{flex:1!important;overflow-y:auto!important;overflow-x:hidden!important;padding:16px;position:relative}:host-context(.cdk-overlay-pane) .nettybase-save-button-container{flex-shrink:0!important;padding:12px 16px;background:#f8f9fa;border-top:1px solid #eee;display:flex;justify-content:flex-end;gap:8px}:host-context(.cdk-overlay-pane) .nettybase-save-record-header-bar{flex-shrink:0!important}\n"] }]
|
|
1392
|
+
}], propDecorators: { title: [{
|
|
1393
|
+
type: Input
|
|
1394
|
+
}], identifier: [{
|
|
1395
|
+
type: Input
|
|
1396
|
+
}], viewMode: [{
|
|
1397
|
+
type: Input
|
|
1398
|
+
}], saveDisabled: [{
|
|
1399
|
+
type: Input
|
|
1400
|
+
}], showClose: [{
|
|
1401
|
+
type: Input
|
|
1402
|
+
}], save: [{
|
|
1403
|
+
type: Output
|
|
1404
|
+
}], cancel: [{
|
|
1405
|
+
type: Output
|
|
1406
|
+
}] } });
|
|
1407
|
+
|
|
1167
1408
|
/*
|
|
1168
1409
|
* Public API Surface of ntyux
|
|
1169
1410
|
*/
|
|
@@ -1172,5 +1413,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1172
1413
|
* Generated bundle index. Do not edit.
|
|
1173
1414
|
*/
|
|
1174
1415
|
|
|
1175
|
-
export { AutoComplete, ColorPalette, Guid, HttpError403, HttpError404, LeftSidenav, NettyFilter, NettyUXFilterCard, NtyAutoCompleteFilter, NtyAutoCompleteFilterFields, Ntyux, NtyuxModule, SelectionItem, Theme, Toolbar, ValueUnitInput };
|
|
1416
|
+
export { AutoComplete, ColorPalette, Guid, HttpError403, HttpError404, LeftSidenav, NettyFilter, NettyUXFilterCard, NtyAutoCompleteFilter, NtyAutoCompleteFilterFields, NtyResizableDirective, NtySidenavResizableDirective, NtyUXLayout, NtyUXSaveLayout, Ntyux, NtyuxModule, SelectionItem, Theme, Toolbar, ValueUnitInput };
|
|
1176
1417
|
//# sourceMappingURL=nettyapps-ntyux.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nettyapps-ntyux.mjs","sources":["../../../projects/ntyux/src/lib/ntyux.ts","../../../projects/ntyux/src/lib/ntyux-module.ts","../../../projects/ntyux/src/lib/auto-complete/models/guid.ts","../../../projects/ntyux/src/lib/auto-complete/services/auto-complete-proxy.ts","../../../projects/ntyux/src/lib/auto-complete/models/auto-complete-filter.ts","../../../projects/ntyux/src/lib/auto-complete/auto-complete-lookup/auto-complete-lookup.ts","../../../projects/ntyux/src/lib/auto-complete/auto-complete-popup-menu/auto-complete-popup-menu.ts","../../../projects/ntyux/src/lib/auto-complete/auto-complete-popup-menu/auto-complete-popup-menu.html","../../../projects/ntyux/src/lib/auto-complete/auto-complete.ts","../../../projects/ntyux/src/lib/auto-complete/auto-complete.html","../../../projects/ntyux/src/lib/auto-complete/models/filter.ts","../../../projects/ntyux/src/lib/auto-complete/models/auto-complete-filter-fields.ts","../../../projects/ntyux/src/lib/value-unit-input/value-unit-input.ts","../../../projects/ntyux/src/lib/value-unit-input/value-unit-input.html","../../../projects/ntyux/src/lib/components/http-error403/http-error403.ts","../../../projects/ntyux/src/lib/components/http-error403/http-error403.html","../../../projects/ntyux/src/lib/components/http-error404/http-error404.ts","../../../projects/ntyux/src/lib/components/http-error404/http-error404.html","../../../projects/ntyux/src/lib/components/left-sidenav/left-sidenav.ts","../../../projects/ntyux/src/lib/components/left-sidenav/left-sidenav.html","../../../projects/ntyux/src/lib/themes/services/theme.ts","../../../projects/ntyux/src/lib/themes/services/color-palette.ts","../../../projects/ntyux/src/lib/components/toolbar/toolbar.ts","../../../projects/ntyux/src/lib/components/toolbar/toolbar.html","../../../projects/ntyux/src/lib/filter-card/filter-card.ts","../../../projects/ntyux/src/lib/filter-card/filter-card.html","../../../projects/ntyux/src/public-api.ts","../../../projects/ntyux/src/nettyapps-ntyux.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ntyux',\n standalone: false,\n template: `\n <p>\n ntyux works!\n </p>\n `,\n styles: ``,\n})\nexport class Ntyux {\n\n}\n","import { NgModule } from '@angular/core';\nimport { Ntyux } from './ntyux';\n\n\n\n@NgModule({\n declarations: [\n Ntyux\n ],\n imports: [\n ],\n exports: [\n Ntyux\n ]\n})\nexport class NtyuxModule { }\n","export class Guid {\n private value: string = this.empty;\n constructor(value?: string) {\n if (value) {\n if (Guid.isValid(value)) {\n this.value = value;\n }\n }\n }\n\n public static newGuid(): Guid {\n return new Guid(\n 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n })\n );\n }\n /**\n * return all zeros '00000000-0000-0000-0000-000000000000'\n */\n public static get empty(): string {\n return '00000000-0000-0000-0000-000000000000';\n }\n public get empty(): string {\n return Guid.empty;\n }\n public static isValid(str: string): boolean {\n const validRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return validRegex.test(str);\n }\n public toString() {\n return this.value;\n }\n\n public toJSON(): string {\n return this.value;\n }\n /**\n * True is guid is empty or not valid\n * @param str\n * @returns\n */\n public static isNullOrEmpty(str: string): boolean {\n if (str == null || str == undefined) {\n return true;\n }\n if (!Guid.isValid(str)) {\n return true;\n }\n if (str == Guid.empty) {\n return true;\n }\n return false;\n }\n /**\n * True if the guid is valid and not all zeros (empty)\n * @param str\n * @returns\n */\n public static isValidAndNotEmpty(str: string): boolean {\n return !Guid.isNullOrEmpty(str);\n }\n /**\n * Return empty guid if the given guid is not valid\n * @param guid\n * @returns\n */\n public static emptyWhenNull(guid: any): any {\n if (Guid.isValidAndNotEmpty(guid)) {\n return guid;\n }\n return Guid.empty;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { NtyAutoCompleteFilter } from '../models/auto-complete-filter';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AutoCompleteProxy {\n private http = inject(HttpClient);\n private environmentProxy = inject(EnvironmentProxy);\n\n getAutocompleteDataFilter(\n searchTable: string,\n endpoint: string,\n searchData: NtyAutoCompleteFilter\n ) {\n let functionUrl = this.environmentProxy.getServerLink(\n searchTable + '/' + endpoint\n );\n return this.http.post(functionUrl, searchData);\n }\n}\n","import { NtyAutoCompleteFilterFields } from './auto-complete-filter-fields';\n\nexport class NtyAutoCompleteFilter {\n coid: any = null;\n searchString: string | null = null;\n fields: NtyAutoCompleteFilterFields[] | null = null;\n}\n","import {\n Component,\n input,\n output,\n ViewChild,\n ViewContainerRef,\n inject,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\nimport { NettyAgGridBase } from '@nettyapps/ntybase';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n/**\n * This component can load and display any container which is provided dynamically during run time\n * The only requirement is the component that will be displayed should extend AgGridBaseComponent\n */\n@Component({\n selector: 'ntybase-auto-complete-lookup',\n imports: [],\n template: ` <ng-template #container></ng-template> `,\n})\nexport class AutoCompleteLookup implements OnChanges {\n data = inject(MAT_DIALOG_DATA);\n\n @ViewChild('container', { read: ViewContainerRef, static: true })\n container!: ViewContainerRef;\n\n component = input<any>();\n filterField = input<string | null>(null);\n filterFieldValue = input<any>(null);\n filterFieldNumeric = input<boolean>(false);\n filterFieldEquality = input<string>('=');\n\n // Output\n selectedElement = output<any>();\n\n ngOnInit() {\n this.initializeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.isComponentConfigChanged(changes)) {\n this.initializeComponent();\n }\n }\n\n private isComponentConfigChanged(changes: SimpleChanges): boolean {\n return (\n !!changes['component'] ||\n !!changes['filterField'] ||\n !!changes['filterFieldValue'] ||\n !!changes['filterFieldNumeric'] ||\n !!changes['filterFieldEquality']\n );\n }\n\n private initializeComponent() {\n const config = this.data || this.getInputConfig();\n this.loadComponent(config);\n }\n\n private getInputConfig() {\n return {\n component: this.component(),\n filterField: this.filterField(),\n filterFieldValue: this.filterFieldValue(),\n filterFieldNumeric: this.filterFieldNumeric(),\n filterFieldEquality: this.filterFieldEquality(),\n };\n }\n\n loadComponent(config: any) {\n if (!config?.component) return;\n\n this.container.clear();\n const componentRef = this.container.createComponent<NettyAgGridBase<any>>(\n config.component\n );\n\n componentRef.setInput('popupValid', true);\n\n if (config.filterField !== undefined) {\n componentRef.setInput('filterField', config.filterField);\n }\n\n if (config.filterFieldValue !== undefined) {\n componentRef.setInput('filterFieldValue', config.filterFieldValue);\n }\n\n if (config.filterFieldEquality !== undefined) {\n componentRef.setInput('filterFieldEquality', config.filterFieldEquality);\n }\n\n if (config.filterFieldNumeric !== undefined) {\n componentRef.setInput('filterFieldNumeric', config.filterFieldNumeric);\n }\n\n const sub = componentRef.instance.selectedElement.subscribe((data: any) => {\n this.selectedElement.emit(data);\n });\n\n componentRef.onDestroy(() => sub.unsubscribe());\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n OnInit,\n Input,\n ViewEncapsulation,\n inject,\n output,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { AlertService } from '@nettyapps/ntybase';\n\n@Component({\n selector: 'ntybase-auto-complete-popup-menu',\n imports: [CommonModule, ReactiveFormsModule, MatIconModule, TranslateModule],\n templateUrl: './auto-complete-popup-menu.html',\n styleUrl: './auto-complete-popup-menu.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AutoCompletePopupMenu implements OnInit {\n @Input() field: string = '';\n @Input() recordGuid: any;\n @Input() fieldDisabled: boolean = false;\n @Input() componentPath: string = '';\n @Input() inputValue: string = '';\n Result = output<string>();\n\n private clipboard = inject(Clipboard);\n private alertService = inject(AlertService);\n\n ngOnInit() {}\n\n gotoNew() {\n if (!this.componentPath) return;\n\n // Split the component path into segments\n const pathSegments = this.componentPath.split('/').filter((p) => p);\n this.gotoNewTab(pathSegments, '', 'new');\n this.Result.emit('New');\n }\n\n gotoMain() {\n if (!this.componentPath || !this.recordGuid) return;\n\n // Split the component path into segments\n const pathSegments = this.componentPath.split('/').filter((p) => p);\n this.gotoNewTab(pathSegments, this.recordGuid, 'edit');\n this.Result.emit('Main');\n }\n\n gotoLookup() {\n if (!this.fieldDisabled) {\n this.Result.emit('Lookup');\n }\n }\n\n gotoNewTab(target: string[], params: any, type: string) {\n if (!target || target.length === 0) return;\n\n // Construct the URL directly in the format you want\n let url = `/${target.join('/')}`;\n\n // Add query parameters\n const queryParams = [];\n if (params) {\n queryParams.push(\n `parameters=${encodeURIComponent(JSON.stringify(params))}`\n );\n }\n if (type) {\n queryParams.push(`type=${type}`);\n }\n queryParams.push('isNewTab=true');\n\n if (queryParams.length > 0) {\n url += `?${queryParams.join('&')}`;\n }\n\n // Open in new tab\n window.open(url, '_blank');\n }\n\n copyToClipboard() {\n if (this.inputValue) {\n this.clipboard.copy(this.inputValue);\n this.alertService.showAlert('@copiedToClipboard');\n this.Result.emit('Copy');\n }\n }\n}\n","<div class=\"dialogbase\">\n <div class=\"menu\">\n <ul class=\"list-group\">\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"copyToClipboard()\" class=\"align-line\"\n ><mat-icon>content_copy</mat-icon>{{'@copy'| translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"gotoMain()\" class=\"align-line\"\n ><mat-icon>edit</mat-icon>{{'@popupGotoRecordDefinition'|\n translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"gotoNew()\" class=\"align-line\"\n ><mat-icon>add</mat-icon>{{'@popupNewRecord'| translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center\"\n [ngClass]=\"{'menu-item':!fieldDisabled , 'menu-item-disabled':fieldDisabled }\"\n >\n <span (click)=\"gotoLookup()\" class=\"align-line\"\n ><mat-icon>search</mat-icon>{{'@popupSelectFromList'|translate}}</span\n >\n </li>\n </ul>\n </div>\n</div>\n","import {\n Component,\n computed,\n effect,\n ElementRef,\n input,\n signal,\n ViewChild,\n ChangeDetectionStrategy,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport {\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent,\n MatAutocompleteTrigger,\n} from '@angular/material/autocomplete';\nimport {\n FormsModule,\n FormControl,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { UiBase } from '@nettyapps/ntyui';\nimport { Guid } from '../auto-complete/models/guid';\nimport { AutoCompleteProxy } from './services/auto-complete-proxy';\nimport {\n MatDialog,\n MatDialogConfig,\n MatDialogModule,\n} from '@angular/material/dialog';\nimport { NtyAutoCompleteFilter } from './models/auto-complete-filter';\nimport { NtyAutoCompleteFilterFields } from './models/auto-complete-filter-fields';\nimport { AutoCompleteLookup } from './auto-complete-lookup/auto-complete-lookup';\nimport { AutoCompletePopupMenu } from './auto-complete-popup-menu/auto-complete-popup-menu';\nimport { AlertService } from '@nettyapps/ntybase';\n\nexport class SelectionItem {\n name: string | null = null;\n value: any = null;\n\n constructor(_value: any = null, _name: string | null = null) {\n this.name = _name;\n this.value = _value;\n }\n}\n\n@Component({\n selector: 'ntybase-auto-complete',\n imports: [\n MatFormFieldModule,\n MatAutocompleteModule,\n FormsModule,\n MatInputModule,\n MatIconModule,\n ReactiveFormsModule,\n MatDialogModule,\n ],\n templateUrl: './auto-complete.html',\n styleUrl: './auto-complete.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoComplete),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AutoComplete extends UiBase {\n // Input parameters\n tableName = input<string>('');\n apiEndpoint = input<string>('');\n showSearchButton = input<boolean>(true);\n searchAfter = input<number>(3);\n fieldCode = input<string | null>(null);\n fieldName = input<string | null>(null);\n lookupComponent = input<any>(null);\n lookupComponentPath = input<any>(null);\n filterField = input<string | null>(null);\n filterFieldValue = input<any>(null);\n filterFieldNumeric = input<boolean>(false);\n filterFieldEquality = input<string>('=');\n debounceTime = input<number>(500);\n\n // Inject dependencies\n private alertService = inject(AlertService);\n private autoCompleteService = inject(AutoCompleteProxy);\n private dialog = inject(MatDialog);\n\n @ViewChild(MatAutocompleteTrigger)\n autoCompleteTrigger!: MatAutocompleteTrigger;\n @ViewChild('autoCompleteInput') inputField!: ElementRef;\n\n control = new FormControl();\n matcher = new ErrorStateMatcher();\n\n // Signal parameters\n searchText = signal('');\n selectedOption = signal<SelectionItem | null>(null);\n loadedOptions = signal<SelectionItem[]>([]);\n\n private searchSignal = signal<string>('');\n private debounceTimeout: any;\n\n constructor() {\n super();\n // Sync form control with selected option\n effect(() => {\n const option = this.selectedOption();\n if (option) {\n this.searchText.set(option.name || '');\n } else if (this.control.value && !this.selectedOption()) {\n const found = this.loadedOptions().find(\n (opt) => opt.value === this.control.value\n );\n if (found) {\n this.selectedOption.set(found);\n this.searchText.set(found.name || '');\n }\n }\n });\n\n // Then watch the debounced signal:\n effect((onCleanup) => {\n const searchValue = this.searchSignal();\n\n clearTimeout(this.debounceTimeout);\n\n this.debounceTimeout = setTimeout(() => {\n if (this.shouldTriggerSearch(searchValue)) {\n this.loadAutoCompleteData(searchValue);\n } else {\n this.loadedOptions.set([]);\n }\n }, this.debounceTime());\n\n onCleanup(() => {\n clearTimeout(this.debounceTimeout);\n });\n });\n\n effect(() => {\n this.onChange(this.value());\n });\n\n effect(() => {\n this.updateValidators();\n });\n }\n\n private shouldTriggerSearch(searchValue: string): boolean {\n return searchValue.length >= this.searchAfter();\n }\n\n filteredData = computed(() => {\n return this.loadedOptions();\n });\n\n onInputChanged(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n this.searchText.set(value);\n this.onTouched();\n\n // Clear selection if text doesn't match\n if (this.selectedOption() && this.selectedOption()?.name !== value) {\n this.selectedOption.set(null);\n }\n\n if (value.length === 0) {\n this.clearInput();\n return;\n }\n this.searchSignal.set(value);\n this.autoCompleteTrigger.closePanel();\n }\n\n private loadAutoCompleteData(searchValue: string) {\n this.loadedOptions.set([]);\n\n const filter = new NtyAutoCompleteFilter();\n\n filter.searchString =\n searchValue.trim() === '' && searchValue.length >= this.searchAfter()\n ? ''\n : searchValue;\n\n filter.fields = [];\n\n if (this.filterField() && this.filterField()!.trim().length > 0) {\n const fields: NtyAutoCompleteFilterFields = {\n equalitySign: this.filterFieldEquality(),\n fieldName: this.filterField()!,\n fieldValue: this.filterFieldValue(),\n numeric: this.filterFieldNumeric(),\n };\n filter.fields?.push(fields);\n }\n\n const endpoint = this.apiEndpoint() || 'AutoCompleteFilter';\n this.autoCompleteService\n .getAutocompleteDataFilter(this.tableName(), endpoint, filter)\n .subscribe({\n next: (data: any) => {\n if (data && Array.isArray(data)) {\n const options = data.map((item: any) => ({\n name: item.text,\n value: item.guidValue,\n }));\n this.loadedOptions.set(options);\n\n if (options.length === 1) {\n this.selectedOption.set(options[0]);\n this.control.setValue(options[0].value);\n this.searchText.set(options[0].name || '');\n } else if (options.length > 1) {\n this.autoCompleteTrigger.openPanel();\n }\n }\n },\n error: (err: any) => {\n this.alertService.showAlert(err.message);\n },\n });\n }\n\n override clearInput() {\n this.selectedOption.set(new SelectionItem(Guid.empty, ''));\n this.control.reset();\n this.searchText.set('');\n this.loadedOptions.set([]);\n this.inputField.nativeElement.value = '';\n }\n\n onPaste(event: ClipboardEvent) {\n const clipboardData = event.clipboardData;\n if (!clipboardData) return;\n\n const pastedText = clipboardData.getData('text');\n this.searchText.set(pastedText);\n this.searchSignal.set(pastedText);\n }\n\n displayFn(item: any): string {\n return this.searchText();\n }\n\n optionSelected(event: MatAutocompleteSelectedEvent) {\n const selectedValue = event.option.value;\n const selected = this.loadedOptions().find(\n (opt) => opt.value === selectedValue\n );\n\n if (selected) {\n this.selectedOption.set(selected);\n this.control.setValue(selected.value);\n this.searchText.set(selected.name || '');\n }\n }\n\n override writeValue(value: any): void {\n this.value.set(value);\n if (!value) return;\n\n if (this.fieldCode()) {\n this.selectedOption.set({ value, name: this.fieldCode() });\n }\n }\n\n onLookup() {\n if (!this.lookupComponent()) return;\n\n const dialogRef = this.dialog.open(AutoCompleteLookup, {\n height: 'auto',\n width: '100%',\n maxWidth: '100%',\n maxHeight: 'auto',\n data: {\n component: this.lookupComponent(),\n ...(this.filterField() && {\n filterField: this.filterField(),\n filterFieldValue: this.filterFieldValue(),\n filterFieldEquality: this.filterFieldEquality(),\n filterFieldNumeric: this.filterFieldNumeric(),\n }),\n },\n });\n\n dialogRef.componentInstance.selectedElement.subscribe((data: any) => {\n if (data) {\n const selection = new SelectionItem(data.value, data.text);\n this.selectedOption.set(selection);\n this.control.setValue(selection.value);\n this.searchText.set(selection.name || '');\n }\n dialogRef.close();\n });\n }\n\n /** Popup screen to goto main table\n *\n * @param event\n * @returns\n */\n rightClick(event: any) {\n event.stopPropagation();\n const dialogConfig = new MatDialogConfig();\n dialogConfig.position = {\n top: event.clientY + 'px',\n left: event.clientX + 'px',\n };\n dialogConfig.height = 'auto';\n dialogConfig.width = 'auto';\n dialogConfig.panelClass = 'foo';\n const dialogRef = this.dialog.open(AutoCompletePopupMenu, dialogConfig);\n dialogRef.componentInstance.field = this.tableName();\n dialogRef.componentInstance.recordGuid = this.value();\n dialogRef.componentInstance.fieldDisabled = this.disabled();\n dialogRef.componentInstance.componentPath = this.lookupComponentPath();\n dialogRef.componentInstance.inputValue = this.searchText();\n dialogRef.componentInstance.Result.subscribe((result: string) => {\n switch (result) {\n case 'Lookup':\n dialogRef.close();\n this.onLookup();\n break;\n default:\n dialogRef.close();\n break;\n }\n });\n return false;\n }\n\n // Validation\n override getErrorMessage() {\n if (this.control.hasError('required') && this.errorMessages()['required']) {\n return this.errorMessages()['required'];\n }\n return '';\n }\n\n override updateValidators() {\n const validators = [];\n\n if (this.required()) {\n validators.push(Validators.required);\n }\n\n this.control.setValidators(validators);\n\n if (this.disabled()) {\n this.control.disable({ emitEvent: false });\n }\n\n this.control.updateValueAndValidity();\n }\n}\n","<mat-form-field\n class=\"ui-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n @if (label()) {\n <mat-label>{{ label() }}</mat-label>\n }\n\n <input\n type=\"text\"\n #autoCompleteInput\n matInput\n [(ngModel)]=\"value\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder()\"\n (input)=\"onInputChanged($event)\"\n (paste)=\"onPaste($event)\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"control\"\n (contextmenu)=\"rightClick($event)\"\n />\n\n @if (value() && !disabled()) {\n <button\n mat-icon-button\n matSuffix\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn number-clear-btn\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n } @if (showSearchButton()) {\n <button\n mat-icon-button\n matSuffix\n aria-label=\"Search\"\n (click)=\"onLookup()\"\n class=\"search-btn\"\n [disabled]=\"disabled()\"\n >\n <mat-icon>search</mat-icon>\n </button>\n }\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [displayWith]=\"displayFn.bind(this)\"\n (optionSelected)=\"optionSelected($event)\"\n >\n @for (option of filteredData(); track option.value) {\n <mat-option [value]=\"option.value\"> {{ option.name }} </mat-option>\n }\n </mat-autocomplete>\n\n <mat-error>{{ getErrorMessage() }}</mat-error>\n</mat-form-field>\n","export class NettyFilter {\n value: any;\n text: any;\n}\n","export class NtyAutoCompleteFilterFields {\n fieldName: string | null = null;\n fieldValue: string | null = null;\n numeric: boolean = false;\n equalitySign: string = '=';\n}\n","import { Component, effect, forwardRef, input, model } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n FormsModule,\n ControlValueAccessor,\n} from '@angular/forms';\nimport { NettyUINumberInput, UiBase } from '@nettyapps/ntyui';\nimport { AutoComplete } from '../auto-complete/auto-complete';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'ntyux-value-unit-input',\n imports: [NettyUINumberInput, AutoComplete, FormsModule, MatInputModule],\n templateUrl: './value-unit-input.html',\n styleUrl: './value-unit-input.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ValueUnitInput),\n multi: true,\n },\n ],\n})\nexport class ValueUnitInput extends UiBase implements ControlValueAccessor {\n // AutoComplete Parameters\n tableName = input<string>('');\n apiEndpoint = input<string>('');\n showSearchButton = input<boolean>(true);\n searchAfter = input<number>(3);\n fieldCode = input<string | null>(null);\n fieldName = input<string | null>(null);\n lookupComponent = input<any>(null);\n lookupComponentPath = input<any>(null);\n filterField = input<string | null>(null);\n filterFieldValue = input<any>(null);\n filterFieldNumeric = input<boolean>(false);\n filterFieldEquality = input<string>('=');\n\n // Unit Parameters\n // UiBase'den gelen 'disabled()' her ikisini birden kapatmak için kullanılır.\n unitValue = model<any>('');\n unitLabel = input<string>('');\n unitPlaceholder = input<string>('');\n unitDisabled = input<boolean>(false);\n\n constructor() {\n super();\n\n effect(() => {\n const val = this.value();\n const unit = this.unitValue();\n if (this.required()) {\n if (!val || !unit) {\n this.ngModel?.control.setErrors({ required: true });\n } else {\n this.ngModel?.control.setErrors(null);\n }\n }\n });\n }\n}\n","<div class=\"combined-container\">\n <div class=\"value\">\n <ntyui-number-input\n #inputModel=\"ngModel\"\n [label]=\"label()\"\n [placeholder]=\"placeholder()\"\n [required]=\"required()\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled()\"\n >\n </ntyui-number-input>\n </div>\n\n <div class=\"unit\">\n <ntybase-auto-complete\n #inputModel=\"ngModel\"\n [label]=\"unitLabel()\"\n [placeholder]=\"unitPlaceholder()\"\n [required]=\"required()\"\n [(ngModel)]=\"unitValue\"\n [tableName]=\"tableName()\"\n [apiEndpoint]=\"apiEndpoint()\"\n [lookupComponent]=\"lookupComponent()\"\n [lookupComponentPath]=\"lookupComponentPath()\"\n [showSearchButton]=\"showSearchButton()\"\n [searchAfter]=\"searchAfter()\"\n [filterField]=\"filterField()\"\n [fieldCode]=\"fieldCode()\"\n [filterFieldValue]=\"filterFieldValue()\"\n [disabled]=\"disabled() || unitDisabled()\"\n >\n </ntybase-auto-complete>\n </div>\n</div>\n@if (getErrorMessage()) {\n<mat-error class=\"error-message\">{{ getErrorMessage() }}</mat-error>\n}\n","import { Location } from '@angular/common';\nimport { Component, inject, OnDestroy } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { CommonService } from '@nettyapps/ntybase';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'ntybase-http-error403',\n imports: [],\n templateUrl: './http-error403.html',\n styleUrl: './http-error403.scss',\n})\nexport class HttpError403 implements OnDestroy {\n attemptedUrl: string = '';\n\n private routeSubscription: Subscription;\n\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private commonService = inject(CommonService);\n\n constructor() {\n // Router'dan state'i al\n const navigation = this.router.currentNavigation();\n this.attemptedUrl = navigation?.extras.state?.['attemptedUrl'] || '';\n\n // Eğer state'ten gelmediyse, mevcut URL'i temizleyerek kullan\n if (!this.attemptedUrl) {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n this.routeSubscription = this.router.events.subscribe(() => {\n this.updateAttemptedUrl();\n });\n }\n\n ngOnInit() {\n // 1. URL'deki secondary outlet'leri temizle (örneğin: \"(rightSidenav:...)\")\n this.cleanUrlFromFragments();\n\n // 2. Hata mesajı için attemptedUrl'i güncelle\n this.updateAttemptedUrl();\n\n // 3. Right sidenav'ı kapat\n this.commonService.toggleRightSidenav(false);\n }\n\n ngOnDestroy() {\n if (this.routeSubscription) {\n this.routeSubscription.unsubscribe();\n }\n }\n\n /**\n * URL'deki fragment ve outlet'leri temizler.\n * Örnek: \"/sys/NettyUserGroup(rightSidenav:...)\" → \"/sys/NettyUserGroup\"\n */\n private cleanUrlFromFragments() {\n const currentUrl = this.router.url;\n const cleanUrl = currentUrl.split('(')[0]; // \"(\" sonrasını sil\n\n if (currentUrl !== cleanUrl) {\n // URL'yi temizlenmiş haliyle değiştir (tarayıcı geçmişine eklemeden)\n this.router.navigateByUrl(cleanUrl, {\n replaceUrl: true,\n skipLocationChange: false,\n });\n }\n }\n\n /**\n * attemptedUrl'i güncel router URL'ine göre günceller\n */\n private updateAttemptedUrl() {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n /**\n * Temizlenmiş URL yolunu döndürür (queryParams ve fragment olmadan).\n */\n private getCleanUrlPath(): string {\n return this.router.url.split('?')[0].split('(')[0];\n }\n\n goHome() {\n this.router.navigate(['/'], { replaceUrl: true });\n this.commonService.toggleRightSidenav(false);\n }\n\n goBack() {\n this.location.back();\n }\n}\n","<div class=\"error-container\">\n <div class=\"error-page\">\n <h1>403 - Erişim Engellendi</h1>\n\n <p>\n <strong>Üzgünüz, {{ attemptedUrl }}</strong> sayfasına erişim izniniz\n bulunmamaktadır.\n </p>\n\n <p class=\"error-detail\">\n Bu sayfayı görüntülemek için gerekli yetkilere sahip değilsiniz. Eğer bu\n bir hata olduğunu düşünüyorsanız, lütfen sistem yöneticinizle iletişime\n geçin.\n </p>\n <button mat-raised-button (click)=\"goHome()\" color=\"primary\" routerLink=\"/\">\n Ana Sayfaya Dön\n </button>\n <button mat-raised-button (click)=\"goBack()\" color=\"primary\" routerLink=\"/\">\n Geri Dön\n </button>\n </div>\n</div>\n","import { Location } from '@angular/common';\nimport { Component, inject, OnDestroy } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { CommonService } from '@nettyapps/ntybase';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'ntybase-http-error404',\n imports: [],\n templateUrl: './http-error404.html',\n styleUrl: './http-error404.scss',\n})\nexport class HttpError404 {\n attemptedUrl: string = '';\n private routeSubscription: Subscription;\n\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private commonService = inject(CommonService);\n\n constructor() {\n this.routeSubscription = this.router.events.subscribe(() => {\n this.updateAttemptedUrl();\n });\n }\n\n ngOnInit() {\n // 1. URL'deki secondary outlet'leri temizle (örneğin: \"(rightSidenav:...)\")\n this.cleanUrlFromFragments();\n\n // 2. Hata mesajı için attemptedUrl'i güncelle\n this.updateAttemptedUrl();\n\n // 3. Right sidenav'ı kapat\n this.commonService.toggleRightSidenav(false);\n }\n\n ngOnDestroy() {\n if (this.routeSubscription) {\n this.routeSubscription.unsubscribe();\n }\n }\n\n /**\n * URL'deki fragment ve outlet'leri temizler.\n * Örnek: \"/sys/NettyUserGroup(rightSidenav:...)\" → \"/sys/NettyUserGroup\"\n */\n private cleanUrlFromFragments() {\n const currentUrl = this.router.url;\n const cleanUrl = currentUrl.split('(')[0]; // \"(\" sonrasını sil\n\n if (currentUrl !== cleanUrl) {\n // URL'yi temizlenmiş haliyle değiştir (tarayıcı geçmişine eklemeden)\n this.router.navigateByUrl(cleanUrl, {\n replaceUrl: true,\n skipLocationChange: false,\n });\n }\n }\n\n /**\n * Temizlenmiş URL yolunu döndürür (queryParams ve fragment olmadan).\n */\n private getCleanUrlPath(): string {\n return this.router.url.split('?')[0].split('(')[0];\n }\n\n /**\n * attemptedUrl'i güncel router URL'ine göre günceller\n */\n private updateAttemptedUrl() {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n goHome() {\n this.router.navigate(['/'], { replaceUrl: true });\n this.commonService.toggleRightSidenav(false);\n }\n\n goBack() {\n this.location.back();\n }\n}\n","<div class=\"error-container\">\n <div class=\"error-page\">\n <h1>404</h1>\n <h3>Sayfa Bulunamadı</h3>\n <p><strong>{{ attemptedUrl }}</strong> adresi bulunamadı.</p>\n <p>Bu içerik taşınmış veya silinmiş olabilir.</p>\n <button mat-raised-button (click)=\"goHome()\" color=\"primary\" routerLink=\"/\">\n Ana Sayfaya Dön\n </button>\n <button mat-raised-button (click)=\"goBack()\" color=\"primary\" routerLink=\"/\">\n Geri Dön\n </button>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { Router, RouterLink, RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { NettyUISearchInput } from '@nettyapps/ntyui';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport {\n AuthenticationService,\n NettyMenuService,\n CommonService,\n CredentialsService,\n NettyImageService,\n} from '@nettyapps/ntybase';\n\n@Component({\n selector: 'ntybase-left-sidenav',\n imports: [\n CommonModule,\n MatIconModule,\n MatListModule,\n MatMenuModule,\n MatMenuTrigger,\n RouterLink,\n RouterModule,\n NettyUISearchInput,\n TranslateModule,\n ],\n templateUrl: './left-sidenav.html',\n styleUrl: './left-sidenav.scss',\n})\nexport class LeftSidenav implements OnInit, AfterViewInit {\n private authService = inject(AuthenticationService);\n private router = inject(Router);\n private menuService = inject(NettyMenuService);\n private commonService = inject(CommonService);\n private environmentProxy = inject(EnvironmentProxy);\n private credentialsService = inject(CredentialsService);\n private imageService = inject(NettyImageService);\n private elementRef = inject(ElementRef);\n\n username = signal<string>('');\n profileImage = signal<string>('');\n\n version: string | null = this.environmentProxy.version();\n\n isMinimized = input<boolean>(false);\n toggleMinimize = output<void>();\n\n onToggleMinimize() {\n this.toggleMinimize.emit();\n }\n\n logout() {\n this.authService.logout().subscribe({\n next: (success) => {\n if (success) {\n const cleanUrl = this.commonService.getCleanUrlPath();\n this.router.navigateByUrl(cleanUrl, { replaceUrl: true }).then(() => {\n this.router.navigate(['/login']);\n });\n }\n },\n error: (err) => {\n console.error('Logout failed:', err);\n },\n });\n }\n\n // Menu Search\n menuItems = signal<any[]>([]);\n searchTerm = signal<string>('');\n originalMenuItems = signal<any[]>([]);\n\n constructor() {\n effect(() => {\n const fetchedMenu = this.menuService.menu();\n if (fetchedMenu) {\n const processedItems = this.processMenuItems(fetchedMenu);\n this.originalMenuItems.set(processedItems);\n } else {\n this.originalMenuItems.set([]);\n }\n });\n\n this.loadUserInfo();\n }\n\n ngOnInit(): void {\n // Application name gelene kadar 3 kez dene\n this.trySetMenuName(0);\n }\n\n private trySetMenuName(attempt: number): void {\n const appName = this.environmentProxy.getApplicationName();\n\n if (appName && appName.trim()) {\n // Application name geldi, menüyü yükle\n this.menuService.setMenuName(appName);\n } else if (attempt < 3) {\n // Henüz gelmedi, 300ms sonra tekrar dene\n setTimeout(() => {\n this.trySetMenuName(attempt + 1);\n }, 300);\n } else {\n // 3 denemeden sonra hala gelmedi, boş string ile dene\n console.warn('Application name not found, using empty string');\n this.menuService.setMenuName('');\n }\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.loadUserInfo();\n }, 0);\n }\n\n loadUserInfo(): void {\n const credentials = this.credentialsService.getCredentials();\n if (credentials && credentials.username) {\n this.username.set(credentials.username);\n\n this.generateProfileImage(credentials.username);\n }\n }\n\n generateProfileImage(username: string): void {\n const initials = this.getInitials(username);\n\n const primaryColor = this.getCssVariableValue('--mat-sys-primary');\n\n const imageUrl = this.imageService.generateTextImage(\n initials,\n 40,\n 40,\n primaryColor || '#4ECDC4',\n '#FFFFFF',\n 'rgba(0, 0, 0, 0.2)'\n );\n\n this.profileImage.set(imageUrl);\n }\n\n private getCssVariableValue(variableName: string): string | null {\n if (typeof window === 'undefined') return null;\n\n const element = this.elementRef.nativeElement;\n return (\n getComputedStyle(element).getPropertyValue(variableName).trim() || null\n );\n }\n\n private getInitials(username: string): string {\n if (!username) return 'U';\n\n const names = username.trim().split(' ');\n if (names.length === 1) {\n return names[0].charAt(0).toUpperCase();\n } else {\n return (\n names[0].charAt(0) + names[names.length - 1].charAt(0)\n ).toUpperCase();\n }\n }\n\n processMenuItems(apiResponse: any): any[] {\n if (!apiResponse || !Array.isArray(apiResponse)) {\n return [];\n }\n return apiResponse.map((item: any) => ({\n name: item.label || item.name,\n icon: item.icon || '',\n link: item.route || item.link || '#',\n expanded: false,\n children: item.children ? this.processMenuItems(item.children) : [],\n }));\n }\n\n filteredMenuItems = computed(() => {\n const term = this.searchTerm().toLowerCase();\n if (!term) return this.originalMenuItems();\n\n return this.filterMenuItems(this.originalMenuItems(), term);\n });\n\n private filterMenuItems(items: any[], term: string): any[] {\n const normalizedTerm = this.commonService.normalizeTurkish(term);\n\n return items\n .map((item) => {\n const filteredChildren = item.children\n ? this.filterMenuItems(item.children, term)\n : [];\n\n const normalizedName = this.commonService.normalizeTurkish(item.name);\n const matches =\n normalizedName.includes(normalizedTerm) ||\n filteredChildren.length > 0;\n\n return matches\n ? {\n ...item,\n children: filteredChildren,\n expanded: matches || filteredChildren.length > 0,\n }\n : null;\n })\n .filter((item) => item !== null);\n }\n\n toggleSubMenu(item: any): void {\n item.expanded = !item.expanded;\n }\n\n onSearch(term: string) {\n this.searchTerm.set(term);\n }\n}\n","<div class=\"sidenav-content-wrapper\">\n <!-- Minimize Icon -->\n <button mat-icon-button (click)=\"onToggleMinimize()\" class=\"minimize-button\">\n <mat-icon class=\"minimize-icon\">\n {{ isMinimized() ? \"chevron_right\" : \"chevron_left\" }}\n </mat-icon>\n </button>\n\n <!-- Profile -->\n <div class=\"profile-section\">\n <button mat-button [matMenuTriggerFor]=\"profileMenu\" class=\"profile-button\">\n <img [src]=\"profileImage()\" [alt]=\"username()\" class=\"profile-image\" />\n @if(!isMinimized()){\n <div class=\"profile-info\">\n <p class=\"profile-name\">{{ username() }}</p>\n </div>\n }\n </button>\n\n <mat-menu #profileMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item disabled>\n <mat-icon>account_circle</mat-icon>\n <span>{{ '@profile' | translate }}</span>\n </button>\n <button mat-menu-item mat-button disabled>\n <mat-icon>swap_horiz</mat-icon>\n <span>{{ '@changeCompany' | translate }}</span>\n </button>\n <button mat-menu-item mat-button (click)=\"logout()\">\n <mat-icon>logout</mat-icon>\n <span>{{ '@logout' | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <!-- Search Input -->\n @if (!isMinimized()){\n <ntyui-search-input\n class=\"search-input\"\n [label]=\"'@search' | translate\"\n [placeholder]=\"'@placeholderSearch' | translate\"\n [appearance]=\"'outline'\"\n (search)=\"onSearch($event)\"\n >\n </ntyui-search-input>\n }\n\n <!-- Menu -->\n @if (!isMinimized()) {\n <mat-nav-list>\n <div class=\"sidebar\">\n <ul>\n <!-- Recursive menu render -->\n @let items = filteredMenuItems(); @let level = 0;\n <ng-container\n [ngTemplateOutlet]=\"menuItemsTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: items, level: level }\"\n ></ng-container>\n </ul>\n </div>\n </mat-nav-list>\n }\n\n <!-- Footer -->\n <div class=\"sidenav-footer\">\n <button mat-button [matMenuTriggerFor]=\"footerMenu\" class=\"footer-button\">\n @if (!isMinimized()) {\n <div class=\"footer-text\">\n <div class=\"company-name\">\n <p>© 2025 AXIS</p>\n </div>\n </div>\n }\n </button>\n <div class=\"version\">\n <span class=\"version\">v{{version}}</span>\n </div>\n </div>\n\n <mat-menu #footerMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item disabled>\n <mat-icon>swap_horiz</mat-icon>\n {{ '@changeCompany' | translate }}\n </button>\n <button mat-menu-item mat-button (click)=\"logout()\">\n <mat-icon>logout</mat-icon>\n <span>{{ '@logout' | translate }}</span>\n </button>\n </mat-menu>\n</div>\n\n<!-- Recursive Menu Template -->\n<ng-template #menuItemsTemplate let-items let-level=\"level\">\n @for (item of items; track item.name) {\n <li [class]=\"'menu-level-' + level\">\n <!-- Leaf node (no children) -->\n @if (!item.children || item.children.length === 0) {\n <a\n [routerLink]=\"item.link\"\n routerLinkActive=\"active\"\n [class]=\"'menu-link level-' + level\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n <span>{{ item.name }}</span>\n </a>\n }\n\n <!-- Parent node with children -->\n @if (item.children && item.children.length > 0) {\n <a\n (click)=\"toggleSubMenu(item)\"\n [class.expanded]=\"item.expanded\"\n [class]=\"'menu-link has-children level-' + level\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n <span>{{ item.name }}</span>\n <mat-icon [class.rotated]=\"item.expanded\" class=\"expand-icon\">\n {{ item.expanded ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </a>\n }\n\n <!-- Recursive submenu -->\n @if (item.children && item.children.length > 0 && item.expanded) {\n <ul [class]=\"'submenu level-' + (level + 1)\">\n <ng-container\n *ngTemplateOutlet=\"menuItemsTemplate; context: { $implicit: item.children, level: level + 1 }\"\n ></ng-container>\n </ul>\n }\n </li>\n }\n</ng-template>\n","import { computed, effect, Injectable, signal } from '@angular/core';\n\nexport interface AppTheme {\n name: 'light' | 'dark';\n icon: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Theme {\n private readonly THEME_STORAGE_KEY = 'app-theme';\n\n private appTheme = signal<'light' | 'dark'>('light');\n private themes: AppTheme[] = [\n { name: 'light', icon: 'light_mode' },\n { name: 'dark', icon: 'dark_mode' },\n ];\n\n selectedTheme = computed(() =>\n this.themes.find((theme) => theme.name === this.appTheme())\n );\n\n constructor() {\n const savedTheme = this.getSavedTheme();\n if (savedTheme) {\n this.appTheme.set(savedTheme);\n }\n\n effect(() => {\n const appTheme = this.appTheme();\n document.body.style.setProperty('color-scheme', appTheme);\n document.body.setAttribute('data-ag-theme-mode', appTheme);\n });\n }\n\n getThemes() {\n return this.themes;\n }\n\n setTheme(theme: 'light' | 'dark') {\n this.appTheme.set(theme);\n this.saveTheme(theme);\n }\n\n private getSavedTheme(): 'light' | 'dark' | null {\n if (typeof window !== 'undefined' && window.localStorage) {\n const saved = localStorage.getItem(this.THEME_STORAGE_KEY);\n return saved === 'light' || saved === 'dark' ? saved : null;\n }\n return null;\n }\n\n private saveTheme(theme: 'light' | 'dark'): void {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(this.THEME_STORAGE_KEY, theme);\n }\n }\n}\n","import { effect, Injectable, signal } from '@angular/core';\n\nexport interface ColorTheme {\n id: string;\n primary: string;\n secondary?: string;\n displayName: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ColorPalette {\n private readonly THEME_STORAGE_KEY = 'selected-theme';\n\n private themes: ColorTheme[] = [];\n currentTheme = signal<ColorTheme | null>(null);\n\n setThemes(customThemes: ColorTheme[]): void {\n this.themes = customThemes;\n\n const savedThemeId = this.getSavedTheme();\n const themeToSet = savedThemeId\n ? this.themes.find((t) => t.id === savedThemeId)\n : this.themes[0];\n\n if (themeToSet) {\n this.currentTheme.set(themeToSet);\n } else if (this.themes.length > 0) {\n this.currentTheme.set(this.themes[0]);\n }\n }\n\n getThemes(): ColorTheme[] {\n return this.themes;\n }\n\n setTheme(themeId: string): void {\n const theme = this.themes.find((t) => t.id === themeId);\n if (theme) {\n this.currentTheme.set(theme);\n this.saveTheme(themeId);\n }\n }\n\n private getSavedTheme(): string | null {\n if (typeof window !== 'undefined' && window.localStorage) {\n return localStorage.getItem(this.THEME_STORAGE_KEY);\n }\n return null;\n }\n\n private saveTheme(themeId: string): void {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(this.THEME_STORAGE_KEY, themeId);\n }\n }\n\n updateThemeClass = effect(() => {\n const theme = this.currentTheme();\n if (theme) {\n document.body.classList.remove(\n ...this.themes.map((t) => `${t.id}-theme`)\n );\n document.body.classList.add(`${theme.id}-theme`);\n }\n });\n}\n","import { Component, inject, model, output } from '@angular/core';\nimport { CommonModule, TitleCasePipe } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { Theme } from '../../themes/services/theme';\nimport { ColorPalette } from '../../themes/services/color-palette';\nimport { I18nService } from '@nettyapps/ntyi18n';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'ntybase-toolbar',\n imports: [\n MatIconModule,\n MatMenuModule,\n MatToolbarModule,\n CommonModule,\n TitleCasePipe,\n TranslateModule,\n ],\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.scss',\n})\nexport class Toolbar {\n protected themeService = inject(Theme);\n protected colorPaletteService = inject(ColorPalette);\n private i18nService = inject(I18nService);\n private router = inject(Router);\n toggleSidenav = output<void>();\n\n onToggleSidenav() {\n this.toggleSidenav.emit();\n }\n\n // Language\n icon = model(false);\n\n get currentLanguage(): string {\n return this.i18nService.language;\n }\n\n get languages(): string[] {\n return this.i18nService.supportedLanguages;\n }\n\n setLanguage(language: string) {\n this.i18nService.language = language;\n\n setTimeout(() => {\n window.location.reload();\n }, 100);\n }\n\n getCurrentLanguageIcon(): string {\n switch (this.i18nService.language) {\n case 'Türkçe':\n return 'fi fi-tr';\n case 'English':\n return 'fi fi-us';\n default:\n return 'fi fi-tr';\n }\n }\n\n getLanguageIcon(language: string): string {\n switch (language) {\n case 'Türkçe':\n return 'fi fi-tr';\n case 'English':\n return 'fi fi-us';\n default:\n return 'fi fi-tr';\n }\n }\n}\n","<mat-toolbar class=\"sidenav-header\">\n <div class=\"left-section\">\n <button mat-icon-button (click)=\"onToggleSidenav()\" class=\"menu-button\">\n <mat-icon>menu</mat-icon>\n </button>\n <span>{{'app_name' | translate }}</span>\n\n <!-- Language Selection -->\n <div class=\"language-toggle\">\n @if (icon()) {\n <button mat-icon-button [matMenuTriggerFor]=\"languageMenu\">\n <span class=\"{{ getCurrentLanguageIcon() }}\"></span>\n </button>\n } @else {\n <button\n mat-raised-button\n color=\"primary\"\n [matMenuTriggerFor]=\"languageMenu\"\n >\n {{ currentLanguage }}\n </button>\n }\n </div>\n\n <!-- Language Menu -->\n <mat-menu #languageMenu=\"matMenu\">\n @for (language of languages; track language) {\n <button mat-menu-item (click)=\"setLanguage(language)\">\n <span class=\"{{ getLanguageIcon(language) }}\"></span>\n {{ language }}\n </button>\n }\n </mat-menu>\n </div>\n\n <div class=\"spacer\"></div>\n\n <div class=\"flex-stretch\"></div>\n <button\n mat-icon-button\n [mat-menu-trigger-for]=\"themeMenu\"\n class=\"theme-button\"\n >\n <mat-icon>{{ themeService.selectedTheme()?.icon }}</mat-icon>\n </button>\n <mat-menu #themeMenu=\"matMenu\">\n @for (theme of themeService.getThemes(); track theme.name) {\n <button\n [class.selected-theme]=\"themeService.selectedTheme()?.name === theme.name\"\n mat-menu-item\n (click)=\"themeService.setTheme(theme.name)\"\n >\n <mat-icon>{{ theme.icon }}</mat-icon>\n <span>{{ theme.name | titlecase }}</span>\n </button>\n }\n </mat-menu>\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"customThemeMenu\"\n class=\"custom-theme-button\"\n >\n <mat-icon>format_color_fill</mat-icon>\n </button>\n <mat-menu #customThemeMenu=\"matMenu\">\n @for (customTheme of colorPaletteService.getThemes(); track customTheme.id)\n {\n <button\n mat-menu-item\n (click)=\"colorPaletteService.setTheme(customTheme.id)\"\n >\n <div class=\"theme-menu-item\">\n <div\n class=\"color-preview\"\n [style.background-color]=\"customTheme.primary\"\n ></div>\n <span>{{ customTheme.displayName }}</span>\n </div>\n </button>\n }\n </mat-menu>\n</mat-toolbar>\n","import { Component, input, output, model } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { UiBase } from '@nettyapps/ntyui';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'ntyux-filter-card',\n templateUrl: './filter-card.html',\n styleUrls: ['./filter-card.scss'],\n standalone: true,\n imports: [MatCardModule, MatButtonModule, FormsModule],\n})\n\nexport class NettyUXFilterCard extends UiBase {\n public Title = input<string>(\"\");\n public SubTitle = input<string>(\"\");\n public isExportVisible = input<boolean>(true);\n public isFormValid = input<boolean>(true);\n public onExport = output<void>();\n public onReset = output<void>();\n public onApply = output<void>();\n}\n","<mat-card class=\"filter-card\" apperance=\"outlined\">\n <mat-card-title>{{Title()}}</mat-card-title>\n <mat-card-subtitle>{{SubTitle()}}</mat-card-subtitle>\n <mat-card-content>\n <ng-content>\n No content provided\n </ng-content>\n </mat-card-content>\n <mat-card-actions class=\"mat-card-actions\">\n <button matButton=\"outlined\" (click)=\"onReset.emit()\">Reset</button>\n @if (isExportVisible()) {\n <button matButton=\"outlined\" [disabled]=\"!isFormValid()\" (click)=\"onExport.emit()\">Export</button>\n }\n <button matButton=\"filled\" [disabled]=\"!isFormValid()\" (click)=\"onApply.emit()\">Apply</button>\n </mat-card-actions>\n</mat-card>","/*\n * Public API Surface of ntyux\n */\n\nexport * from './lib/ntyux';\nexport * from './lib/ntyux-module';\nexport * from './lib/auto-complete/auto-complete';\nexport * from './lib/auto-complete/models/guid';\nexport * from './lib/auto-complete/models/filter';\nexport * from './lib/auto-complete/models/auto-complete-filter';\nexport * from './lib/auto-complete/models/auto-complete-filter-fields';\nexport * from './lib/value-unit-input/value-unit-input';\nexport * from './lib/components/http-error403/http-error403';\nexport * from './lib/components/http-error404/http-error404';\nexport * from './lib/components/left-sidenav/left-sidenav';\nexport * from './lib/components/toolbar/toolbar';\nexport * from './lib/filter-card/filter-card';\nexport * from './lib/themes/services/color-palette';\nexport * from './lib/themes/services/theme';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i5","i6","i1","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nettyapps-ntyux.mjs","sources":["../../../projects/ntyux/src/lib/ntyux.ts","../../../projects/ntyux/src/lib/ntyux-module.ts","../../../projects/ntyux/src/lib/auto-complete/models/guid.ts","../../../projects/ntyux/src/lib/auto-complete/services/auto-complete-proxy.ts","../../../projects/ntyux/src/lib/auto-complete/models/auto-complete-filter.ts","../../../projects/ntyux/src/lib/auto-complete/auto-complete-lookup/auto-complete-lookup.ts","../../../projects/ntyux/src/lib/auto-complete/auto-complete-popup-menu/auto-complete-popup-menu.ts","../../../projects/ntyux/src/lib/auto-complete/auto-complete-popup-menu/auto-complete-popup-menu.html","../../../projects/ntyux/src/lib/auto-complete/auto-complete.ts","../../../projects/ntyux/src/lib/auto-complete/auto-complete.html","../../../projects/ntyux/src/lib/auto-complete/models/filter.ts","../../../projects/ntyux/src/lib/auto-complete/models/auto-complete-filter-fields.ts","../../../projects/ntyux/src/lib/value-unit-input/value-unit-input.ts","../../../projects/ntyux/src/lib/value-unit-input/value-unit-input.html","../../../projects/ntyux/src/lib/components/http-error403/http-error403.ts","../../../projects/ntyux/src/lib/components/http-error403/http-error403.html","../../../projects/ntyux/src/lib/components/http-error404/http-error404.ts","../../../projects/ntyux/src/lib/components/http-error404/http-error404.html","../../../projects/ntyux/src/lib/components/left-sidenav/left-sidenav.ts","../../../projects/ntyux/src/lib/components/left-sidenav/left-sidenav.html","../../../projects/ntyux/src/lib/themes/services/theme.ts","../../../projects/ntyux/src/lib/themes/services/color-palette.ts","../../../projects/ntyux/src/lib/components/toolbar/toolbar.ts","../../../projects/ntyux/src/lib/components/toolbar/toolbar.html","../../../projects/ntyux/src/lib/filter-card/filter-card.ts","../../../projects/ntyux/src/lib/filter-card/filter-card.html","../../../projects/ntyux/src/lib/directives/nty-sidenav-resizable-directive.ts","../../../projects/ntyux/src/lib/components/layout/nty-layout.ts","../../../projects/ntyux/src/lib/components/layout/nty-layout.html","../../../projects/ntyux/src/lib/directives/nty-resizable-directive.ts","../../../projects/ntyux/src/lib/components/netty-save-layout/netty-save-layout.ts","../../../projects/ntyux/src/lib/components/netty-save-layout/netty-save-layout.html","../../../projects/ntyux/src/public-api.ts","../../../projects/ntyux/src/nettyapps-ntyux.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ntyux',\n standalone: false,\n template: `\n <p>\n ntyux works!\n </p>\n `,\n styles: ``,\n})\nexport class Ntyux {\n\n}\n","import { NgModule } from '@angular/core';\nimport { Ntyux } from './ntyux';\n\n\n\n@NgModule({\n declarations: [\n Ntyux\n ],\n imports: [\n ],\n exports: [\n Ntyux\n ]\n})\nexport class NtyuxModule { }\n","export class Guid {\n private value: string = this.empty;\n constructor(value?: string) {\n if (value) {\n if (Guid.isValid(value)) {\n this.value = value;\n }\n }\n }\n\n public static newGuid(): Guid {\n return new Guid(\n 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n })\n );\n }\n /**\n * return all zeros '00000000-0000-0000-0000-000000000000'\n */\n public static get empty(): string {\n return '00000000-0000-0000-0000-000000000000';\n }\n public get empty(): string {\n return Guid.empty;\n }\n public static isValid(str: string): boolean {\n const validRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return validRegex.test(str);\n }\n public toString() {\n return this.value;\n }\n\n public toJSON(): string {\n return this.value;\n }\n /**\n * True is guid is empty or not valid\n * @param str\n * @returns\n */\n public static isNullOrEmpty(str: string): boolean {\n if (str == null || str == undefined) {\n return true;\n }\n if (!Guid.isValid(str)) {\n return true;\n }\n if (str == Guid.empty) {\n return true;\n }\n return false;\n }\n /**\n * True if the guid is valid and not all zeros (empty)\n * @param str\n * @returns\n */\n public static isValidAndNotEmpty(str: string): boolean {\n return !Guid.isNullOrEmpty(str);\n }\n /**\n * Return empty guid if the given guid is not valid\n * @param guid\n * @returns\n */\n public static emptyWhenNull(guid: any): any {\n if (Guid.isValidAndNotEmpty(guid)) {\n return guid;\n }\n return Guid.empty;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { NtyAutoCompleteFilter } from '../models/auto-complete-filter';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AutoCompleteProxy {\n private http = inject(HttpClient);\n private environmentProxy = inject(EnvironmentProxy);\n\n getAutocompleteDataFilter(\n searchTable: string,\n endpoint: string,\n searchData: NtyAutoCompleteFilter\n ) {\n let functionUrl = this.environmentProxy.getServerLink(\n searchTable + '/' + endpoint\n );\n return this.http.post(functionUrl, searchData);\n }\n}\n","import { NtyAutoCompleteFilterFields } from './auto-complete-filter-fields';\n\nexport class NtyAutoCompleteFilter {\n coid: any = null;\n searchString: string | null = null;\n fields: NtyAutoCompleteFilterFields[] | null = null;\n}\n","import {\n Component,\n input,\n output,\n ViewChild,\n ViewContainerRef,\n inject,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\nimport { NettyAgGridBase } from '@nettyapps/ntybase';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n/**\n * This component can load and display any container which is provided dynamically during run time\n * The only requirement is the component that will be displayed should extend AgGridBaseComponent\n */\n@Component({\n selector: 'ntybase-auto-complete-lookup',\n imports: [],\n template: ` <ng-template #container></ng-template> `,\n})\nexport class AutoCompleteLookup implements OnChanges {\n data = inject(MAT_DIALOG_DATA);\n\n @ViewChild('container', { read: ViewContainerRef, static: true })\n container!: ViewContainerRef;\n\n component = input<any>();\n filterField = input<string | null>(null);\n filterFieldValue = input<any>(null);\n filterFieldNumeric = input<boolean>(false);\n filterFieldEquality = input<string>('=');\n\n // Output\n selectedElement = output<any>();\n\n ngOnInit() {\n this.initializeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.isComponentConfigChanged(changes)) {\n this.initializeComponent();\n }\n }\n\n private isComponentConfigChanged(changes: SimpleChanges): boolean {\n return (\n !!changes['component'] ||\n !!changes['filterField'] ||\n !!changes['filterFieldValue'] ||\n !!changes['filterFieldNumeric'] ||\n !!changes['filterFieldEquality']\n );\n }\n\n private initializeComponent() {\n const config = this.data || this.getInputConfig();\n this.loadComponent(config);\n }\n\n private getInputConfig() {\n return {\n component: this.component(),\n filterField: this.filterField(),\n filterFieldValue: this.filterFieldValue(),\n filterFieldNumeric: this.filterFieldNumeric(),\n filterFieldEquality: this.filterFieldEquality(),\n };\n }\n\n loadComponent(config: any) {\n if (!config?.component) return;\n\n this.container.clear();\n const componentRef = this.container.createComponent<NettyAgGridBase<any>>(\n config.component\n );\n\n componentRef.setInput('popupValid', true);\n\n if (config.filterField !== undefined) {\n componentRef.setInput('filterField', config.filterField);\n }\n\n if (config.filterFieldValue !== undefined) {\n componentRef.setInput('filterFieldValue', config.filterFieldValue);\n }\n\n if (config.filterFieldEquality !== undefined) {\n componentRef.setInput('filterFieldEquality', config.filterFieldEquality);\n }\n\n if (config.filterFieldNumeric !== undefined) {\n componentRef.setInput('filterFieldNumeric', config.filterFieldNumeric);\n }\n\n const sub = componentRef.instance.selectedElement.subscribe((data: any) => {\n this.selectedElement.emit(data);\n });\n\n componentRef.onDestroy(() => sub.unsubscribe());\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n OnInit,\n Input,\n ViewEncapsulation,\n inject,\n output,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { AlertService } from '@nettyapps/ntybase';\n\n@Component({\n selector: 'ntybase-auto-complete-popup-menu',\n imports: [CommonModule, ReactiveFormsModule, MatIconModule, TranslateModule],\n templateUrl: './auto-complete-popup-menu.html',\n styleUrl: './auto-complete-popup-menu.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AutoCompletePopupMenu implements OnInit {\n @Input() field: string = '';\n @Input() recordGuid: any;\n @Input() fieldDisabled: boolean = false;\n @Input() componentPath: string = '';\n @Input() inputValue: string = '';\n Result = output<string>();\n\n private clipboard = inject(Clipboard);\n private alertService = inject(AlertService);\n\n ngOnInit() {}\n\n gotoNew() {\n if (!this.componentPath) return;\n\n // Split the component path into segments\n const pathSegments = this.componentPath.split('/').filter((p) => p);\n this.gotoNewTab(pathSegments, '', 'new');\n this.Result.emit('New');\n }\n\n gotoMain() {\n if (!this.componentPath || !this.recordGuid) return;\n\n // Split the component path into segments\n const pathSegments = this.componentPath.split('/').filter((p) => p);\n this.gotoNewTab(pathSegments, this.recordGuid, 'edit');\n this.Result.emit('Main');\n }\n\n gotoLookup() {\n if (!this.fieldDisabled) {\n this.Result.emit('Lookup');\n }\n }\n\n gotoNewTab(target: string[], params: any, type: string) {\n if (!target || target.length === 0) return;\n\n // Construct the URL directly in the format you want\n let url = `/${target.join('/')}`;\n\n // Add query parameters\n const queryParams = [];\n if (params) {\n queryParams.push(\n `parameters=${encodeURIComponent(JSON.stringify(params))}`\n );\n }\n if (type) {\n queryParams.push(`type=${type}`);\n }\n queryParams.push('isNewTab=true');\n\n if (queryParams.length > 0) {\n url += `?${queryParams.join('&')}`;\n }\n\n // Open in new tab\n window.open(url, '_blank');\n }\n\n copyToClipboard() {\n if (this.inputValue) {\n this.clipboard.copy(this.inputValue);\n this.alertService.showAlert('@copiedToClipboard');\n this.Result.emit('Copy');\n }\n }\n}\n","<div class=\"dialogbase\">\n <div class=\"menu\">\n <ul class=\"list-group\">\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"copyToClipboard()\" class=\"align-line\"\n ><mat-icon>content_copy</mat-icon>{{'@copy'| translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"gotoMain()\" class=\"align-line\"\n ><mat-icon>edit</mat-icon>{{'@popupGotoRecordDefinition'|\n translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"gotoNew()\" class=\"align-line\"\n ><mat-icon>add</mat-icon>{{'@popupNewRecord'| translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center\"\n [ngClass]=\"{'menu-item':!fieldDisabled , 'menu-item-disabled':fieldDisabled }\"\n >\n <span (click)=\"gotoLookup()\" class=\"align-line\"\n ><mat-icon>search</mat-icon>{{'@popupSelectFromList'|translate}}</span\n >\n </li>\n </ul>\n </div>\n</div>\n","import {\n Component,\n computed,\n effect,\n ElementRef,\n input,\n signal,\n ViewChild,\n ChangeDetectionStrategy,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport {\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent,\n MatAutocompleteTrigger,\n} from '@angular/material/autocomplete';\nimport {\n FormsModule,\n FormControl,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { UiBase } from '@nettyapps/ntyui';\nimport { Guid } from '../auto-complete/models/guid';\nimport { AutoCompleteProxy } from './services/auto-complete-proxy';\nimport {\n MatDialog,\n MatDialogConfig,\n MatDialogModule,\n} from '@angular/material/dialog';\nimport { NtyAutoCompleteFilter } from './models/auto-complete-filter';\nimport { NtyAutoCompleteFilterFields } from './models/auto-complete-filter-fields';\nimport { AutoCompleteLookup } from './auto-complete-lookup/auto-complete-lookup';\nimport { AutoCompletePopupMenu } from './auto-complete-popup-menu/auto-complete-popup-menu';\nimport { AlertService } from '@nettyapps/ntybase';\n\nexport class SelectionItem {\n name: string | null = null;\n value: any = null;\n\n constructor(_value: any = null, _name: string | null = null) {\n this.name = _name;\n this.value = _value;\n }\n}\n\n@Component({\n selector: 'ntybase-auto-complete',\n imports: [\n MatFormFieldModule,\n MatAutocompleteModule,\n FormsModule,\n MatInputModule,\n MatIconModule,\n ReactiveFormsModule,\n MatDialogModule,\n ],\n templateUrl: './auto-complete.html',\n styleUrl: './auto-complete.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoComplete),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AutoComplete extends UiBase {\n // Input parameters\n tableName = input<string>('');\n apiEndpoint = input<string>('');\n showSearchButton = input<boolean>(true);\n searchAfter = input<number>(3);\n fieldCode = input<string | null>(null);\n fieldName = input<string | null>(null);\n lookupComponent = input<any>(null);\n lookupComponentPath = input<any>(null);\n filterField = input<string | null>(null);\n filterFieldValue = input<any>(null);\n filterFieldNumeric = input<boolean>(false);\n filterFieldEquality = input<string>('=');\n debounceTime = input<number>(500);\n\n // Inject dependencies\n private alertService = inject(AlertService);\n private autoCompleteService = inject(AutoCompleteProxy);\n private dialog = inject(MatDialog);\n\n @ViewChild(MatAutocompleteTrigger)\n autoCompleteTrigger!: MatAutocompleteTrigger;\n @ViewChild('autoCompleteInput') inputField!: ElementRef;\n\n control = new FormControl();\n matcher = new ErrorStateMatcher();\n\n // Signal parameters\n searchText = signal('');\n selectedOption = signal<SelectionItem | null>(null);\n loadedOptions = signal<SelectionItem[]>([]);\n\n private searchSignal = signal<string>('');\n private debounceTimeout: any;\n\n constructor() {\n super();\n // Sync form control with selected option\n effect(() => {\n const option = this.selectedOption();\n if (option) {\n this.searchText.set(option.name || '');\n } else if (this.control.value && !this.selectedOption()) {\n const found = this.loadedOptions().find(\n (opt) => opt.value === this.control.value\n );\n if (found) {\n this.selectedOption.set(found);\n this.searchText.set(found.name || '');\n }\n }\n });\n\n // Then watch the debounced signal:\n effect((onCleanup) => {\n const searchValue = this.searchSignal();\n\n clearTimeout(this.debounceTimeout);\n\n this.debounceTimeout = setTimeout(() => {\n if (this.shouldTriggerSearch(searchValue)) {\n this.loadAutoCompleteData(searchValue);\n } else {\n this.loadedOptions.set([]);\n }\n }, this.debounceTime());\n\n onCleanup(() => {\n clearTimeout(this.debounceTimeout);\n });\n });\n\n effect(() => {\n this.onChange(this.value());\n });\n\n effect(() => {\n this.updateValidators();\n });\n }\n\n private shouldTriggerSearch(searchValue: string): boolean {\n return searchValue.length >= this.searchAfter();\n }\n\n filteredData = computed(() => {\n return this.loadedOptions();\n });\n\n onInputChanged(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n this.searchText.set(value);\n this.onTouched();\n\n // Clear selection if text doesn't match\n if (this.selectedOption() && this.selectedOption()?.name !== value) {\n this.selectedOption.set(null);\n }\n\n if (value.length === 0) {\n this.clearInput();\n return;\n }\n this.searchSignal.set(value);\n this.autoCompleteTrigger.closePanel();\n }\n\n private loadAutoCompleteData(searchValue: string) {\n this.loadedOptions.set([]);\n\n const filter = new NtyAutoCompleteFilter();\n\n filter.searchString =\n searchValue.trim() === '' && searchValue.length >= this.searchAfter()\n ? ''\n : searchValue;\n\n filter.fields = [];\n\n if (this.filterField() && this.filterField()!.trim().length > 0) {\n const fields: NtyAutoCompleteFilterFields = {\n equalitySign: this.filterFieldEquality(),\n fieldName: this.filterField()!,\n fieldValue: this.filterFieldValue(),\n numeric: this.filterFieldNumeric(),\n };\n filter.fields?.push(fields);\n }\n\n const endpoint = this.apiEndpoint() || 'AutoCompleteFilter';\n this.autoCompleteService\n .getAutocompleteDataFilter(this.tableName(), endpoint, filter)\n .subscribe({\n next: (data: any) => {\n if (data && Array.isArray(data)) {\n const options = data.map((item: any) => ({\n name: item.text,\n value: item.guidValue,\n }));\n this.loadedOptions.set(options);\n\n if (options.length === 1) {\n this.selectedOption.set(options[0]);\n this.control.setValue(options[0].value);\n this.searchText.set(options[0].name || '');\n } else if (options.length > 1) {\n this.autoCompleteTrigger.openPanel();\n }\n }\n },\n error: (err: any) => {\n this.alertService.showAlert(err.message);\n },\n });\n }\n\n override clearInput() {\n this.selectedOption.set(new SelectionItem(Guid.empty, ''));\n this.control.reset();\n this.searchText.set('');\n this.loadedOptions.set([]);\n this.inputField.nativeElement.value = '';\n }\n\n onPaste(event: ClipboardEvent) {\n const clipboardData = event.clipboardData;\n if (!clipboardData) return;\n\n const pastedText = clipboardData.getData('text');\n this.searchText.set(pastedText);\n this.searchSignal.set(pastedText);\n }\n\n displayFn(item: any): string {\n return this.searchText();\n }\n\n optionSelected(event: MatAutocompleteSelectedEvent) {\n const selectedValue = event.option.value;\n const selected = this.loadedOptions().find(\n (opt) => opt.value === selectedValue\n );\n\n if (selected) {\n this.selectedOption.set(selected);\n this.control.setValue(selected.value);\n this.searchText.set(selected.name || '');\n }\n }\n\n override writeValue(value: any): void {\n this.value.set(value);\n if (!value) return;\n\n if (this.fieldCode()) {\n this.selectedOption.set({ value, name: this.fieldCode() });\n }\n }\n\n onLookup() {\n if (!this.lookupComponent()) return;\n\n const dialogRef = this.dialog.open(AutoCompleteLookup, {\n height: 'auto',\n width: '100%',\n maxWidth: '100%',\n maxHeight: 'auto',\n data: {\n component: this.lookupComponent(),\n ...(this.filterField() && {\n filterField: this.filterField(),\n filterFieldValue: this.filterFieldValue(),\n filterFieldEquality: this.filterFieldEquality(),\n filterFieldNumeric: this.filterFieldNumeric(),\n }),\n },\n });\n\n dialogRef.componentInstance.selectedElement.subscribe((data: any) => {\n if (data) {\n const selection = new SelectionItem(data.value, data.text);\n this.selectedOption.set(selection);\n this.control.setValue(selection.value);\n this.searchText.set(selection.name || '');\n }\n dialogRef.close();\n });\n }\n\n /** Popup screen to goto main table\n *\n * @param event\n * @returns\n */\n rightClick(event: any) {\n event.stopPropagation();\n const dialogConfig = new MatDialogConfig();\n dialogConfig.position = {\n top: event.clientY + 'px',\n left: event.clientX + 'px',\n };\n dialogConfig.height = 'auto';\n dialogConfig.width = 'auto';\n dialogConfig.panelClass = 'foo';\n const dialogRef = this.dialog.open(AutoCompletePopupMenu, dialogConfig);\n dialogRef.componentInstance.field = this.tableName();\n dialogRef.componentInstance.recordGuid = this.value();\n dialogRef.componentInstance.fieldDisabled = this.disabled();\n dialogRef.componentInstance.componentPath = this.lookupComponentPath();\n dialogRef.componentInstance.inputValue = this.searchText();\n dialogRef.componentInstance.Result.subscribe((result: string) => {\n switch (result) {\n case 'Lookup':\n dialogRef.close();\n this.onLookup();\n break;\n default:\n dialogRef.close();\n break;\n }\n });\n return false;\n }\n\n // Validation\n override getErrorMessage() {\n if (this.control.hasError('required') && this.errorMessages()['required']) {\n return this.errorMessages()['required'];\n }\n return '';\n }\n\n override updateValidators() {\n const validators = [];\n\n if (this.required()) {\n validators.push(Validators.required);\n }\n\n this.control.setValidators(validators);\n\n if (this.disabled()) {\n this.control.disable({ emitEvent: false });\n }\n\n this.control.updateValueAndValidity();\n }\n}\n","<mat-form-field\n class=\"ui-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n @if (label()) {\n <mat-label>{{ label() }}</mat-label>\n }\n\n <input\n type=\"text\"\n #autoCompleteInput\n matInput\n [(ngModel)]=\"value\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder()\"\n (input)=\"onInputChanged($event)\"\n (paste)=\"onPaste($event)\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"control\"\n (contextmenu)=\"rightClick($event)\"\n />\n\n @if (value() && !disabled()) {\n <button\n mat-icon-button\n matSuffix\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn number-clear-btn\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n } @if (showSearchButton()) {\n <button\n mat-icon-button\n matSuffix\n aria-label=\"Search\"\n (click)=\"onLookup()\"\n class=\"search-btn\"\n [disabled]=\"disabled()\"\n >\n <mat-icon>search</mat-icon>\n </button>\n }\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [displayWith]=\"displayFn.bind(this)\"\n (optionSelected)=\"optionSelected($event)\"\n >\n @for (option of filteredData(); track option.value) {\n <mat-option [value]=\"option.value\"> {{ option.name }} </mat-option>\n }\n </mat-autocomplete>\n\n <mat-error>{{ getErrorMessage() }}</mat-error>\n</mat-form-field>\n","export class NettyFilter {\n value: any;\n text: any;\n}\n","export class NtyAutoCompleteFilterFields {\n fieldName: string | null = null;\n fieldValue: string | null = null;\n numeric: boolean = false;\n equalitySign: string = '=';\n}\n","import { Component, effect, forwardRef, input, model } from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n FormsModule,\n ControlValueAccessor,\n} from '@angular/forms';\nimport { NettyUINumberInput, UiBase } from '@nettyapps/ntyui';\nimport { AutoComplete } from '../auto-complete/auto-complete';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'ntyux-value-unit-input',\n imports: [NettyUINumberInput, AutoComplete, FormsModule, MatInputModule],\n templateUrl: './value-unit-input.html',\n styleUrl: './value-unit-input.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ValueUnitInput),\n multi: true,\n },\n ],\n})\nexport class ValueUnitInput extends UiBase implements ControlValueAccessor {\n // AutoComplete Parameters\n tableName = input<string>('');\n apiEndpoint = input<string>('');\n showSearchButton = input<boolean>(true);\n searchAfter = input<number>(3);\n fieldCode = input<string | null>(null);\n fieldName = input<string | null>(null);\n lookupComponent = input<any>(null);\n lookupComponentPath = input<any>(null);\n filterField = input<string | null>(null);\n filterFieldValue = input<any>(null);\n filterFieldNumeric = input<boolean>(false);\n filterFieldEquality = input<string>('=');\n\n // Unit Parameters\n // UiBase'den gelen 'disabled()' her ikisini birden kapatmak için kullanılır.\n unitValue = model<any>('');\n unitLabel = input<string>('');\n unitPlaceholder = input<string>('');\n unitDisabled = input<boolean>(false);\n\n constructor() {\n super();\n\n effect(() => {\n const val = this.value();\n const unit = this.unitValue();\n if (this.required()) {\n if (!val || !unit) {\n this.ngModel?.control.setErrors({ required: true });\n } else {\n this.ngModel?.control.setErrors(null);\n }\n }\n });\n }\n}\n","<div class=\"combined-container\">\n <div class=\"value\">\n <ntyui-number-input\n #inputModel=\"ngModel\"\n [label]=\"label()\"\n [placeholder]=\"placeholder()\"\n [required]=\"required()\"\n [(ngModel)]=\"value\"\n [disabled]=\"disabled()\"\n >\n </ntyui-number-input>\n </div>\n\n <div class=\"unit\">\n <ntybase-auto-complete\n #inputModel=\"ngModel\"\n [label]=\"unitLabel()\"\n [placeholder]=\"unitPlaceholder()\"\n [required]=\"required()\"\n [(ngModel)]=\"unitValue\"\n [tableName]=\"tableName()\"\n [apiEndpoint]=\"apiEndpoint()\"\n [lookupComponent]=\"lookupComponent()\"\n [lookupComponentPath]=\"lookupComponentPath()\"\n [showSearchButton]=\"showSearchButton()\"\n [searchAfter]=\"searchAfter()\"\n [filterField]=\"filterField()\"\n [fieldCode]=\"fieldCode()\"\n [filterFieldValue]=\"filterFieldValue()\"\n [disabled]=\"disabled() || unitDisabled()\"\n >\n </ntybase-auto-complete>\n </div>\n</div>\n@if (getErrorMessage()) {\n<mat-error class=\"error-message\">{{ getErrorMessage() }}</mat-error>\n}\n","import { Location } from '@angular/common';\nimport { Component, inject, OnDestroy } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { CommonService } from '@nettyapps/ntybase';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'ntybase-http-error403',\n imports: [],\n templateUrl: './http-error403.html',\n styleUrl: './http-error403.scss',\n})\nexport class HttpError403 implements OnDestroy {\n attemptedUrl: string = '';\n\n private routeSubscription: Subscription;\n\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private commonService = inject(CommonService);\n\n constructor() {\n // Router'dan state'i al\n const navigation = this.router.currentNavigation();\n this.attemptedUrl = navigation?.extras.state?.['attemptedUrl'] || '';\n\n // Eğer state'ten gelmediyse, mevcut URL'i temizleyerek kullan\n if (!this.attemptedUrl) {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n this.routeSubscription = this.router.events.subscribe(() => {\n this.updateAttemptedUrl();\n });\n }\n\n ngOnInit() {\n // 1. URL'deki secondary outlet'leri temizle (örneğin: \"(rightSidenav:...)\")\n this.cleanUrlFromFragments();\n\n // 2. Hata mesajı için attemptedUrl'i güncelle\n this.updateAttemptedUrl();\n\n // 3. Right sidenav'ı kapat\n this.commonService.toggleRightSidenav(false);\n }\n\n ngOnDestroy() {\n if (this.routeSubscription) {\n this.routeSubscription.unsubscribe();\n }\n }\n\n /**\n * URL'deki fragment ve outlet'leri temizler.\n * Örnek: \"/sys/NettyUserGroup(rightSidenav:...)\" → \"/sys/NettyUserGroup\"\n */\n private cleanUrlFromFragments() {\n const currentUrl = this.router.url;\n const cleanUrl = currentUrl.split('(')[0]; // \"(\" sonrasını sil\n\n if (currentUrl !== cleanUrl) {\n // URL'yi temizlenmiş haliyle değiştir (tarayıcı geçmişine eklemeden)\n this.router.navigateByUrl(cleanUrl, {\n replaceUrl: true,\n skipLocationChange: false,\n });\n }\n }\n\n /**\n * attemptedUrl'i güncel router URL'ine göre günceller\n */\n private updateAttemptedUrl() {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n /**\n * Temizlenmiş URL yolunu döndürür (queryParams ve fragment olmadan).\n */\n private getCleanUrlPath(): string {\n return this.router.url.split('?')[0].split('(')[0];\n }\n\n goHome() {\n this.router.navigate(['/'], { replaceUrl: true });\n this.commonService.toggleRightSidenav(false);\n }\n\n goBack() {\n this.location.back();\n }\n}\n","<div class=\"error-container\">\n <div class=\"error-page\">\n <h1>403 - Erişim Engellendi</h1>\n\n <p>\n <strong>Üzgünüz, {{ attemptedUrl }}</strong> sayfasına erişim izniniz\n bulunmamaktadır.\n </p>\n\n <p class=\"error-detail\">\n Bu sayfayı görüntülemek için gerekli yetkilere sahip değilsiniz. Eğer bu\n bir hata olduğunu düşünüyorsanız, lütfen sistem yöneticinizle iletişime\n geçin.\n </p>\n <button mat-raised-button (click)=\"goHome()\" color=\"primary\" routerLink=\"/\">\n Ana Sayfaya Dön\n </button>\n <button mat-raised-button (click)=\"goBack()\" color=\"primary\" routerLink=\"/\">\n Geri Dön\n </button>\n </div>\n</div>\n","import { Location } from '@angular/common';\nimport { Component, inject, OnDestroy } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { CommonService } from '@nettyapps/ntybase';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'ntybase-http-error404',\n imports: [],\n templateUrl: './http-error404.html',\n styleUrl: './http-error404.scss',\n})\nexport class HttpError404 {\n attemptedUrl: string = '';\n private routeSubscription: Subscription;\n\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private commonService = inject(CommonService);\n\n constructor() {\n this.routeSubscription = this.router.events.subscribe(() => {\n this.updateAttemptedUrl();\n });\n }\n\n ngOnInit() {\n // 1. URL'deki secondary outlet'leri temizle (örneğin: \"(rightSidenav:...)\")\n this.cleanUrlFromFragments();\n\n // 2. Hata mesajı için attemptedUrl'i güncelle\n this.updateAttemptedUrl();\n\n // 3. Right sidenav'ı kapat\n this.commonService.toggleRightSidenav(false);\n }\n\n ngOnDestroy() {\n if (this.routeSubscription) {\n this.routeSubscription.unsubscribe();\n }\n }\n\n /**\n * URL'deki fragment ve outlet'leri temizler.\n * Örnek: \"/sys/NettyUserGroup(rightSidenav:...)\" → \"/sys/NettyUserGroup\"\n */\n private cleanUrlFromFragments() {\n const currentUrl = this.router.url;\n const cleanUrl = currentUrl.split('(')[0]; // \"(\" sonrasını sil\n\n if (currentUrl !== cleanUrl) {\n // URL'yi temizlenmiş haliyle değiştir (tarayıcı geçmişine eklemeden)\n this.router.navigateByUrl(cleanUrl, {\n replaceUrl: true,\n skipLocationChange: false,\n });\n }\n }\n\n /**\n * Temizlenmiş URL yolunu döndürür (queryParams ve fragment olmadan).\n */\n private getCleanUrlPath(): string {\n return this.router.url.split('?')[0].split('(')[0];\n }\n\n /**\n * attemptedUrl'i güncel router URL'ine göre günceller\n */\n private updateAttemptedUrl() {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n goHome() {\n this.router.navigate(['/'], { replaceUrl: true });\n this.commonService.toggleRightSidenav(false);\n }\n\n goBack() {\n this.location.back();\n }\n}\n","<div class=\"error-container\">\n <div class=\"error-page\">\n <h1>404</h1>\n <h3>Sayfa Bulunamadı</h3>\n <p><strong>{{ attemptedUrl }}</strong> adresi bulunamadı.</p>\n <p>Bu içerik taşınmış veya silinmiş olabilir.</p>\n <button mat-raised-button (click)=\"goHome()\" color=\"primary\" routerLink=\"/\">\n Ana Sayfaya Dön\n </button>\n <button mat-raised-button (click)=\"goBack()\" color=\"primary\" routerLink=\"/\">\n Geri Dön\n </button>\n </div>\n</div>\n","import {\n AfterViewInit,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { Router, RouterLink, RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { NettyUISearchInput } from '@nettyapps/ntyui';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport {\n AuthenticationService,\n NettyMenuService,\n CommonService,\n CredentialsService,\n NettyImageService,\n} from '@nettyapps/ntybase';\n\n@Component({\n selector: 'ntybase-left-sidenav',\n imports: [\n CommonModule,\n MatIconModule,\n MatListModule,\n MatMenuModule,\n MatMenuTrigger,\n RouterLink,\n RouterModule,\n NettyUISearchInput,\n TranslateModule,\n ],\n templateUrl: './left-sidenav.html',\n styleUrl: './left-sidenav.scss',\n})\nexport class LeftSidenav implements OnInit, AfterViewInit {\n private authService = inject(AuthenticationService);\n private router = inject(Router);\n private menuService = inject(NettyMenuService);\n private commonService = inject(CommonService);\n private environmentProxy = inject(EnvironmentProxy);\n private credentialsService = inject(CredentialsService);\n private imageService = inject(NettyImageService);\n private elementRef = inject(ElementRef);\n\n username = signal<string>('');\n profileImage = signal<string>('');\n\n version: string | null = this.environmentProxy.version();\n\n isMinimized = input<boolean>(false);\n toggleMinimize = output<void>();\n\n onToggleMinimize() {\n this.toggleMinimize.emit();\n }\n\n logout() {\n this.authService.logout().subscribe({\n next: (success) => {\n if (success) {\n const cleanUrl = this.commonService.getCleanUrlPath();\n this.router.navigateByUrl(cleanUrl, { replaceUrl: true }).then(() => {\n this.router.navigate(['/login']);\n });\n }\n },\n error: (err) => {\n console.error('Logout failed:', err);\n },\n });\n }\n\n // Menu Search\n menuItems = signal<any[]>([]);\n searchTerm = signal<string>('');\n originalMenuItems = signal<any[]>([]);\n\n constructor() {\n effect(() => {\n const fetchedMenu = this.menuService.menu();\n if (fetchedMenu) {\n const processedItems = this.processMenuItems(fetchedMenu);\n this.originalMenuItems.set(processedItems);\n } else {\n this.originalMenuItems.set([]);\n }\n });\n\n this.loadUserInfo();\n }\n\n ngOnInit(): void {\n // Application name gelene kadar 3 kez dene\n this.trySetMenuName(0);\n }\n\n private trySetMenuName(attempt: number): void {\n const appName = this.environmentProxy.getApplicationName();\n\n if (appName && appName.trim()) {\n // Application name geldi, menüyü yükle\n this.menuService.setMenuName(appName);\n } else if (attempt < 3) {\n // Henüz gelmedi, 300ms sonra tekrar dene\n setTimeout(() => {\n this.trySetMenuName(attempt + 1);\n }, 300);\n } else {\n // 3 denemeden sonra hala gelmedi, boş string ile dene\n console.warn('Application name not found, using empty string');\n this.menuService.setMenuName('');\n }\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.loadUserInfo();\n }, 0);\n }\n\n loadUserInfo(): void {\n const credentials = this.credentialsService.getCredentials();\n if (credentials && credentials.username) {\n this.username.set(credentials.username);\n\n this.generateProfileImage(credentials.username);\n }\n }\n\n generateProfileImage(username: string): void {\n const initials = this.getInitials(username);\n\n const primaryColor = this.getCssVariableValue('--mat-sys-primary');\n\n const imageUrl = this.imageService.generateTextImage(\n initials,\n 40,\n 40,\n primaryColor || '#4ECDC4',\n '#FFFFFF',\n 'rgba(0, 0, 0, 0.2)'\n );\n\n this.profileImage.set(imageUrl);\n }\n\n private getCssVariableValue(variableName: string): string | null {\n if (typeof window === 'undefined') return null;\n\n const element = this.elementRef.nativeElement;\n return (\n getComputedStyle(element).getPropertyValue(variableName).trim() || null\n );\n }\n\n private getInitials(username: string): string {\n if (!username) return 'U';\n\n const names = username.trim().split(' ');\n if (names.length === 1) {\n return names[0].charAt(0).toUpperCase();\n } else {\n return (\n names[0].charAt(0) + names[names.length - 1].charAt(0)\n ).toUpperCase();\n }\n }\n\n processMenuItems(apiResponse: any): any[] {\n if (!apiResponse || !Array.isArray(apiResponse)) {\n return [];\n }\n return apiResponse.map((item: any) => ({\n name: item.label || item.name,\n icon: item.icon || '',\n link: item.route || item.link || '#',\n expanded: false,\n children: item.children ? this.processMenuItems(item.children) : [],\n }));\n }\n\n filteredMenuItems = computed(() => {\n const term = this.searchTerm().toLowerCase();\n if (!term) return this.originalMenuItems();\n\n return this.filterMenuItems(this.originalMenuItems(), term);\n });\n\n private filterMenuItems(items: any[], term: string): any[] {\n const normalizedTerm = this.commonService.normalizeTurkish(term);\n\n return items\n .map((item) => {\n const filteredChildren = item.children\n ? this.filterMenuItems(item.children, term)\n : [];\n\n const normalizedName = this.commonService.normalizeTurkish(item.name);\n const matches =\n normalizedName.includes(normalizedTerm) ||\n filteredChildren.length > 0;\n\n return matches\n ? {\n ...item,\n children: filteredChildren,\n expanded: matches || filteredChildren.length > 0,\n }\n : null;\n })\n .filter((item) => item !== null);\n }\n\n toggleSubMenu(item: any): void {\n item.expanded = !item.expanded;\n }\n\n onSearch(term: string) {\n this.searchTerm.set(term);\n }\n}\n","<div class=\"sidenav-content-wrapper\">\n <!-- Minimize Icon -->\n <button mat-icon-button (click)=\"onToggleMinimize()\" class=\"minimize-button\">\n <mat-icon class=\"minimize-icon\">\n {{ isMinimized() ? \"chevron_right\" : \"chevron_left\" }}\n </mat-icon>\n </button>\n\n <!-- Profile -->\n <div class=\"profile-section\">\n <button mat-button [matMenuTriggerFor]=\"profileMenu\" class=\"profile-button\">\n <img [src]=\"profileImage()\" [alt]=\"username()\" class=\"profile-image\" />\n @if(!isMinimized()){\n <div class=\"profile-info\">\n <p class=\"profile-name\">{{ username() }}</p>\n </div>\n }\n </button>\n\n <mat-menu #profileMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item disabled>\n <mat-icon>account_circle</mat-icon>\n <span>{{ '@profile' | translate }}</span>\n </button>\n <button mat-menu-item mat-button disabled>\n <mat-icon>swap_horiz</mat-icon>\n <span>{{ '@changeCompany' | translate }}</span>\n </button>\n <button mat-menu-item mat-button (click)=\"logout()\">\n <mat-icon>logout</mat-icon>\n <span>{{ '@logout' | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <!-- Search Input -->\n @if (!isMinimized()){\n <ntyui-search-input\n class=\"search-input\"\n [label]=\"'@search' | translate\"\n [placeholder]=\"'@placeholderSearch' | translate\"\n [appearance]=\"'outline'\"\n (search)=\"onSearch($event)\"\n >\n </ntyui-search-input>\n }\n\n <!-- Menu -->\n @if (!isMinimized()) {\n <mat-nav-list>\n <div class=\"sidebar\">\n <ul>\n <!-- Recursive menu render -->\n @let items = filteredMenuItems(); @let level = 0;\n <ng-container\n [ngTemplateOutlet]=\"menuItemsTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: items, level: level }\"\n ></ng-container>\n </ul>\n </div>\n </mat-nav-list>\n }\n\n <!-- Footer -->\n <div class=\"sidenav-footer\">\n <button mat-button [matMenuTriggerFor]=\"footerMenu\" class=\"footer-button\">\n @if (!isMinimized()) {\n <div class=\"footer-text\">\n <div class=\"company-name\">\n <p>© 2025 AXIS</p>\n </div>\n </div>\n }\n </button>\n <div class=\"version\">\n <span class=\"version\">v{{version}}</span>\n </div>\n </div>\n\n <mat-menu #footerMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item disabled>\n <mat-icon>swap_horiz</mat-icon>\n {{ '@changeCompany' | translate }}\n </button>\n <button mat-menu-item mat-button (click)=\"logout()\">\n <mat-icon>logout</mat-icon>\n <span>{{ '@logout' | translate }}</span>\n </button>\n </mat-menu>\n</div>\n\n<!-- Recursive Menu Template -->\n<ng-template #menuItemsTemplate let-items let-level=\"level\">\n @for (item of items; track item.name) {\n <li [class]=\"'menu-level-' + level\">\n <!-- Leaf node (no children) -->\n @if (!item.children || item.children.length === 0) {\n <a\n [routerLink]=\"item.link\"\n routerLinkActive=\"active\"\n [class]=\"'menu-link level-' + level\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n <span>{{ item.name }}</span>\n </a>\n }\n\n <!-- Parent node with children -->\n @if (item.children && item.children.length > 0) {\n <a\n (click)=\"toggleSubMenu(item)\"\n [class.expanded]=\"item.expanded\"\n [class]=\"'menu-link has-children level-' + level\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n <span>{{ item.name }}</span>\n <mat-icon [class.rotated]=\"item.expanded\" class=\"expand-icon\">\n {{ item.expanded ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </a>\n }\n\n <!-- Recursive submenu -->\n @if (item.children && item.children.length > 0 && item.expanded) {\n <ul [class]=\"'submenu level-' + (level + 1)\">\n <ng-container\n *ngTemplateOutlet=\"menuItemsTemplate; context: { $implicit: item.children, level: level + 1 }\"\n ></ng-container>\n </ul>\n }\n </li>\n }\n</ng-template>\n","import { computed, effect, Injectable, signal } from '@angular/core';\n\nexport interface AppTheme {\n name: 'light' | 'dark';\n icon: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Theme {\n private readonly THEME_STORAGE_KEY = 'app-theme';\n\n private appTheme = signal<'light' | 'dark'>('light');\n private themes: AppTheme[] = [\n { name: 'light', icon: 'light_mode' },\n { name: 'dark', icon: 'dark_mode' },\n ];\n\n selectedTheme = computed(() =>\n this.themes.find((theme) => theme.name === this.appTheme())\n );\n\n constructor() {\n const savedTheme = this.getSavedTheme();\n if (savedTheme) {\n this.appTheme.set(savedTheme);\n }\n\n effect(() => {\n const appTheme = this.appTheme();\n document.body.style.setProperty('color-scheme', appTheme);\n document.body.setAttribute('data-ag-theme-mode', appTheme);\n });\n }\n\n getThemes() {\n return this.themes;\n }\n\n setTheme(theme: 'light' | 'dark') {\n this.appTheme.set(theme);\n this.saveTheme(theme);\n }\n\n private getSavedTheme(): 'light' | 'dark' | null {\n if (typeof window !== 'undefined' && window.localStorage) {\n const saved = localStorage.getItem(this.THEME_STORAGE_KEY);\n return saved === 'light' || saved === 'dark' ? saved : null;\n }\n return null;\n }\n\n private saveTheme(theme: 'light' | 'dark'): void {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(this.THEME_STORAGE_KEY, theme);\n }\n }\n}\n","import { effect, Injectable, signal } from '@angular/core';\n\nexport interface ColorTheme {\n id: string;\n primary: string;\n secondary?: string;\n displayName: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ColorPalette {\n private readonly THEME_STORAGE_KEY = 'selected-theme';\n\n private themes: ColorTheme[] = [];\n currentTheme = signal<ColorTheme | null>(null);\n\n setThemes(customThemes: ColorTheme[]): void {\n this.themes = customThemes;\n\n const savedThemeId = this.getSavedTheme();\n const themeToSet = savedThemeId\n ? this.themes.find((t) => t.id === savedThemeId)\n : this.themes[0];\n\n if (themeToSet) {\n this.currentTheme.set(themeToSet);\n } else if (this.themes.length > 0) {\n this.currentTheme.set(this.themes[0]);\n }\n }\n\n getThemes(): ColorTheme[] {\n return this.themes;\n }\n\n setTheme(themeId: string): void {\n const theme = this.themes.find((t) => t.id === themeId);\n if (theme) {\n this.currentTheme.set(theme);\n this.saveTheme(themeId);\n }\n }\n\n private getSavedTheme(): string | null {\n if (typeof window !== 'undefined' && window.localStorage) {\n return localStorage.getItem(this.THEME_STORAGE_KEY);\n }\n return null;\n }\n\n private saveTheme(themeId: string): void {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(this.THEME_STORAGE_KEY, themeId);\n }\n }\n\n updateThemeClass = effect(() => {\n const theme = this.currentTheme();\n if (theme) {\n document.body.classList.remove(\n ...this.themes.map((t) => `${t.id}-theme`)\n );\n document.body.classList.add(`${theme.id}-theme`);\n }\n });\n}\n","import { Component, inject, model, output } from '@angular/core';\nimport { CommonModule, TitleCasePipe } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { Theme } from '../../themes/services/theme';\nimport { ColorPalette } from '../../themes/services/color-palette';\nimport { I18nService } from '@nettyapps/ntyi18n';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'ntybase-toolbar',\n imports: [\n MatIconModule,\n MatMenuModule,\n MatToolbarModule,\n CommonModule,\n TitleCasePipe,\n TranslateModule,\n ],\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.scss',\n})\nexport class Toolbar {\n protected themeService = inject(Theme);\n protected colorPaletteService = inject(ColorPalette);\n private i18nService = inject(I18nService);\n private router = inject(Router);\n toggleSidenav = output<void>();\n\n onToggleSidenav() {\n this.toggleSidenav.emit();\n }\n\n // Language\n icon = model(false);\n\n get currentLanguage(): string {\n return this.i18nService.language;\n }\n\n get languages(): string[] {\n return this.i18nService.supportedLanguages;\n }\n\n setLanguage(language: string) {\n this.i18nService.language = language;\n\n setTimeout(() => {\n window.location.reload();\n }, 100);\n }\n\n getCurrentLanguageIcon(): string {\n switch (this.i18nService.language) {\n case 'Türkçe':\n return 'fi fi-tr';\n case 'English':\n return 'fi fi-us';\n default:\n return 'fi fi-tr';\n }\n }\n\n getLanguageIcon(language: string): string {\n switch (language) {\n case 'Türkçe':\n return 'fi fi-tr';\n case 'English':\n return 'fi fi-us';\n default:\n return 'fi fi-tr';\n }\n }\n}\n","<mat-toolbar class=\"sidenav-header\">\n <div class=\"left-section\">\n <button mat-icon-button (click)=\"onToggleSidenav()\" class=\"menu-button\">\n <mat-icon>menu</mat-icon>\n </button>\n <span>{{'app_name' | translate }}</span>\n\n <!-- Language Selection -->\n <div class=\"language-toggle\">\n @if (icon()) {\n <button mat-icon-button [matMenuTriggerFor]=\"languageMenu\">\n <span class=\"{{ getCurrentLanguageIcon() }}\"></span>\n </button>\n } @else {\n <button\n mat-raised-button\n color=\"primary\"\n [matMenuTriggerFor]=\"languageMenu\"\n >\n {{ currentLanguage }}\n </button>\n }\n </div>\n\n <!-- Language Menu -->\n <mat-menu #languageMenu=\"matMenu\">\n @for (language of languages; track language) {\n <button mat-menu-item (click)=\"setLanguage(language)\">\n <span class=\"{{ getLanguageIcon(language) }}\"></span>\n {{ language }}\n </button>\n }\n </mat-menu>\n </div>\n\n <div class=\"spacer\"></div>\n\n <div class=\"flex-stretch\"></div>\n <button\n mat-icon-button\n [mat-menu-trigger-for]=\"themeMenu\"\n class=\"theme-button\"\n >\n <mat-icon>{{ themeService.selectedTheme()?.icon }}</mat-icon>\n </button>\n <mat-menu #themeMenu=\"matMenu\">\n @for (theme of themeService.getThemes(); track theme.name) {\n <button\n [class.selected-theme]=\"themeService.selectedTheme()?.name === theme.name\"\n mat-menu-item\n (click)=\"themeService.setTheme(theme.name)\"\n >\n <mat-icon>{{ theme.icon }}</mat-icon>\n <span>{{ theme.name | titlecase }}</span>\n </button>\n }\n </mat-menu>\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"customThemeMenu\"\n class=\"custom-theme-button\"\n >\n <mat-icon>format_color_fill</mat-icon>\n </button>\n <mat-menu #customThemeMenu=\"matMenu\">\n @for (customTheme of colorPaletteService.getThemes(); track customTheme.id)\n {\n <button\n mat-menu-item\n (click)=\"colorPaletteService.setTheme(customTheme.id)\"\n >\n <div class=\"theme-menu-item\">\n <div\n class=\"color-preview\"\n [style.background-color]=\"customTheme.primary\"\n ></div>\n <span>{{ customTheme.displayName }}</span>\n </div>\n </button>\n }\n </mat-menu>\n</mat-toolbar>\n","import { Component, input, output, model } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { UiBase } from '@nettyapps/ntyui';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'ntyux-filter-card',\n templateUrl: './filter-card.html',\n styleUrls: ['./filter-card.scss'],\n standalone: true,\n imports: [MatCardModule, MatButtonModule, FormsModule],\n})\n\nexport class NettyUXFilterCard extends UiBase {\n public Title = input<string>(\"\");\n public SubTitle = input<string>(\"\");\n public isExportVisible = input<boolean>(true);\n public isFormValid = input<boolean>(true);\n public onExport = output<void>();\n public onReset = output<void>();\n public onApply = output<void>();\n}\n","<mat-card class=\"filter-card\" apperance=\"outlined\">\n <mat-card-title>{{Title()}}</mat-card-title>\n <mat-card-subtitle>{{SubTitle()}}</mat-card-subtitle>\n <mat-card-content>\n <ng-content>\n No content provided\n </ng-content>\n </mat-card-content>\n <mat-card-actions class=\"mat-card-actions\">\n <button matButton=\"outlined\" (click)=\"onReset.emit()\">Reset</button>\n @if (isExportVisible()) {\n <button matButton=\"outlined\" [disabled]=\"!isFormValid()\" (click)=\"onExport.emit()\">Export</button>\n }\n <button matButton=\"filled\" [disabled]=\"!isFormValid()\" (click)=\"onApply.emit()\">Apply</button>\n </mat-card-actions>\n</mat-card>","import { Directive, ElementRef, inject, Input, OnDestroy, OnInit, Renderer2, Output, EventEmitter } from '@angular/core';\nimport { MatSidenav } from '@angular/material/sidenav';\n\n@Directive({\n selector: '[ntySidenavResizable]',\n standalone: true\n})\nexport class NtySidenavResizableDirective implements OnInit, OnDestroy {\n private el = inject(ElementRef);\n private renderer = inject(Renderer2);\n private sidenav = inject(MatSidenav, { host: true, optional: true });\n\n @Input() side: 'left' | 'right' = 'left';\n @Input() minWidth = 100;\n @Input() maxWidth = 1200;\n @Output() widthChange = new EventEmitter<number>();\n\n private isResizing = false;\n private startX = 0;\n private startWidth = 0;\n private dragCleanup: (() => void)[] = [];\n private handle: HTMLDivElement | null = null;\n\n ngOnInit(): void {\n this.createHandle();\n }\n\n ngOnDestroy(): void {\n this.stopResize();\n if (this.handle) {\n this.handle.remove();\n }\n }\n\n private createHandle(): void {\n this.handle = this.renderer.createElement('div');\n this.renderer.addClass(this.handle, 'sidenav-resize-handle');\n this.renderer.addClass(this.handle, `handle-${this.side}`);\n\n // Ensure handle is always on top\n this.renderer.setStyle(this.handle, 'z-index', '99999');\n this.renderer.setStyle(this.handle, 'pointer-events', 'auto');\n\n this.renderer.appendChild(this.el.nativeElement, this.handle);\n\n this.renderer.listen(this.handle, 'mousedown', (event: MouseEvent) => this.initResize(event));\n }\n\n private initResize(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isResizing = true;\n this.startX = event.clientX;\n this.startWidth = this.el.nativeElement.offsetWidth;\n\n this.dragCleanup.push(this.renderer.listen('window', 'mousemove', (e: MouseEvent) => this.resize(e)));\n this.dragCleanup.push(this.renderer.listen('window', 'mouseup', () => this.stopResize()));\n }\n\n private resize(event: MouseEvent): void {\n if (!this.isResizing) return;\n\n let newWidth: number;\n if (this.side === 'left') {\n // Dragging left edge of a right-aligned sidenav\n newWidth = this.startWidth + (this.startX - event.clientX);\n } else {\n // Dragging right edge of a left-aligned sidenav\n newWidth = this.startWidth + (event.clientX - this.startX);\n }\n\n if (newWidth >= this.minWidth && newWidth <= this.maxWidth) {\n this.renderer.setStyle(this.el.nativeElement, 'width', `${newWidth}px`);\n this.renderer.setStyle(this.el.nativeElement, 'max-width', 'none');\n this.renderer.setStyle(this.el.nativeElement, 'min-width', '0');\n\n this.widthChange.emit(newWidth);\n\n // Trigger window resize event to notify components like Ag-Grid to recalculate their size\n window.dispatchEvent(new Event('resize'));\n }\n }\n\n private stopResize(): void {\n this.isResizing = false;\n this.dragCleanup.forEach(cleanup => cleanup());\n this.dragCleanup = [];\n }\n}\n","import { Component, inject, signal } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { CommonService } from '@nettyapps/ntybase';\nimport { Toolbar } from '../toolbar/toolbar';\nimport { LeftSidenav } from '../left-sidenav/left-sidenav';\nimport { NtySidenavResizableDirective } from '../../directives/nty-sidenav-resizable-directive';\n\n@Component({\n selector: 'app-layout',\n imports: [RouterOutlet, MatSidenavModule, Toolbar, LeftSidenav, NtySidenavResizableDirective],\n templateUrl: './nty-layout.html',\n styleUrl: './nty-layout.scss',\n})\nexport class NtyUXLayout {\n private commonService = inject(CommonService);\n // Header\n leftSidenavOpen = true;\n toggleLeftSidenav() {\n this.leftSidenavOpen = !this.leftSidenavOpen;\n }\n\n // Left sidenav\n isMinimized = false;\n currentSidenavWidth = 350; // Default width\n\n toggleMinimize() {\n this.isMinimized = !this.isMinimized;\n }\n\n onSidenavResize(width: number) {\n this.currentSidenavWidth = width;\n }\n\n // Minimize fixed\n get drawerWidth(): string {\n return this.isMinimized ? '80px' : `${this.currentSidenavWidth}px`;\n }\n\n // Right sidenav\n get rightSidenavOpen() {\n return this.commonService.rightSidenavOpen();\n }\n\n // Language\n showIcon = signal(true);\n}\n","<ntybase-toolbar [(icon)]=\"showIcon\" (toggleSidenav)=\"toggleLeftSidenav()\"></ntybase-toolbar>\n\n<mat-sidenav-container class=\"netty-sidenav-container\" [autosize]=\"true\">\n <!-- Left Sidenav -->\n <mat-sidenav #leftSidenav mode=\"side\" [opened]=\"leftSidenavOpen\" position=\"start\" [class.minimized]=\"isMinimized\"\n ntySidenavResizable side=\"right\" (widthChange)=\"onSidenavResize($event)\">\n <ntybase-left-sidenav [isMinimized]=\"isMinimized\" (toggleMinimize)=\"toggleMinimize()\">\n </ntybase-left-sidenav>\n </mat-sidenav>\n\n <!-- Main Content -->\n <mat-sidenav-content [style.margin-left]=\"leftSidenavOpen ? drawerWidth : '0'\">\n <router-outlet></router-outlet>\n </mat-sidenav-content>\n\n <!-- Right Sidenav -->\n <mat-sidenav #rightSidenav mode=\"side\" position=\"end\" [opened]=\"rightSidenavOpen\" class=\"netty-right-sidenav\"\n ntySidenavResizable side=\"left\">\n <router-outlet name=\"rightSidenav\"></router-outlet>\n </mat-sidenav>\n</mat-sidenav-container>","import { Directive, ElementRef, inject, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[ntyResizable]',\n standalone: true\n})\nexport class NtyResizableDirective implements OnInit, OnDestroy {\n private el = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n @Input('ntyResizable') isEnabled = true;\n\n private isResizing = false;\n private startX = 0;\n private startY = 0;\n private startWidth = 0;\n private startHeight = 0;\n private dragCleanup: (() => void)[] = [];\n private handle: HTMLDivElement | null = null;\n\n ngOnInit(): void {\n if (this.isEnabled) {\n this.createHandle();\n }\n }\n\n ngOnDestroy(): void {\n this.stopResize();\n if (this.handle) {\n this.handle.remove();\n }\n }\n\n private createHandle(): void {\n this.handle = this.renderer.createElement('div');\n this.renderer.addClass(this.handle, 'resize-handle');\n\n const icon = this.renderer.createElement('mat-icon');\n this.renderer.addClass(icon, 'mat-icon');\n this.renderer.addClass(icon, 'material-icons');\n const iconText = this.renderer.createText('open_with');\n this.renderer.appendChild(icon, iconText);\n\n this.renderer.appendChild(this.handle, icon);\n this.renderer.appendChild(this.el.nativeElement, this.handle);\n\n this.renderer.listen(this.handle, 'mousedown', (event: MouseEvent) => this.initResize(event));\n }\n\n private initResize(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isResizing = true;\n this.startX = event.clientX;\n this.startY = event.clientY;\n\n const dialogContainer = (this.el.nativeElement as HTMLElement).closest('.cdk-overlay-pane') as HTMLElement;\n if (!dialogContainer) return;\n\n const rect = dialogContainer.getBoundingClientRect();\n this.startWidth = rect.width;\n this.startHeight = rect.height;\n\n this.dragCleanup.push(this.renderer.listen('window', 'mousemove', (e: MouseEvent) => this.resize(e)));\n this.dragCleanup.push(this.renderer.listen('window', 'mouseup', () => this.stopResize()));\n }\n\n private resize(event: MouseEvent): void {\n if (!this.isResizing) return;\n const dx = event.clientX - this.startX;\n const dy = event.clientY - this.startY;\n\n const dialogContainer = (this.el.nativeElement as HTMLElement).closest('.cdk-overlay-pane') as HTMLElement;\n if (dialogContainer) {\n this.renderer.setStyle(dialogContainer, 'width', `${this.startWidth + dx}px`);\n this.renderer.setStyle(dialogContainer, 'height', `${this.startHeight + dy}px`);\n this.renderer.setStyle(dialogContainer, 'max-width', 'unset');\n this.renderer.setStyle(dialogContainer, 'max-height', 'unset');\n }\n }\n\n private stopResize(): void {\n this.isResizing = false;\n this.dragCleanup.forEach(cleanup => cleanup());\n this.dragCleanup = [];\n }\n}\n","import { Component, Input, Output, EventEmitter, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatIconModule } from '@angular/material/icon';\nimport { NettyUIButton } from '@nettyapps/ntyui';\nimport { NtyResizableDirective } from '../../directives/nty-resizable-directive';\n\n@Component({\n selector: 'ntyux-save-layout',\n standalone: true,\n imports: [CommonModule, TranslateModule, DragDropModule, MatIconModule, NettyUIButton, NtyResizableDirective],\n templateUrl: './netty-save-layout.html',\n styleUrls: ['./netty-save-layout.scss']\n})\nexport class NtyUXSaveLayout {\n @Input() title: string = '';\n @Input() identifier: string = '';\n @Input() viewMode: string = 'dialog';\n @Input() saveDisabled: boolean = false;\n @Input() showClose: boolean = true;\n\n @Output() save = new EventEmitter<void>();\n @Output() cancel = new EventEmitter<void>();\n\n onSave() {\n this.save.emit();\n }\n\n onCancel() {\n this.cancel.emit();\n }\n}\n","<div [class.fullscreen-container]=\"viewMode === 'fullscreen'\" [class.sidenav-container]=\"viewMode === 'sidenav'\"\n [class.popup-container]=\"viewMode === 'dialog'\" [class.dialog-drag-container]=\"viewMode === 'dialog'\" cdkDrag\n [cdkDragDisabled]=\"viewMode !== 'dialog'\" cdkDragRootElement=\".cdk-overlay-pane\"\n [ntyResizable]=\"viewMode === 'dialog'\">\n\n <div class='menu-button'>\n <ntyui-button type='menu' icon='arrow_back' [disableOnClick]='true' [disableDuration]='6'\n (clicked)='onCancel()' />\n <ntyui-button type='menu' icon='save' [disableOnClick]='true' [disableDuration]='6' (clicked)='onSave()' />\n <ng-content select=\"[additional-menu-item]\"></ng-content>\n <ng-container *ngIf=\"viewMode === 'dialog' && showClose\">\n <ntyui-button type='close' class='list-close-button' [toolTip]=\"'@close'|translate\"\n (clicked)='onCancel()' />\n </ng-container>\n </div>\n\n <!-- Header -->\n <div class='nettybase-save-record-header-bar' cdkDragHandle>\n <div class='nettybase-save-record-title-info'>\n <span class='nettybase-save-record-identifier'>\n {{ title }}: {{ identifier }}\n </span>\n </div>\n </div>\n\n <!-- Scrollable Content Area -->\n <div class='nettybase-container'>\n <ng-content></ng-content>\n </div>\n\n <!-- Footer Buttons -->\n <div class='nettybase-save-button-container'>\n <ntyui-button [label]=\"'@btnSave' | translate\" class='ntyui-form-button-save' isFilled='true' icon='save'\n type='regular' (clicked)=\"onSave()\" [disabled]=\"saveDisabled\" />\n <ntyui-button [label]=\"'@btnCancel' | translate\" class='ntyui-form-button-cancel' icon='close' type='regular'\n (clicked)='onCancel()' />\n </div>\n\n</div>","/*\n * Public API Surface of ntyux\n */\n\nexport * from './lib/ntyux';\nexport * from './lib/ntyux-module';\nexport * from './lib/auto-complete/auto-complete';\nexport * from './lib/auto-complete/models/guid';\nexport * from './lib/auto-complete/models/filter';\nexport * from './lib/auto-complete/models/auto-complete-filter';\nexport * from './lib/auto-complete/models/auto-complete-filter-fields';\nexport * from './lib/value-unit-input/value-unit-input';\nexport * from './lib/components/http-error403/http-error403';\nexport * from './lib/components/http-error404/http-error404';\nexport * from './lib/components/left-sidenav/left-sidenav';\nexport * from './lib/components/toolbar/toolbar';\nexport * from './lib/filter-card/filter-card';\nexport * from './lib/themes/services/color-palette';\nexport * from './lib/themes/services/theme';\nexport * from './lib/components/layout/nty-layout';\nexport * from './lib/directives/nty-sidenav-resizable-directive';\nexport * from './lib/directives/nty-resizable-directive';\nexport * from './lib/components/netty-save-layout/netty-save-layout';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i5","i6","i1","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAYa,KAAK,CAAA;uGAAL,KAAK,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAL,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAK,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPN;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGU,KAAK,EAAA,UAAA,EAAA,CAAA;kBAVjB,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,KAAK,EAAA,QAAA,EACP;;;;AAIT,EAAA,CAAA,EAAA;;;MCMU,WAAW,CAAA;uGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAX,WAAW,EAAA,YAAA,EAAA,CARpB,KAAK,CAAA,EAAA,OAAA,EAAA,CAKL,KAAK,CAAA,EAAA,CAAA;wGAGI,WAAW,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAVvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,OAAO,EAAE;wBACP;AACD;AACF,iBAAA;;;MCdY,IAAI,CAAA;AACP,IAAA,KAAK,GAAW,IAAI,CAAC,KAAK;AAClC,IAAA,WAAA,CAAY,KAAc,EAAA;QACxB,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK;YACpB;QACF;IACF;AAEO,IAAA,OAAO,OAAO,GAAA;AACnB,QAAA,OAAO,IAAI,IAAI,CACb,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AAC5D,YAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;AAClC,YAAA,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG;AACxC,YAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,CAAC,CAAC,CACH;IACH;AACA;;AAEG;AACI,IAAA,WAAW,KAAK,GAAA;AACrB,QAAA,OAAO,sCAAsC;IAC/C;AACA,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,KAAK;IACnB;IACO,OAAO,OAAO,CAAC,GAAW,EAAA;QAC/B,MAAM,UAAU,GACd,4EAA4E;AAC9E,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7B;IACO,QAAQ,GAAA;QACb,OAAO,IAAI,CAAC,KAAK;IACnB;IAEO,MAAM,GAAA;QACX,OAAO,IAAI,CAAC,KAAK;IACnB;AACA;;;;AAIG;IACI,OAAO,aAAa,CAAC,GAAW,EAAA;QACrC,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,SAAS,EAAE;AACnC,YAAA,OAAO,IAAI;QACb;QACA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;AACrB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;AACA;;;;AAIG;IACI,OAAO,kBAAkB,CAAC,GAAW,EAAA;AAC1C,QAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IACjC;AACA;;;;AAIG;IACI,OAAO,aAAa,CAAC,IAAS,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;AACjC,YAAA,OAAO,IAAI;QACb;QACA,OAAO,IAAI,CAAC,KAAK;IACnB;AACD;;MCpEY,iBAAiB,CAAA;AACpB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEnD,IAAA,yBAAyB,CACvB,WAAmB,EACnB,QAAgB,EAChB,UAAiC,EAAA;AAEjC,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CACnD,WAAW,GAAG,GAAG,GAAG,QAAQ,CAC7B;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IAChD;uGAbW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCLY,qBAAqB,CAAA;IAChC,IAAI,GAAQ,IAAI;IAChB,YAAY,GAAkB,IAAI;IAClC,MAAM,GAAyC,IAAI;AACpD;;ACOD;;;AAGG;MAMU,kBAAkB,CAAA;AAC7B,IAAA,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC;AAG9B,IAAA,SAAS;IAET,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAO;AACxB,IAAA,WAAW,GAAG,KAAK,CAAgB,IAAI,uDAAC;AACxC,IAAA,gBAAgB,GAAG,KAAK,CAAM,IAAI,4DAAC;AACnC,IAAA,kBAAkB,GAAG,KAAK,CAAU,KAAK,8DAAC;AAC1C,IAAA,mBAAmB,GAAG,KAAK,CAAS,GAAG,+DAAC;;IAGxC,eAAe,GAAG,MAAM,EAAO;IAE/B,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE;YAC1C,IAAI,CAAC,mBAAmB,EAAE;QAC5B;IACF;AAEQ,IAAA,wBAAwB,CAAC,OAAsB,EAAA;AACrD,QAAA,QACE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;AACtB,YAAA,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;AACxB,YAAA,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;AAC7B,YAAA,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;AAC/B,YAAA,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC;IAEpC;IAEQ,mBAAmB,GAAA;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AACjD,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IAC5B;IAEQ,cAAc,GAAA;QACpB,OAAO;AACL,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACzC,YAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC7C,YAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE;SAChD;IACH;AAEA,IAAA,aAAa,CAAC,MAAW,EAAA;QACvB,IAAI,CAAC,MAAM,EAAE,SAAS;YAAE;AAExB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CACjD,MAAM,CAAC,SAAS,CACjB;AAED,QAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;AAEzC,QAAA,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE;YACpC,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC;QAC1D;AAEA,QAAA,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE;YACzC,YAAY,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,CAAC;QACpE;AAEA,QAAA,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE;YAC5C,YAAY,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,mBAAmB,CAAC;QAC1E;AAEA,QAAA,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS,EAAE;YAC3C,YAAY,CAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC,kBAAkB,CAAC;QACxE;AAEA,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AACxE,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,CAAC,CAAC;QAEF,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;IACjD;uGAjFW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGG,gBAAgB,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALtC,CAAA,wCAAA,CAA0C,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAEzC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,QAAQ,EAAE,CAAA,wCAAA,CAA0C;AACrD,iBAAA;;sBAIE,SAAS;uBAAC,WAAW,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCHrD,qBAAqB,CAAA;IACvB,KAAK,GAAW,EAAE;AAClB,IAAA,UAAU;IACV,aAAa,GAAY,KAAK;IAC9B,aAAa,GAAW,EAAE;IAC1B,UAAU,GAAW,EAAE;IAChC,MAAM,GAAG,MAAM,EAAU;AAEjB,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAE3C,IAAA,QAAQ,KAAI;IAEZ,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE;;QAGzB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;;QAG7C,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC5B;IACF;AAEA,IAAA,UAAU,CAAC,MAAgB,EAAE,MAAW,EAAE,IAAY,EAAA;AACpD,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE;;QAGpC,IAAI,GAAG,GAAG,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;;QAGhC,MAAM,WAAW,GAAG,EAAE;QACtB,IAAI,MAAM,EAAE;AACV,YAAA,WAAW,CAAC,IAAI,CACd,CAAA,WAAA,EAAc,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA,CAAE,CAC3D;QACH;QACA,IAAI,IAAI,EAAE;AACR,YAAA,WAAW,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAA,CAAE,CAAC;QAClC;AACA,QAAA,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC;AAEjC,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,GAAG,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;QACpC;;AAGA,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;IAC5B;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,CAAC;AACjD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1B;IACF;uGArEW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBlC,u4CAoCA,EAAA,MAAA,EAAA,CAAA,6tCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnBY,YAAY,4HAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,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,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAKhE,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kCAAkC,EAAA,OAAA,EACnC,CAAC,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,CAAC,EAAA,aAAA,EAG7D,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,u4CAAA,EAAA,MAAA,EAAA,CAAA,6tCAAA,CAAA,EAAA;;sBAGpC;;sBACA;;sBACA;;sBACA;;sBACA;;;MEgBU,aAAa,CAAA;IACxB,IAAI,GAAkB,IAAI;IAC1B,KAAK,GAAQ,IAAI;AAEjB,IAAA,WAAA,CAAY,MAAA,GAAc,IAAI,EAAE,KAAA,GAAuB,IAAI,EAAA;AACzD,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM;IACrB;AACD;AAwBK,MAAO,YAAa,SAAQ,MAAM,CAAA;;AAEtC,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,qDAAC;AAC7B,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,uDAAC;AAC/B,IAAA,gBAAgB,GAAG,KAAK,CAAU,IAAI,4DAAC;AACvC,IAAA,WAAW,GAAG,KAAK,CAAS,CAAC,uDAAC;AAC9B,IAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,qDAAC;AACtC,IAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,qDAAC;AACtC,IAAA,eAAe,GAAG,KAAK,CAAM,IAAI,2DAAC;AAClC,IAAA,mBAAmB,GAAG,KAAK,CAAM,IAAI,+DAAC;AACtC,IAAA,WAAW,GAAG,KAAK,CAAgB,IAAI,uDAAC;AACxC,IAAA,gBAAgB,GAAG,KAAK,CAAM,IAAI,4DAAC;AACnC,IAAA,kBAAkB,GAAG,KAAK,CAAU,KAAK,8DAAC;AAC1C,IAAA,mBAAmB,GAAG,KAAK,CAAS,GAAG,+DAAC;AACxC,IAAA,YAAY,GAAG,KAAK,CAAS,GAAG,wDAAC;;AAGzB,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,IAAA,mBAAmB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/C,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AAGlC,IAAA,mBAAmB;AACa,IAAA,UAAU;AAE1C,IAAA,OAAO,GAAG,IAAI,WAAW,EAAE;AAC3B,IAAA,OAAO,GAAG,IAAI,iBAAiB,EAAE;;AAGjC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;AACvB,IAAA,cAAc,GAAG,MAAM,CAAuB,IAAI,0DAAC;AACnD,IAAA,aAAa,GAAG,MAAM,CAAkB,EAAE,yDAAC;AAEnC,IAAA,YAAY,GAAG,MAAM,CAAS,EAAE,wDAAC;AACjC,IAAA,eAAe;AAEvB,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;QAEP,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;YACpC,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACxC;AAAO,iBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;gBACvD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CACrC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAC1C;gBACD,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;oBAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;gBACvC;YACF;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;AAEvC,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAElC,YAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;AACrC,gBAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;AACzC,oBAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;gBACxC;qBAAO;AACL,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B;AACF,YAAA,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;YAEvB,SAAS,CAAC,MAAK;AACb,gBAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AACpC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAC7B,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,gBAAgB,EAAE;AACzB,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,mBAAmB,CAAC,WAAmB,EAAA;QAC7C,OAAO,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;IACjD;AAEA,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;AAC7B,IAAA,CAAC,wDAAC;AAEF,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACtD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE;;AAGhB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,KAAK,KAAK,EAAE;AAClE,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/B;AAEA,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE;YACjB;QACF;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE;IACvC;AAEQ,IAAA,oBAAoB,CAAC,WAAmB,EAAA;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAE1B,QAAA,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE;AAE1C,QAAA,MAAM,CAAC,YAAY;AACjB,YAAA,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;AACjE,kBAAE;kBACA,WAAW;AAEjB,QAAA,MAAM,CAAC,MAAM,GAAG,EAAE;AAElB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,EAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/D,YAAA,MAAM,MAAM,GAAgC;AAC1C,gBAAA,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE;AACxC,gBAAA,SAAS,EAAE,IAAI,CAAC,WAAW,EAAG;AAC9B,gBAAA,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACnC,gBAAA,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE;aACnC;AACD,YAAA,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAC7B;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,oBAAoB;AAC3D,QAAA,IAAI,CAAC;aACF,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM;AAC5D,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,IAAS,KAAI;gBAClB,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAS,MAAM;wBACvC,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,KAAK,EAAE,IAAI,CAAC,SAAS;AACtB,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;AAE/B,oBAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;wBACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACnC,wBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACvC,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;oBAC5C;AAAO,yBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,wBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE;oBACtC;gBACF;YACF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;gBAClB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;YAC1C,CAAC;AACF,SAAA,CAAC;IACN;IAES,UAAU,GAAA;AACjB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;IAC1C;AAEA,IAAA,OAAO,CAAC,KAAqB,EAAA;AAC3B,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa;AACzC,QAAA,IAAI,CAAC,aAAa;YAAE;QAEpB,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;IACnC;AAEA,IAAA,SAAS,CAAC,IAAS,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;IAC1B;AAEA,IAAA,cAAc,CAAC,KAAmC,EAAA;AAChD,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CACxC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,aAAa,CACrC;QAED,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1C;IACF;AAES,IAAA,UAAU,CAAC,KAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK;YAAE;AAEZ,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QAC5D;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAAE;QAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACrD,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,IAAI,EAAE;AACJ,gBAAA,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE;AACjC,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI;AACxB,oBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,oBAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACzC,oBAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE;AAC/C,oBAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;iBAC9C,CAAC;AACH,aAAA;AACF,SAAA,CAAC;QAEF,SAAS,CAAC,iBAAiB,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;YAClE,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;AAC1D,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;gBACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;YAC3C;YACA,SAAS,CAAC,KAAK,EAAE;AACnB,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE;QAC1C,YAAY,CAAC,QAAQ,GAAG;AACtB,YAAA,GAAG,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI;AACzB,YAAA,IAAI,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI;SAC3B;AACD,QAAA,YAAY,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAA,YAAY,CAAC,KAAK,GAAG,MAAM;AAC3B,QAAA,YAAY,CAAC,UAAU,GAAG,KAAK;AAC/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC;QACvE,SAAS,CAAC,iBAAiB,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;QACpD,SAAS,CAAC,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE;QACrD,SAAS,CAAC,iBAAiB,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC3D,SAAS,CAAC,iBAAiB,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE;QACtE,SAAS,CAAC,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;QAC1D,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAc,KAAI;YAC9D,QAAQ,MAAM;AACZ,gBAAA,KAAK,QAAQ;oBACX,SAAS,CAAC,KAAK,EAAE;oBACjB,IAAI,CAAC,QAAQ,EAAE;oBACf;AACF,gBAAA;oBACE,SAAS,CAAC,KAAK,EAAE;oBACjB;;AAEN,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,KAAK;IACd;;IAGS,eAAe,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC,EAAE;AACzE,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC;QACzC;AACA,QAAA,OAAO,EAAE;IACX;IAES,gBAAgB,GAAA;QACvB,MAAM,UAAU,GAAG,EAAE;AAErB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACtC;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC;AAEtC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC5C;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;IACvC;uGA/RW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,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,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,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,SAAA,EATZ;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,YAAY,CAAC;AAC3C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAwBU,sBAAsB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChGnC,s7CA0DA,EAAA,MAAA,EAAA,CAAA,8WAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDFI,kBAAkB,ghBAClB,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,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,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,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,EACb,mBAAmB,mNACnB,eAAe,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAaN,YAAY,EAAA,UAAA,EAAA,CAAA;kBAtBxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACP,kBAAkB;wBAClB,qBAAqB;wBACrB,WAAW;wBACX,cAAc;wBACd,aAAa;wBACb,mBAAmB;wBACnB,eAAe;qBAChB,EAAA,SAAA,EAGU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC;AAC3C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,s7CAAA,EAAA,MAAA,EAAA,CAAA,8WAAA,CAAA,EAAA;;sBAuB9C,SAAS;uBAAC,sBAAsB;;sBAEhC,SAAS;uBAAC,mBAAmB;;;MElGnB,WAAW,CAAA;AACtB,IAAA,KAAK;AACL,IAAA,IAAI;AACL;;MCHY,2BAA2B,CAAA;IACtC,SAAS,GAAkB,IAAI;IAC/B,UAAU,GAAkB,IAAI;IAChC,OAAO,GAAY,KAAK;IACxB,YAAY,GAAW,GAAG;AAC3B;;ACkBK,MAAO,cAAe,SAAQ,MAAM,CAAA;;AAExC,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,qDAAC;AAC7B,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,uDAAC;AAC/B,IAAA,gBAAgB,GAAG,KAAK,CAAU,IAAI,4DAAC;AACvC,IAAA,WAAW,GAAG,KAAK,CAAS,CAAC,uDAAC;AAC9B,IAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,qDAAC;AACtC,IAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,qDAAC;AACtC,IAAA,eAAe,GAAG,KAAK,CAAM,IAAI,2DAAC;AAClC,IAAA,mBAAmB,GAAG,KAAK,CAAM,IAAI,+DAAC;AACtC,IAAA,WAAW,GAAG,KAAK,CAAgB,IAAI,uDAAC;AACxC,IAAA,gBAAgB,GAAG,KAAK,CAAM,IAAI,4DAAC;AACnC,IAAA,kBAAkB,GAAG,KAAK,CAAU,KAAK,8DAAC;AAC1C,IAAA,mBAAmB,GAAG,KAAK,CAAS,GAAG,+DAAC;;;AAIxC,IAAA,SAAS,GAAG,KAAK,CAAM,EAAE,qDAAC;AAC1B,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,qDAAC;AAC7B,IAAA,eAAe,GAAG,KAAK,CAAS,EAAE,2DAAC;AACnC,IAAA,YAAY,GAAG,KAAK,CAAU,KAAK,wDAAC;AAEpC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAEP,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACjB,oBAAA,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACrD;qBAAO;oBACL,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;gBACvC;YACF;AACF,QAAA,CAAC,CAAC;IACJ;uGApCW,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,wBAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,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,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,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,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,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,iBAAA,EAAA,EAAA,SAAA,EARd;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;AAC7C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBH,wnCAqCA,gMDzBY,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,ikBAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAW5D,cAAc,EAAA,UAAA,EAAA,CAAA;kBAb1B,SAAS;+BACE,wBAAwB,EAAA,OAAA,EACzB,CAAC,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,CAAC,EAAA,SAAA,EAG7D;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,oBAAoB,CAAC;AAC7C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,wnCAAA,EAAA,MAAA,EAAA,CAAA,wIAAA,CAAA,EAAA;;;METU,YAAY,CAAA;IACvB,YAAY,GAAW,EAAE;AAEjB,IAAA,iBAAiB;AAEjB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAE7C,IAAA,WAAA,GAAA;;QAEE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;AAClD,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,EAAE,MAAM,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE;;AAGpE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;QAC5C;AAEA,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;YACzD,IAAI,CAAC,kBAAkB,EAAE;AAC3B,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;;QAEN,IAAI,CAAC,qBAAqB,EAAE;;QAG5B,IAAI,CAAC,kBAAkB,EAAE;;AAGzB,QAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAC9C;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;QACtC;IACF;AAEA;;;AAGG;IACK,qBAAqB,GAAA;AAC3B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;AAClC,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1C,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;;AAE3B,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE;AAClC,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,kBAAkB,EAAE,KAAK;AAC1B,aAAA,CAAC;QACJ;IACF;AAEA;;AAEG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;IAC5C;AAEA;;AAEG;IACK,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpD;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACjD,QAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAC9C;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;uGAhFW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,iFCZzB,m0BAsBA,EAAA,MAAA,EAAA,CAAA,qqDAAA,CAAA,EAAA,CAAA;;2FDVa,YAAY,EAAA,UAAA,EAAA,CAAA;kBANxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,WACxB,EAAE,EAAA,QAAA,EAAA,m0BAAA,EAAA,MAAA,EAAA,CAAA,qqDAAA,CAAA,EAAA;;;MEIA,YAAY,CAAA;IACvB,YAAY,GAAW,EAAE;AACjB,IAAA,iBAAiB;AAEjB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAE7C,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;YACzD,IAAI,CAAC,kBAAkB,EAAE;AAC3B,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;;QAEN,IAAI,CAAC,qBAAqB,EAAE;;QAG5B,IAAI,CAAC,kBAAkB,EAAE;;AAGzB,QAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAC9C;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;QACtC;IACF;AAEA;;;AAGG;IACK,qBAAqB,GAAA;AAC3B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;AAClC,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1C,QAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;;AAE3B,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE;AAClC,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,kBAAkB,EAAE,KAAK;AAC1B,aAAA,CAAC;QACJ;IACF;AAEA;;AAEG;IACK,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpD;AAEA;;AAEG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;IAC5C;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACjD,QAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAC9C;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;uGAtEW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,iFCZzB,qiBAcA,EAAA,MAAA,EAAA,CAAA,qqDAAA,CAAA,EAAA,CAAA;;2FDFa,YAAY,EAAA,UAAA,EAAA,CAAA;kBANxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,WACxB,EAAE,EAAA,QAAA,EAAA,qiBAAA,EAAA,MAAA,EAAA,CAAA,qqDAAA,CAAA,EAAA;;;MEoCA,WAAW,CAAA;AACd,IAAA,WAAW,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC3C,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACtC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEvC,IAAA,QAAQ,GAAG,MAAM,CAAS,EAAE,oDAAC;AAC7B,IAAA,YAAY,GAAG,MAAM,CAAS,EAAE,wDAAC;AAEjC,IAAA,OAAO,GAAkB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;AAExD,IAAA,WAAW,GAAG,KAAK,CAAU,KAAK,uDAAC;IACnC,cAAc,GAAG,MAAM,EAAQ;IAE/B,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;IAC5B;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC;AAClC,YAAA,IAAI,EAAE,CAAC,OAAO,KAAI;gBAChB,IAAI,OAAO,EAAE;oBACX,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;AACrD,oBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAK;wBAClE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;AAClC,oBAAA,CAAC,CAAC;gBACJ;YACF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC;YACtC,CAAC;AACF,SAAA,CAAC;IACJ;;AAGA,IAAA,SAAS,GAAG,MAAM,CAAQ,EAAE,qDAAC;AAC7B,IAAA,UAAU,GAAG,MAAM,CAAS,EAAE,sDAAC;AAC/B,IAAA,iBAAiB,GAAG,MAAM,CAAQ,EAAE,6DAAC;AAErC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YAC3C,IAAI,WAAW,EAAE;gBACf,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACzD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC;YAC5C;iBAAO;AACL,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACxB;AAEQ,IAAA,cAAc,CAAC,OAAe,EAAA;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;AAE1D,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE;;AAE7B,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC;QACvC;AAAO,aAAA,IAAI,OAAO,GAAG,CAAC,EAAE;;YAEtB,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,CAAC,CAAC;YAClC,CAAC,EAAE,GAAG,CAAC;QACT;aAAO;;AAEL,YAAA,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC;AAC9D,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC;IACF;IAEA,eAAe,GAAA;QACb,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,YAAY,EAAE;QACrB,CAAC,EAAE,CAAC,CAAC;IACP;IAEA,YAAY,GAAA;QACV,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE;AAC5D,QAAA,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,EAAE;YACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC;AAEvC,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC;QACjD;IACF;AAEA,IAAA,oBAAoB,CAAC,QAAgB,EAAA;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QAE3C,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;QAElE,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAClD,QAAQ,EACR,EAAE,EACF,EAAE,EACF,YAAY,IAAI,SAAS,EACzB,SAAS,EACT,oBAAoB,CACrB;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC;AAEQ,IAAA,mBAAmB,CAAC,YAAoB,EAAA;QAC9C,IAAI,OAAO,MAAM,KAAK,WAAW;AAAE,YAAA,OAAO,IAAI;AAE9C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC7C,QAAA,QACE,gBAAgB,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI;IAE3E;AAEQ,IAAA,WAAW,CAAC,QAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,GAAG;QAEzB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QACzC;aAAO;AACL,YAAA,OAAO,CACL,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EACtD,WAAW,EAAE;QACjB;IACF;AAEA,IAAA,gBAAgB,CAAC,WAAgB,EAAA;QAC/B,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC/C,YAAA,OAAO,EAAE;QACX;QACA,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,IAAS,MAAM;AACrC,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;AAC7B,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;YACrB,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG;AACpC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;AACpE,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE;AAC5C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;QAE1C,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC;AAC7D,IAAA,CAAC,6DAAC;IAEM,eAAe,CAAC,KAAY,EAAE,IAAY,EAAA;QAChD,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAEhE,QAAA,OAAO;AACJ,aAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;kBAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI;kBACxC,EAAE;AAEN,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AACrE,YAAA,MAAM,OAAO,GACX,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC;AACvC,gBAAA,gBAAgB,CAAC,MAAM,GAAG,CAAC;AAE7B,YAAA,OAAO;AACL,kBAAE;AACE,oBAAA,GAAG,IAAI;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,OAAO,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC;AACjD;kBACD,IAAI;AACV,QAAA,CAAC;aACA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;IACpC;AAEA,IAAA,aAAa,CAAC,IAAS,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;IAChC;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;uGAzLW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,qRC5CxB,4jIAqIA,EAAA,MAAA,EAAA,CAAA,ijGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtGI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,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,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,aAAa,owBAEb,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,UAAA,EAAA,IAAA,EACV,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,kBAAkB,mFAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAKN,WAAW,EAAA,UAAA,EAAA,CAAA;kBAhBvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,OAAA,EACvB;wBACP,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb,aAAa;wBACb,cAAc;wBACd,UAAU;wBACV,YAAY;wBACZ,kBAAkB;wBAClB,eAAe;AAChB,qBAAA,EAAA,QAAA,EAAA,4jIAAA,EAAA,MAAA,EAAA,CAAA,ijGAAA,CAAA,EAAA;;;ME9BU,KAAK,CAAA;IACC,iBAAiB,GAAG,WAAW;AAExC,IAAA,QAAQ,GAAG,MAAM,CAAmB,OAAO,oDAAC;AAC5C,IAAA,MAAM,GAAe;AAC3B,QAAA,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE;AACrC,QAAA,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE;KACpC;IAED,aAAa,GAAG,QAAQ,CAAC,MACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC5D;AAED,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QACvC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;QAC/B;QAEA,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,QAAQ,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,QAAQ,CAAC;AAC5D,QAAA,CAAC,CAAC;IACJ;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA,IAAA,QAAQ,CAAC,KAAuB,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACvB;IAEQ,aAAa,GAAA;QACnB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE;YACxD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC1D,YAAA,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,GAAG,KAAK,GAAG,IAAI;QAC7D;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,SAAS,CAAC,KAAuB,EAAA;QACvC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE;YACxD,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC;QACrD;IACF;uGA/CW,KAAK,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAL,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,KAAK,cAFJ,MAAM,EAAA,CAAA;;2FAEP,KAAK,EAAA,UAAA,EAAA,CAAA;kBAHjB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCGY,YAAY,CAAA;IACN,iBAAiB,GAAG,gBAAgB;IAE7C,MAAM,GAAiB,EAAE;AACjC,IAAA,YAAY,GAAG,MAAM,CAAoB,IAAI,wDAAC;AAE9C,IAAA,SAAS,CAAC,YAA0B,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY;AAE1B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;QACzC,MAAM,UAAU,GAAG;AACjB,cAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,YAAY;AAC/C,cAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAElB,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;QACnC;aAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvC;IACF;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA,IAAA,QAAQ,CAAC,OAAe,EAAA;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC;QACvD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QACzB;IACF;IAEQ,aAAa,GAAA;QACnB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE;YACxD,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACrD;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,SAAS,CAAC,OAAe,EAAA;QAC/B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE;YACxD,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC;QACvD;IACF;AAEA,IAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;QACjC,IAAI,KAAK,EAAE;YACT,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAC5B,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAC,EAAE,CAAA,MAAA,CAAQ,CAAC,CAC3C;AACD,YAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,EAAG,KAAK,CAAC,EAAE,CAAA,MAAA,CAAQ,CAAC;QAClD;AACF,IAAA,CAAC,4DAAC;uGAtDS,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCaY,OAAO,CAAA;AACR,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,IAAA,mBAAmB,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5C,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,aAAa,GAAG,MAAM,EAAQ;IAE9B,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;;AAGA,IAAA,IAAI,GAAG,KAAK,CAAC,KAAK,gDAAC;AAEnB,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ;IAClC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,kBAAkB;IAC5C;AAEA,IAAA,WAAW,CAAC,QAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,QAAQ;QAEpC,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC1B,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,sBAAsB,GAAA;AACpB,QAAA,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ;AAC/B,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,UAAU;AACnB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,UAAU;AACnB,YAAA;AACE,gBAAA,OAAO,UAAU;;IAEvB;AAEA,IAAA,eAAe,CAAC,QAAgB,EAAA;QAC9B,QAAQ,QAAQ;AACd,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,UAAU;AACnB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,UAAU;AACnB,YAAA;AACE,gBAAA,OAAO,UAAU;;IAEvB;uGAlDW,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAP,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,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,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBpB,m2EAkFA,EAAA,MAAA,EAAA,CAAA,wyBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpEI,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,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,EACb,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,OAAA,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,EAAAA,IAAA,CAAA,WAAA,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,EAAAA,IAAA,CAAA,cAAA,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,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAKN,OAAO,EAAA,UAAA,EAAA,CAAA;kBAbnB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB;wBACP,aAAa;wBACb,aAAa;wBACb,gBAAgB;wBAChB,YAAY;wBACZ,aAAa;wBACb,eAAe;AAChB,qBAAA,EAAA,QAAA,EAAA,m2EAAA,EAAA,MAAA,EAAA,CAAA,wyBAAA,CAAA,EAAA;;;AENG,MAAO,iBAAkB,SAAQ,MAAM,CAAA;AAClC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AACzB,IAAA,QAAQ,GAAG,KAAK,CAAS,EAAE,oDAAC;AAC5B,IAAA,eAAe,GAAG,KAAK,CAAU,IAAI,2DAAC;AACtC,IAAA,WAAW,GAAG,KAAK,CAAU,IAAI,uDAAC;IAClC,QAAQ,GAAG,MAAM,EAAQ;IACzB,OAAO,GAAG,MAAM,EAAQ;IACxB,OAAO,GAAG,MAAM,EAAQ;uGAPtB,iBAAiB,EAAA,IAAA,EAAA,IAAA,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,otBCd9B,8tBAeW,EAAA,MAAA,EAAA,CAAA,gFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJG,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,qXAAE,WAAW,EAAA,CAAA,EAAA,CAAA;;2FAG5C,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;+BACI,mBAAmB,EAAA,UAAA,EAGjB,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,eAAe,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,8tBAAA,EAAA,MAAA,EAAA,CAAA,gFAAA,CAAA,EAAA;;;MEJ7C,4BAA4B,CAAA;AAC7B,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE3D,IAAI,GAAqB,MAAM;IAC/B,QAAQ,GAAG,GAAG;IACd,QAAQ,GAAG,IAAI;AACd,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;IAE1C,UAAU,GAAG,KAAK;IAClB,MAAM,GAAG,CAAC;IACV,UAAU,GAAG,CAAC;IACd,WAAW,GAAmB,EAAE;IAChC,MAAM,GAA0B,IAAI;IAE5C,QAAQ,GAAA;QACJ,IAAI,CAAC,YAAY,EAAE;IACvB;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QACxB;IACJ;IAEQ,YAAY,GAAA;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,uBAAuB,CAAC;AAC5D,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;;AAG1D,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC;AAE7D,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;QAE7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,KAAiB,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjG;AAEQ,IAAA,UAAU,CAAC,KAAiB,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW;AAEnD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7F;AAEQ,IAAA,MAAM,CAAC,KAAiB,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AAEtB,QAAA,IAAI,QAAgB;AACpB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;;AAEtB,YAAA,QAAQ,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9D;aAAO;;AAEH,YAAA,QAAQ,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9D;AAEA,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AACxD,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAA,EAAA,CAAI,CAAC;AACvE,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC;AAClE,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,GAAG,CAAC;AAE/D,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;;YAG/B,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7C;IACJ;IAEQ,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACzB;uGAhFS,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAMI;;sBACA;;sBACA;;sBACA;;;MCDQ,WAAW,CAAA;AACZ,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;;IAE7C,eAAe,GAAG,IAAI;IACtB,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe;IAChD;;IAGA,WAAW,GAAG,KAAK;AACnB,IAAA,mBAAmB,GAAG,GAAG,CAAC;IAE1B,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW;IACxC;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;IACpC;;AAGA,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,WAAW,GAAG,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,mBAAmB,IAAI;IACtE;;AAGA,IAAA,IAAI,gBAAgB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE;IAChD;;AAGA,IAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,oDAAC;uGA/Bd,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdxB,yiCAoBwB,EAAA,MAAA,EAAA,CAAA,yZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDVV,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAInF,WAAW,EAAA,UAAA,EAAA,CAAA;kBANvB,SAAS;+BACI,YAAY,EAAA,OAAA,EACb,CAAC,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,4BAA4B,CAAC,EAAA,QAAA,EAAA,yiCAAA,EAAA,MAAA,EAAA,CAAA,yZAAA,CAAA,EAAA;;;MEJpF,qBAAqB,CAAA;AACtB,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;IAEb,SAAS,GAAG,IAAI;IAE/B,UAAU,GAAG,KAAK;IAClB,MAAM,GAAG,CAAC;IACV,MAAM,GAAG,CAAC;IACV,UAAU,GAAG,CAAC;IACd,WAAW,GAAG,CAAC;IACf,WAAW,GAAmB,EAAE;IAChC,MAAM,GAA0B,IAAI;IAE5C,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,YAAY,EAAE;QACvB;IACJ;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QACxB;IACJ;IAEQ,YAAY,GAAA;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QAChD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC;QAEpD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;QAEzC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAC5C,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;QAE7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,KAAiB,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjG;AAEQ,IAAA,UAAU,CAAC,KAAiB,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;AAE3B,QAAA,MAAM,eAAe,GAAI,IAAI,CAAC,EAAE,CAAC,aAA6B,CAAC,OAAO,CAAC,mBAAmB,CAAgB;AAC1G,QAAA,IAAI,CAAC,eAAe;YAAE;AAEtB,QAAA,MAAM,IAAI,GAAG,eAAe,CAAC,qBAAqB,EAAE;AACpD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM;AAE9B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7F;AAEQ,IAAA,MAAM,CAAC,KAAiB,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;QACtB,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;QACtC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;AAEtC,QAAA,MAAM,eAAe,GAAI,IAAI,CAAC,EAAE,CAAC,aAA6B,CAAC,OAAO,CAAC,mBAAmB,CAAgB;QAC1G,IAAI,eAAe,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,EAAE,CAAA,EAAG,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA,EAAA,CAAI,CAAC;AAC7E,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA,EAAA,CAAI,CAAC;YAC/E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,EAAE,OAAO,CAAC;YAC7D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,YAAY,EAAE,OAAO,CAAC;QAClE;IACJ;IAEQ,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACzB;uGA/ES,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,CAAA,cAAA,EAAA,WAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAKI,KAAK;uBAAC,cAAc;;;MCKZ,eAAe,CAAA;IACf,KAAK,GAAW,EAAE;IAClB,UAAU,GAAW,EAAE;IACvB,QAAQ,GAAW,QAAQ;IAC3B,YAAY,GAAY,KAAK;IAC7B,SAAS,GAAY,IAAI;AAExB,IAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;IAE3C,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACpB;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACtB;uGAhBS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECf5B,80DAsCM,EAAA,MAAA,EAAA,CAAA,mlDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3BQ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,qMAAE,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAInG,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,CAAC,EAAA,QAAA,EAAA,80DAAA,EAAA,MAAA,EAAA,CAAA,mlDAAA,CAAA,EAAA;;sBAK5G;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;;AEvBL;;AAEG;;ACFH;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nettyapps/ntyux",
|
|
3
|
-
"version": "21.0.
|
|
3
|
+
"version": "21.0.23",
|
|
4
4
|
"description": "Generic UI components for NettyApps Angular applications.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -8,15 +8,13 @@
|
|
|
8
8
|
"peerDependencies": {
|
|
9
9
|
"@angular/common": ">= 21.0.0",
|
|
10
10
|
"@angular/core": ">= 21.0.0",
|
|
11
|
-
"@nettyapps/ntybase": ">= 21.0.
|
|
12
|
-
"@nettyapps/ntyui": ">= 21.0.9"
|
|
11
|
+
"@nettyapps/ntybase": ">= 21.0.32"
|
|
13
12
|
},
|
|
14
13
|
"dependencies": {
|
|
15
14
|
"tslib": "^2.3.0"
|
|
16
15
|
},
|
|
17
16
|
"allowedNonPeerDependencies": [
|
|
18
|
-
"@nettyapps/ntybase"
|
|
19
|
-
"@nettyapps/ntyui"
|
|
17
|
+
"@nettyapps/ntybase"
|
|
20
18
|
],
|
|
21
19
|
"sideEffects": false,
|
|
22
20
|
"exports": {
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: block;
|
|
3
|
+
height: 100%;
|
|
4
|
+
width: 100%;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.fullscreen-container,
|
|
8
|
+
.sidenav-container,
|
|
9
|
+
.popup-container {
|
|
10
|
+
height: 100%;
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* Ensure the layout respects the base styles while providing its own structure */
|
|
17
|
+
.nettybase-container {
|
|
18
|
+
padding: 16px;
|
|
19
|
+
flex: 1;
|
|
20
|
+
overflow-y: auto;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.resize-handle {
|
|
24
|
+
position: absolute;
|
|
25
|
+
right: 1px;
|
|
26
|
+
bottom: 1px;
|
|
27
|
+
width: 24px;
|
|
28
|
+
height: 24px;
|
|
29
|
+
cursor: nwse-resize;
|
|
30
|
+
display: flex;
|
|
31
|
+
align-items: center;
|
|
32
|
+
justify-content: center;
|
|
33
|
+
z-index: 9999;
|
|
34
|
+
color: rgba(0, 0, 0, 0.4);
|
|
35
|
+
transition: color 0.2s, transform 0.2s;
|
|
36
|
+
background: transparent;
|
|
37
|
+
pointer-events: auto;
|
|
38
|
+
|
|
39
|
+
&:hover {
|
|
40
|
+
color: rgba(0, 0, 0, 0.8);
|
|
41
|
+
transform: scale(1.1);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
mat-icon {
|
|
45
|
+
font-size: 20px;
|
|
46
|
+
width: 20px;
|
|
47
|
+
height: 20px;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
:host-context(.cdk-overlay-pane) {
|
|
52
|
+
display: flex !important;
|
|
53
|
+
flex-direction: column !important;
|
|
54
|
+
height: 100% !important;
|
|
55
|
+
width: 100% !important;
|
|
56
|
+
margin: 0 !important;
|
|
57
|
+
padding: 0 !important;
|
|
58
|
+
overflow: hidden !important;
|
|
59
|
+
border-radius: 8px;
|
|
60
|
+
/* Standardize radius for clipping */
|
|
61
|
+
|
|
62
|
+
form {
|
|
63
|
+
height: 100% !important;
|
|
64
|
+
display: flex !important;
|
|
65
|
+
flex-direction: column !important;
|
|
66
|
+
overflow: hidden !important;
|
|
67
|
+
margin: 0;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.popup-container {
|
|
71
|
+
flex: 1 !important;
|
|
72
|
+
display: flex !important;
|
|
73
|
+
flex-direction: column !important;
|
|
74
|
+
overflow: hidden !important;
|
|
75
|
+
position: relative !important;
|
|
76
|
+
height: 100% !important;
|
|
77
|
+
background: white;
|
|
78
|
+
/* Ensure bg covers anything behind */
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.nettybase-container {
|
|
82
|
+
flex: 1 !important;
|
|
83
|
+
overflow-y: auto !important;
|
|
84
|
+
overflow-x: hidden !important;
|
|
85
|
+
padding: 16px;
|
|
86
|
+
position: relative;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.nettybase-save-button-container {
|
|
90
|
+
flex-shrink: 0 !important;
|
|
91
|
+
padding: 12px 16px;
|
|
92
|
+
background: #f8f9fa;
|
|
93
|
+
border-top: 1px solid #eee;
|
|
94
|
+
display: flex;
|
|
95
|
+
justify-content: flex-end;
|
|
96
|
+
gap: 8px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.nettybase-save-record-header-bar {
|
|
100
|
+
flex-shrink: 0 !important;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { ElementRef, OnDestroy, OnInit, AfterViewInit } from '@angular/core';
|
|
2
|
+
import { ElementRef, OnDestroy, OnInit, AfterViewInit, EventEmitter } from '@angular/core';
|
|
3
3
|
import { MatAutocompleteTrigger, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
|
|
4
4
|
import { FormControl, ControlValueAccessor } from '@angular/forms';
|
|
5
5
|
import { ErrorStateMatcher } from '@angular/material/core';
|
|
@@ -303,5 +303,78 @@ declare class NettyUXFilterCard extends UiBase {
|
|
|
303
303
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NettyUXFilterCard, "ntyux-filter-card", never, { "Title": { "alias": "Title"; "required": false; "isSignal": true; }; "SubTitle": { "alias": "SubTitle"; "required": false; "isSignal": true; }; "isExportVisible": { "alias": "isExportVisible"; "required": false; "isSignal": true; }; "isFormValid": { "alias": "isFormValid"; "required": false; "isSignal": true; }; }, { "onExport": "onExport"; "onReset": "onReset"; "onApply": "onApply"; }, never, ["*"], true, never>;
|
|
304
304
|
}
|
|
305
305
|
|
|
306
|
-
|
|
306
|
+
declare class NtyUXLayout {
|
|
307
|
+
private commonService;
|
|
308
|
+
leftSidenavOpen: boolean;
|
|
309
|
+
toggleLeftSidenav(): void;
|
|
310
|
+
isMinimized: boolean;
|
|
311
|
+
currentSidenavWidth: number;
|
|
312
|
+
toggleMinimize(): void;
|
|
313
|
+
onSidenavResize(width: number): void;
|
|
314
|
+
get drawerWidth(): string;
|
|
315
|
+
get rightSidenavOpen(): boolean;
|
|
316
|
+
showIcon: _angular_core.WritableSignal<boolean>;
|
|
317
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NtyUXLayout, never>;
|
|
318
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NtyUXLayout, "app-layout", never, {}, {}, never, never, true, never>;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
declare class NtySidenavResizableDirective implements OnInit, OnDestroy {
|
|
322
|
+
private el;
|
|
323
|
+
private renderer;
|
|
324
|
+
private sidenav;
|
|
325
|
+
side: 'left' | 'right';
|
|
326
|
+
minWidth: number;
|
|
327
|
+
maxWidth: number;
|
|
328
|
+
widthChange: EventEmitter<number>;
|
|
329
|
+
private isResizing;
|
|
330
|
+
private startX;
|
|
331
|
+
private startWidth;
|
|
332
|
+
private dragCleanup;
|
|
333
|
+
private handle;
|
|
334
|
+
ngOnInit(): void;
|
|
335
|
+
ngOnDestroy(): void;
|
|
336
|
+
private createHandle;
|
|
337
|
+
private initResize;
|
|
338
|
+
private resize;
|
|
339
|
+
private stopResize;
|
|
340
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NtySidenavResizableDirective, never>;
|
|
341
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NtySidenavResizableDirective, "[ntySidenavResizable]", never, { "side": { "alias": "side"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; }, { "widthChange": "widthChange"; }, never, never, true, never>;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
declare class NtyResizableDirective implements OnInit, OnDestroy {
|
|
345
|
+
private el;
|
|
346
|
+
private renderer;
|
|
347
|
+
isEnabled: boolean;
|
|
348
|
+
private isResizing;
|
|
349
|
+
private startX;
|
|
350
|
+
private startY;
|
|
351
|
+
private startWidth;
|
|
352
|
+
private startHeight;
|
|
353
|
+
private dragCleanup;
|
|
354
|
+
private handle;
|
|
355
|
+
ngOnInit(): void;
|
|
356
|
+
ngOnDestroy(): void;
|
|
357
|
+
private createHandle;
|
|
358
|
+
private initResize;
|
|
359
|
+
private resize;
|
|
360
|
+
private stopResize;
|
|
361
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NtyResizableDirective, never>;
|
|
362
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NtyResizableDirective, "[ntyResizable]", never, { "isEnabled": { "alias": "ntyResizable"; "required": false; }; }, {}, never, never, true, never>;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
declare class NtyUXSaveLayout {
|
|
366
|
+
title: string;
|
|
367
|
+
identifier: string;
|
|
368
|
+
viewMode: string;
|
|
369
|
+
saveDisabled: boolean;
|
|
370
|
+
showClose: boolean;
|
|
371
|
+
save: EventEmitter<void>;
|
|
372
|
+
cancel: EventEmitter<void>;
|
|
373
|
+
onSave(): void;
|
|
374
|
+
onCancel(): void;
|
|
375
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NtyUXSaveLayout, never>;
|
|
376
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NtyUXSaveLayout, "ntyux-save-layout", never, { "title": { "alias": "title"; "required": false; }; "identifier": { "alias": "identifier"; "required": false; }; "viewMode": { "alias": "viewMode"; "required": false; }; "saveDisabled": { "alias": "saveDisabled"; "required": false; }; "showClose": { "alias": "showClose"; "required": false; }; }, { "save": "save"; "cancel": "cancel"; }, never, ["[additional-menu-item]", "*"], true, never>;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
export { AutoComplete, ColorPalette, Guid, HttpError403, HttpError404, LeftSidenav, NettyFilter, NettyUXFilterCard, NtyAutoCompleteFilter, NtyAutoCompleteFilterFields, NtyResizableDirective, NtySidenavResizableDirective, NtyUXLayout, NtyUXSaveLayout, Ntyux, NtyuxModule, SelectionItem, Theme, Toolbar, ValueUnitInput };
|
|
307
380
|
export type { AppTheme, ColorTheme };
|