@rosoftlab/rdict 1.0.2-alpha-14 → 1.0.2-alpha-16

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.
@@ -15,9 +15,12 @@ import * as i8 from '@progress/kendo-angular-toolbar';
15
15
  import { ToolBarModule, KENDO_TOOLBAR, ToolBarToolComponent } from '@progress/kendo-angular-toolbar';
16
16
  import * as allIcons from '@progress/kendo-svg-icons';
17
17
  import { menuIcon, saveIcon, pencilIcon, trashIcon, plusIcon } from '@progress/kendo-svg-icons';
18
- import { Subject, from, mergeMap, map, Observable } from 'rxjs';
18
+ import { Subject, from, mergeMap, Observable, map } from 'rxjs';
19
19
  import { v4 } from 'uuid';
20
20
  import { io } from 'socket.io-client';
21
+ import * as i2$1 from '@progress/kendo-angular-dialog';
22
+ import { DialogCloseResult, KENDO_DIALOG } from '@progress/kendo-angular-dialog';
23
+ import * as i3 from '@progress/kendo-angular-notification';
21
24
  import * as i1 from '@rosoftlab/core';
22
25
  import { BaseModel, Attribute, BaseModelConfig, BaseService } from '@rosoftlab/core';
23
26
  import { __decorate, __metadata } from 'tslib';
@@ -26,9 +29,6 @@ import { FormGroup, FormControl, ReactiveFormsModule } from '@angular/forms';
26
29
  import * as i6$1 from '@ngx-formly/core';
27
30
  import { FORMLY_CONFIG, FormlyModule } from '@ngx-formly/core';
28
31
  import { FormlyKendoModule } from '@ngx-formly/kendo';
29
- import * as i2$1 from '@progress/kendo-angular-dialog';
30
- import { DialogCloseResult, KENDO_DIALOG } from '@progress/kendo-angular-dialog';
31
- import * as i3 from '@progress/kendo-angular-notification';
32
32
  import * as i7$1 from '@progress/kendo-angular-grid';
33
33
  import { KENDO_GRID } from '@progress/kendo-angular-grid';
34
34
  import * as i1$2 from '@progress/kendo-angular-label';
@@ -515,7 +515,7 @@ class ReactiveDictionary extends Map {
515
515
  .filter((k) => /^\d+$/.test(k)) // keep only purely numeric keys
516
516
  .map((k) => parseInt(k, 10));
517
517
  if (numericKeys.length === 0)
518
- return null;
518
+ return '0';
519
519
  const maxKey = Math.max(...numericKeys);
520
520
  return (maxKey + 1).toString();
521
521
  }
@@ -545,6 +545,63 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
545
545
  }]
546
546
  }], ctorParameters: () => [{ type: SocketService }] });
547
547
 
548
+ class MaterialDialogService {
549
+ constructor(translate, dialogService, notificationService) {
550
+ this.translate = translate;
551
+ this.dialogService = dialogService;
552
+ this.notificationService = notificationService;
553
+ this.state = {
554
+ content: "Your data has been saved.",
555
+ type: { style: "success", icon: true },
556
+ animation: { type: "slide", duration: 400 },
557
+ hideAfter: 3000,
558
+ };
559
+ }
560
+ confirmDelete() {
561
+ return this.confirm(this.translate.instant("Are you sure you want to delete this record ?"), this.translate.instant("Delete Record"), this.translate.instant("General.Yes"), this.translate.instant("General.No"));
562
+ }
563
+ confirm(content, title, confirmButtonText, cancelButtonText) {
564
+ const dialog = this.dialogService.open({
565
+ title: title || "Confirm",
566
+ content: content || "Are you sure?",
567
+ actions: [
568
+ { text: cancelButtonText || "No", result: false },
569
+ { text: confirmButtonText || "Yes", themeColor: "primary", result: true }
570
+ ],
571
+ width: 450,
572
+ height: 200,
573
+ minWidth: 250,
574
+ });
575
+ // Return an Observable<boolean>
576
+ return new Observable((observer) => {
577
+ dialog.result.subscribe((result) => {
578
+ if (result instanceof DialogCloseResult) {
579
+ // Dialog was closed without an action
580
+ observer.next(false);
581
+ }
582
+ else {
583
+ const actionResult = result;
584
+ observer.next(actionResult.result);
585
+ }
586
+ observer.complete(); // Complete the observable
587
+ });
588
+ });
589
+ }
590
+ showSaveMessage(message) {
591
+ this.state.content = message || "Your data has been saved.";
592
+ this.state.type = { style: "success", icon: true };
593
+ this.notificationService.show(this.state);
594
+ }
595
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: MaterialDialogService, deps: [{ token: i2.TranslateService }, { token: i2$1.DialogService }, { token: i3.NotificationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
596
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: MaterialDialogService, providedIn: 'root' }); }
597
+ }
598
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: MaterialDialogService, decorators: [{
599
+ type: Injectable,
600
+ args: [{
601
+ providedIn: 'root'
602
+ }]
603
+ }], ctorParameters: () => [{ type: i2.TranslateService }, { type: i2$1.DialogService }, { type: i3.NotificationService }] });
604
+
548
605
  let Menu = class Menu extends BaseModel {
549
606
  };
550
607
  __decorate([
@@ -805,63 +862,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
805
862
  ], template: "<div class=\"custom-toolbar\">\r\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\r\n <span class=\"app-title\">{{apptitle}}</span>\r\n</div>\r\n<kendo-drawer-container>\r\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\r\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\"> \r\n </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\r\n </kendo-drawer-content>\r\n</kendo-drawer-container>", styles: ["html,body,rdict-full{padding:0;height:100%}rdict-full{display:flex;flex-direction:column}kendo-drawer-container{flex:1 1 auto;overflow-y:auto}.k-icon{font-size:20px}.custom-toolbar{width:100%;background-color:#f6f6f6;line-height:10px;border-bottom:inset;border-bottom-width:1px;color:#656565}.custom-toolbar button{margin:3px 0 3px 8px}.app-title{margin-left:20px;font-weight:700;font-size:17px}\n"] }]
806
863
  }], ctorParameters: () => [{ type: UserService }, { type: i1$1.Router }, { type: i2.TranslateService }, { type: ReactiveDictionary }] });
807
864
 
808
- class MaterialDialogService {
809
- constructor(translate, dialogService, notificationService) {
810
- this.translate = translate;
811
- this.dialogService = dialogService;
812
- this.notificationService = notificationService;
813
- this.state = {
814
- content: "Your data has been saved.",
815
- type: { style: "success", icon: true },
816
- animation: { type: "slide", duration: 400 },
817
- hideAfter: 3000,
818
- };
819
- }
820
- confirmDelete() {
821
- return this.confirm(this.translate.instant("Are you sure you want to delete this record ?"), this.translate.instant("Delete Record"), this.translate.instant("General.Yes"), this.translate.instant("General.No"));
822
- }
823
- confirm(content, title, confirmButtonText, cancelButtonText) {
824
- const dialog = this.dialogService.open({
825
- title: title || "Confirm",
826
- content: content || "Are you sure?",
827
- actions: [
828
- { text: cancelButtonText || "No", result: false },
829
- { text: confirmButtonText || "Yes", themeColor: "primary", result: true }
830
- ],
831
- width: 450,
832
- height: 200,
833
- minWidth: 250,
834
- });
835
- // Return an Observable<boolean>
836
- return new Observable((observer) => {
837
- dialog.result.subscribe((result) => {
838
- if (result instanceof DialogCloseResult) {
839
- // Dialog was closed without an action
840
- observer.next(false);
841
- }
842
- else {
843
- const actionResult = result;
844
- observer.next(actionResult.result);
845
- }
846
- observer.complete(); // Complete the observable
847
- });
848
- });
849
- }
850
- showSaveMessage(message) {
851
- this.state.content = message || "Your data has been saved.";
852
- this.state.type = { style: "success", icon: true };
853
- this.notificationService.show(this.state);
854
- }
855
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: MaterialDialogService, deps: [{ token: i2.TranslateService }, { token: i2$1.DialogService }, { token: i3.NotificationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
856
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: MaterialDialogService, providedIn: 'root' }); }
857
- }
858
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: MaterialDialogService, decorators: [{
859
- type: Injectable,
860
- args: [{
861
- providedIn: 'root'
862
- }]
863
- }], ctorParameters: () => [{ type: i2.TranslateService }, { type: i2$1.DialogService }, { type: i3.NotificationService }] });
864
-
865
865
  class TranslateExtension {
866
866
  constructor(translate) {
867
867
  this.translate = translate;
@@ -1175,7 +1175,8 @@ class GenericRdictTableComponent {
1175
1175
  this.svgAdd = plusIcon;
1176
1176
  }
1177
1177
  async ngOnInit() {
1178
- this.setValueFromSnapshot(this, this.route.snapshot, 'model', '');
1178
+ this.setValueFromSnapshot(this, this.route.snapshot, 'model', null);
1179
+ this.setValueFromSnapshot(this, this.route.snapshot, 'dictPath', null);
1179
1180
  this.setValueFromSnapshot(this, this.route.snapshot, 'showSerach', false);
1180
1181
  this.setValueFromSnapshot(this, this.route.snapshot, 'searchFields', null);
1181
1182
  this.setValueFromSnapshot(this, this.route.snapshot, 'customInclude', null);
@@ -1376,7 +1377,7 @@ class GenericRdictTableComponent {
1376
1377
  if (typeof item !== 'object' || item === null) {
1377
1378
  return null; // or `undefined` or some fallback
1378
1379
  }
1379
- if (column.type == "reference") {
1380
+ if (column.type == 'reference') {
1380
1381
  const value = this.referenceData.get(column.reference)?.get(item[column.propertyName])?.[column.referenceProperty] ?? item[column.propertyName];
1381
1382
  return value;
1382
1383
  }
@@ -1451,5 +1452,5 @@ const SOCKET_URL = new InjectionToken('SocketUrl');
1451
1452
  * Generated bundle index. Do not edit.
1452
1453
  */
1453
1454
 
1454
- export { FullComponent, GenericRdictTableComponent, Menu, RdictCrudComponent, ReactiveDictionary, Right, SOCKET_URL, SocketService, User, UserService };
1455
+ export { FullComponent, GenericRdictTableComponent, MaterialDialogService, Menu, RdictCrudComponent, ReactiveDictionary, Right, SOCKET_URL, SocketService, User, UserService };
1455
1456
  //# sourceMappingURL=rosoftlab-rdict.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rosoftlab-rdict.mjs","sources":["../../../../projects/rosoftlab/rdict/src/lib/services/socket.service.ts","../../../../projects/rosoftlab/rdict/src/lib/reactive-dictionary.ts","../../../../projects/rosoftlab/rdict/src/lib/models/menu.ts","../../../../projects/rosoftlab/rdict/src/lib/models/right.ts","../../../../projects/rosoftlab/rdict/src/lib/models/user.ts","../../../../projects/rosoftlab/rdict/src/lib/services/user.service.ts","../../../../projects/rosoftlab/rdict/src/lib/components/layouts/full/full.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/layouts/full/full.component.html","../../../../projects/rosoftlab/rdict/src/lib/services/material-dialog.service.ts","../../../../projects/rosoftlab/rdict/src/lib/translate.extension.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-crud/rsl-reactive-dictionary.module.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-crud/rdict-crud.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-crud/rdict-crud.component.html","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-table-title.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-generic-table.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-generic-table.component.html","../../../../projects/rosoftlab/rdict/src/lib/socket-config.token.ts","../../../../projects/rosoftlab/rdict/src/public-api.ts","../../../../projects/rosoftlab/rdict/src/rosoftlab-rdict.ts"],"sourcesContent":["import { Inject, Injectable } from '@angular/core';\r\nimport { io, Socket } from 'socket.io-client';\r\nimport { SOCKET_URL } from '../core';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SocketService {\r\n private socket: Socket;\r\n private socketUrl: string\r\n constructor(\r\n @Inject(SOCKET_URL) socketUrl: string,) {\r\n this.socketUrl = socketUrl\r\n // Replace with your actual server URL\r\n // this.socket.on(\"connect\", () => {\r\n // const engine = this.socket.io.engine;\r\n // (engine.transport.name); // in most cases, prints \"polling\"\r\n\r\n // engine.once(\"upgrade\", () => {\r\n // // called when the transport is upgraded (i.e. from HTTP long-polling to WebSocket)\r\n // (engine.transport.name); // in most cases, prints \"websocket\"\r\n // });\r\n\r\n // });\r\n }\r\n initSocket(authToken: string) {\r\n if (this.socket == null && authToken !== null) {\r\n this.socket = io(this.socketUrl, {\r\n withCredentials: true,\r\n // parser: msgpackParser,\r\n auth: {\r\n token: authToken, // Include the authentication token\r\n }\r\n // ,\r\n // query: {\r\n // \"access_token\": authToken\r\n // }\r\n });\r\n\r\n // const originalEmit = this.socket.emit;\r\n // this.socket.emit = (event, ...args) => {\r\n // // Transform dates before sending\r\n // const transformedData = this.transformDatesForEncoding(args[0]);\r\n // originalEmit.call(this.socket, event, transformedData);\r\n // return this.socket;\r\n // };\r\n\r\n // Intercept incoming data and apply date transformation\r\n // this.socket.onAny((event, data) => {\r\n // const transformedData = this.transformDatesForDecoding(data);\r\n // this.socket.emit(event, transformedData); // Emit the transformed data back\r\n // });\r\n }\r\n }\r\n getInitialData(): Promise<Record<string, any>> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.on('init', (data: any) => {\r\n if (data) {\r\n resolve(data[\"dict_data\"]);\r\n } else {\r\n reject('No data received from init event');\r\n }\r\n });\r\n });\r\n }\r\n getSetEvent(rdict: any) {\r\n this.socket.on('set', (data: any) => {\r\n // (rdict.get('__guid'), data, this.socket.id)\r\n if (rdict.get('__guid') === data.did) {\r\n // ('Set the data')\r\n rdict.asyncSet(data.key, data.value, false)\r\n }\r\n });\r\n }\r\n getDeleteEvent(rdict: any) {\r\n this.socket.on('delete', (data: any) => {\r\n // (rdict.get('__guid'), data, this.socket.id)\r\n if (rdict.get('__guid') === data.did) {\r\n // ('Set the data')\r\n rdict.asyncDelete(data.key, false)\r\n }\r\n });\r\n }\r\n // Emit the 'lazy_load' event with callback to get the response\r\n requestLazyLoad(did: string, key: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('lazy_load', { did, key }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error); // Handle error if present\r\n } else {\r\n resolve(response); // Resolve with the response data\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Emit the 'set' event to update the data on the server\r\n emitSet(did: string, key: string, value: any): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('set', { did, key, value }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Emit the 'set' event to update the data on the server\r\n emitDelete(did: string, key: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('delete', { did, key }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n transformDatesForEncoding(obj: any): any {\r\n if (obj instanceof Date) {\r\n return { __date__: obj.toISOString() };\r\n } else if (Array.isArray(obj)) {\r\n return obj.map(this.transformDatesForEncoding);\r\n } else if (obj !== null && typeof obj === \"object\") {\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForEncoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n\r\n transformDatesForDecoding(obj: any): any {\r\n if (typeof obj === \"object\" && obj !== null) {\r\n if (\"__date__\" in obj) {\r\n return new Date(obj.__date__);\r\n }\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForDecoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { from, mergeMap, Observable, Subject } from 'rxjs';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SocketService } from './services/socket.service';\r\n// import { mergeMap } from 'rxjs/operators';\r\n@Injectable({\r\n providedIn: 'root' // This makes the service a singleton and available throughout the app\r\n})\r\nexport class ReactiveDictionary extends Map<string, any> {\r\n private static instance: Map<string, ReactiveDictionary> = new Map<string, ReactiveDictionary>();\r\n private _socketService: SocketService;\r\n private changes$: Subject<any> = new Subject<any>();\r\n private deletes$: Subject<any> = new Subject<any>();\r\n\r\n private isInitialized: boolean = false;\r\n private _authToken: string = null;\r\n constructor(socketService: SocketService) {\r\n super();\r\n\r\n this._socketService = socketService;\r\n // this._socketService.initSocket(authToken)\r\n\r\n // this._socketService.getSetEvent(this)\r\n }\r\n public async initialize(authToken: string) {\r\n this._authToken = authToken;\r\n this._socketService.initSocket(authToken);\r\n this._socketService.getSetEvent(this);\r\n this._socketService.getDeleteEvent(this);\r\n await this.asyncInit();\r\n }\r\n\r\n // override keys(): IterableIterator<string> {\r\n // const excludedKeys = ['__guid', '__type']; // Key to exclude\r\n // const iterator = super.keys();\r\n\r\n // const filteredIterator = {\r\n // [Symbol.iterator]: () => ({\r\n // next: () => {\r\n // let result;\r\n\r\n // // Loop until we find a valid key or run out of keys\r\n // do {\r\n // result = iterator.next(); // Get the next entry ([key, value])\r\n // if (result.done) return { done: true }; // Stop if done\r\n\r\n // const key = result.value; // Destructure the entry\r\n // const value = super.get(key);\r\n // // Check if the key is in excludedKeys or if the value is an object\r\n // if (!excludedKeys.includes(key) && !(typeof value === 'object' && value !== null)) {\r\n // return { value: key, done: false }; // Return the valid key\r\n // }\r\n // } while (true); // Continue until a valid key is found\r\n // }\r\n // })\r\n // };\r\n\r\n // return filteredIterator as IterableIterator<string>;\r\n // }\r\n // Asynchronous method to get a value by key\r\n async asyncGet(key: string): Promise<any> {\r\n // console.log('Get key: ', key);\r\n const keys = key.split('.');\r\n if (keys.length === 1) {\r\n if (this.has(key)) {\r\n const value = this.get(key);\r\n if (value instanceof ReactiveDictionary) {\r\n return value;\r\n }\r\n if (typeof value === 'object' && value !== null) {\r\n const dict_type = value['__type'];\r\n // console.log('value type : ', dict_type);\r\n if (dict_type === 'dict' || dict_type === 'lazy') {\r\n const lazyLoadData = await this.lazyLoadSync(this.get('__guid'), key);\r\n // console.log(lazyLoadData)\r\n if (lazyLoadData) {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n await dict.asyncInit(lazyLoadData.data);\r\n this.set(key, dict);\r\n return dict;\r\n }\r\n }\r\n }\r\n return value;\r\n } else {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n dict.set('__guid', uuidv4());\r\n dict.set('__type', 'dict');\r\n this.set(key, dict);\r\n await this._socketService.emitSet(this.get('__guid'), key, this.transform_for_serialization(dict));\r\n return dict;\r\n }\r\n } else {\r\n const obj = (await this.asyncGet(keys[0])) as ReactiveDictionary;\r\n if (obj) return await obj.asyncGet(keys.slice(1).join('.'));\r\n else return null;\r\n }\r\n }\r\n transform_for_serialization(value: any) {\r\n // Transform a value to a format that can be serialized.\r\n const dict_type = value['__type'];\r\n if (dict_type === 'lazy') return { __type: 'lazy' };\r\n else if (value instanceof ReactiveDictionary) return { __type: 'dict', __guid: value.get('__guid') };\r\n else return value;\r\n }\r\n // Asynchronous method to set a value by key\r\n async asyncSet(key: string, value: any, emmit_event: boolean = true): Promise<void> {\r\n if (emmit_event) {\r\n try {\r\n await this._socketService.emitSet(this.get('__guid'), key, value);\r\n } catch (error) {\r\n console.error('Error emitting set event:', error);\r\n }\r\n }\r\n this.set(key, value);\r\n this.changes$.next({ key, value });\r\n }\r\n async asyncDelete(key: string, emmit_event: boolean = true): Promise<void> {\r\n if (this.has(key)) {\r\n if (emmit_event) {\r\n try {\r\n await this._socketService.emitDelete(this.get('__guid'), key);\r\n } catch (error) {\r\n console.error('Error emitting set event:', error);\r\n }\r\n }\r\n this.delete(key);\r\n this.deletes$.next({ key });\r\n }\r\n }\r\n deleteAsObservable(key: string, emmit_event: boolean = true): Observable<any> {\r\n return from(this.asyncDelete(key, emmit_event));\r\n }\r\n // Asynchronous method to initialize with a set of key-value pairs\r\n async asyncInit(initialData?: Record<string, any>) {\r\n if (!this.isInitialized) {\r\n try {\r\n // If initial data is not provided, fetch it\r\n const data = initialData || (await this._socketService.getInitialData());\r\n // this.known_dicts.set(data.__guid,data);\r\n // Set the initial properties on the proxy\r\n for (const [key, value] of Object.entries(data)) {\r\n this.set(key, value);\r\n }\r\n this.isInitialized = true;\r\n } catch (error) {\r\n console.error('Error during initialization:', error);\r\n }\r\n }\r\n }\r\n\r\n async lazyLoadSync(guid: string, prop: string | symbol): Promise<any> {\r\n try {\r\n const data = await this._socketService.requestLazyLoad(guid, String(prop));\r\n return data;\r\n } catch (error) {\r\n console.error('Error fetching data:', error);\r\n throw error;\r\n }\r\n }\r\n public getPlainObject(): Record<string, any> {\r\n const plainObject: Record<string, any> = {};\r\n this.forEach((value, key) => {\r\n if (value instanceof ReactiveDictionary) {\r\n plainObject[key] = value.getPlainObject();\r\n } else if (typeof value === 'string') {\r\n const formattedValue = value\r\n .replace(/'/g, '\"') // Convert single quotes to double quotes\r\n .replace(/\\bNone\\b/g, 'null') // Replace None with null\r\n .replace(/\\bFalse\\b/g, 'false') // Replace False with false\r\n .replace(/\\bTrue\\b/g, 'true'); // Replace True with true\r\n try {\r\n const parsedValue = JSON.parse(formattedValue, this.jsonDateReviver);\r\n plainObject[key] = parsedValue;\r\n } catch {\r\n plainObject[key] = value; // Keep as string if not valid JSON\r\n }\r\n } else {\r\n plainObject[key] = value;\r\n }\r\n });\r\n return plainObject; // Return the plain object\r\n }\r\n private jsonDateReviver(key: string, value: any): any {\r\n // Check if the value is a valid ISO date string\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(value)) {\r\n return new Date(value); // Convert to JavaScript Date object\r\n }\r\n return value;\r\n }\r\n getAsObservable(key: string): Observable<any> {\r\n return from(this.asyncGet(key));\r\n }\r\n\r\n getTableAsObservable(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getTable(key, data)).pipe(\r\n mergeMap((dictionaryMap) => {\r\n if (!(dictionaryMap instanceof Map)) {\r\n throw new Error('Expected a Map but received something else');\r\n }\r\n\r\n const values = Array.from(dictionaryMap.values());\r\n\r\n const isValid = values.every((item) => item instanceof ReactiveDictionary);\r\n\r\n if (!isValid) {\r\n throw new Error('Expected a Map of ReactiveDictionary instances but found invalid entries');\r\n }\r\n\r\n return from(this.processTableData(values));\r\n })\r\n );\r\n }\r\n\r\n getTableAsObservable_old(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getTable(key, data)).pipe(\r\n mergeMap((dictionary) => {\r\n if (!Array.isArray(dictionary)) {\r\n throw new Error('Expected an array but received something else');\r\n }\r\n\r\n const isArrayOfReactiveDictionaries = dictionary.every((item) => item instanceof ReactiveDictionary);\r\n\r\n if (!isArrayOfReactiveDictionaries) {\r\n throw new Error('Expected an array of ReactiveDictionary instances but received something else');\r\n }\r\n\r\n // ✅ WRAP THIS IN from(...) to make it emit real data, not a Promise\r\n return from(this.processTableData(dictionary));\r\n })\r\n );\r\n }\r\n async getTable(key: string, data: any = null): Promise<Map<string, ReactiveDictionary>> {\r\n if (!data) data = await this.asyncGet(key);\r\n if (!data) return new Map();\r\n\r\n // console.log('getTable', data);\r\n\r\n const entries = await Promise.all(\r\n Array.from(data.entries()).map(async ([k, v]) => {\r\n const entry = (await data.asyncGet(k)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', k);\r\n return [k, entry] as [string, ReactiveDictionary];\r\n }\r\n return null;\r\n })\r\n );\r\n\r\n // Filter out any nulls (non-ReactiveDictionary entries)\r\n const validEntries = entries.filter((e): e is [string, ReactiveDictionary] => e !== null);\r\n\r\n return new Map(validEntries);\r\n }\r\n\r\n async getTable_old(key: string, data: any = null): Promise<any[]> {\r\n if (!data) data = await this.asyncGet(key); // Get rooms from the ReactiveDictionary\r\n if (!data) return []; // Return an empty array if data is undefined\r\n // console.log('getTable', data);\r\n // Filter and get only entries that are instances of ReactiveDictionary\r\n const result =\r\n (await Promise.all(\r\n Array.from(data.entries()).map(async (key: any, index: number) => {\r\n const entry = (await data.asyncGet(key[0])) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', key[0]);\r\n }\r\n return entry;\r\n })\r\n )) || []; // Return an empty array if the above yields undefined\r\n\r\n return result.filter((entry: any) => entry instanceof ReactiveDictionary);\r\n }\r\n async getTableWithoutGuid(key: string): Promise<any[]> {\r\n const data = await this.asyncGet(key);\r\n if (!data) return [];\r\n\r\n // Reuse the common processing logic\r\n return this.processTableData(data);\r\n }\r\n async processTableData(data: any): Promise<any[]> {\r\n if (data instanceof ReactiveDictionary) {\r\n const result =\r\n (await Promise.all(\r\n Array.from(data.entries()).map(async ([key]) => {\r\n const entry = (await data.asyncGet(key)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', key);\r\n }\r\n return entry;\r\n })\r\n )) || [];\r\n\r\n return result\r\n .filter((entry: any) => entry instanceof ReactiveDictionary)\r\n .map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\r\n for (const [key, value] of dictionary.entries()) {\r\n if (key !== '__guid') {\r\n filteredObject[key] = value;\r\n }\r\n }\r\n return filteredObject;\r\n });\r\n } else if (Array.isArray(data)) {\r\n // Directly process array of ReactiveDictionary instances\r\n return data.map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\r\n for (const [key, value] of dictionary.entries()) {\r\n if (key !== '__guid') {\r\n filteredObject[key] = value;\r\n }\r\n }\r\n return filteredObject;\r\n });\r\n } else {\r\n console.warn('processTableData received unexpected data:', data);\r\n return [];\r\n }\r\n }\r\n\r\n // async processTableData(data: any): Promise<any[]> {\r\n // // Filter and get only entries that are instances of ReactiveDictionary\r\n // const result = await Promise.all(\r\n // Array.from(data.entries()).map(async ([key]) => {\r\n // const entry = await data.asyncGet(key) as ReactiveDictionary\r\n // if (entry instanceof ReactiveDictionary) {\r\n // entry.set('__idx', key);\r\n // }\r\n // return entry;\r\n // })\r\n // ) || [];\r\n\r\n // // Filter out entries that are not ReactiveDictionary instances\r\n // const filteredResults = result.filter((entry: any) => entry instanceof ReactiveDictionary);\r\n\r\n // // Remove __guid from each dictionary and return the plain object\r\n // return filteredResults.map(dictionary => {\r\n // const filteredObject: Record<string, any> = {};\r\n // for (const [key, value] of dictionary.entries()) {\r\n // if (key !== '__guid') {\r\n // filteredObject[key] = value;\r\n // }\r\n // }\r\n // return filteredObject;\r\n // });\r\n // }\r\n\r\n onChanges(): Observable<any> {\r\n return this.changes$.asObservable();\r\n }\r\n onDelete(): Observable<any> {\r\n return this.deletes$.asObservable();\r\n }\r\n private getNextOid(): string | null {\r\n const numericKeys = Array.from(this.keys())\r\n .filter((k) => /^\\d+$/.test(k)) // keep only purely numeric keys\r\n .map((k) => parseInt(k, 10));\r\n\r\n if (numericKeys.length === 0) return null;\r\n\r\n const maxKey = Math.max(...numericKeys);\r\n return (maxKey + 1).toString();\r\n }\r\n\r\n async update(record: Record<string, any>, key: string = null): Promise<void> {\r\n if (!key) key = this.getNextOid();\r\n const dict = await this.asyncGet(key);\r\n for (const key in record) {\r\n if (record.hasOwnProperty(key)) {\r\n const currentValue = await dict.asyncGet(key);\r\n if (currentValue !== record[key]) await dict.asyncSet(key, record[key]);\r\n }\r\n }\r\n }\r\n modelFormList(property: string, value: any): any {\r\n return this.get('__modelFormList');\r\n }\r\n}\r\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n@BaseModelConfig({\r\n type: 'user',\r\n modelEndpointUrl: 'user/menus'\r\n})\r\nexport class Menu extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'header' })\r\n header?: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n @Attribute({ serializedName: 'link' })\r\n link?: string;\r\n\r\n @Attribute({ serializedName: 'title' })\r\n title?: string;\r\n\r\n @Attribute({ serializedName: 'sublinks' })\r\n sublinks?: Menu[];\r\n\r\n @Attribute({ serializedName: 'target' })\r\n target?: string;\r\n\r\n @Attribute({ serializedName: 'external' })\r\n external?: boolean;\r\n\r\n @Attribute({ serializedName: 'description' })\r\n description?: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order?: number;\r\n\r\n @Attribute({ serializedName: 'translationKey' })\r\n translationKey!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color?: string;\r\n}\r\n\r\n","// import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n\r\nimport { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'right',\r\n modelEndpointUrl: 'user/rights'\r\n})\r\nexport class Right extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'name' })\r\n name!: string;\r\n\r\n @Attribute({ serializedName: 'rightKey' })\r\n rightKey!: string;\r\n\r\n @Attribute({ serializedName: 'pagePath' })\r\n pagePath!: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order!: number;\r\n\r\n @Attribute({ serializedName: 'isMenu' })\r\n isMenu!: boolean;\r\n\r\n @Attribute({ serializedName: 'resourceName' })\r\n resourceName!: string;\r\n\r\n @Attribute({ serializedName: 'parentId' })\r\n parentId!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color!: string;\r\n\r\n @Attribute({ serializedName: 'defaultRoles' })\r\n defaultRoles!: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n}\r\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'user'\r\n})\r\nexport class User extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'firstName' })\r\n firstName!: string;\r\n\r\n @Attribute({ serializedName: 'lastName' })\r\n lastName!: string;\r\n\r\n @Attribute({ serializedName: 'email' })\r\n email!: string;\r\n\r\n get fullName(): string {\r\n return this.firstName + ' ' + this.lastName;\r\n }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseQueryData, BaseService, DatastoreCore } from \"@rosoftlab/core\";\r\nimport { Observable } from 'rxjs';\r\nimport { Menu } from '../models/menu';\r\nimport { Right } from '../models/right';\r\nimport { User } from '../models/user';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserService extends BaseService<User> {\r\n userRights!: Right[]; \r\n constructor(datastore: DatastoreCore) {\r\n super(datastore);\r\n this.setModelType(User);\r\n }\r\n getRights(): Observable<BaseQueryData<Right>> {\r\n const response = this.datastore.findAll(Right);\r\n return response;\r\n }\r\n hasRightForLink(link: string): boolean {\r\n\r\n if (this.userRights && link) {\r\n const right = this.userRights.find(f => link.indexOf(f.pagePath) >= 0);\r\n return true;\r\n }\r\n return false;\r\n }\r\n getMenus(): Observable<BaseQueryData<Menu>> {\r\n const response = this.datastore.findAll(Menu);\r\n return response;\r\n } \r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\r\nimport { ButtonsModule } from \"@progress/kendo-angular-buttons\";\r\nimport { KENDO_SVGICON } from '@progress/kendo-angular-icons';\r\nimport { DrawerItemExpandedFn, DrawerSelectEvent, LayoutModule } from '@progress/kendo-angular-layout';\r\nimport { ToolBarModule } from '@progress/kendo-angular-toolbar';\r\nimport * as allIcons from \"@progress/kendo-svg-icons\";\r\nimport { menuIcon, SVGIcon } from \"@progress/kendo-svg-icons\";\r\nimport { map, Observable } from 'rxjs';\r\nimport { Menu } from '../../../models';\r\nimport { ReactiveDictionary } from '../../../reactive-dictionary';\r\nimport { UserService } from '../../../services';\r\n@Component({\r\n selector: 'rdict-full',\r\n templateUrl: './full.component.html',\r\n styleUrls: ['./full.component.scss'],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n TranslateModule,\r\n CommonModule,\r\n ButtonsModule,\r\n ToolBarModule,\r\n LayoutModule,\r\n KENDO_SVGICON\r\n ]\r\n})\r\nexport class FullComponent implements OnInit {\r\n public selected = \"Inbox\";\r\n public menuSvg: SVGIcon = menuIcon;\r\n public expandedIndices = [2];\r\n menu$!: Observable<Menu[]>;\r\n hasItems: boolean = false;\r\n public items: Array<{ [Key: string]: unknown }> = [];\r\n public icons = allIcons;\r\n //private rdict: ReactiveDictionary | undefined;\r\n apptitle: string = \"Test\"\r\n constructor(\r\n private userService: UserService,\r\n private router: Router,\r\n public translate: TranslateService,\r\n private rdict: ReactiveDictionary\r\n ) {\r\n this.getMenu();\r\n }\r\n\r\n async ngOnInit() {\r\n this.apptitle = await this.rdict.asyncGet(\"appname\")\r\n\r\n }\r\n public isItemExpanded: DrawerItemExpandedFn = (item): boolean => {\r\n return this.expandedIndices.indexOf(item.id) >= 0;\r\n };\r\n getMenu() {\r\n this.userService.getMenus().subscribe(\r\n {\r\n next: value => {\r\n this.items = this.transformToDrawerItems(value.getModels())\r\n },\r\n error: err => console.error('Observable emitted an error: ' + err),\r\n complete: () => console.log('Observable emitted the complete notification')\r\n }\r\n )\r\n this.menu$ = this.userService.getMenus().pipe(map(f => {\r\n const data = f.getModels()\r\n this.hasItems = data.length > 0;\r\n return data;\r\n }));\r\n }\r\n // public items: Array<DrawerItem> //= items;\r\n\r\n public onSelect(ev: DrawerSelectEvent): void {\r\n this.selected = ev.item.text;\r\n const current = ev.item.id;\r\n\r\n if (this.expandedIndices.indexOf(current) >= 0) {\r\n this.expandedIndices = this.expandedIndices.filter(\r\n (id) => id !== current\r\n );\r\n } else {\r\n this.expandedIndices.push(current);\r\n }\r\n if (ev.item.path && ev.item.path !== '') {\r\n this.router.navigate([ev.item.path]);\r\n // this.router.navigateByUrl(ev.item.path);\r\n // this.router.navigate(['/import_layout']); \r\n }\r\n }\r\n private transformToDrawerItems(data: Menu[], parentId?: string): any {\r\n let drawerItems: Array<{ [Key: string]: unknown }> = [];\r\n\r\n data.forEach(item => {\r\n const drawerItem = {\r\n id: item.id,\r\n text: this.translate.instant(item.translationKey),\r\n // icon: item.icon,\r\n svgIcon: this.icons[item.icon],\r\n selected: false, // Set this based on your application's state or logic\r\n parentId: parentId,\r\n path: (item.sublinks && item.sublinks.length > 0) ? '' : item.link\r\n };\r\n\r\n drawerItems.push(drawerItem);\r\n\r\n // Recursively process children and flatten them\r\n if (item.sublinks && item.sublinks.length > 0) {\r\n const childItems = this.transformToDrawerItems(item.sublinks, item.id);\r\n drawerItems = drawerItems.concat(childItems); // Add children to the drawerItems array\r\n }\r\n });\r\n\r\n return drawerItems;\r\n }\r\n}\r\n","<div class=\"custom-toolbar\">\r\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\r\n <span class=\"app-title\">{{apptitle}}</span>\r\n</div>\r\n<kendo-drawer-container>\r\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\r\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\"> \r\n </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\r\n </kendo-drawer-content>\r\n</kendo-drawer-container>","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DialogCloseResult, DialogRef, DialogService } from '@progress/kendo-angular-dialog';\nimport { NotificationService, NotificationSettings } from '@progress/kendo-angular-notification';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MaterialDialogService {\n public state: NotificationSettings = {\n content: \"Your data has been saved.\",\n type: { style: \"success\", icon: true },\n animation: { type: \"slide\", duration: 400 },\n hideAfter: 3000,\n };\n constructor(\n public translate: TranslateService,\n private dialogService: DialogService,\n private notificationService: NotificationService\n ) { }\n confirmDelete(): Observable<boolean> {\n return this.confirm(\n this.translate.instant(\"Are you sure you want to delete this record ?\"),\n this.translate.instant(\"Delete Record\"),\n this.translate.instant(\"General.Yes\"),\n this.translate.instant(\"General.No\")\n );\n }\n\n confirm(content?: string, title?: string, confirmButtonText?: string, cancelButtonText?: string): Observable<boolean> {\n const dialog: DialogRef = this.dialogService.open({\n title: title || \"Confirm\",\n content: content || \"Are you sure?\",\n actions: [\n { text: cancelButtonText || \"No\", result: false },\n { text: confirmButtonText || \"Yes\", themeColor: \"primary\", result: true }\n ],\n width: 450,\n height: 200,\n minWidth: 250,\n });\n\n // Return an Observable<boolean>\n return new Observable((observer) => {\n dialog.result.subscribe((result) => {\n if (result instanceof DialogCloseResult) {\n // Dialog was closed without an action\n observer.next(false);\n } else {\n const actionResult = result as { text: string, result: boolean };\n observer.next(actionResult.result);\n }\n observer.complete(); // Complete the observable\n });\n });\n }\n showSaveMessage(message?: string): void {\n this.state.content = message || \"Your data has been saved.\";\n this.state.type = { style: \"success\", icon: true };\n this.notificationService.show(this.state);\n }\n // showRegisteredMessage(message?: string, title?: string): Observable<boolean> {\n\n // }\n // showErrorMessage(e: any, message?: string): Observable<boolean> {\n\n // }\n}\n","import { FormlyExtension, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\nexport class TranslateExtension implements FormlyExtension {\r\n constructor(private translate: TranslateService) { }\r\n prePopulate(field: FormlyFieldConfig) {\r\n const props = field.props || {};\r\n if (!props['translate'] || props['_translated']) {\r\n return;\r\n }\r\n\r\n props['_translated'] = true;\r\n field.expressions = {\r\n ...(field.expressions || {}),\r\n 'props.label': this.translate.stream(props.label),\r\n };\r\n if (props.placeholder) {\r\n field.expressions = {\r\n ...(field.expressions || {}),\r\n 'props.placeholder': this.translate.stream(props.placeholder)\r\n };\r\n }\r\n if (props.description) {\r\n field.expressions = {\r\n ...(field.expressions || {}),\r\n 'props.description': this.translate.stream(props.description)\r\n };\r\n }\r\n }\r\n}\r\n\r\nexport function registerTranslateExtension(translate: TranslateService) {\r\n return {\r\n validationMessages: [\r\n {\r\n name: 'required',\r\n message(error: any, field: FormlyFieldConfig) {\r\n // console.log(field);\r\n return translate.stream('General.Field.Required', { field: field.props.label });\r\n },\r\n },\r\n ],\r\n extensions: [\r\n {\r\n name: 'translate',\r\n extension: new TranslateExtension(translate),\r\n }\r\n ],\r\n };\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FORMLY_CONFIG } from '@ngx-formly/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { registerTranslateExtension } from '../../translate.extension';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n \r\n ],\r\n providers: [\r\n { provide: FORMLY_CONFIG, multi: true, useFactory: registerTranslateExtension, deps: [TranslateService] },\r\n ],\r\n})\r\nexport class CrudFormlyTransaltionModule { }\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, Router } from '@angular/router';\r\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyModule } from '@ngx-formly/core';\r\nimport { FormlyKendoModule } from '@ngx-formly/kendo';\r\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\r\nimport { KENDO_TOOLBAR } from \"@progress/kendo-angular-toolbar\";\r\nimport { SVGIcon, saveIcon } from \"@progress/kendo-svg-icons\";\r\nimport { LocalFileService } from \"@rosoftlab/core\";\r\nimport { Observable } from 'rxjs';\r\nimport { ReactiveDictionary } from '../../reactive-dictionary';\r\nimport { MaterialDialogService } from '../../services/material-dialog.service';\r\nimport { CrudFormlyTransaltionModule } from './rsl-reactive-dictionary.module';\r\n@Component({\r\n selector: 'app-rdict-crud',\r\n templateUrl: './rdict-crud.component.html',\r\n styleUrls: ['./rdict-crud.component.scss'],\r\n imports: [\r\n FormlyModule,\r\n ReactiveFormsModule,\r\n FormlyKendoModule,\r\n TranslateModule,\r\n CrudFormlyTransaltionModule,\r\n KENDO_TOOLBAR\r\n ]\r\n})\r\nexport class RdictCrudComponent implements OnInit {\r\n title: string;\r\n\r\n\r\n basePath: string;\r\n dictPath: string;\r\n rdictModel: string;\r\n\r\n\r\n baseForm = new FormGroup({});\r\n model: any = {};\r\n options: FormlyFormOptions = {};\r\n fields: FormlyFieldConfig[] = [];\r\n fileLayout: string;\r\n modelKey: string | null;\r\n modelRdict: ReactiveDictionary\r\n public saveIcon: SVGIcon = saveIcon;\r\n constructor(\r\n public router: Router,\r\n public route: ActivatedRoute,\r\n public translate: TranslateService,\r\n private rdict: ReactiveDictionary,\r\n private localFileService: LocalFileService,\r\n private dialogService: MaterialDialogService\r\n ) {\r\n\r\n }\r\n\r\n async ngOnInit() {\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'fileLayout', '');\r\n\r\n const currentUrlSegments: string[] = this.router.url.split('/').filter(segment =>\r\n segment !== '' && isNaN(Number(segment))\r\n );\r\n if (['add', 'edit'].includes(currentUrlSegments[currentUrlSegments.length - 1])) {\r\n currentUrlSegments.pop();\r\n }\r\n\r\n this.dictPath = currentUrlSegments.join('.');\r\n this.rdictModel = currentUrlSegments.length > 0 ? currentUrlSegments[currentUrlSegments.length - 1] : '';\r\n const id = this.route.snapshot.paramMap.get('id');\r\n this.modelKey = id ?? null;\r\n this.getModelFields();\r\n this.getModel()\r\n }\r\n\r\n setValueFromSnapshot<T>(component: any, snapshot: ActivatedRouteSnapshot, key: string, defaultValue: T): void {\r\n if (component[key] === undefined) {\r\n let dataFromSnapshot = snapshot.data[key];\r\n if (dataFromSnapshot === null || dataFromSnapshot === undefined) {\r\n dataFromSnapshot = snapshot.params[key];\r\n }\r\n component[key] = dataFromSnapshot !== undefined ? dataFromSnapshot : defaultValue;\r\n }\r\n }\r\n\r\n onSubmit(model) {\r\n // this.saveModel(this.baseForm)\r\n }\r\n getModel() {\r\n if (this.modelKey) {\r\n this.rdict.getAsObservable(this.dictPath).subscribe({\r\n next: value => {\r\n value.getAsObservable(this.modelKey).subscribe({\r\n next: modelValue => {\r\n this.modelRdict = modelValue\r\n this.model = this.modelRdict.getPlainObject();\r\n this.modelRdict.onChanges().subscribe(changes => {\r\n if (changes) {\r\n console.log(\"Changes detected:\", changes);\r\n this.baseForm.get(changes.key).patchValue(changes.value)\r\n // this.model[changes.key] = changes.value;\r\n }\r\n });\r\n }\r\n });\r\n },\r\n error: err => console.error('Error:', err.message),\r\n });\r\n }\r\n }\r\n getModelFields() {\r\n if (this.rdictModel) {\r\n if (this.fileLayout) {\r\n //load from file\r\n this.localFileService.getJsonData(this.fileLayout).subscribe({\r\n next: value => {\r\n if (value) {\r\n const layout = value.find(item => item.model === this.rdictModel);\r\n this.setLayout(layout?.formLayout);\r\n }\r\n },\r\n error: err => console.error('Error:', err.message),\r\n })\r\n } else\r\n this.rdict.getAsObservable(\"config.models.\" + this.rdictModel + \".formLayout\").subscribe({\r\n next: formLayout => {\r\n if (formLayout) {\r\n this.setLayout(formLayout);\r\n }\r\n },\r\n error: err => console.error('Error:', err.message),\r\n });\r\n }\r\n }\r\n private setLayout(formLayout: any) {\r\n this.title = this.translate.instant(formLayout[\"title\"]);\r\n // console.log(formLayout[\"fields\"]);\r\n let fieldsTmp: FormlyFieldConfig[] = formLayout[\"fields\"];\r\n this.fields = this.transformFields(fieldsTmp);\r\n // this.transformJsonToFormlyFields()\r\n }\r\n\r\n // transformJsonToFormlyFields(json: any[]): FormlyFieldConfig[] {\r\n\r\n // // return json.map(field => {\r\n // // if (field.type === 'select' && field.props.options) {\r\n // // field.props.options = this.getSelectData(field.props.options);\r\n // // }\r\n // // return {\r\n // // key: field.key,\r\n // // type: field.type,\r\n // // props: field.props,\r\n // // fieldGroup: field?.fieldGroup\r\n // // };\r\n // // });\r\n // }\r\n transformFields(fields: FormlyFieldConfig[]): FormlyFieldConfig[] {\r\n return fields.map(field => this.transformField(field));\r\n }\r\n private transformField(field: FormlyFieldConfig): FormlyFieldConfig {\r\n // Handle the current field\r\n if (field.type === 'select' && field.props?.options && typeof field.props.options === 'string') {\r\n field.props.options = this.getSelectData(field.props.options);\r\n }\r\n\r\n // Recursively handle fieldGroup\r\n if (field.fieldGroup) {\r\n field.fieldGroup = this.transformFields(field.fieldGroup);\r\n }\r\n\r\n // Recursively handle fieldArray\r\n if (field.fieldArray) {\r\n if (typeof field.fieldArray === 'function') {\r\n const originalFieldArrayFn = field.fieldArray;\r\n field.fieldArray = (fieldConfig: FormlyFieldConfig) => {\r\n const transformedField = this.transformField(originalFieldArrayFn(fieldConfig));\r\n return transformedField;\r\n };\r\n } else {\r\n field.fieldArray = this.transformField(field.fieldArray);\r\n }\r\n }\r\n\r\n return field;\r\n }\r\n public async onSave() {\r\n await this.saveModel(this.baseForm)\r\n }\r\n async saveModel(fg: FormGroup) {\r\n if (fg.valid) {\r\n var dict = await this.rdict.asyncGet(this.dictPath);\r\n await dict.update(fg.value as Record<string, any>, this.modelKey)\r\n this.dialogService.showSaveMessage();\r\n // console.log(fg.value);\r\n } else {\r\n this.validateAllFormFields(fg);\r\n }\r\n }\r\n validateAllFormFields(fg: FormGroup) {\r\n Object.keys(fg.controls).forEach(field => {\r\n // console.log(field);\r\n const control = fg.get(field);\r\n if (control instanceof FormControl) {\r\n control.markAsTouched({ onlySelf: true });\r\n } else if (control instanceof FormGroup) {\r\n this.validateAllFormFields(control);\r\n }\r\n });\r\n }\r\n public getSelectData(key: string): Observable<any> {\r\n return this.rdict.getTableAsObservable(key)\r\n }\r\n}\r\n","<kendo-toolbar>\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-button text=\"Save\" showText=\"both\" [svgIcon]=\"saveIcon\" showIcon=\"both\" themeColor=\"primary\"\r\n [disabled]=\"false\" (click)=\"onSave()\">\r\n </kendo-toolbar-button>\r\n</kendo-toolbar>\r\n\r\n <form [formGroup]=\"baseForm\" (ngSubmit)=\"onSubmit(model)\">\r\n <formly-form [form]=\"baseForm\" [fields]=\"fields\" [model]=\"model\" [options]=\"options\"></formly-form>\r\n </form>\r\n","import {\r\n Component,\r\n Input,\r\n TemplateRef,\r\n ViewChild,\r\n forwardRef\r\n} from '@angular/core';\r\nimport { KENDO_LABEL } from '@progress/kendo-angular-label';\r\nimport { ToolBarToolComponent } from '@progress/kendo-angular-toolbar';\r\n\r\n@Component({\r\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => RdictTableTitle) }],\r\n selector: 'table-title',\r\n standalone: true,\r\n imports: [\r\n \r\n KENDO_LABEL,\r\n \r\n ],\r\n template: `\r\n <ng-template #toolbarTemplate>\r\n <kendo-label>{{text}}</kendo-label>\r\n </ng-template>\r\n `\r\n})\r\nexport class RdictTableTitle extends ToolBarToolComponent {\r\n public tabindex = -1;\r\n @ViewChild('toolbarTemplate', { static: true }) public declare toolbarTemplate: TemplateRef<any>;\r\n @Input() public text: string;\r\n constructor() {\r\n super();\r\n }\r\n}","import { Component, ElementRef, EventEmitter, Injector, Input, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationStart, Router, RouterModule, UrlSegment } from '@angular/router';\r\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\r\n// import { Rule } from '@rosoftlab/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AddEvent, KENDO_GRID, RemoveEvent } from '@progress/kendo-angular-grid';\r\nimport { KENDO_LABEL } from '@progress/kendo-angular-label';\r\nimport { KENDO_TOOLBAR } from '@progress/kendo-angular-toolbar';\r\n// import { ColumnMode, SelectionType, SortDirection } from '@swimlane/ngx-datatable';\r\nimport { KENDO_BUTTONS } from '@progress/kendo-angular-buttons';\r\nimport { KENDO_DIALOG } from '@progress/kendo-angular-dialog';\r\nimport { pencilIcon, plusIcon, SVGIcon, trashIcon } from '@progress/kendo-svg-icons';\r\nimport { LocalFileService } from '@rosoftlab/core';\r\nimport { ReactiveDictionary } from '../../reactive-dictionary';\r\nimport { MaterialDialogService } from '../../services/material-dialog.service';\r\nimport { RdictTableTitle } from './rdict-table-title';\r\ndeclare var $: any;\r\n\r\n@Component({\r\n selector: 'rsl-rdict-generic-table',\r\n templateUrl: './rdict-generic-table.component.html',\r\n styleUrls: ['./rdict-generic-table.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n // MatPaginatorModule,\r\n // MatTableModule,\r\n TranslateModule,\r\n KENDO_GRID,\r\n KENDO_TOOLBAR,\r\n KENDO_LABEL,\r\n KENDO_BUTTONS,\r\n KENDO_DIALOG,\r\n RdictTableTitle\r\n ],\r\n providers: []\r\n})\r\nexport class GenericRdictTableComponent implements OnInit {\r\n dataSource: unknown[]; //MatTableDataSource<any> = new MatTableDataSource();\r\n public title: string;\r\n model: string;\r\n @Input() showSerach: boolean;\r\n @Input() searchFields: string;\r\n @Input() customInclude: string;\r\n @Input() defaultSort: string;\r\n // @Input() defaultSortDirection: SortDirection;\r\n @Input() deletePropertyName: string;\r\n @Input() defaultFilter: string;\r\n @Input() showHeader: boolean;\r\n // @Input() deleteDisableRule: Rule[];\r\n @Input() hasAdd: boolean;\r\n @Input() canDelete: boolean;\r\n @Input() canEdit: boolean;\r\n @Input() editOnClick: boolean = false;\r\n @Input() editOnDblClick: boolean = false;\r\n fileLayout: string;\r\n data: any[] = [];\r\n pageIndex: number = 1;\r\n pageSize: number = 30;\r\n\r\n basePath: string;\r\n dictPath: string;\r\n isLoadingResults = true;\r\n isRateLimitReached = false;\r\n\r\n @ViewChild(ElementRef, { static: false }) filter: ElementRef;\r\n // @ViewChild('table') table: MatTable<any>;\r\n // @ViewChild('table', { read: ElementRef }) public matTableRef: ElementRef;\r\n\r\n @Output() selectedObject: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() click: EventEmitter<{ propertyName: string; model: any }> = new EventEmitter<{ propertyName: string; model: any }>();\r\n @Output() editModel: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n columns = [];\r\n tableLayout = {};\r\n allColumns = [];\r\n referenceColumns=[];\r\n referenceData=new Map<string,Map<string, any>>();\r\n displayedColumns: string[];\r\n // ColumnMode = ColumnMode;\r\n // SelectionType = SelectionType;\r\n\r\n readonly headerHeight = 50;\r\n readonly rowHeight = 50;\r\n isLoading: boolean;\r\n filterValue: string;\r\n oldOffsetY: number;\r\n hasSearch: false;\r\n selectedItem: any;\r\n public svgEdit: SVGIcon = pencilIcon;\r\n public svgDelete: SVGIcon = trashIcon;\r\n public svgAdd: SVGIcon = plusIcon;\r\n tableRdict: ReactiveDictionary;\r\n editColumn: string | null;\r\n constructor(\r\n public router: Router,\r\n public route: ActivatedRoute,\r\n public translate: TranslateService,\r\n private injector: Injector,\r\n private localFileService: LocalFileService,\r\n private rdict: ReactiveDictionary,\r\n private dialogService: MaterialDialogService\r\n ) {}\r\n async ngOnInit() {\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'model', '');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'showSerach', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'searchFields', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'customInclude', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSort', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSortDirection', '');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'deletePropertyName', 'name');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultFilter', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'showHeader', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'deleteDisableRule', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'hasAdd', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'canDelete', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'canEdit', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnClick', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnDblClick', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editColumn', null);\r\n\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'fileLayout', '');\r\n\r\n const currentUrlSegments: UrlSegment[] = this.router.url.split('/').map((segment) => new UrlSegment(segment, {}));\r\n this.basePath = currentUrlSegments.map((segment) => segment.path).join('/');\r\n const filteredSegments = currentUrlSegments.filter((segment) => segment.path !== '');\r\n this.dictPath = filteredSegments.map((segment) => segment.path).join('.');\r\n this.model = filteredSegments.length > 0 ? filteredSegments[filteredSegments.length - 1].path : ''; // Default to empty string if no valid segments\r\n this.router.events.subscribe((event) => {\r\n if (event instanceof NavigationStart) {\r\n // Navigation to another page is about to occur\r\n this.data = [];\r\n this.pageIndex = 1;\r\n // Perform actions or update component as needed\r\n }\r\n });\r\n this.getListLayout();\r\n this.loadData();\r\n }\r\n setValueFromSnapshot<T>(component: any, snapshot: ActivatedRouteSnapshot, key: string, defaultValue: T): void {\r\n if (component[key] === undefined) {\r\n let dataFromSnapshot = snapshot.data[key];\r\n if (dataFromSnapshot === null || dataFromSnapshot === undefined) {\r\n dataFromSnapshot = snapshot.params[key];\r\n }\r\n component[key] = dataFromSnapshot !== undefined ? dataFromSnapshot : defaultValue;\r\n }\r\n }\r\n async loadData() {\r\n this.rdict.getAsObservable(this.dictPath).subscribe({\r\n next: (rdictData) => {\r\n this.tableRdict = rdictData;\r\n this.tableRdict.onChanges().subscribe({\r\n next: (changes) => {\r\n console.log('Changes detected grid:', changes);\r\n this.onChangeEvent(changes);\r\n }\r\n });\r\n this.tableRdict.onDelete().subscribe({\r\n next: (changes) => {\r\n console.log('Delete detected grid:', changes);\r\n this.ondDeleteEvent(changes);\r\n }\r\n });\r\n this.rdict.getTableAsObservable(this.dictPath, this.tableRdict).subscribe({\r\n next: (value) => {\r\n this.dataSource = value;\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n onChangeEvent(changes: any) {\r\n if (changes) {\r\n const key = changes?.key as string;\r\n const value = changes?.value;\r\n if (key && value) {\r\n const index = this.dataSource.findIndex((item: any) => item.__idx === key);\r\n if (index > -1) {\r\n this.dataSource[index] = value;\r\n } else {\r\n //get the object from rdict\r\n this.tableRdict.getAsObservable(key).subscribe({\r\n next: (value) => {\r\n var dd = value.getPlainObject();\r\n this.dataSource.push(dd);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n ondDeleteEvent(changes: any) {\r\n if (changes) {\r\n const key = changes?.key as string;\r\n if (key) {\r\n const index = this.dataSource.findIndex((item: any) => item.__idx === key);\r\n if (index > -1) {\r\n this.dataSource.splice(index, 1);\r\n }\r\n // this.tableRdict.delete(key)\r\n }\r\n }\r\n }\r\n getListLayout() {\r\n if (this.model) {\r\n if (this.fileLayout) {\r\n //load from file\r\n this.localFileService.getJsonData(this.fileLayout).subscribe({\r\n next: (value) => {\r\n if (value) {\r\n const layout = value.find((item) => item.model === this.model);\r\n this.setLayout(layout?.tableLayout);\r\n }\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n //Use rdict layout\r\n else\r\n this.rdict.getAsObservable('config.models.' + this.model + '.tableLayout').subscribe({\r\n next: (value) => {\r\n this.setLayout(value);\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n }\r\n\r\n private setLayout(layout: any) {\r\n if (layout) {\r\n this.tableLayout = layout;\r\n this.title = this.translate.instant(this.tableLayout['title']);\r\n this.allColumns = this.tableLayout['columns'].map((item) => {\r\n if (!item.isTranslated) {\r\n item.name = this.translate.instant(item.translateKey);\r\n item.isTranslated = true;\r\n item.isEditLink = false;\r\n if (this.editColumn && this.editColumn === item.propertyName) {\r\n item.isEditLink = true;\r\n }\r\n if (!item.type) {\r\n item.type = 'property';\r\n }\r\n }\r\n return item;\r\n });\r\n //Get reference columns\r\n const referenceColumns = this.allColumns.filter((item) => item.reference !== undefined && item.reference !== null);\r\n if (referenceColumns.length > 0) {\r\n referenceColumns.forEach((item) => {\r\n this.rdict.getTableAsObservable(item.reference).subscribe({\r\n next: (value) => {\r\n if (value) {\r\n console.log('Reference data:', value);\r\n this.referenceData.set(item.reference, this.arrayToMap(value,item.referenceKey));\r\n }\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n });\r\n }\r\n this.columns = [];\r\n\r\n this.allColumns.sort((a, b) => a.order - b.order);\r\n this.displayedColumns = [];\r\n this.displayedColumns.push.apply(\r\n this.displayedColumns,\r\n this.allColumns.map((x) => x.propertyName)\r\n );\r\n }\r\n }\r\n arrayToMap<T>(array: T[], keyProperty: keyof T): Map<string, T> {\r\n const map = new Map<string, T>();\r\n for (const item of array) {\r\n const key = String(item[keyProperty]); // ensure it's a string\r\n map.set(key, item);\r\n }\r\n return map;\r\n }\r\n public addHandler(): void {\r\n this.router.navigate([`${this.basePath}/add`]);\r\n }\r\n public editHandler(args: AddEvent): void {\r\n this.edit(args.dataItem);\r\n // this.editDataItem = args.dataItem;\r\n // this.isNew = false;\r\n }\r\n public edit(dataItem: any): void {\r\n this.router.navigate([`${this.basePath}/edit/${dataItem.__idx}`]);\r\n }\r\n public removeHandler(args: RemoveEvent): void {\r\n this.dialogService.confirmDelete().subscribe({\r\n next: (result) => {\r\n if (result) {\r\n this.tableRdict.deleteAsObservable(args.dataItem.__idx).subscribe({\r\n next: (result) => {\r\n this.dataSource.splice(args.rowIndex, 1);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n // this.editService.remove(args.dataItem);\r\n }\r\n public getCellValue(item: any, column: any): any {\r\n if (typeof item !== 'object' || item === null) {\r\n return null; // or `undefined` or some fallback\r\n }\r\n if (column.type==\"reference\" ) {\r\n const value= this.referenceData.get(column.reference)?.get(item[column.propertyName])?.[column.referenceProperty] ?? item[column.propertyName];\r\n return value;\r\n } else {\r\n return item[column.propertyName];\r\n }\r\n }\r\n}\r\n","<kendo-grid [data]=\"dataSource\" [sortable]=\"true\" [filterable]=\"showSerach\" [resizable]=\"true\" (add)=\"addHandler()\"\r\n (edit)=\"editHandler($event)\" (remove)=\"removeHandler($event)\">\r\n <kendo-toolbar>\r\n <table-title text=\"{{title}}\"></table-title>\r\n <kendo-toolbar-messages>Test</kendo-toolbar-messages>\r\n <!-- <kendo-toolbar-separator></kendo-toolbar-separator> -->\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-button *ngIf=\"hasAdd\" kendoButton [svgIcon]=\"svgAdd\" text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n\r\n <!-- <kendo-toolbar>\r\n \r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <button kendoGridAddCommand type=\"button\">Add new</button>\r\n </kendo-toolbar> -->\r\n <!-- <kendo-grid-column *ngFor=\"let column of allColumns\" field=\"{{ column.propertyName }}\"\r\n title=\" {{column.translateKey | translate}}\">\r\n </kendo-grid-column> -->\r\n\r\n <kendo-grid-column *ngFor=\"let column of allColumns\" [field]=\"column.propertyName\"\r\n [title]=\"column.translateKey | translate\">\r\n <!-- Use ng-template to customize the column content -->\r\n <ng-template *ngIf=\"column.isEditLink; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <!-- Create a link that calls editHandler(dataItem) -->\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue(dataItem,column) }}\r\n </a>\r\n </ng-template>\r\n \r\n <!-- <ng-template *ngIf=\"column.type=='reference'; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue$(dataItem,column) | async }}\r\n </a>\r\n </ng-template> -->\r\n <!-- Default template for non-link columns -->\r\n <ng-template #defaultTemplate kendoGridCellTemplate let-dataItem>\r\n {{ getCellValue(dataItem,column) }}\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n\r\n <kendo-grid-command-column *ngIf=\"canEdit && canDelete\" title=\"\" [width]=\"100\">\r\n <ng-template kendoGridCellTemplate>\r\n <!-- <button kendoButton kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\" ></button>\r\n <button kendoButton kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button> -->\r\n <button *ngIf=\"canEdit\" kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\"></button>\r\n <button *ngIf=\"canDelete\" kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button>\r\n </ng-template>\r\n </kendo-grid-command-column>\r\n</kendo-grid>\r\n<div kendoDialogContainer></div>","// projects/my-library/src/lib/socket-config.token.ts\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const SOCKET_URL = new InjectionToken<string>('SocketUrl');\r\n","/*\r\n * Public API Surface of rdict\r\n */\r\n\r\nexport * from './lib/core';\r\nexport * from './lib/reactive-dictionary';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4","i1.SocketService","i1.UserService","i2","i3","i4.ReactiveDictionary","i1","i3.ReactiveDictionary","i4","i5.MaterialDialogService","i6"],"mappings":"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"}
1
+ {"version":3,"file":"rosoftlab-rdict.mjs","sources":["../../../../projects/rosoftlab/rdict/src/lib/services/socket.service.ts","../../../../projects/rosoftlab/rdict/src/lib/reactive-dictionary.ts","../../../../projects/rosoftlab/rdict/src/lib/services/material-dialog.service.ts","../../../../projects/rosoftlab/rdict/src/lib/models/menu.ts","../../../../projects/rosoftlab/rdict/src/lib/models/right.ts","../../../../projects/rosoftlab/rdict/src/lib/models/user.ts","../../../../projects/rosoftlab/rdict/src/lib/services/user.service.ts","../../../../projects/rosoftlab/rdict/src/lib/components/layouts/full/full.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/layouts/full/full.component.html","../../../../projects/rosoftlab/rdict/src/lib/translate.extension.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-crud/rsl-reactive-dictionary.module.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-crud/rdict-crud.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-crud/rdict-crud.component.html","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-table-title.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-generic-table.component.ts","../../../../projects/rosoftlab/rdict/src/lib/components/rdict-generic-table/rdict-generic-table.component.html","../../../../projects/rosoftlab/rdict/src/lib/socket-config.token.ts","../../../../projects/rosoftlab/rdict/src/public-api.ts","../../../../projects/rosoftlab/rdict/src/rosoftlab-rdict.ts"],"sourcesContent":["import { Inject, Injectable } from '@angular/core';\r\nimport { io, Socket } from 'socket.io-client';\r\nimport { SOCKET_URL } from '../core';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SocketService {\r\n private socket: Socket;\r\n private socketUrl: string\r\n constructor(\r\n @Inject(SOCKET_URL) socketUrl: string,) {\r\n this.socketUrl = socketUrl\r\n // Replace with your actual server URL\r\n // this.socket.on(\"connect\", () => {\r\n // const engine = this.socket.io.engine;\r\n // (engine.transport.name); // in most cases, prints \"polling\"\r\n\r\n // engine.once(\"upgrade\", () => {\r\n // // called when the transport is upgraded (i.e. from HTTP long-polling to WebSocket)\r\n // (engine.transport.name); // in most cases, prints \"websocket\"\r\n // });\r\n\r\n // });\r\n }\r\n initSocket(authToken: string) {\r\n if (this.socket == null && authToken !== null) {\r\n this.socket = io(this.socketUrl, {\r\n withCredentials: true,\r\n // parser: msgpackParser,\r\n auth: {\r\n token: authToken, // Include the authentication token\r\n }\r\n // ,\r\n // query: {\r\n // \"access_token\": authToken\r\n // }\r\n });\r\n\r\n // const originalEmit = this.socket.emit;\r\n // this.socket.emit = (event, ...args) => {\r\n // // Transform dates before sending\r\n // const transformedData = this.transformDatesForEncoding(args[0]);\r\n // originalEmit.call(this.socket, event, transformedData);\r\n // return this.socket;\r\n // };\r\n\r\n // Intercept incoming data and apply date transformation\r\n // this.socket.onAny((event, data) => {\r\n // const transformedData = this.transformDatesForDecoding(data);\r\n // this.socket.emit(event, transformedData); // Emit the transformed data back\r\n // });\r\n }\r\n }\r\n getInitialData(): Promise<Record<string, any>> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.on('init', (data: any) => {\r\n if (data) {\r\n resolve(data[\"dict_data\"]);\r\n } else {\r\n reject('No data received from init event');\r\n }\r\n });\r\n });\r\n }\r\n getSetEvent(rdict: any) {\r\n this.socket.on('set', (data: any) => {\r\n // (rdict.get('__guid'), data, this.socket.id)\r\n if (rdict.get('__guid') === data.did) {\r\n // ('Set the data')\r\n rdict.asyncSet(data.key, data.value, false)\r\n }\r\n });\r\n }\r\n getDeleteEvent(rdict: any) {\r\n this.socket.on('delete', (data: any) => {\r\n // (rdict.get('__guid'), data, this.socket.id)\r\n if (rdict.get('__guid') === data.did) {\r\n // ('Set the data')\r\n rdict.asyncDelete(data.key, false)\r\n }\r\n });\r\n }\r\n // Emit the 'lazy_load' event with callback to get the response\r\n requestLazyLoad(did: string, key: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('lazy_load', { did, key }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error); // Handle error if present\r\n } else {\r\n resolve(response); // Resolve with the response data\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Emit the 'set' event to update the data on the server\r\n emitSet(did: string, key: string, value: any): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('set', { did, key, value }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Emit the 'set' event to update the data on the server\r\n emitDelete(did: string, key: string): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n this.socket.emit('delete', { did, key }, (response: any) => {\r\n if (response && response.error) {\r\n reject(response.error);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n transformDatesForEncoding(obj: any): any {\r\n if (obj instanceof Date) {\r\n return { __date__: obj.toISOString() };\r\n } else if (Array.isArray(obj)) {\r\n return obj.map(this.transformDatesForEncoding);\r\n } else if (obj !== null && typeof obj === \"object\") {\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForEncoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n\r\n transformDatesForDecoding(obj: any): any {\r\n if (typeof obj === \"object\" && obj !== null) {\r\n if (\"__date__\" in obj) {\r\n return new Date(obj.__date__);\r\n }\r\n return Object.keys(obj).reduce((acc, key) => {\r\n acc[key] = this.transformDatesForDecoding(obj[key]);\r\n return acc;\r\n }, {} as any);\r\n }\r\n return obj;\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { from, mergeMap, Observable, Subject } from 'rxjs';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { SocketService } from './services/socket.service';\r\n// import { mergeMap } from 'rxjs/operators';\r\n@Injectable({\r\n providedIn: 'root' // This makes the service a singleton and available throughout the app\r\n})\r\nexport class ReactiveDictionary extends Map<string, any> {\r\n private static instance: Map<string, ReactiveDictionary> = new Map<string, ReactiveDictionary>();\r\n private _socketService: SocketService;\r\n private changes$: Subject<any> = new Subject<any>();\r\n private deletes$: Subject<any> = new Subject<any>();\r\n\r\n private isInitialized: boolean = false;\r\n private _authToken: string = null;\r\n constructor(socketService: SocketService) {\r\n super();\r\n\r\n this._socketService = socketService;\r\n // this._socketService.initSocket(authToken)\r\n\r\n // this._socketService.getSetEvent(this)\r\n }\r\n public async initialize(authToken: string) {\r\n this._authToken = authToken;\r\n this._socketService.initSocket(authToken);\r\n this._socketService.getSetEvent(this);\r\n this._socketService.getDeleteEvent(this);\r\n await this.asyncInit();\r\n }\r\n\r\n // override keys(): IterableIterator<string> {\r\n // const excludedKeys = ['__guid', '__type']; // Key to exclude\r\n // const iterator = super.keys();\r\n\r\n // const filteredIterator = {\r\n // [Symbol.iterator]: () => ({\r\n // next: () => {\r\n // let result;\r\n\r\n // // Loop until we find a valid key or run out of keys\r\n // do {\r\n // result = iterator.next(); // Get the next entry ([key, value])\r\n // if (result.done) return { done: true }; // Stop if done\r\n\r\n // const key = result.value; // Destructure the entry\r\n // const value = super.get(key);\r\n // // Check if the key is in excludedKeys or if the value is an object\r\n // if (!excludedKeys.includes(key) && !(typeof value === 'object' && value !== null)) {\r\n // return { value: key, done: false }; // Return the valid key\r\n // }\r\n // } while (true); // Continue until a valid key is found\r\n // }\r\n // })\r\n // };\r\n\r\n // return filteredIterator as IterableIterator<string>;\r\n // }\r\n // Asynchronous method to get a value by key\r\n async asyncGet(key: string): Promise<any> {\r\n // console.log('Get key: ', key);\r\n const keys = key.split('.');\r\n if (keys.length === 1) {\r\n if (this.has(key)) {\r\n const value = this.get(key);\r\n if (value instanceof ReactiveDictionary) {\r\n return value;\r\n }\r\n if (typeof value === 'object' && value !== null) {\r\n const dict_type = value['__type'];\r\n // console.log('value type : ', dict_type);\r\n if (dict_type === 'dict' || dict_type === 'lazy') {\r\n const lazyLoadData = await this.lazyLoadSync(this.get('__guid'), key);\r\n // console.log(lazyLoadData)\r\n if (lazyLoadData) {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n await dict.asyncInit(lazyLoadData.data);\r\n this.set(key, dict);\r\n return dict;\r\n }\r\n }\r\n }\r\n return value;\r\n } else {\r\n const dict = new ReactiveDictionary(this._socketService);\r\n dict.initialize(this._authToken);\r\n dict.set('__guid', uuidv4());\r\n dict.set('__type', 'dict');\r\n this.set(key, dict);\r\n await this._socketService.emitSet(this.get('__guid'), key, this.transform_for_serialization(dict));\r\n return dict;\r\n }\r\n } else {\r\n const obj = (await this.asyncGet(keys[0])) as ReactiveDictionary;\r\n if (obj) return await obj.asyncGet(keys.slice(1).join('.'));\r\n else return null;\r\n }\r\n }\r\n transform_for_serialization(value: any) {\r\n // Transform a value to a format that can be serialized.\r\n const dict_type = value['__type'];\r\n if (dict_type === 'lazy') return { __type: 'lazy' };\r\n else if (value instanceof ReactiveDictionary) return { __type: 'dict', __guid: value.get('__guid') };\r\n else return value;\r\n }\r\n // Asynchronous method to set a value by key\r\n async asyncSet(key: string, value: any, emmit_event: boolean = true): Promise<void> {\r\n if (emmit_event) {\r\n try {\r\n await this._socketService.emitSet(this.get('__guid'), key, value);\r\n } catch (error) {\r\n console.error('Error emitting set event:', error);\r\n }\r\n }\r\n this.set(key, value);\r\n this.changes$.next({ key, value });\r\n }\r\n async asyncDelete(key: string, emmit_event: boolean = true): Promise<void> {\r\n if (this.has(key)) {\r\n if (emmit_event) {\r\n try {\r\n await this._socketService.emitDelete(this.get('__guid'), key);\r\n } catch (error) {\r\n console.error('Error emitting set event:', error);\r\n }\r\n }\r\n this.delete(key);\r\n this.deletes$.next({ key });\r\n }\r\n }\r\n deleteAsObservable(key: string, emmit_event: boolean = true): Observable<any> {\r\n return from(this.asyncDelete(key, emmit_event));\r\n }\r\n // Asynchronous method to initialize with a set of key-value pairs\r\n async asyncInit(initialData?: Record<string, any>) {\r\n if (!this.isInitialized) {\r\n try {\r\n // If initial data is not provided, fetch it\r\n const data = initialData || (await this._socketService.getInitialData());\r\n // this.known_dicts.set(data.__guid,data);\r\n // Set the initial properties on the proxy\r\n for (const [key, value] of Object.entries(data)) {\r\n this.set(key, value);\r\n }\r\n this.isInitialized = true;\r\n } catch (error) {\r\n console.error('Error during initialization:', error);\r\n }\r\n }\r\n }\r\n\r\n async lazyLoadSync(guid: string, prop: string | symbol): Promise<any> {\r\n try {\r\n const data = await this._socketService.requestLazyLoad(guid, String(prop));\r\n return data;\r\n } catch (error) {\r\n console.error('Error fetching data:', error);\r\n throw error;\r\n }\r\n }\r\n public getPlainObject(): Record<string, any> {\r\n const plainObject: Record<string, any> = {};\r\n this.forEach((value, key) => {\r\n if (value instanceof ReactiveDictionary) {\r\n plainObject[key] = value.getPlainObject();\r\n } else if (typeof value === 'string') {\r\n const formattedValue = value\r\n .replace(/'/g, '\"') // Convert single quotes to double quotes\r\n .replace(/\\bNone\\b/g, 'null') // Replace None with null\r\n .replace(/\\bFalse\\b/g, 'false') // Replace False with false\r\n .replace(/\\bTrue\\b/g, 'true'); // Replace True with true\r\n try {\r\n const parsedValue = JSON.parse(formattedValue, this.jsonDateReviver);\r\n plainObject[key] = parsedValue;\r\n } catch {\r\n plainObject[key] = value; // Keep as string if not valid JSON\r\n }\r\n } else {\r\n plainObject[key] = value;\r\n }\r\n });\r\n return plainObject; // Return the plain object\r\n }\r\n private jsonDateReviver(key: string, value: any): any {\r\n // Check if the value is a valid ISO date string\r\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(value)) {\r\n return new Date(value); // Convert to JavaScript Date object\r\n }\r\n return value;\r\n }\r\n getAsObservable(key: string): Observable<any> {\r\n return from(this.asyncGet(key));\r\n }\r\n\r\n getTableAsObservable(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getTable(key, data)).pipe(\r\n mergeMap((dictionaryMap) => {\r\n if (!(dictionaryMap instanceof Map)) {\r\n throw new Error('Expected a Map but received something else');\r\n }\r\n\r\n const values = Array.from(dictionaryMap.values());\r\n\r\n const isValid = values.every((item) => item instanceof ReactiveDictionary);\r\n\r\n if (!isValid) {\r\n throw new Error('Expected a Map of ReactiveDictionary instances but found invalid entries');\r\n }\r\n\r\n return from(this.processTableData(values));\r\n })\r\n );\r\n }\r\n\r\n getTableAsObservable_old(key: string, data: any = null): Observable<any[]> {\r\n return from(this.getTable(key, data)).pipe(\r\n mergeMap((dictionary) => {\r\n if (!Array.isArray(dictionary)) {\r\n throw new Error('Expected an array but received something else');\r\n }\r\n\r\n const isArrayOfReactiveDictionaries = dictionary.every((item) => item instanceof ReactiveDictionary);\r\n\r\n if (!isArrayOfReactiveDictionaries) {\r\n throw new Error('Expected an array of ReactiveDictionary instances but received something else');\r\n }\r\n\r\n // ✅ WRAP THIS IN from(...) to make it emit real data, not a Promise\r\n return from(this.processTableData(dictionary));\r\n })\r\n );\r\n }\r\n async getTable(key: string, data: any = null): Promise<Map<string, ReactiveDictionary>> {\r\n if (!data) data = await this.asyncGet(key);\r\n if (!data) return new Map();\r\n\r\n // console.log('getTable', data);\r\n\r\n const entries = await Promise.all(\r\n Array.from(data.entries()).map(async ([k, v]) => {\r\n const entry = (await data.asyncGet(k)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', k);\r\n return [k, entry] as [string, ReactiveDictionary];\r\n }\r\n return null;\r\n })\r\n );\r\n\r\n // Filter out any nulls (non-ReactiveDictionary entries)\r\n const validEntries = entries.filter((e): e is [string, ReactiveDictionary] => e !== null);\r\n\r\n return new Map(validEntries);\r\n }\r\n\r\n async getTable_old(key: string, data: any = null): Promise<any[]> {\r\n if (!data) data = await this.asyncGet(key); // Get rooms from the ReactiveDictionary\r\n if (!data) return []; // Return an empty array if data is undefined\r\n // console.log('getTable', data);\r\n // Filter and get only entries that are instances of ReactiveDictionary\r\n const result =\r\n (await Promise.all(\r\n Array.from(data.entries()).map(async (key: any, index: number) => {\r\n const entry = (await data.asyncGet(key[0])) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', key[0]);\r\n }\r\n return entry;\r\n })\r\n )) || []; // Return an empty array if the above yields undefined\r\n\r\n return result.filter((entry: any) => entry instanceof ReactiveDictionary);\r\n }\r\n async getTableWithoutGuid(key: string): Promise<any[]> {\r\n const data = await this.asyncGet(key);\r\n if (!data) return [];\r\n\r\n // Reuse the common processing logic\r\n return this.processTableData(data);\r\n }\r\n async processTableData(data: any): Promise<any[]> {\r\n if (data instanceof ReactiveDictionary) {\r\n const result =\r\n (await Promise.all(\r\n Array.from(data.entries()).map(async ([key]) => {\r\n const entry = (await data.asyncGet(key)) as ReactiveDictionary;\r\n if (entry instanceof ReactiveDictionary) {\r\n entry.set('__idx', key);\r\n }\r\n return entry;\r\n })\r\n )) || [];\r\n\r\n return result\r\n .filter((entry: any) => entry instanceof ReactiveDictionary)\r\n .map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\r\n for (const [key, value] of dictionary.entries()) {\r\n if (key !== '__guid') {\r\n filteredObject[key] = value;\r\n }\r\n }\r\n return filteredObject;\r\n });\r\n } else if (Array.isArray(data)) {\r\n // Directly process array of ReactiveDictionary instances\r\n return data.map((dictionary) => {\r\n const filteredObject: Record<string, any> = {};\r\n for (const [key, value] of dictionary.entries()) {\r\n if (key !== '__guid') {\r\n filteredObject[key] = value;\r\n }\r\n }\r\n return filteredObject;\r\n });\r\n } else {\r\n console.warn('processTableData received unexpected data:', data);\r\n return [];\r\n }\r\n }\r\n\r\n // async processTableData(data: any): Promise<any[]> {\r\n // // Filter and get only entries that are instances of ReactiveDictionary\r\n // const result = await Promise.all(\r\n // Array.from(data.entries()).map(async ([key]) => {\r\n // const entry = await data.asyncGet(key) as ReactiveDictionary\r\n // if (entry instanceof ReactiveDictionary) {\r\n // entry.set('__idx', key);\r\n // }\r\n // return entry;\r\n // })\r\n // ) || [];\r\n\r\n // // Filter out entries that are not ReactiveDictionary instances\r\n // const filteredResults = result.filter((entry: any) => entry instanceof ReactiveDictionary);\r\n\r\n // // Remove __guid from each dictionary and return the plain object\r\n // return filteredResults.map(dictionary => {\r\n // const filteredObject: Record<string, any> = {};\r\n // for (const [key, value] of dictionary.entries()) {\r\n // if (key !== '__guid') {\r\n // filteredObject[key] = value;\r\n // }\r\n // }\r\n // return filteredObject;\r\n // });\r\n // }\r\n\r\n onChanges(): Observable<any> {\r\n return this.changes$.asObservable();\r\n }\r\n onDelete(): Observable<any> {\r\n return this.deletes$.asObservable();\r\n }\r\n private getNextOid(): string | null {\r\n const numericKeys = Array.from(this.keys())\r\n .filter((k) => /^\\d+$/.test(k)) // keep only purely numeric keys\r\n .map((k) => parseInt(k, 10));\r\n\r\n if (numericKeys.length === 0) return '0';\r\n\r\n const maxKey = Math.max(...numericKeys);\r\n return (maxKey + 1).toString();\r\n }\r\n\r\n async update(record: Record<string, any>, key: string = null): Promise<void> {\r\n if (!key) key = this.getNextOid();\r\n const dict = await this.asyncGet(key);\r\n for (const key in record) {\r\n if (record.hasOwnProperty(key)) {\r\n const currentValue = await dict.asyncGet(key);\r\n if (currentValue !== record[key]) await dict.asyncSet(key, record[key]);\r\n }\r\n }\r\n }\r\n modelFormList(property: string, value: any): any {\r\n return this.get('__modelFormList');\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DialogCloseResult, DialogRef, DialogService } from '@progress/kendo-angular-dialog';\nimport { NotificationService, NotificationSettings } from '@progress/kendo-angular-notification';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MaterialDialogService {\n public state: NotificationSettings = {\n content: \"Your data has been saved.\",\n type: { style: \"success\", icon: true },\n animation: { type: \"slide\", duration: 400 },\n hideAfter: 3000,\n };\n constructor(\n public translate: TranslateService,\n private dialogService: DialogService,\n private notificationService: NotificationService\n ) { }\n confirmDelete(): Observable<boolean> {\n return this.confirm(\n this.translate.instant(\"Are you sure you want to delete this record ?\"),\n this.translate.instant(\"Delete Record\"),\n this.translate.instant(\"General.Yes\"),\n this.translate.instant(\"General.No\")\n );\n }\n\n confirm(content?: string, title?: string, confirmButtonText?: string, cancelButtonText?: string): Observable<boolean> {\n const dialog: DialogRef = this.dialogService.open({\n title: title || \"Confirm\",\n content: content || \"Are you sure?\",\n actions: [\n { text: cancelButtonText || \"No\", result: false },\n { text: confirmButtonText || \"Yes\", themeColor: \"primary\", result: true }\n ],\n width: 450,\n height: 200,\n minWidth: 250,\n });\n\n // Return an Observable<boolean>\n return new Observable((observer) => {\n dialog.result.subscribe((result) => {\n if (result instanceof DialogCloseResult) {\n // Dialog was closed without an action\n observer.next(false);\n } else {\n const actionResult = result as { text: string, result: boolean };\n observer.next(actionResult.result);\n }\n observer.complete(); // Complete the observable\n });\n });\n }\n showSaveMessage(message?: string): void {\n this.state.content = message || \"Your data has been saved.\";\n this.state.type = { style: \"success\", icon: true };\n this.notificationService.show(this.state);\n }\n // showRegisteredMessage(message?: string, title?: string): Observable<boolean> {\n\n // }\n // showErrorMessage(e: any, message?: string): Observable<boolean> {\n\n // }\n}\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n@BaseModelConfig({\r\n type: 'user',\r\n modelEndpointUrl: 'user/menus'\r\n})\r\nexport class Menu extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'header' })\r\n header?: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n @Attribute({ serializedName: 'link' })\r\n link?: string;\r\n\r\n @Attribute({ serializedName: 'title' })\r\n title?: string;\r\n\r\n @Attribute({ serializedName: 'sublinks' })\r\n sublinks?: Menu[];\r\n\r\n @Attribute({ serializedName: 'target' })\r\n target?: string;\r\n\r\n @Attribute({ serializedName: 'external' })\r\n external?: boolean;\r\n\r\n @Attribute({ serializedName: 'description' })\r\n description?: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order?: number;\r\n\r\n @Attribute({ serializedName: 'translationKey' })\r\n translationKey!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color?: string;\r\n}\r\n\r\n","// import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n\r\nimport { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'right',\r\n modelEndpointUrl: 'user/rights'\r\n})\r\nexport class Right extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'name' })\r\n name!: string;\r\n\r\n @Attribute({ serializedName: 'rightKey' })\r\n rightKey!: string;\r\n\r\n @Attribute({ serializedName: 'pagePath' })\r\n pagePath!: string;\r\n\r\n @Attribute({ serializedName: 'order' })\r\n order!: number;\r\n\r\n @Attribute({ serializedName: 'isMenu' })\r\n isMenu!: boolean;\r\n\r\n @Attribute({ serializedName: 'resourceName' })\r\n resourceName!: string;\r\n\r\n @Attribute({ serializedName: 'parentId' })\r\n parentId!: string;\r\n\r\n @Attribute({ serializedName: 'color' })\r\n color!: string;\r\n\r\n @Attribute({ serializedName: 'defaultRoles' })\r\n defaultRoles!: string;\r\n\r\n @Attribute({ serializedName: 'icon' })\r\n icon?: string;\r\n\r\n}\r\n","import { Attribute, BaseModel, BaseModelConfig } from '@rosoftlab/core';\r\n;\r\n\r\n@BaseModelConfig({\r\n type: 'user'\r\n})\r\nexport class User extends BaseModel {\r\n\r\n @Attribute({ serializedName: 'id' })\r\n override id!: string;\r\n\r\n @Attribute({ serializedName: 'firstName' })\r\n firstName!: string;\r\n\r\n @Attribute({ serializedName: 'lastName' })\r\n lastName!: string;\r\n\r\n @Attribute({ serializedName: 'email' })\r\n email!: string;\r\n\r\n get fullName(): string {\r\n return this.firstName + ' ' + this.lastName;\r\n }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseQueryData, BaseService, DatastoreCore } from \"@rosoftlab/core\";\r\nimport { Observable } from 'rxjs';\r\nimport { Menu } from '../models/menu';\r\nimport { Right } from '../models/right';\r\nimport { User } from '../models/user';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserService extends BaseService<User> {\r\n userRights!: Right[]; \r\n constructor(datastore: DatastoreCore) {\r\n super(datastore);\r\n this.setModelType(User);\r\n }\r\n getRights(): Observable<BaseQueryData<Right>> {\r\n const response = this.datastore.findAll(Right);\r\n return response;\r\n }\r\n hasRightForLink(link: string): boolean {\r\n\r\n if (this.userRights && link) {\r\n const right = this.userRights.find(f => link.indexOf(f.pagePath) >= 0);\r\n return true;\r\n }\r\n return false;\r\n }\r\n getMenus(): Observable<BaseQueryData<Menu>> {\r\n const response = this.datastore.findAll(Menu);\r\n return response;\r\n } \r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\r\nimport { ButtonsModule } from \"@progress/kendo-angular-buttons\";\r\nimport { KENDO_SVGICON } from '@progress/kendo-angular-icons';\r\nimport { DrawerItemExpandedFn, DrawerSelectEvent, LayoutModule } from '@progress/kendo-angular-layout';\r\nimport { ToolBarModule } from '@progress/kendo-angular-toolbar';\r\nimport * as allIcons from \"@progress/kendo-svg-icons\";\r\nimport { menuIcon, SVGIcon } from \"@progress/kendo-svg-icons\";\r\nimport { map, Observable } from 'rxjs';\r\nimport { Menu } from '../../../models';\r\nimport { ReactiveDictionary } from '../../../reactive-dictionary';\r\nimport { UserService } from '../../../services';\r\n@Component({\r\n selector: 'rdict-full',\r\n templateUrl: './full.component.html',\r\n styleUrls: ['./full.component.scss'],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n TranslateModule,\r\n CommonModule,\r\n ButtonsModule,\r\n ToolBarModule,\r\n LayoutModule,\r\n KENDO_SVGICON\r\n ]\r\n})\r\nexport class FullComponent implements OnInit {\r\n public selected = \"Inbox\";\r\n public menuSvg: SVGIcon = menuIcon;\r\n public expandedIndices = [2];\r\n menu$!: Observable<Menu[]>;\r\n hasItems: boolean = false;\r\n public items: Array<{ [Key: string]: unknown }> = [];\r\n public icons = allIcons;\r\n //private rdict: ReactiveDictionary | undefined;\r\n apptitle: string = \"Test\"\r\n constructor(\r\n private userService: UserService,\r\n private router: Router,\r\n public translate: TranslateService,\r\n private rdict: ReactiveDictionary\r\n ) {\r\n this.getMenu();\r\n }\r\n\r\n async ngOnInit() {\r\n this.apptitle = await this.rdict.asyncGet(\"appname\")\r\n\r\n }\r\n public isItemExpanded: DrawerItemExpandedFn = (item): boolean => {\r\n return this.expandedIndices.indexOf(item.id) >= 0;\r\n };\r\n getMenu() {\r\n this.userService.getMenus().subscribe(\r\n {\r\n next: value => {\r\n this.items = this.transformToDrawerItems(value.getModels())\r\n },\r\n error: err => console.error('Observable emitted an error: ' + err),\r\n complete: () => console.log('Observable emitted the complete notification')\r\n }\r\n )\r\n this.menu$ = this.userService.getMenus().pipe(map(f => {\r\n const data = f.getModels()\r\n this.hasItems = data.length > 0;\r\n return data;\r\n }));\r\n }\r\n // public items: Array<DrawerItem> //= items;\r\n\r\n public onSelect(ev: DrawerSelectEvent): void {\r\n this.selected = ev.item.text;\r\n const current = ev.item.id;\r\n\r\n if (this.expandedIndices.indexOf(current) >= 0) {\r\n this.expandedIndices = this.expandedIndices.filter(\r\n (id) => id !== current\r\n );\r\n } else {\r\n this.expandedIndices.push(current);\r\n }\r\n if (ev.item.path && ev.item.path !== '') {\r\n this.router.navigate([ev.item.path]);\r\n // this.router.navigateByUrl(ev.item.path);\r\n // this.router.navigate(['/import_layout']); \r\n }\r\n }\r\n private transformToDrawerItems(data: Menu[], parentId?: string): any {\r\n let drawerItems: Array<{ [Key: string]: unknown }> = [];\r\n\r\n data.forEach(item => {\r\n const drawerItem = {\r\n id: item.id,\r\n text: this.translate.instant(item.translationKey),\r\n // icon: item.icon,\r\n svgIcon: this.icons[item.icon],\r\n selected: false, // Set this based on your application's state or logic\r\n parentId: parentId,\r\n path: (item.sublinks && item.sublinks.length > 0) ? '' : item.link\r\n };\r\n\r\n drawerItems.push(drawerItem);\r\n\r\n // Recursively process children and flatten them\r\n if (item.sublinks && item.sublinks.length > 0) {\r\n const childItems = this.transformToDrawerItems(item.sublinks, item.id);\r\n drawerItems = drawerItems.concat(childItems); // Add children to the drawerItems array\r\n }\r\n });\r\n\r\n return drawerItems;\r\n }\r\n}\r\n","<div class=\"custom-toolbar\">\r\n <button kendoButton [svgIcon]=\"menuSvg\" fillMode=\"flat\" (click)=\"drawer.toggle()\"></button>\r\n <span class=\"app-title\">{{apptitle}}</span>\r\n</div>\r\n<kendo-drawer-container>\r\n <kendo-drawer #drawer [items]=\"items\" mode=\"push\" [mini]=\"true\" [expanded]=\"true\" (select)=\"onSelect($event)\"\r\n [autoCollapse]=\"false\" [isItemExpanded]=\"isItemExpanded\"> \r\n </kendo-drawer>\r\n\r\n <kendo-drawer-content>\r\n <router-outlet></router-outlet>\r\n </kendo-drawer-content>\r\n</kendo-drawer-container>","import { FormlyExtension, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\nexport class TranslateExtension implements FormlyExtension {\r\n constructor(private translate: TranslateService) { }\r\n prePopulate(field: FormlyFieldConfig) {\r\n const props = field.props || {};\r\n if (!props['translate'] || props['_translated']) {\r\n return;\r\n }\r\n\r\n props['_translated'] = true;\r\n field.expressions = {\r\n ...(field.expressions || {}),\r\n 'props.label': this.translate.stream(props.label),\r\n };\r\n if (props.placeholder) {\r\n field.expressions = {\r\n ...(field.expressions || {}),\r\n 'props.placeholder': this.translate.stream(props.placeholder)\r\n };\r\n }\r\n if (props.description) {\r\n field.expressions = {\r\n ...(field.expressions || {}),\r\n 'props.description': this.translate.stream(props.description)\r\n };\r\n }\r\n }\r\n}\r\n\r\nexport function registerTranslateExtension(translate: TranslateService) {\r\n return {\r\n validationMessages: [\r\n {\r\n name: 'required',\r\n message(error: any, field: FormlyFieldConfig) {\r\n // console.log(field);\r\n return translate.stream('General.Field.Required', { field: field.props.label });\r\n },\r\n },\r\n ],\r\n extensions: [\r\n {\r\n name: 'translate',\r\n extension: new TranslateExtension(translate),\r\n }\r\n ],\r\n };\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FORMLY_CONFIG } from '@ngx-formly/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { registerTranslateExtension } from '../../translate.extension';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n \r\n ],\r\n providers: [\r\n { provide: FORMLY_CONFIG, multi: true, useFactory: registerTranslateExtension, deps: [TranslateService] },\r\n ],\r\n})\r\nexport class CrudFormlyTransaltionModule { }\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, Router } from '@angular/router';\r\nimport { FormlyFieldConfig, FormlyFormOptions, FormlyModule } from '@ngx-formly/core';\r\nimport { FormlyKendoModule } from '@ngx-formly/kendo';\r\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\r\nimport { KENDO_TOOLBAR } from \"@progress/kendo-angular-toolbar\";\r\nimport { SVGIcon, saveIcon } from \"@progress/kendo-svg-icons\";\r\nimport { LocalFileService } from \"@rosoftlab/core\";\r\nimport { Observable } from 'rxjs';\r\nimport { ReactiveDictionary } from '../../reactive-dictionary';\r\nimport { MaterialDialogService } from '../../services/material-dialog.service';\r\nimport { CrudFormlyTransaltionModule } from './rsl-reactive-dictionary.module';\r\n@Component({\r\n selector: 'app-rdict-crud',\r\n templateUrl: './rdict-crud.component.html',\r\n styleUrls: ['./rdict-crud.component.scss'],\r\n imports: [\r\n FormlyModule,\r\n ReactiveFormsModule,\r\n FormlyKendoModule,\r\n TranslateModule,\r\n CrudFormlyTransaltionModule,\r\n KENDO_TOOLBAR\r\n ]\r\n})\r\nexport class RdictCrudComponent implements OnInit {\r\n title: string;\r\n\r\n\r\n basePath: string;\r\n dictPath: string;\r\n rdictModel: string;\r\n\r\n\r\n baseForm = new FormGroup({});\r\n model: any = {};\r\n options: FormlyFormOptions = {};\r\n fields: FormlyFieldConfig[] = [];\r\n fileLayout: string;\r\n modelKey: string | null;\r\n modelRdict: ReactiveDictionary\r\n public saveIcon: SVGIcon = saveIcon;\r\n constructor(\r\n protected router: Router,\r\n protected route: ActivatedRoute,\r\n protected translate: TranslateService,\r\n protected rdict: ReactiveDictionary,\r\n protected localFileService: LocalFileService,\r\n protected dialogService: MaterialDialogService\r\n ) {\r\n\r\n }\r\n\r\n async ngOnInit() {\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'fileLayout', '');\r\n\r\n const currentUrlSegments: string[] = this.router.url.split('/').filter(segment =>\r\n segment !== '' && isNaN(Number(segment))\r\n );\r\n if (['add', 'edit'].includes(currentUrlSegments[currentUrlSegments.length - 1])) {\r\n currentUrlSegments.pop();\r\n }\r\n\r\n this.dictPath = currentUrlSegments.join('.');\r\n this.rdictModel = currentUrlSegments.length > 0 ? currentUrlSegments[currentUrlSegments.length - 1] : '';\r\n const id = this.route.snapshot.paramMap.get('id');\r\n this.modelKey = id ?? null;\r\n this.getModelFields();\r\n this.getModel()\r\n }\r\n\r\n setValueFromSnapshot<T>(component: any, snapshot: ActivatedRouteSnapshot, key: string, defaultValue: T): void {\r\n if (component[key] === undefined) {\r\n let dataFromSnapshot = snapshot.data[key];\r\n if (dataFromSnapshot === null || dataFromSnapshot === undefined) {\r\n dataFromSnapshot = snapshot.params[key];\r\n }\r\n component[key] = dataFromSnapshot !== undefined ? dataFromSnapshot : defaultValue;\r\n }\r\n }\r\n\r\n onSubmit(model) {\r\n // this.saveModel(this.baseForm)\r\n }\r\n getModel() {\r\n if (this.modelKey) {\r\n this.rdict.getAsObservable(this.dictPath).subscribe({\r\n next: value => {\r\n value.getAsObservable(this.modelKey).subscribe({\r\n next: modelValue => {\r\n this.modelRdict = modelValue\r\n this.model = this.modelRdict.getPlainObject();\r\n this.modelRdict.onChanges().subscribe(changes => {\r\n if (changes) {\r\n console.log(\"Changes detected:\", changes);\r\n this.baseForm.get(changes.key).patchValue(changes.value)\r\n // this.model[changes.key] = changes.value;\r\n }\r\n });\r\n }\r\n });\r\n },\r\n error: err => console.error('Error:', err.message),\r\n });\r\n }\r\n }\r\n getModelFields() {\r\n if (this.rdictModel) {\r\n if (this.fileLayout) {\r\n //load from file\r\n this.localFileService.getJsonData(this.fileLayout).subscribe({\r\n next: value => {\r\n if (value) {\r\n const layout = value.find(item => item.model === this.rdictModel);\r\n this.setLayout(layout?.formLayout);\r\n }\r\n },\r\n error: err => console.error('Error:', err.message),\r\n })\r\n } else\r\n this.rdict.getAsObservable(\"config.models.\" + this.rdictModel + \".formLayout\").subscribe({\r\n next: formLayout => {\r\n if (formLayout) {\r\n this.setLayout(formLayout);\r\n }\r\n },\r\n error: err => console.error('Error:', err.message),\r\n });\r\n }\r\n }\r\n private setLayout(formLayout: any) {\r\n this.title = this.translate.instant(formLayout[\"title\"]);\r\n // console.log(formLayout[\"fields\"]);\r\n let fieldsTmp: FormlyFieldConfig[] = formLayout[\"fields\"];\r\n this.fields = this.transformFields(fieldsTmp);\r\n // this.transformJsonToFormlyFields()\r\n }\r\n\r\n // transformJsonToFormlyFields(json: any[]): FormlyFieldConfig[] {\r\n\r\n // // return json.map(field => {\r\n // // if (field.type === 'select' && field.props.options) {\r\n // // field.props.options = this.getSelectData(field.props.options);\r\n // // }\r\n // // return {\r\n // // key: field.key,\r\n // // type: field.type,\r\n // // props: field.props,\r\n // // fieldGroup: field?.fieldGroup\r\n // // };\r\n // // });\r\n // }\r\n transformFields(fields: FormlyFieldConfig[]): FormlyFieldConfig[] {\r\n return fields.map(field => this.transformField(field));\r\n }\r\n private transformField(field: FormlyFieldConfig): FormlyFieldConfig {\r\n // Handle the current field\r\n if (field.type === 'select' && field.props?.options && typeof field.props.options === 'string') {\r\n field.props.options = this.getSelectData(field.props.options);\r\n }\r\n\r\n // Recursively handle fieldGroup\r\n if (field.fieldGroup) {\r\n field.fieldGroup = this.transformFields(field.fieldGroup);\r\n }\r\n\r\n // Recursively handle fieldArray\r\n if (field.fieldArray) {\r\n if (typeof field.fieldArray === 'function') {\r\n const originalFieldArrayFn = field.fieldArray;\r\n field.fieldArray = (fieldConfig: FormlyFieldConfig) => {\r\n const transformedField = this.transformField(originalFieldArrayFn(fieldConfig));\r\n return transformedField;\r\n };\r\n } else {\r\n field.fieldArray = this.transformField(field.fieldArray);\r\n }\r\n }\r\n\r\n return field;\r\n }\r\n public async onSave() {\r\n await this.saveModel(this.baseForm)\r\n }\r\n async saveModel(fg: FormGroup) {\r\n if (fg.valid) {\r\n var dict = await this.rdict.asyncGet(this.dictPath);\r\n await dict.update(fg.value as Record<string, any>, this.modelKey)\r\n this.dialogService.showSaveMessage();\r\n // console.log(fg.value);\r\n } else {\r\n this.validateAllFormFields(fg);\r\n }\r\n }\r\n validateAllFormFields(fg: FormGroup) {\r\n Object.keys(fg.controls).forEach(field => {\r\n // console.log(field);\r\n const control = fg.get(field);\r\n if (control instanceof FormControl) {\r\n control.markAsTouched({ onlySelf: true });\r\n } else if (control instanceof FormGroup) {\r\n this.validateAllFormFields(control);\r\n }\r\n });\r\n }\r\n public getSelectData(key: string): Observable<any> {\r\n return this.rdict.getTableAsObservable(key)\r\n }\r\n}\r\n","<kendo-toolbar>\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-button text=\"Save\" showText=\"both\" [svgIcon]=\"saveIcon\" showIcon=\"both\" themeColor=\"primary\"\r\n [disabled]=\"false\" (click)=\"onSave()\">\r\n </kendo-toolbar-button>\r\n</kendo-toolbar>\r\n\r\n <form [formGroup]=\"baseForm\" (ngSubmit)=\"onSubmit(model)\">\r\n <formly-form [form]=\"baseForm\" [fields]=\"fields\" [model]=\"model\" [options]=\"options\"></formly-form>\r\n </form>\r\n","import {\r\n Component,\r\n Input,\r\n TemplateRef,\r\n ViewChild,\r\n forwardRef\r\n} from '@angular/core';\r\nimport { KENDO_LABEL } from '@progress/kendo-angular-label';\r\nimport { ToolBarToolComponent } from '@progress/kendo-angular-toolbar';\r\n\r\n@Component({\r\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => RdictTableTitle) }],\r\n selector: 'table-title',\r\n standalone: true,\r\n imports: [\r\n \r\n KENDO_LABEL,\r\n \r\n ],\r\n template: `\r\n <ng-template #toolbarTemplate>\r\n <kendo-label>{{text}}</kendo-label>\r\n </ng-template>\r\n `\r\n})\r\nexport class RdictTableTitle extends ToolBarToolComponent {\r\n public tabindex = -1;\r\n @ViewChild('toolbarTemplate', { static: true }) public declare toolbarTemplate: TemplateRef<any>;\r\n @Input() public text: string;\r\n constructor() {\r\n super();\r\n }\r\n}","import { Component, ElementRef, EventEmitter, Injector, Input, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, NavigationStart, Router, RouterModule, UrlSegment } from '@angular/router';\r\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\r\n// import { Rule } from '@rosoftlab/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AddEvent, KENDO_GRID, RemoveEvent } from '@progress/kendo-angular-grid';\r\nimport { KENDO_LABEL } from '@progress/kendo-angular-label';\r\nimport { KENDO_TOOLBAR } from '@progress/kendo-angular-toolbar';\r\n// import { ColumnMode, SelectionType, SortDirection } from '@swimlane/ngx-datatable';\r\nimport { KENDO_BUTTONS } from '@progress/kendo-angular-buttons';\r\nimport { KENDO_DIALOG } from '@progress/kendo-angular-dialog';\r\nimport { pencilIcon, plusIcon, SVGIcon, trashIcon } from '@progress/kendo-svg-icons';\r\nimport { LocalFileService } from '@rosoftlab/core';\r\nimport { ReactiveDictionary } from '../../reactive-dictionary';\r\nimport { MaterialDialogService } from '../../services/material-dialog.service';\r\nimport { RdictTableTitle } from './rdict-table-title';\r\ndeclare var $: any;\r\n\r\n@Component({\r\n selector: 'rsl-rdict-generic-table',\r\n templateUrl: './rdict-generic-table.component.html',\r\n styleUrls: ['./rdict-generic-table.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n // MatPaginatorModule,\r\n // MatTableModule,\r\n TranslateModule,\r\n KENDO_GRID,\r\n KENDO_TOOLBAR,\r\n KENDO_LABEL,\r\n KENDO_BUTTONS,\r\n KENDO_DIALOG,\r\n RdictTableTitle\r\n ],\r\n providers: []\r\n})\r\nexport class GenericRdictTableComponent implements OnInit {\r\n dataSource: unknown[]; //MatTableDataSource<any> = new MatTableDataSource();\r\n public title: string;\r\n model: string;\r\n @Input() showSerach: boolean;\r\n @Input() searchFields: string;\r\n @Input() customInclude: string;\r\n @Input() defaultSort: string;\r\n // @Input() defaultSortDirection: SortDirection;\r\n @Input() deletePropertyName: string;\r\n @Input() defaultFilter: string;\r\n @Input() showHeader: boolean;\r\n // @Input() deleteDisableRule: Rule[];\r\n @Input() hasAdd: boolean;\r\n @Input() canDelete: boolean;\r\n @Input() canEdit: boolean;\r\n @Input() editOnClick: boolean = false;\r\n @Input() editOnDblClick: boolean = false;\r\n fileLayout: string;\r\n data: any[] = [];\r\n pageIndex: number = 1;\r\n pageSize: number = 30;\r\n\r\n basePath: string;\r\n dictPath: string;\r\n isLoadingResults = true;\r\n isRateLimitReached = false;\r\n\r\n @ViewChild(ElementRef, { static: false }) filter: ElementRef;\r\n // @ViewChild('table') table: MatTable<any>;\r\n // @ViewChild('table', { read: ElementRef }) public matTableRef: ElementRef;\r\n\r\n @Output() selectedObject: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() click: EventEmitter<{ propertyName: string; model: any }> = new EventEmitter<{ propertyName: string; model: any }>();\r\n @Output() editModel: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n columns = [];\r\n tableLayout = {};\r\n allColumns = [];\r\n referenceColumns = [];\r\n referenceData = new Map<string, Map<string, any>>();\r\n displayedColumns: string[];\r\n // ColumnMode = ColumnMode;\r\n // SelectionType = SelectionType;\r\n\r\n readonly headerHeight = 50;\r\n readonly rowHeight = 50;\r\n isLoading: boolean;\r\n filterValue: string;\r\n oldOffsetY: number;\r\n hasSearch: false;\r\n selectedItem: any;\r\n public svgEdit: SVGIcon = pencilIcon;\r\n public svgDelete: SVGIcon = trashIcon;\r\n public svgAdd: SVGIcon = plusIcon;\r\n tableRdict: ReactiveDictionary;\r\n editColumn: string | null;\r\n constructor(\r\n protected router: Router,\r\n protected route: ActivatedRoute,\r\n protected translate: TranslateService,\r\n protected injector: Injector,\r\n protected localFileService: LocalFileService,\r\n protected rdict: ReactiveDictionary,\r\n protected dialogService: MaterialDialogService\r\n ) {}\r\n async ngOnInit() {\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'model', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'dictPath', null);\r\n\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'showSerach', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'searchFields', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'customInclude', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSort', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultSortDirection', '');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'deletePropertyName', 'name');\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'defaultFilter', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'showHeader', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'deleteDisableRule', null);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'hasAdd', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'canDelete', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'canEdit', true);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnClick', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editOnDblClick', false);\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'editColumn', null);\r\n\r\n this.setValueFromSnapshot(this, this.route.snapshot, 'fileLayout', '');\r\n\r\n const currentUrlSegments: UrlSegment[] = this.router.url.split('/').map((segment) => new UrlSegment(segment, {}));\r\n this.basePath = currentUrlSegments.map((segment) => segment.path).join('/');\r\n const filteredSegments = currentUrlSegments.filter((segment) => segment.path !== '');\r\n this.dictPath = filteredSegments.map((segment) => segment.path).join('.');\r\n this.model = filteredSegments.length > 0 ? filteredSegments[filteredSegments.length - 1].path : ''; // Default to empty string if no valid segments\r\n this.router.events.subscribe((event) => {\r\n if (event instanceof NavigationStart) {\r\n // Navigation to another page is about to occur\r\n this.data = [];\r\n this.pageIndex = 1;\r\n // Perform actions or update component as needed\r\n }\r\n });\r\n this.getListLayout();\r\n this.loadData();\r\n }\r\n setValueFromSnapshot<T>(component: any, snapshot: ActivatedRouteSnapshot, key: string, defaultValue: T): void {\r\n if (component[key] === undefined) {\r\n let dataFromSnapshot = snapshot.data[key];\r\n if (dataFromSnapshot === null || dataFromSnapshot === undefined) {\r\n dataFromSnapshot = snapshot.params[key];\r\n }\r\n component[key] = dataFromSnapshot !== undefined ? dataFromSnapshot : defaultValue;\r\n }\r\n }\r\n async loadData() {\r\n this.rdict.getAsObservable(this.dictPath).subscribe({\r\n next: (rdictData) => {\r\n this.tableRdict = rdictData;\r\n this.tableRdict.onChanges().subscribe({\r\n next: (changes) => {\r\n console.log('Changes detected grid:', changes);\r\n this.onChangeEvent(changes);\r\n }\r\n });\r\n this.tableRdict.onDelete().subscribe({\r\n next: (changes) => {\r\n console.log('Delete detected grid:', changes);\r\n this.ondDeleteEvent(changes);\r\n }\r\n });\r\n this.rdict.getTableAsObservable(this.dictPath, this.tableRdict).subscribe({\r\n next: (value) => {\r\n this.dataSource = value;\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n onChangeEvent(changes: any) {\r\n if (changes) {\r\n const key = changes?.key as string;\r\n const value = changes?.value;\r\n if (key && value) {\r\n const index = this.dataSource.findIndex((item: any) => item.__idx === key);\r\n if (index > -1) {\r\n this.dataSource[index] = value;\r\n } else {\r\n //get the object from rdict\r\n this.tableRdict.getAsObservable(key).subscribe({\r\n next: (value) => {\r\n var dd = value.getPlainObject();\r\n this.dataSource.push(dd);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n ondDeleteEvent(changes: any) {\r\n if (changes) {\r\n const key = changes?.key as string;\r\n if (key) {\r\n const index = this.dataSource.findIndex((item: any) => item.__idx === key);\r\n if (index > -1) {\r\n this.dataSource.splice(index, 1);\r\n }\r\n // this.tableRdict.delete(key)\r\n }\r\n }\r\n }\r\n getListLayout() {\r\n if (this.model) {\r\n if (this.fileLayout) {\r\n //load from file\r\n this.localFileService.getJsonData(this.fileLayout).subscribe({\r\n next: (value) => {\r\n if (value) {\r\n const layout = value.find((item) => item.model === this.model);\r\n this.setLayout(layout?.tableLayout);\r\n }\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n //Use rdict layout\r\n else\r\n this.rdict.getAsObservable('config.models.' + this.model + '.tableLayout').subscribe({\r\n next: (value) => {\r\n this.setLayout(value);\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n }\r\n }\r\n\r\n private setLayout(layout: any) {\r\n if (layout) {\r\n this.tableLayout = layout;\r\n this.title = this.translate.instant(this.tableLayout['title']);\r\n this.allColumns = this.tableLayout['columns'].map((item) => {\r\n if (!item.isTranslated) {\r\n item.name = this.translate.instant(item.translateKey);\r\n item.isTranslated = true;\r\n item.isEditLink = false;\r\n if (this.editColumn && this.editColumn === item.propertyName) {\r\n item.isEditLink = true;\r\n }\r\n if (!item.type) {\r\n item.type = 'property';\r\n }\r\n }\r\n return item;\r\n });\r\n //Get reference columns\r\n const referenceColumns = this.allColumns.filter((item) => item.reference !== undefined && item.reference !== null);\r\n if (referenceColumns.length > 0) {\r\n referenceColumns.forEach((item) => {\r\n this.rdict.getTableAsObservable(item.reference).subscribe({\r\n next: (value) => {\r\n if (value) {\r\n console.log('Reference data:', value);\r\n this.referenceData.set(item.reference, this.arrayToMap(value, item.referenceKey));\r\n }\r\n },\r\n error: (err) => console.error('Error:', err.message)\r\n });\r\n });\r\n }\r\n this.columns = [];\r\n\r\n this.allColumns.sort((a, b) => a.order - b.order);\r\n this.displayedColumns = [];\r\n this.displayedColumns.push.apply(\r\n this.displayedColumns,\r\n this.allColumns.map((x) => x.propertyName)\r\n );\r\n }\r\n }\r\n arrayToMap<T>(array: T[], keyProperty: keyof T): Map<string, T> {\r\n const map = new Map<string, T>();\r\n for (const item of array) {\r\n const key = String(item[keyProperty]); // ensure it's a string\r\n map.set(key, item);\r\n }\r\n return map;\r\n }\r\n public addHandler(): void {\r\n this.router.navigate([`${this.basePath}/add`]);\r\n }\r\n public editHandler(args: AddEvent): void {\r\n this.edit(args.dataItem);\r\n // this.editDataItem = args.dataItem;\r\n // this.isNew = false;\r\n }\r\n public edit(dataItem: any): void {\r\n this.router.navigate([`${this.basePath}/edit/${dataItem.__idx}`]);\r\n }\r\n public removeHandler(args: RemoveEvent): void {\r\n this.dialogService.confirmDelete().subscribe({\r\n next: (result) => {\r\n if (result) {\r\n this.tableRdict.deleteAsObservable(args.dataItem.__idx).subscribe({\r\n next: (result) => {\r\n this.dataSource.splice(args.rowIndex, 1);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n // this.editService.remove(args.dataItem);\r\n }\r\n public getCellValue(item: any, column: any): any {\r\n if (typeof item !== 'object' || item === null) {\r\n return null; // or `undefined` or some fallback\r\n }\r\n if (column.type == 'reference') {\r\n const value =\r\n this.referenceData.get(column.reference)?.get(item[column.propertyName])?.[column.referenceProperty] ?? item[column.propertyName];\r\n return value;\r\n } else {\r\n return item[column.propertyName];\r\n }\r\n }\r\n}\r\n","<kendo-grid [data]=\"dataSource\" [sortable]=\"true\" [filterable]=\"showSerach\" [resizable]=\"true\" (add)=\"addHandler()\"\r\n (edit)=\"editHandler($event)\" (remove)=\"removeHandler($event)\">\r\n <kendo-toolbar>\r\n <table-title text=\"{{title}}\"></table-title>\r\n <kendo-toolbar-messages>Test</kendo-toolbar-messages>\r\n <!-- <kendo-toolbar-separator></kendo-toolbar-separator> -->\r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <kendo-toolbar-button *ngIf=\"hasAdd\" kendoButton [svgIcon]=\"svgAdd\" text=\"Add new\" kendoGridAddTool></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n\r\n <!-- <kendo-toolbar>\r\n \r\n <kendo-toolbar-spacer></kendo-toolbar-spacer>\r\n <button kendoGridAddCommand type=\"button\">Add new</button>\r\n </kendo-toolbar> -->\r\n <!-- <kendo-grid-column *ngFor=\"let column of allColumns\" field=\"{{ column.propertyName }}\"\r\n title=\" {{column.translateKey | translate}}\">\r\n </kendo-grid-column> -->\r\n\r\n <kendo-grid-column *ngFor=\"let column of allColumns\" [field]=\"column.propertyName\"\r\n [title]=\"column.translateKey | translate\">\r\n <!-- Use ng-template to customize the column content -->\r\n <ng-template *ngIf=\"column.isEditLink; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <!-- Create a link that calls editHandler(dataItem) -->\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue(dataItem,column) }}\r\n </a>\r\n </ng-template>\r\n \r\n <!-- <ng-template *ngIf=\"column.type=='reference'; else defaultTemplate\" kendoGridCellTemplate let-dataItem>\r\n <a href=\"javascript:void(0)\" (click)=\"edit(dataItem)\" class=\"edit-link\">\r\n {{ getCellValue$(dataItem,column) | async }}\r\n </a>\r\n </ng-template> -->\r\n <!-- Default template for non-link columns -->\r\n <ng-template #defaultTemplate kendoGridCellTemplate let-dataItem>\r\n {{ getCellValue(dataItem,column) }}\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n\r\n <kendo-grid-command-column *ngIf=\"canEdit && canDelete\" title=\"\" [width]=\"100\">\r\n <ng-template kendoGridCellTemplate>\r\n <!-- <button kendoButton kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\" ></button>\r\n <button kendoButton kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button> -->\r\n <button *ngIf=\"canEdit\" kendoGridEditCommand [svgIcon]=\"svgEdit\" themeColor=\"light\"></button>\r\n <button *ngIf=\"canDelete\" kendoGridRemoveCommand [svgIcon]=\"svgDelete\" themeColor=\"error\"></button>\r\n </ng-template>\r\n </kendo-grid-command-column>\r\n</kendo-grid>\r\n<div kendoDialogContainer></div>","// projects/my-library/src/lib/socket-config.token.ts\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport const SOCKET_URL = new InjectionToken<string>('SocketUrl');\r\n","/*\r\n * Public API Surface of rdict\r\n */\r\n\r\nexport * from './lib/core';\r\nexport * from './lib/reactive-dictionary';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4","i1.SocketService","i1","i2","i1.UserService","i3","i4.ReactiveDictionary","i3.ReactiveDictionary","i4","i5.MaterialDialogService","i6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAMa,aAAa,CAAA;AAGxB,IAAA,WAAA,CACsB,SAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;;;;;;;;;;AAa5B,IAAA,UAAU,CAAC,SAAiB,EAAA;QAC1B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,SAAS,KAAK,IAAI,EAAE;YAC7C,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;AAC/B,gBAAA,eAAe,EAAE,IAAI;;AAErB,gBAAA,IAAI,EAAE;oBACJ,KAAK,EAAE,SAAS;AACjB;;;;;AAKF,aAAA,CAAC;;;;;;;;;;;;;;;IAiBN,cAAc,GAAA;QACZ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAS,KAAI;gBACnC,IAAI,IAAI,EAAE;AACR,oBAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;qBACrB;oBACL,MAAM,CAAC,kCAAkC,CAAC;;AAE9C,aAAC,CAAC;AACJ,SAAC,CAAC;;AAEJ,IAAA,WAAW,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAS,KAAI;;YAElC,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;;AAEpC,gBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;;AAE/C,SAAC,CAAC;;AAEJ,IAAA,cAAc,CAAC,KAAU,EAAA;QACvB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAS,KAAI;;YAErC,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;;gBAEpC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;;AAEtC,SAAC,CAAC;;;IAGJ,eAAe,CAAC,GAAW,EAAE,GAAW,EAAA;QACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,QAAa,KAAI;AAC5D,gBAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;AAC9B,oBAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;qBAClB;AACL,oBAAA,OAAO,CAAC,QAAQ,CAAC,CAAC;;AAEtB,aAAC,CAAC;AACJ,SAAC,CAAC;;;AAIJ,IAAA,OAAO,CAAC,GAAW,EAAE,GAAW,EAAE,KAAU,EAAA;QAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,QAAa,KAAI;AAC7D,gBAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;AAC9B,oBAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;;qBACjB;AACL,oBAAA,OAAO,EAAE;;AAEb,aAAC,CAAC;AACJ,SAAC,CAAC;;;IAIJ,UAAU,CAAC,GAAW,EAAE,GAAW,EAAA;QACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,QAAa,KAAI;AACzD,gBAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;AAC9B,oBAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;;qBACjB;AACL,oBAAA,OAAO,EAAE;;AAEb,aAAC,CAAC;AACJ,SAAC,CAAC;;AAGJ,IAAA,yBAAyB,CAAC,GAAQ,EAAA;AAChC,QAAA,IAAI,GAAG,YAAY,IAAI,EAAE;YACvB,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE;;AACjC,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC7B,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC;;aACzC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAClD,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AAC1C,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,gBAAA,OAAO,GAAG;aACX,EAAE,EAAS,CAAC;;AAEf,QAAA,OAAO,GAAG;;AAGZ,IAAA,yBAAyB,CAAC,GAAQ,EAAA;QAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE;AAC3C,YAAA,IAAI,UAAU,IAAI,GAAG,EAAE;AACrB,gBAAA,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAE/B,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AAC1C,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,gBAAA,OAAO,GAAG;aACX,EAAE,EAAS,CAAC;;AAEf,QAAA,OAAO,GAAG;;AA3ID,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,kBAId,UAAU,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAJT,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAKI,MAAM;2BAAC,UAAU;;;ACNtB;AAIM,MAAO,kBAAmB,SAAQ,GAAgB,CAAA;AACvC,IAAA,SAAA,IAAA,CAAA,QAAQ,GAAoC,IAAI,GAAG,EAA8B,CAAC;AAOjG,IAAA,WAAA,CAAY,aAA4B,EAAA;AACtC,QAAA,KAAK,EAAE;AAND,QAAA,IAAA,CAAA,QAAQ,GAAiB,IAAI,OAAO,EAAO;AAC3C,QAAA,IAAA,CAAA,QAAQ,GAAiB,IAAI,OAAO,EAAO;QAE3C,IAAa,CAAA,aAAA,GAAY,KAAK;QAC9B,IAAU,CAAA,UAAA,GAAW,IAAI;AAI/B,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa;;;;IAK9B,MAAM,UAAU,CAAC,SAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC;AACzC,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC;AACxC,QAAA,MAAM,IAAI,CAAC,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;IA+BxB,MAAM,QAAQ,CAAC,GAAW,EAAA;;QAExB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3B,gBAAA,IAAI,KAAK,YAAY,kBAAkB,EAAE;AACvC,oBAAA,OAAO,KAAK;;gBAEd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,oBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;;oBAEjC,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE;AAChD,wBAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;;wBAErE,IAAI,YAAY,EAAE;4BAChB,MAAM,IAAI,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC;AACxD,4BAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;4BAChC,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC;AACvC,4BAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;AACnB,4BAAA,OAAO,IAAI;;;;AAIjB,gBAAA,OAAO,KAAK;;iBACP;gBACL,MAAM,IAAI,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC;AACxD,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;gBAChC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAEA,EAAM,EAAE,CAAC;AAC5B,gBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC1B,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;gBACnB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAClG,gBAAA,OAAO,IAAI;;;aAER;AACL,YAAA,MAAM,GAAG,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAuB;AAChE,YAAA,IAAI,GAAG;AAAE,gBAAA,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AACtD,gBAAA,OAAO,IAAI;;;AAGpB,IAAA,2BAA2B,CAAC,KAAU,EAAA;;AAEpC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;QACjC,IAAI,SAAS,KAAK,MAAM;AAAE,YAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;aAC9C,IAAI,KAAK,YAAY,kBAAkB;AAAE,YAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;;AAC/F,YAAA,OAAO,KAAK;;;IAGnB,MAAM,QAAQ,CAAC,GAAW,EAAE,KAAU,EAAE,cAAuB,IAAI,EAAA;QACjE,IAAI,WAAW,EAAE;AACf,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC;;YACjE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;;;AAGrD,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;;AAEpC,IAAA,MAAM,WAAW,CAAC,GAAW,EAAE,cAAuB,IAAI,EAAA;AACxD,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACjB,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI;AACF,oBAAA,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;;gBAC7D,OAAO,KAAK,EAAE;AACd,oBAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC;;;AAGrD,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;;;AAG/B,IAAA,kBAAkB,CAAC,GAAW,EAAE,WAAA,GAAuB,IAAI,EAAA;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;;;IAGjD,MAAM,SAAS,CAAC,WAAiC,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI;;AAEF,gBAAA,MAAM,IAAI,GAAG,WAAW,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;;;AAGxE,gBAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC/C,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;;AAEtB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;YACzB,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;;;;AAK1D,IAAA,MAAM,YAAY,CAAC,IAAY,EAAE,IAAqB,EAAA;AACpD,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1E,YAAA,OAAO,IAAI;;QACX,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC5C,YAAA,MAAM,KAAK;;;IAGR,cAAc,GAAA;QACnB,MAAM,WAAW,GAAwB,EAAE;QAC3C,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AAC1B,YAAA,IAAI,KAAK,YAAY,kBAAkB,EAAE;gBACvC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,cAAc,EAAE;;AACpC,iBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBACpC,MAAM,cAAc,GAAG;AACpB,qBAAA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAClB,qBAAA,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;AAC5B,qBAAA,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;AAC9B,qBAAA,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAChC,gBAAA,IAAI;AACF,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC;AACpE,oBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW;;AAC9B,gBAAA,MAAM;AACN,oBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;;;iBAEtB;AACL,gBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;;AAE5B,SAAC,CAAC;QACF,OAAO,WAAW,CAAC;;IAEb,eAAe,CAAC,GAAW,EAAE,KAAU,EAAA;;AAE7C,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,+CAA+C,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC5F,YAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;;AAEzB,QAAA,OAAO,KAAK;;AAEd,IAAA,eAAe,CAAC,GAAW,EAAA;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;;AAGjC,IAAA,oBAAoB,CAAC,GAAW,EAAE,IAAA,GAAY,IAAI,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CACxC,QAAQ,CAAC,CAAC,aAAa,KAAI;AACzB,YAAA,IAAI,EAAE,aAAa,YAAY,GAAG,CAAC,EAAE;AACnC,gBAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;;YAG/D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;AAEjD,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,YAAY,kBAAkB,CAAC;YAE1E,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC;;YAG7F,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;SAC3C,CAAC,CACH;;AAGH,IAAA,wBAAwB,CAAC,GAAW,EAAE,IAAA,GAAY,IAAI,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CACxC,QAAQ,CAAC,CAAC,UAAU,KAAI;YACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC9B,gBAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;;AAGlE,YAAA,MAAM,6BAA6B,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,YAAY,kBAAkB,CAAC;YAEpG,IAAI,CAAC,6BAA6B,EAAE;AAClC,gBAAA,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC;;;YAIlG,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;SAC/C,CAAC,CACH;;AAEH,IAAA,MAAM,QAAQ,CAAC,GAAW,EAAE,OAAY,IAAI,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC1C,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,GAAG,EAAE;;QAI3B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;YAC9C,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAuB;AAC5D,YAAA,IAAI,KAAK,YAAY,kBAAkB,EAAE;AACvC,gBAAA,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AACrB,gBAAA,OAAO,CAAC,CAAC,EAAE,KAAK,CAAiC;;AAEnD,YAAA,OAAO,IAAI;SACZ,CAAC,CACH;;AAGD,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAwC,CAAC,KAAK,IAAI,CAAC;AAEzF,QAAA,OAAO,IAAI,GAAG,CAAC,YAAY,CAAC;;AAG9B,IAAA,MAAM,YAAY,CAAC,GAAW,EAAE,OAAY,IAAI,EAAA;AAC9C,QAAA,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;;;QAGrB,MAAM,MAAM,GACV,CAAC,MAAM,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,GAAQ,EAAE,KAAa,KAAI;AAC/D,YAAA,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAuB;AACjE,YAAA,IAAI,KAAK,YAAY,kBAAkB,EAAE;gBACvC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;;AAE5B,YAAA,OAAO,KAAK;AACd,SAAC,CAAC,CACH,KAAK,EAAE,CAAC;AAEX,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,YAAY,kBAAkB,CAAC;;IAE3E,MAAM,mBAAmB,CAAC,GAAW,EAAA;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;;AAGpB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;IAEpC,MAAM,gBAAgB,CAAC,IAAS,EAAA;AAC9B,QAAA,IAAI,IAAI,YAAY,kBAAkB,EAAE;YACtC,MAAM,MAAM,GACV,CAAC,MAAM,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAI;gBAC7C,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAuB;AAC9D,gBAAA,IAAI,KAAK,YAAY,kBAAkB,EAAE;AACvC,oBAAA,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;;AAEzB,gBAAA,OAAO,KAAK;AACd,aAAC,CAAC,CACH,KAAK,EAAE;AAEV,YAAA,OAAO;iBACJ,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,YAAY,kBAAkB;AAC1D,iBAAA,GAAG,CAAC,CAAC,UAAU,KAAI;gBAClB,MAAM,cAAc,GAAwB,EAAE;AAC9C,gBAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;AAC/C,oBAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;AACpB,wBAAA,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK;;;AAG/B,gBAAA,OAAO,cAAc;AACvB,aAAC,CAAC;;AACC,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;;AAE9B,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,KAAI;gBAC7B,MAAM,cAAc,GAAwB,EAAE;AAC9C,gBAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;AAC/C,oBAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;AACpB,wBAAA,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK;;;AAG/B,gBAAA,OAAO,cAAc;AACvB,aAAC,CAAC;;aACG;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,IAAI,CAAC;AAChE,YAAA,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+Bb,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;;IAErC,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;;IAE7B,UAAU,GAAA;QAChB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACvC,aAAA,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9B,aAAA,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAE9B,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,GAAG;QAExC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;QACvC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE;;AAGhC,IAAA,MAAM,MAAM,CAAC,MAA2B,EAAE,MAAc,IAAI,EAAA;AAC1D,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrC,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACxB,YAAA,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAC9B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC7C,gBAAA,IAAI,YAAY,KAAK,MAAM,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;;;IAI7E,aAAa,CAAC,QAAgB,EAAE,KAAU,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;;8GAlXzB,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAlB,kBAAkB,EAAA,UAAA,EAFjB,MAAM;;;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;oBACV,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCEY,qBAAqB,CAAA;AAOhC,IAAA,WAAA,CACS,SAA2B,EAC1B,aAA4B,EAC5B,mBAAwC,EAAA;QAFzC,IAAS,CAAA,SAAA,GAAT,SAAS;QACR,IAAa,CAAA,aAAA,GAAb,aAAa;QACb,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;AATtB,QAAA,IAAA,CAAA,KAAK,GAAyB;AACnC,YAAA,OAAO,EAAE,2BAA2B;YACpC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;YACtC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE;AAC3C,YAAA,SAAS,EAAE,IAAI;SAChB;;IAMD,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,OAAO,CACjB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,+CAA+C,CAAC,EACvE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,EACvC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,EACrC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CACrC;;AAGH,IAAA,OAAO,CAAC,OAAgB,EAAE,KAAc,EAAE,iBAA0B,EAAE,gBAAyB,EAAA;AAC7F,QAAA,MAAM,MAAM,GAAc,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAChD,KAAK,EAAE,KAAK,IAAI,SAAS;YACzB,OAAO,EAAE,OAAO,IAAI,eAAe;AACnC,YAAA,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,gBAAgB,IAAI,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AACjD,gBAAA,EAAE,IAAI,EAAE,iBAAiB,IAAI,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI;AACxE,aAAA;AACD,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,QAAQ,EAAE,GAAG;AACd,SAAA,CAAC;;AAGF,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;YACjC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACjC,gBAAA,IAAI,MAAM,YAAY,iBAAiB,EAAE;;AAEvC,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;;qBACf;oBACL,MAAM,YAAY,GAAG,MAA2C;AAChE,oBAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;;AAEpC,gBAAA,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACtB,aAAC,CAAC;AACJ,SAAC,CAAC;;AAEJ,IAAA,eAAe,CAAC,OAAgB,EAAA;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,IAAI,2BAA2B;AAC3D,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QAClD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;8GAnDhC,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACHM,IAAM,IAAI,GAAV,MAAM,IAAK,SAAQ,SAAS,CAAA;;AAGtB,UAAA,CAAA;AADR,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;;AACf,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,KAAA,CAAA,CAAA;AAGrB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA;AAGhB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA;AAGd,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA;AAGd,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA;AAGf,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA;AAGlB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA;AAGhB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;;AACvB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA;AAGnB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA;AAGrB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA;AAGf,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA;AAGxB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA;AApCN,IAAI,GAAA,UAAA,CAAA;AAJhB,IAAA,eAAe,CAAC;AACb,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,gBAAgB,EAAE;KACrB;AACY,CAAA,EAAA,IAAI,CAqChB;;AC1CD;AAGA;AAMO,IAAM,KAAK,GAAX,MAAM,KAAM,SAAQ,SAAS,CAAA;;AAGvB,UAAA,CAAA;AADR,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;;AACf,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,IAAA,EAAA,KAAA,CAAA,CAAA;AAGrB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;;AACxB,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA;AAGd,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;;AACxB,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA;AAGlB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;;AACxB,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA;AAGlB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;;AACxB,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA;AAGf,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;;AACvB,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA;AAGjB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;;AACxB,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA;AAGtB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;;AACxB,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA;AAGlB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;;AACxB,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA;AAGf,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;;AACxB,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA;AAGtB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;;AACxB,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA;AAjCL,KAAK,GAAA,UAAA,CAAA;AAJjB,IAAA,eAAe,CAAC;AACb,QAAA,IAAI,EAAE,OAAO;AACb,QAAA,gBAAgB,EAAE;KACrB;AACY,CAAA,EAAA,KAAK,CAmCjB;;AC3CD;AAKO,IAAM,IAAI,GAAV,MAAM,IAAK,SAAQ,SAAS,CAAA;AAc/B,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ;;;AAZtC,UAAA,CAAA;AADR,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;;AACf,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,KAAA,CAAA,CAAA;AAGrB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA;AAGnB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA;AAGlB,UAAA,CAAA;AADC,IAAA,SAAS,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;;AACxB,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA;AAZN,IAAI,GAAA,UAAA,CAAA;AAHhB,IAAA,eAAe,CAAC;AACb,QAAA,IAAI,EAAE;KACT;AACY,CAAA,EAAA,IAAI,CAiBhB;;ACbK,MAAO,WAAY,SAAQ,WAAiB,CAAA;AAEhD,IAAA,WAAA,CAAY,SAAwB,EAAA;QAClC,KAAK,CAAC,SAAS,CAAC;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;;IAEzB,SAAS,GAAA;QACP,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;AAC9C,QAAA,OAAO,QAAQ;;AAEjB,IAAA,eAAe,CAAC,IAAY,EAAA;AAE1B,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtE,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,KAAK;;IAEd,QAAQ,GAAA;QACN,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;AAC7C,QAAA,OAAO,QAAQ;;8GApBN,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA;;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCoBY,aAAa,CAAA;AAUxB,IAAA,WAAA,CACU,WAAwB,EACxB,MAAc,EACf,SAA2B,EAC1B,KAAyB,EAAA;QAHzB,IAAW,CAAA,WAAA,GAAX,WAAW;QACX,IAAM,CAAA,MAAA,GAAN,MAAM;QACP,IAAS,CAAA,SAAA,GAAT,SAAS;QACR,IAAK,CAAA,KAAA,GAAL,KAAK;QAbR,IAAQ,CAAA,QAAA,GAAG,OAAO;QAClB,IAAO,CAAA,OAAA,GAAY,QAAQ;AAC3B,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAC,CAAC;QAE5B,IAAQ,CAAA,QAAA,GAAY,KAAK;QAClB,IAAK,CAAA,KAAA,GAAsC,EAAE;QAC7C,IAAK,CAAA,KAAA,GAAG,QAAQ;;QAEvB,IAAQ,CAAA,QAAA,GAAW,MAAM;AAclB,QAAA,IAAA,CAAA,cAAc,GAAyB,CAAC,IAAI,KAAa;AAC9D,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;AACnD,SAAC;QATC,IAAI,CAAC,OAAO,EAAE;;AAGhB,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;;IAMtD,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,SAAS,CACnC;YACE,IAAI,EAAE,KAAK,IAAG;AACZ,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;aAC5D;AACD,YAAA,KAAK,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,GAAG,CAAC;YAClE,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,8CAA8C;AAC3E,SAAA,CACF;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAG;AACpD,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAC/B,YAAA,OAAO,IAAI;SACZ,CAAC,CAAC;;;AAIE,IAAA,QAAQ,CAAC,EAAqB,EAAA;QACnC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI;AAC5B,QAAA,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;QAE1B,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAChD,CAAC,EAAE,KAAK,EAAE,KAAK,OAAO,CACvB;;aACI;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;;AAEpC,QAAA,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;;;IAKhC,sBAAsB,CAAC,IAAY,EAAE,QAAiB,EAAA;QAC5D,IAAI,WAAW,GAAsC,EAAE;AAEvD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAG;AAClB,YAAA,MAAM,UAAU,GAAG;gBACjB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;;gBAEjD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC9B,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;aAC/D;AAED,YAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;;AAG5B,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;gBACtE,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;;AAEjD,SAAC,CAAC;AAEF,QAAA,OAAO,WAAW;;8GApFT,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EC7B1B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,yjBAYyB,EDOrB,MAAA,EAAA,CAAA,+YAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,YAAA,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,EAAA,eAAe,EAEf,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,8BACb,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAIH,aAAa,EAAA,UAAA,EAAA,CAAA;kBAfzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAGb,OAAA,EAAA;wBACP,YAAY;wBACZ,YAAY;wBACZ,eAAe;wBACf,YAAY;wBACZ,aAAa;wBACb,aAAa;wBACb,YAAY;wBACZ;AACD,qBAAA,EAAA,QAAA,EAAA,yjBAAA,EAAA,MAAA,EAAA,CAAA,+YAAA,CAAA,EAAA;;;MExBU,kBAAkB,CAAA;AAC3B,IAAA,WAAA,CAAoB,SAA2B,EAAA;QAA3B,IAAS,CAAA,SAAA,GAAT,SAAS;;AAC7B,IAAA,WAAW,CAAC,KAAwB,EAAA;AAChC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE;QAC/B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE;YAC7C;;AAGJ,QAAA,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI;QAC3B,KAAK,CAAC,WAAW,GAAG;AAChB,YAAA,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;YAC5B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;SACpD;AACD,QAAA,IAAI,KAAK,CAAC,WAAW,EAAE;YACnB,KAAK,CAAC,WAAW,GAAG;AAChB,gBAAA,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;gBAC5B,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW;aAC/D;;AAEL,QAAA,IAAI,KAAK,CAAC,WAAW,EAAE;YACnB,KAAK,CAAC,WAAW,GAAG;AAChB,gBAAA,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;gBAC5B,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW;aAC/D;;;AAGZ;AAEK,SAAU,0BAA0B,CAAC,SAA2B,EAAA;IAClE,OAAO;AACH,QAAA,kBAAkB,EAAE;AAChB,YAAA;AACI,gBAAA,IAAI,EAAE,UAAU;gBAChB,OAAO,CAAC,KAAU,EAAE,KAAwB,EAAA;;AAExC,oBAAA,OAAO,SAAS,CAAC,MAAM,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;iBAClF;AACJ,aAAA;AACJ,SAAA;AACD,QAAA,UAAU,EAAE;AACR,YAAA;AACI,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,SAAS,EAAE,IAAI,kBAAkB,CAAC,SAAS,CAAC;AAC/C;AACJ,SAAA;KACJ;AACL;;MClCa,2BAA2B,CAAA;8GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAPpC,YAAY,CAAA,EAAA,CAAA,CAAA;AAOH,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAJ3B,SAAA,EAAA;AACT,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,0BAA0B,EAAE,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE;AAC1G,SAAA,EAAA,OAAA,EAAA,CALC,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAOH,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBATvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;AAEb,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,0BAA0B,EAAE,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE;AAC1G,qBAAA;AACF,iBAAA;;;MCYY,kBAAkB,CAAA;IAiB7B,WACY,CAAA,MAAc,EACd,KAAqB,EACrB,SAA2B,EAC3B,KAAyB,EACzB,gBAAkC,EAClC,aAAoC,EAAA;QALpC,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAa,CAAA,aAAA,GAAb,aAAa;AAdzB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;QAC5B,IAAK,CAAA,KAAA,GAAQ,EAAE;QACf,IAAO,CAAA,OAAA,GAAsB,EAAE;QAC/B,IAAM,CAAA,MAAA,GAAwB,EAAE;QAIzB,IAAQ,CAAA,QAAA,GAAY,QAAQ;;AAYnC,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC;AAEtE,QAAA,MAAM,kBAAkB,GAAa,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,IAC5E,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CACzC;AACD,QAAA,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;YAC/E,kBAAkB,CAAC,GAAG,EAAE;;QAG1B,IAAI,CAAC,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE;AACxG,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACjD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,IAAI;QAC1B,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,QAAQ,EAAE;;AAGjB,IAAA,oBAAoB,CAAI,SAAc,EAAE,QAAgC,EAAE,GAAW,EAAE,YAAe,EAAA;AACpG,QAAA,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;YAChC,IAAI,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACzC,IAAI,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,KAAK,SAAS,EAAE;AAC/D,gBAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;;AAEzC,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,gBAAgB,KAAK,SAAS,GAAG,gBAAgB,GAAG,YAAY;;;AAIrF,IAAA,QAAQ,CAAC,KAAK,EAAA;;;IAGd,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;gBAClD,IAAI,EAAE,KAAK,IAAG;oBACZ,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;wBAC7C,IAAI,EAAE,UAAU,IAAG;AACjB,4BAAA,IAAI,CAAC,UAAU,GAAG,UAAU;4BAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;4BAC7C,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,OAAO,IAAG;gCAC9C,IAAI,OAAO,EAAE;AACX,oCAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC;AACzC,oCAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;;;AAG5D,6BAAC,CAAC;;AAEL,qBAAA,CAAC;iBACH;AACD,gBAAA,KAAK,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;AACnD,aAAA,CAAC;;;IAGN,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;;gBAEnB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;oBAC3D,IAAI,EAAE,KAAK,IAAG;wBACZ,IAAI,KAAK,EAAE;AACT,4BAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC;AACjE,4BAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;;qBAErC;AACD,oBAAA,KAAK,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;AACnD,iBAAA,CAAC;;;AAEF,gBAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,CAAC,SAAS,CAAC;oBACvF,IAAI,EAAE,UAAU,IAAG;wBACjB,IAAI,UAAU,EAAE;AACd,4BAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;;qBAE7B;AACD,oBAAA,KAAK,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;AACnD,iBAAA,CAAC;;;AAGA,IAAA,SAAS,CAAC,UAAe,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;;AAExD,QAAA,IAAI,SAAS,GAAwB,UAAU,CAAC,QAAQ,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;AAkB/C,IAAA,eAAe,CAAC,MAA2B,EAAA;AACzC,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;;AAEhD,IAAA,cAAc,CAAC,KAAwB,EAAA;;QAE7C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;AAC9F,YAAA,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;;;AAI/D,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE;YACpB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;;;AAI3D,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE;AAC1C,gBAAA,MAAM,oBAAoB,GAAG,KAAK,CAAC,UAAU;AAC7C,gBAAA,KAAK,CAAC,UAAU,GAAG,CAAC,WAA8B,KAAI;oBACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAC/E,oBAAA,OAAO,gBAAgB;AACzB,iBAAC;;iBACI;gBACL,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC;;;AAI5D,QAAA,OAAO,KAAK;;AAEP,IAAA,MAAM,MAAM,GAAA;QACjB,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;;IAErC,MAAM,SAAS,CAAC,EAAa,EAAA;AAC3B,QAAA,IAAI,EAAE,CAAC,KAAK,EAAE;AACZ,YAAA,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAA4B,EAAE,IAAI,CAAC,QAAQ,CAAC;AACjE,YAAA,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;;;aAE/B;AACL,YAAA,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;;;AAGlC,IAAA,qBAAqB,CAAC,EAAa,EAAA;AACjC,QAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,IAAG;;YAEvC,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,OAAO,YAAY,WAAW,EAAE;gBAClC,OAAO,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AACpC,iBAAA,IAAI,OAAO,YAAY,SAAS,EAAE;AACvC,gBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;;AAEvC,SAAC,CAAC;;AAEG,IAAA,aAAa,CAAC,GAAW,EAAA;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC;;8GArLlC,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAK,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1B/B,8eAUA,EAAA,MAAA,EAAA,CAAA,uDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDQI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,2BAA2B,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,WAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAIlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAb9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGjB,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,iBAAiB;wBACjB,eAAe;wBACf,2BAA2B;wBAC3B;AACD,qBAAA,EAAA,QAAA,EAAA,8eAAA,EAAA,MAAA,EAAA,CAAA,uDAAA,CAAA,EAAA;;;AECG,MAAO,eAAgB,SAAQ,oBAAoB,CAAA;AAIrD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;QAJJ,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;;8GADX,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,oFAdb,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC,EAAE,CAAC,EAQpF,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,UAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAEQ,eAAe,EAAA,UAAA,EAAA,CAAA;kBAf3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAqB,eAAA,CAAC,EAAE,CAAC;AAC9F,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBAEL,WAAW;AAEZ,qBAAA;AACH,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,IAAA;AACJ,iBAAA;wDAGkE,eAAe,EAAA,CAAA;sBAA7E,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC9B,IAAI,EAAA,CAAA;sBAAnB;;;MCUQ,0BAA0B,CAAA;AAyDrC,IAAA,WAAA,CACY,MAAc,EACd,KAAqB,EACrB,SAA2B,EAC3B,QAAkB,EAClB,gBAAkC,EAClC,KAAyB,EACzB,aAAoC,EAAA;QANpC,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAa,CAAA,aAAA,GAAb,aAAa;QAhDhB,IAAW,CAAA,WAAA,GAAY,KAAK;QAC5B,IAAc,CAAA,cAAA,GAAY,KAAK;QAExC,IAAI,CAAA,IAAA,GAAU,EAAE;QAChB,IAAS,CAAA,SAAA,GAAW,CAAC;QACrB,IAAQ,CAAA,QAAA,GAAW,EAAE;QAIrB,IAAgB,CAAA,gBAAA,GAAG,IAAI;QACvB,IAAkB,CAAA,kBAAA,GAAG,KAAK;;;AAMhB,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAO;AAC3D,QAAA,IAAA,CAAA,KAAK,GAAuD,IAAI,YAAY,EAAwC;AACpH,QAAA,IAAA,CAAA,SAAS,GAAsB,IAAI,YAAY,EAAO;QAEhE,IAAO,CAAA,OAAA,GAAG,EAAE;QACZ,IAAW,CAAA,WAAA,GAAG,EAAE;QAChB,IAAU,CAAA,UAAA,GAAG,EAAE;QACf,IAAgB,CAAA,gBAAA,GAAG,EAAE;AACrB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAA4B;;;QAK1C,IAAY,CAAA,YAAA,GAAG,EAAE;QACjB,IAAS,CAAA,SAAA,GAAG,EAAE;QAMhB,IAAO,CAAA,OAAA,GAAY,UAAU;QAC7B,IAAS,CAAA,SAAA,GAAY,SAAS;QAC9B,IAAM,CAAA,MAAA,GAAY,QAAQ;;AAYjC,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AACnE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC;AAEtE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC;AACzE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC;AAC1E,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC;AAC3E,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC;AACzE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,sBAAsB,EAAE,EAAE,CAAC;AAChF,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,oBAAoB,EAAE,MAAM,CAAC;AAClF,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC;AAC3E,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC;AACxE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,CAAC;AAC/E,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;AACpE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC;AACvE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;AACrE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC;AAC1E,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC;AAC7E,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC;AAExE,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC;AAEtE,QAAA,MAAM,kBAAkB,GAAiB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjH,IAAI,CAAC,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3E,QAAA,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;QACpF,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;QACnG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACrC,YAAA,IAAI,KAAK,YAAY,eAAe,EAAE;;AAEpC,gBAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC;;;AAGtB,SAAC,CAAC;QACF,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,QAAQ,EAAE;;AAEjB,IAAA,oBAAoB,CAAI,SAAc,EAAE,QAAgC,EAAE,GAAW,EAAE,YAAe,EAAA;AACpG,QAAA,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;YAChC,IAAI,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACzC,IAAI,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,KAAK,SAAS,EAAE;AAC/D,gBAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;;AAEzC,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,gBAAgB,KAAK,SAAS,GAAG,gBAAgB,GAAG,YAAY;;;AAGrF,IAAA,MAAM,QAAQ,GAAA;QACZ,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;AAClD,YAAA,IAAI,EAAE,CAAC,SAAS,KAAI;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,gBAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC;AACpC,oBAAA,IAAI,EAAE,CAAC,OAAO,KAAI;AAChB,wBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,OAAO,CAAC;AAC9C,wBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;;AAE9B,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC;AACnC,oBAAA,IAAI,EAAE,CAAC,OAAO,KAAI;AAChB,wBAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,OAAO,CAAC;AAC7C,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;;AAE/B,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;AACxE,oBAAA,IAAI,EAAE,CAAC,KAAK,KAAI;AACd,wBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;qBACxB;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO;AACpD,iBAAA,CAAC;aACH;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO;AACpD,SAAA,CAAC;;AAEJ,IAAA,aAAa,CAAC,OAAY,EAAA;QACxB,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,GAAG,GAAG,OAAO,EAAE,GAAa;AAClC,YAAA,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK;AAC5B,YAAA,IAAI,GAAG,IAAI,KAAK,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC;AAC1E,gBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK;;qBACzB;;oBAEL,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;AAC7C,wBAAA,IAAI,EAAE,CAAC,KAAK,KAAI;AACd,4BAAA,IAAI,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE;AAC/B,4BAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;;AAE3B,qBAAA,CAAC;;;;;AAKV,IAAA,cAAc,CAAC,OAAY,EAAA;QACzB,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,GAAG,GAAG,OAAO,EAAE,GAAa;YAClC,IAAI,GAAG,EAAE;AACP,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC;AAC1E,gBAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;oBACd,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;;;;;IAMxC,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;;gBAEnB,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;AAC3D,oBAAA,IAAI,EAAE,CAAC,KAAK,KAAI;wBACd,IAAI,KAAK,EAAE;AACT,4BAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;AAC9D,4BAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;;qBAEtC;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO;AACpD,iBAAA,CAAC;;;;AAIF,gBAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,CAAC,SAAS,CAAC;AACnF,oBAAA,IAAI,EAAE,CAAC,KAAK,KAAI;AACd,wBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;qBACtB;AACD,oBAAA,KAAK,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO;AACpD,iBAAA,CAAC;;;AAIA,IAAA,SAAS,CAAC,MAAW,EAAA;QAC3B,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM;AACzB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACzD,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,oBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;AACrD,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,oBAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY,EAAE;AAC5D,wBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;AAExB,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,wBAAA,IAAI,CAAC,IAAI,GAAG,UAAU;;;AAG1B,gBAAA,OAAO,IAAI;AACb,aAAC,CAAC;;YAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;AAClH,YAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,gBAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBAChC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;AACxD,wBAAA,IAAI,EAAE,CAAC,KAAK,KAAI;4BACd,IAAI,KAAK,EAAE;AACT,gCAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC;gCACrC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;;yBAEpF;AACD,wBAAA,KAAK,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO;AACpD,qBAAA,CAAC;AACJ,iBAAC,CAAC;;AAEJ,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;YAEjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AACjD,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;YAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAC9B,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAC3C;;;IAGL,UAAU,CAAI,KAAU,EAAE,WAAoB,EAAA;AAC5C,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAa;AAChC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;;AAEpB,QAAA,OAAO,GAAG;;IAEL,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAG,EAAA,IAAI,CAAC,QAAQ,CAAM,IAAA,CAAA,CAAC,CAAC;;AAEzC,IAAA,WAAW,CAAC,IAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;AAInB,IAAA,IAAI,CAAC,QAAa,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAG,EAAA,IAAI,CAAC,QAAQ,SAAS,QAAQ,CAAC,KAAK,CAAE,CAAA,CAAC,CAAC;;AAE5D,IAAA,aAAa,CAAC,IAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC;AAC3C,YAAA,IAAI,EAAE,CAAC,MAAM,KAAI;gBACf,IAAI,MAAM,EAAE;AACV,oBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAChE,wBAAA,IAAI,EAAE,CAAC,MAAM,KAAI;4BACf,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAE3C,qBAAA,CAAC;;;AAGP,SAAA,CAAC;;;IAGG,YAAY,CAAC,IAAS,EAAE,MAAW,EAAA;QACxC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;YAC7C,OAAO,IAAI,CAAC;;AAEd,QAAA,IAAI,MAAM,CAAC,IAAI,IAAI,WAAW,EAAE;AAC9B,YAAA,MAAM,KAAK,GACT,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACnI,YAAA,OAAO,KAAK;;aACP;AACL,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;;;8GAzRzB,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAF1B,EAAE,EA8BF,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,UAAU,gDClEvB,otFAkDgC,EAAA,MAAA,EAAA,CAAA,iGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1B5B,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;;AAGZ,gBAAA,eAAe,ouGAMf,eAAe,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIN,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBApBtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAGpB,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA;wBACP,YAAY;wBACZ,YAAY;;;wBAGZ,eAAe;wBACf,UAAU;wBACV,aAAa;wBACb,WAAW;wBACX,aAAa;wBACb,YAAY;wBACZ;AACD,qBAAA,EAAA,SAAA,EACU,EAAE,EAAA,QAAA,EAAA,otFAAA,EAAA,MAAA,EAAA,CAAA,iGAAA,CAAA,EAAA;gQAMJ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAWyC,MAAM,EAAA,CAAA;sBAA/C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAI9B,cAAc,EAAA,CAAA;sBAAvB;gBACS,KAAK,EAAA,CAAA;sBAAd;gBACS,SAAS,EAAA,CAAA;sBAAlB;;;AExEH;MAGa,UAAU,GAAG,IAAI,cAAc,CAAS,WAAW;;ACHhE;;AAEG;;ACFH;;AAEG;;;;"}
@@ -10,12 +10,12 @@ import { ReactiveDictionary } from '../../reactive-dictionary';
10
10
  import { MaterialDialogService } from '../../services/material-dialog.service';
11
11
  import * as i0 from "@angular/core";
12
12
  export declare class RdictCrudComponent implements OnInit {
13
- router: Router;
14
- route: ActivatedRoute;
15
- translate: TranslateService;
16
- private rdict;
17
- private localFileService;
18
- private dialogService;
13
+ protected router: Router;
14
+ protected route: ActivatedRoute;
15
+ protected translate: TranslateService;
16
+ protected rdict: ReactiveDictionary;
17
+ protected localFileService: LocalFileService;
18
+ protected dialogService: MaterialDialogService;
19
19
  title: string;
20
20
  basePath: string;
21
21
  dictPath: string;
@@ -8,13 +8,13 @@ import { ReactiveDictionary } from '../../reactive-dictionary';
8
8
  import { MaterialDialogService } from '../../services/material-dialog.service';
9
9
  import * as i0 from "@angular/core";
10
10
  export declare class GenericRdictTableComponent implements OnInit {
11
- router: Router;
12
- route: ActivatedRoute;
13
- translate: TranslateService;
14
- private injector;
15
- private localFileService;
16
- private rdict;
17
- private dialogService;
11
+ protected router: Router;
12
+ protected route: ActivatedRoute;
13
+ protected translate: TranslateService;
14
+ protected injector: Injector;
15
+ protected localFileService: LocalFileService;
16
+ protected rdict: ReactiveDictionary;
17
+ protected dialogService: MaterialDialogService;
18
18
  dataSource: unknown[];
19
19
  title: string;
20
20
  model: string;
@@ -1,2 +1,3 @@
1
+ export { MaterialDialogService } from './material-dialog.service';
1
2
  export { SocketService } from './socket.service';
2
3
  export { UserService } from './user.service';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rosoftlab/rdict",
3
- "version": "1.0.2-alpha-14",
3
+ "version": "1.0.2-alpha-16",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.8",
6
6
  "@angular/core": "^19.2.8",
@@ -37,7 +37,7 @@
37
37
  "socket.io-client": "^4.8.1",
38
38
  "socket.io-msgpack-parser": "^3.0.2",
39
39
  "socket.io-parser": "^3.3.4",
40
- "@rosoftlab/core": "1.0.2-alpha-14"
40
+ "@rosoftlab/core": "1.0.2-alpha-16"
41
41
  },
42
42
  "sideEffects": false,
43
43
  "author": "rosoftlab",