@meshmakers/shared-ui 3.2.127-0 → 3.2.129-0

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.
@@ -45,10 +45,10 @@ class MmMessageDetailsComponent {
45
45
  this.errorMessage = data.errorMessage;
46
46
  }
47
47
  ngOnInit() { }
48
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmMessageDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
49
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: MmMessageDetailsComponent, isStandalone: false, selector: "mm-message-details", ngImport: i0, template: "<mat-dialog-content>\n\n <h2>{{errorMessage.title}}</h2>\n <p>{{errorMessage.message}}</p>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button class=\"primary-button\" mat-dialog-close mat-flat-button>OK</button>\n</mat-dialog-actions>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
48
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmMessageDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
49
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: MmMessageDetailsComponent, isStandalone: false, selector: "mm-message-details", ngImport: i0, template: "<mat-dialog-content>\n\n <h2>{{errorMessage.title}}</h2>\n <p>{{errorMessage.message}}</p>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button class=\"primary-button\" mat-dialog-close mat-flat-button>OK</button>\n</mat-dialog-actions>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
50
50
  }
51
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmMessageDetailsComponent, decorators: [{
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmMessageDetailsComponent, decorators: [{
52
52
  type: Component,
53
53
  args: [{ selector: 'mm-message-details', standalone: false, template: "<mat-dialog-content>\n\n <h2>{{errorMessage.title}}</h2>\n <p>{{errorMessage.message}}</p>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button class=\"primary-button\" mat-dialog-close mat-flat-button>OK</button>\n</mat-dialog-actions>\n" }]
54
54
  }], ctorParameters: () => [] });
@@ -64,10 +64,10 @@ class NotificationSnackBar {
64
64
  }
65
65
  });
66
66
  }
67
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NotificationSnackBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
68
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: NotificationSnackBar, isStandalone: true, selector: "mm-notification-snack-bar", ngImport: i0, template: " <a (click)=\"onShowDetails()\" class=\"notification-text\">\n <span>\n {{ errorMessage?.title }}\n </span>\n </a>\n <span matSnackBarActions>\n <button matButton matSnackBarAction (click)=\"onShowDetails()\"><mat-icon class=\"material-symbols-outlined\">bug_report</mat-icon>Details</button>\n <button matButton matSnackBarAction (click)=\"snackBarRef.dismissWithAction()\"><mat-icon class=\"material-symbols-outlined\">close</mat-icon>Close</button>\n </span>\n", styles: [":host{display:flex;flex-direction:row;width:100%;max-width:600px;margin:auto}::ng-deep .mat-mdc-snack-bar-container{background-color:red!important}::ng-deep .mdc-snackbar__surface{background-color:red!important}::ng-deep .mat-mdc-snack-bar-action{color:#fff!important}.notification-text{flex:1 1 auto;display:flex;align-items:center;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: MatSnackBarActions, selector: "[matSnackBarActions]" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatSnackBarAction, selector: "[matSnackBarAction]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
67
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NotificationSnackBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
68
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: NotificationSnackBar, isStandalone: true, selector: "mm-notification-snack-bar", ngImport: i0, template: " <a (click)=\"onShowDetails()\" class=\"notification-text\">\n <span>\n {{ errorMessage?.title }}\n </span>\n </a>\n <span matSnackBarActions>\n <button matButton matSnackBarAction (click)=\"onShowDetails()\"><mat-icon class=\"material-symbols-outlined\">bug_report</mat-icon>Details</button>\n <button matButton matSnackBarAction (click)=\"snackBarRef.dismissWithAction()\"><mat-icon class=\"material-symbols-outlined\">close</mat-icon>Close</button>\n </span>\n", styles: [":host{display:flex;flex-direction:row;width:100%;max-width:600px;margin:auto}::ng-deep .mat-mdc-snack-bar-container{background-color:red!important}::ng-deep .mdc-snackbar__surface{background-color:red!important}::ng-deep .mat-mdc-snack-bar-action{color:#fff!important}.notification-text{flex:1 1 auto;display:flex;align-items:center;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: MatSnackBarActions, selector: "[matSnackBarActions]" }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatSnackBarAction, selector: "[matSnackBarAction]" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
69
69
  }
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: NotificationSnackBar, decorators: [{
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: NotificationSnackBar, decorators: [{
71
71
  type: Component,
72
72
  args: [{ selector: 'mm-notification-snack-bar', imports: [
73
73
  MatSnackBarActions,
@@ -96,10 +96,10 @@ class MmNotificationBarComponent {
96
96
  }
97
97
  });
98
98
  }
99
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmNotificationBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
100
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: MmNotificationBarComponent, isStandalone: false, selector: "mm-notification-bar", ngImport: i0, template: "<div></div>\n", styles: [""] });
99
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmNotificationBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
100
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: MmNotificationBarComponent, isStandalone: false, selector: "mm-notification-bar", ngImport: i0, template: "<div></div>\n", styles: [""] });
101
101
  }
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmNotificationBarComponent, decorators: [{
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmNotificationBarComponent, decorators: [{
103
103
  type: Component,
104
104
  args: [{ selector: 'mm-notification-bar', standalone: false, template: "<div></div>\n" }]
105
105
  }], ctorParameters: () => [] });
@@ -329,8 +329,8 @@ class MmAutocompleteInputComponent {
329
329
  };
330
330
  _onTouched = () => {
331
331
  };
332
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmAutocompleteInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
333
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: MmAutocompleteInputComponent, isStandalone: false, selector: "mm-autocomplete", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
332
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmAutocompleteInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
333
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: MmAutocompleteInputComponent, isStandalone: false, selector: "mm-autocomplete", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
334
334
  {
335
335
  provide: NG_VALUE_ACCESSOR,
336
336
  useExisting: forwardRef(() => MmAutocompleteInputComponent),
@@ -347,7 +347,7 @@ class MmAutocompleteInputComponent {
347
347
  }
348
348
  ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\"\n (closed)=\"onAutoCompleteClosed()\" (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let str of filteredStrings\" [value]=\"str\">\n {{str}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i3$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
349
349
  }
350
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmAutocompleteInputComponent, decorators: [{
350
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmAutocompleteInputComponent, decorators: [{
351
351
  type: Component,
352
352
  args: [{ selector: "mm-autocomplete", standalone: false, host: {
353
353
  "[id]": "id",
@@ -619,8 +619,8 @@ class MmEntitySelectInputComponent {
619
619
  this.stateChanges.next();
620
620
  }
621
621
  }
622
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmEntitySelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
623
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: MmEntitySelectInputComponent, isStandalone: false, selector: "mm-entity-select", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
622
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmEntitySelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
623
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: MmEntitySelectInputComponent, isStandalone: false, selector: "mm-entity-select", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
624
624
  {
625
625
  provide: NG_VALUE_ACCESSOR,
626
626
  useExisting: forwardRef(() => MmEntitySelectInputComponent),
@@ -637,7 +637,7 @@ class MmEntitySelectInputComponent {
637
637
  }
638
638
  ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i3$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
639
639
  }
640
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmEntitySelectInputComponent, decorators: [{
640
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmEntitySelectInputComponent, decorators: [{
641
641
  type: Component,
642
642
  args: [{ selector: "mm-entity-select", standalone: false, host: {
643
643
  "[id]": "id",
@@ -917,8 +917,8 @@ class MmMultipleEntitySelectInputComponent {
917
917
  this.stateChanges.next();
918
918
  }
919
919
  }
920
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmMultipleEntitySelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
921
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: MmMultipleEntitySelectInputComponent, isStandalone: false, selector: "mm-multiple-entity-select", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
920
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmMultipleEntitySelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
921
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: MmMultipleEntitySelectInputComponent, isStandalone: false, selector: "mm-multiple-entity-select", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
922
922
  {
923
923
  provide: NG_VALUE_ACCESSOR,
924
924
  useExisting: forwardRef(() => MmMultipleEntitySelectInputComponent),
@@ -935,7 +935,7 @@ class MmMultipleEntitySelectInputComponent {
935
935
  }
936
936
  ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<mat-chip-grid #list>\n <mat-chip-row *ngFor=\"let entity of valuesFormControl.value\"\n (removed)=\"remove(entity)\"\n [editable]=\"false\"\n [aria-description]=\"'press enter to edit ' + dataSource?.onDisplayEntity(entity) ?? null\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n <button matChipRemove [attr.aria-label]=\"'remove ' + dataSource?.onDisplayEntity(entity) ?? null\">\n <mat-icon class=\"material-symbols-outlined\">cancel</mat-icon>\n </button>\n </mat-chip-row>\n <input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"list\"\n matChipInputAddOnBlur=\"true\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [placeholder]=\"placeholder\" matInput>\n <mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n</mat-chip-grid>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i3$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i5$1.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i5$1.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i5$1.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i5$1.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
937
937
  }
938
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmMultipleEntitySelectInputComponent, decorators: [{
938
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmMultipleEntitySelectInputComponent, decorators: [{
939
939
  type: Component,
940
940
  args: [{ selector: 'mm-multiple-entity-select', standalone: false, host: {
941
941
  '[id]': 'id',
@@ -1075,10 +1075,10 @@ class MmBreadcrumbComponent {
1075
1075
  this.breadcrumbData = [];
1076
1076
  }
1077
1077
  }
1078
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1079
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: MmBreadcrumbComponent, isStandalone: false, selector: "mm-breadcrumb", inputs: { fontSize: "fontSize", fontColor: "fontColor", lastLinkColor: "lastLinkColor", symbol: "symbol" }, ngImport: i0, template: "<mat-list class=\"mat-bread-crumb-list\" *ngIf=\"breadcrumbData.length\">\n <mat-list-item>\n <span class=\"mat-bread-crumb-spacer\">\n <span *ngFor=\"let item of breadcrumbData; let i = index\">\n <a *ngIf=\"item?.url\" [routerLink]=\"item?.url\"\n class=\"mat-bread-crumb-list-item\">{{ item.label }}</a>\n <span *ngIf=\"!item?.url\" class=\"mat-bread-crumb-list-item\">{{ item.label }}</span>\n <span *ngIf=\"breadcrumbData.length !== i+1\" class=\"mat-bread-crumb-list-item\">{{symbol}}</span>\n </span>\n </span>\n </mat-list-item>\n</mat-list>\n", styles: [".mat-bread-crumb{height:30px}.mat-bread-crumb-list{padding-bottom:10px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$2.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i2$2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i3$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
1078
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1079
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: MmBreadcrumbComponent, isStandalone: false, selector: "mm-breadcrumb", inputs: { fontSize: "fontSize", fontColor: "fontColor", lastLinkColor: "lastLinkColor", symbol: "symbol" }, ngImport: i0, template: "<mat-list class=\"mat-bread-crumb-list\" *ngIf=\"breadcrumbData.length\">\n <mat-list-item>\n <span class=\"mat-bread-crumb-spacer\">\n <span *ngFor=\"let item of breadcrumbData; let i = index\">\n <a *ngIf=\"item?.url\" [routerLink]=\"item?.url\"\n class=\"mat-bread-crumb-list-item\">{{ item.label }}</a>\n <span *ngIf=\"!item?.url\" class=\"mat-bread-crumb-list-item\">{{ item.label }}</span>\n <span *ngIf=\"breadcrumbData.length !== i+1\" class=\"mat-bread-crumb-list-item\">{{symbol}}</span>\n </span>\n </span>\n </mat-list-item>\n</mat-list>\n", styles: [".mat-bread-crumb{height:30px}.mat-bread-crumb-list{padding-bottom:10px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$2.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i2$2.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i3$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
1080
1080
  }
1081
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmBreadcrumbComponent, decorators: [{
1081
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmBreadcrumbComponent, decorators: [{
1082
1082
  type: Component,
1083
1083
  args: [{ selector: 'mm-breadcrumb', standalone: false, template: "<mat-list class=\"mat-bread-crumb-list\" *ngIf=\"breadcrumbData.length\">\n <mat-list-item>\n <span class=\"mat-bread-crumb-spacer\">\n <span *ngFor=\"let item of breadcrumbData; let i = index\">\n <a *ngIf=\"item?.url\" [routerLink]=\"item?.url\"\n class=\"mat-bread-crumb-list-item\">{{ item.label }}</a>\n <span *ngIf=\"!item?.url\" class=\"mat-bread-crumb-list-item\">{{ item.label }}</span>\n <span *ngIf=\"breadcrumbData.length !== i+1\" class=\"mat-bread-crumb-list-item\">{{symbol}}</span>\n </span>\n </span>\n </mat-list-item>\n</mat-list>\n", styles: [".mat-bread-crumb{height:30px}.mat-bread-crumb-list{padding-bottom:10px}\n"] }]
1084
1084
  }], ctorParameters: () => [], propDecorators: { fontSize: [{
@@ -1122,31 +1122,32 @@ class MmConfirmationWindowComponent {
1122
1122
  this.button3Text = null;
1123
1123
  this.button3Result = null;
1124
1124
  if (data.dialogType === DialogType.OkCancel) {
1125
- this.button1Text = 'OK';
1125
+ this.button1Text = data.okButtonText ?? 'OK';
1126
1126
  this.button1Result = ButtonTypes.Ok;
1127
- this.button2Text = 'Cancel';
1127
+ this.button2Text = data.cancelButtonText ?? 'Cancel';
1128
1128
  this.button2Result = ButtonTypes.Cancel;
1129
1129
  }
1130
1130
  else if (data.dialogType === DialogType.YesNoCancel) {
1131
- this.button1Text = 'Yes';
1131
+ this.button1Text = data.yesButtonText ?? 'Yes';
1132
1132
  this.button1Result = ButtonTypes.Yes;
1133
- this.button2Text = 'No';
1133
+ this.button2Text = data.noButtonText ?? 'No';
1134
1134
  this.button2Result = ButtonTypes.No;
1135
- this.button3Text = 'Cancel';
1135
+ this.button3Text = data.cancelButtonText ?? 'Cancel';
1136
1136
  this.button3Result = ButtonTypes.Cancel;
1137
1137
  }
1138
1138
  else if (data.dialogType === DialogType.Ok) {
1139
- this.button1Text = 'OK';
1139
+ this.button1Text = data.okButtonText ?? 'OK';
1140
1140
  this.button1Result = ButtonTypes.Ok;
1141
1141
  }
1142
1142
  else {
1143
- this.button1Text = 'Yes';
1143
+ this.button1Text = data.yesButtonText ?? 'Yes';
1144
1144
  this.button1Result = ButtonTypes.Yes;
1145
- this.button2Text = 'No';
1145
+ this.button2Text = data.noButtonText ?? 'No';
1146
1146
  this.button2Result = ButtonTypes.No;
1147
1147
  }
1148
1148
  }
1149
- ngOnInit() { }
1149
+ ngOnInit() {
1150
+ }
1150
1151
  onButton1() {
1151
1152
  this.dialogRef.close({
1152
1153
  result: this.button1Result
@@ -1162,10 +1163,10 @@ class MmConfirmationWindowComponent {
1162
1163
  result: this.button3Result
1163
1164
  });
1164
1165
  }
1165
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmConfirmationWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1166
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: MmConfirmationWindowComponent, isStandalone: false, selector: "mm-confirmation-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>{{data.message}}</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onButton1()\" class=\"primary-button\" mat-flat-button>{{button1Text}}</button>\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-flat-button>{{button2Text}}</button>\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-flat-button>{{button3Text}}</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
1166
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmConfirmationWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1167
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: MmConfirmationWindowComponent, isStandalone: false, selector: "mm-confirmation-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>{{data.message}}</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onButton1()\" class=\"primary-button\" mat-flat-button>{{button1Text}}</button>\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-flat-button>{{button2Text}}</button>\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-flat-button>{{button3Text}}</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
1167
1168
  }
1168
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmConfirmationWindowComponent, decorators: [{
1169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmConfirmationWindowComponent, decorators: [{
1169
1170
  type: Component,
1170
1171
  args: [{ selector: 'mm-confirmation-window', standalone: false, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>{{data.message}}</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onButton1()\" class=\"primary-button\" mat-flat-button>{{button1Text}}</button>\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-flat-button>{{button2Text}}</button>\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-flat-button>{{button3Text}}</button>\n</div>\n" }]
1171
1172
  }], ctorParameters: () => [] });
@@ -1187,68 +1188,77 @@ class MmProgressWindowComponent {
1187
1188
  onCancelClick() {
1188
1189
  this.data.cancelOperation();
1189
1190
  }
1190
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmProgressWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1191
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: MmProgressWindowComponent, isStandalone: false, selector: "mm-progress-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div>\n <mat-progress-bar *ngIf=\"data.isDeterminate\" [value]=\"progressValue\" mode=\"determinate\"></mat-progress-bar>\n <mat-progress-bar *ngIf=\"!data.isDeterminate\" mode=\"indeterminate\"></mat-progress-bar>\n <p>{{statusText}}</p>\n </div>\n</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onCancelClick()\" *ngIf=\"data.isCancelOperationAvailable\" mat-button>Cancel</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i4$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] });
1191
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmProgressWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1192
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: MmProgressWindowComponent, isStandalone: false, selector: "mm-progress-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div>\n <mat-progress-bar *ngIf=\"data.isDeterminate\" [value]=\"progressValue\" mode=\"determinate\"></mat-progress-bar>\n <mat-progress-bar *ngIf=\"!data.isDeterminate\" mode=\"indeterminate\"></mat-progress-bar>\n <p>{{statusText}}</p>\n </div>\n</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onCancelClick()\" *ngIf=\"data.isCancelOperationAvailable\" mat-button>Cancel</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i4$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] });
1192
1193
  }
1193
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmProgressWindowComponent, decorators: [{
1194
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmProgressWindowComponent, decorators: [{
1194
1195
  type: Component,
1195
1196
  args: [{ selector: 'mm-progress-window', standalone: false, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div>\n <mat-progress-bar *ngIf=\"data.isDeterminate\" [value]=\"progressValue\" mode=\"determinate\"></mat-progress-bar>\n <mat-progress-bar *ngIf=\"!data.isDeterminate\" mode=\"indeterminate\"></mat-progress-bar>\n <p>{{statusText}}</p>\n </div>\n</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onCancelClick()\" *ngIf=\"data.isCancelOperationAvailable\" mat-button>Cancel</button>\n</div>\n" }]
1196
1197
  }], ctorParameters: () => [] });
1197
1198
 
1199
+ // noinspection JSUnusedGlobalSymbols
1198
1200
  class ConfirmationService {
1199
1201
  dialog = inject(MatDialog);
1200
- showYesNoConfirmationDialog(title, message) {
1202
+ showYesNoConfirmationDialog(title, message, yesButtonText, noButtonText) {
1201
1203
  const dialogRef = this.dialog.open(MmConfirmationWindowComponent, {
1202
1204
  width: '50vw',
1203
1205
  maxWidth: '50vw',
1204
1206
  data: {
1205
1207
  title,
1206
1208
  message,
1209
+ yesButtonText,
1210
+ noButtonText,
1207
1211
  dialogType: DialogType.YesNo
1208
1212
  }
1209
1213
  });
1210
1214
  return dialogRef.afterClosed().pipe(map((value) => value?.result === ButtonTypes.Yes));
1211
1215
  }
1212
- showYesNoCancelConfirmationDialog(title, message) {
1216
+ showYesNoCancelConfirmationDialog(title, message, yesButtonText, noButtonText, cancelButtonText) {
1213
1217
  const dialogRef = this.dialog.open(MmConfirmationWindowComponent, {
1214
1218
  width: '50vw',
1215
1219
  maxWidth: '50vw',
1216
1220
  data: {
1217
1221
  title,
1218
1222
  message,
1223
+ yesButtonText,
1224
+ noButtonText,
1225
+ cancelButtonText,
1219
1226
  dialogType: DialogType.YesNoCancel
1220
1227
  }
1221
1228
  });
1222
1229
  return dialogRef.afterClosed();
1223
1230
  }
1224
- showOkCancelConfirmationDialog(title, message) {
1231
+ showOkCancelConfirmationDialog(title, message, okButtonText, cancelButtonText) {
1225
1232
  const dialogRef = this.dialog.open(MmConfirmationWindowComponent, {
1226
1233
  width: '50vw',
1227
1234
  maxWidth: '50vw',
1228
1235
  data: {
1229
1236
  title,
1230
1237
  message,
1238
+ okButtonText,
1239
+ cancelButtonText,
1231
1240
  dialogType: DialogType.OkCancel
1232
1241
  }
1233
1242
  });
1234
1243
  return dialogRef.afterClosed().pipe(map((value) => value?.result === ButtonTypes.Ok));
1235
1244
  }
1236
- showOkDialog(title, message) {
1245
+ showOkDialog(title, message, okButtonText) {
1237
1246
  const dialogRef = this.dialog.open(MmConfirmationWindowComponent, {
1238
1247
  width: '50vw',
1239
1248
  maxWidth: '50vw',
1240
1249
  data: {
1241
1250
  title,
1242
1251
  message,
1252
+ okButtonText,
1243
1253
  dialogType: DialogType.Ok
1244
1254
  }
1245
1255
  });
1246
1256
  return dialogRef.afterClosed().pipe(map((value) => value?.result === ButtonTypes.Ok));
1247
1257
  }
1248
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ConfirmationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1249
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ConfirmationService, providedIn: 'root' });
1258
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ConfirmationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1259
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ConfirmationService, providedIn: 'root' });
1250
1260
  }
1251
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ConfirmationService, decorators: [{
1261
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ConfirmationService, decorators: [{
1252
1262
  type: Injectable,
1253
1263
  args: [{
1254
1264
  providedIn: 'root'
@@ -1290,7 +1300,7 @@ class ProgressNotifierService {
1290
1300
  });
1291
1301
  }
1292
1302
  reportProgressDeterminate(progressCurrent, progressMax, statusText) {
1293
- const progressPercentage = (progressMax / 100) * progressCurrent;
1303
+ const progressPercentage = progressMax > 0 ? (progressCurrent / progressMax) * 100 : 0;
1294
1304
  this._currentProgressValue.next({
1295
1305
  statusText,
1296
1306
  progressValue: progressPercentage
@@ -1305,10 +1315,10 @@ class ProgressNotifierService {
1305
1315
  complete() {
1306
1316
  this.currentDialogRef?.close();
1307
1317
  }
1308
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ProgressNotifierService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1309
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ProgressNotifierService });
1318
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgressNotifierService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1319
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgressNotifierService });
1310
1320
  }
1311
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: ProgressNotifierService, decorators: [{
1321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgressNotifierService, decorators: [{
1312
1322
  type: Injectable
1313
1323
  }], ctorParameters: () => [] });
1314
1324
 
@@ -1390,10 +1400,10 @@ class MmFileUploadComponent {
1390
1400
  selectedFile: null
1391
1401
  });
1392
1402
  }
1393
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmFileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1394
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: MmFileUploadComponent, isStandalone: false, selector: "mm-mm-file-upload", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div\n class=\"file-upload-wrapper\"\n [class.success]=\"uploadSuccess\"\n [class.error]=\"uploadError\"\n (drop)=\"onFileDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n>\n <input\n type=\"file\"\n accept=\"{{data.fileExtensions}}\"\n (change)=\"onFileChange($event)\"\n hidden\n #fileInput\n />\n <div class=\"file-dropper\" (click)=\"fileInput.click()\">\n <mat-icon class=\"material-symbols-outlined\">upload</mat-icon>\n <p>{{data.message}}</p>\n <div *ngIf=\"fileName()\">\n <div *ngIf=\"selectedFile\">\n <p>\n <span class=\"image-name\">{{ fileName() }}</span> ({{\n fileSize()\n }} KB)\n </p>\n <mat-icon class=\"material-symbols-outlined delete-icon\" (click)=\"removeFile()\">delete</mat-icon>\n </div>\n </div>\n </div>\n</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onOk()\" [disabled]=\"!selectedFile\" mat-flat-button>Upload</button>\n <button (click)=\"onCancel()\" mat-button>Cancel</button>\n</div>\n\n", styles: [".file-upload-wrapper{display:flex;justify-content:center;align-items:center;flex-direction:column;border:2px dashed #ccc;padding:1rem;margin-bottom:1rem;margin-left:1rem;margin-right:1rem;border-radius:10px;cursor:pointer}.file-upload-wrapper.success{border-color:green}.file-upload-wrapper.error{border-color:red}.file-dropper{display:flex;flex-direction:column;align-items:center}.image-name{font-weight:700}.image-preview{max-width:100%;height:auto;margin-bottom:.5rem;border-radius:10px}.delete-icon{cursor:pointer;color:red}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
1403
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmFileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1404
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: MmFileUploadComponent, isStandalone: false, selector: "mm-mm-file-upload", viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div\n class=\"file-upload-wrapper\"\n [class.success]=\"uploadSuccess\"\n [class.error]=\"uploadError\"\n (drop)=\"onFileDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n>\n <input\n type=\"file\"\n accept=\"{{data.fileExtensions}}\"\n (change)=\"onFileChange($event)\"\n hidden\n #fileInput\n />\n <div class=\"file-dropper\" (click)=\"fileInput.click()\">\n <mat-icon class=\"material-symbols-outlined\">upload</mat-icon>\n <p>{{data.message}}</p>\n <div *ngIf=\"fileName()\">\n <div *ngIf=\"selectedFile\">\n <p>\n <span class=\"image-name\">{{ fileName() }}</span> ({{\n fileSize()\n }} KB)\n </p>\n <mat-icon class=\"material-symbols-outlined delete-icon\" (click)=\"removeFile()\">delete</mat-icon>\n </div>\n </div>\n </div>\n</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onOk()\" [disabled]=\"!selectedFile\" mat-flat-button>Upload</button>\n <button (click)=\"onCancel()\" mat-button>Cancel</button>\n</div>\n\n", styles: [".file-upload-wrapper{display:flex;justify-content:center;align-items:center;flex-direction:column;border:2px dashed #ccc;padding:1rem;margin-bottom:1rem;margin-left:1rem;margin-right:1rem;border-radius:10px;cursor:pointer}.file-upload-wrapper.success{border-color:green}.file-upload-wrapper.error{border-color:red}.file-dropper{display:flex;flex-direction:column;align-items:center}.image-name{font-weight:700}.image-preview{max-width:100%;height:auto;margin-bottom:.5rem;border-radius:10px}.delete-icon{cursor:pointer;color:red}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
1395
1405
  }
1396
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmFileUploadComponent, decorators: [{
1406
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmFileUploadComponent, decorators: [{
1397
1407
  type: Component,
1398
1408
  args: [{ selector: 'mm-mm-file-upload', standalone: false, template: "<h1 mat-dialog-title>{{data.title}}</h1>\n<div\n class=\"file-upload-wrapper\"\n [class.success]=\"uploadSuccess\"\n [class.error]=\"uploadError\"\n (drop)=\"onFileDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n>\n <input\n type=\"file\"\n accept=\"{{data.fileExtensions}}\"\n (change)=\"onFileChange($event)\"\n hidden\n #fileInput\n />\n <div class=\"file-dropper\" (click)=\"fileInput.click()\">\n <mat-icon class=\"material-symbols-outlined\">upload</mat-icon>\n <p>{{data.message}}</p>\n <div *ngIf=\"fileName()\">\n <div *ngIf=\"selectedFile\">\n <p>\n <span class=\"image-name\">{{ fileName() }}</span> ({{\n fileSize()\n }} KB)\n </p>\n <mat-icon class=\"material-symbols-outlined delete-icon\" (click)=\"removeFile()\">delete</mat-icon>\n </div>\n </div>\n </div>\n</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onOk()\" [disabled]=\"!selectedFile\" mat-flat-button>Upload</button>\n <button (click)=\"onCancel()\" mat-button>Cancel</button>\n</div>\n\n", styles: [".file-upload-wrapper{display:flex;justify-content:center;align-items:center;flex-direction:column;border:2px dashed #ccc;padding:1rem;margin-bottom:1rem;margin-left:1rem;margin-right:1rem;border-radius:10px;cursor:pointer}.file-upload-wrapper.success{border-color:green}.file-upload-wrapper.error{border-color:red}.file-dropper{display:flex;flex-direction:column;align-items:center}.image-name{font-weight:700}.image-preview{max-width:100%;height:auto;margin-bottom:.5rem;border-radius:10px}.delete-icon{cursor:pointer;color:red}\n"] }]
1399
1409
  }], ctorParameters: () => [], propDecorators: { fileInput: [{
@@ -1421,10 +1431,10 @@ class FileUploadService {
1421
1431
  }
1422
1432
  return null;
1423
1433
  }
1424
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: FileUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1425
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: FileUploadService, providedIn: 'root' });
1434
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: FileUploadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1435
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: FileUploadService, providedIn: 'root' });
1426
1436
  }
1427
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: FileUploadService, decorators: [{
1437
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: FileUploadService, decorators: [{
1428
1438
  type: Injectable,
1429
1439
  args: [{
1430
1440
  providedIn: 'root'
@@ -1438,10 +1448,10 @@ class MmTableSimpleComponent {
1438
1448
  get displayedColumns() {
1439
1449
  return this.columns.map(col => col.key);
1440
1450
  }
1441
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmTableSimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1442
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: MmTableSimpleComponent, isStandalone: true, selector: "mm-table-simple", inputs: { sortColumn: "sortColumn", items: "items", columns: "columns" }, ngImport: i0, template: "<div>\n <table mat-table [dataSource]=\"items\" matSort matSortActive=\"{{sortColumn}}\" matSortDirection=\"asc\" matSortDisableClear>\n\n <!-- Dynamic Column Definitions -->\n <ng-container *ngFor=\"let column of columns\" [matColumnDef]=\"column.key\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ column.header }}</th>\n <td mat-cell *matCellDef=\"let element\">{{ element[column.key] }}</td>\n </ng-container>\n\n <!-- Header Row -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <!-- Data Rows -->\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatFormFieldModule }] });
1451
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmTableSimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1452
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: MmTableSimpleComponent, isStandalone: true, selector: "mm-table-simple", inputs: { sortColumn: "sortColumn", items: "items", columns: "columns" }, ngImport: i0, template: "<div>\n <table mat-table [dataSource]=\"items\" matSort matSortActive=\"{{sortColumn}}\" matSortDirection=\"asc\" matSortDisableClear>\n\n <!-- Dynamic Column Definitions -->\n <ng-container *ngFor=\"let column of columns\" [matColumnDef]=\"column.key\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ column.header }}</th>\n <td mat-cell *matCellDef=\"let element\">{{ element[column.key] }}</td>\n </ng-container>\n\n <!-- Header Row -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <!-- Data Rows -->\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatFormFieldModule }] });
1443
1453
  }
1444
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmTableSimpleComponent, decorators: [{
1454
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmTableSimpleComponent, decorators: [{
1445
1455
  type: Component,
1446
1456
  args: [{ selector: 'mm-table-simple', standalone: true, imports: [
1447
1457
  MatTable,
@@ -1542,10 +1552,10 @@ class MmQrCodeScannerComponent {
1542
1552
  ngOnDestroy() {
1543
1553
  this.scannerService.stop();
1544
1554
  }
1545
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmQrCodeScannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1546
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.6", type: MmQrCodeScannerComponent, isStandalone: true, selector: "mm-qr-code-scanner", outputs: { scanComplete: "scanComplete" }, viewQueries: [{ propertyName: "videoRef", first: true, predicate: ["video"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"scanner-container\">\n <video #video autoplay muted playsinline></video>\n <button class=\"close-btn\" (click)=\"onCancel()\">\u00D7</button>\n</div>\n", styles: [".scanner-container{position:fixed;inset:0;background:#000;display:flex;justify-content:center;align-items:center}video{width:100%;height:100%;object-fit:cover}.close-btn{position:absolute;top:1rem;right:1rem;font-size:2rem;background:#00000080;color:#fff;border:none;border-radius:50%;width:3rem;height:3rem}\n"] });
1555
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmQrCodeScannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1556
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: MmQrCodeScannerComponent, isStandalone: true, selector: "mm-qr-code-scanner", outputs: { scanComplete: "scanComplete" }, viewQueries: [{ propertyName: "videoRef", first: true, predicate: ["video"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"scanner-container\">\n <video #video autoplay muted playsinline></video>\n <button class=\"close-btn\" (click)=\"onCancel()\">\u00D7</button>\n</div>\n", styles: [".scanner-container{position:fixed;inset:0;background:#000;display:flex;justify-content:center;align-items:center}video{width:100%;height:100%;object-fit:cover}.close-btn{position:absolute;top:1rem;right:1rem;font-size:2rem;background:#00000080;color:#fff;border:none;border-radius:50%;width:3rem;height:3rem}\n"] });
1547
1557
  }
1548
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmQrCodeScannerComponent, decorators: [{
1558
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmQrCodeScannerComponent, decorators: [{
1549
1559
  type: Component,
1550
1560
  args: [{ selector: 'mm-qr-code-scanner', template: "<div class=\"scanner-container\">\n <video #video autoplay muted playsinline></video>\n <button class=\"close-btn\" (click)=\"onCancel()\">\u00D7</button>\n</div>\n", styles: [".scanner-container{position:fixed;inset:0;background:#000;display:flex;justify-content:center;align-items:center}video{width:100%;height:100%;object-fit:cover}.close-btn{position:absolute;top:1rem;right:1rem;font-size:2rem;background:#00000080;color:#fff;border:none;border-radius:50%;width:3rem;height:3rem}\n"] }]
1551
1561
  }], propDecorators: { videoRef: [{
@@ -1566,8 +1576,8 @@ class MmSharedUiModule {
1566
1576
  ]
1567
1577
  };
1568
1578
  }
1569
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmSharedUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1570
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.6", ngImport: i0, type: MmSharedUiModule, declarations: [MmBreadcrumbComponent,
1579
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmSharedUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1580
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.1.7", ngImport: i0, type: MmSharedUiModule, declarations: [MmBreadcrumbComponent,
1571
1581
  MmConfirmationWindowComponent,
1572
1582
  MmProgressWindowComponent,
1573
1583
  MmNotificationBarComponent,
@@ -1600,7 +1610,7 @@ class MmSharedUiModule {
1600
1610
  MmFileUploadComponent,
1601
1611
  MmTableSimpleComponent,
1602
1612
  MmQrCodeScannerComponent] });
1603
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmSharedUiModule, imports: [CommonModule,
1613
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmSharedUiModule, imports: [CommonModule,
1604
1614
  MatToolbarModule,
1605
1615
  MatButtonModule,
1606
1616
  MatSnackBarModule,
@@ -1616,7 +1626,7 @@ class MmSharedUiModule {
1616
1626
  MmTableSimpleComponent,
1617
1627
  MatProgressBar] });
1618
1628
  }
1619
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: MmSharedUiModule, decorators: [{
1629
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: MmSharedUiModule, decorators: [{
1620
1630
  type: NgModule,
1621
1631
  args: [{
1622
1632
  declarations: [
@@ -1 +1 @@
1
- {"version":3,"file":"meshmakers-shared-ui.mjs","sources":["../../../../projects/meshmakers/shared-ui/src/lib/mm-message-details/mm-message-details.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-message-details/mm-message-details.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-notification-bar/notification-snack-bar/notification-snack-bar.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-notification-bar/notification-snack-bar/notification-snack-bar.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-notification-bar/mm-notification-bar.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-notification-bar/mm-notification-bar.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-autocomplete-input/mm-autocomplete-input.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-autocomplete-input/mm-autocomplete-input.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-entity-select-input/mm-entity-select-input.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-entity-select-input/mm-entity-select-input.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-multiple-entity-select-input/mm-multiple-entity-select-input.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-multiple-entity-select-input/mm-multiple-entity-select-input.component.html","../../../../projects/meshmakers/shared-ui/src/lib/services/breadcrumbData.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-breadcrumb/mm-breadcrumb.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-breadcrumb/mm-breadcrumb.component.html","../../../../projects/meshmakers/shared-ui/src/lib/models/confirmation.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-confirmation-window/mm-confirmation-window.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-confirmation-window/mm-confirmation-window.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-progress-window/mm-progress-window.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-progress-window/mm-progress-window.component.html","../../../../projects/meshmakers/shared-ui/src/lib/services/confirmation.service.ts","../../../../projects/meshmakers/shared-ui/src/lib/services/progress-notifier.service.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-file-upload/mm-file-upload.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-file-upload/mm-file-upload.component.html","../../../../projects/meshmakers/shared-ui/src/lib/services/file-upload.service.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-table-simple/mm-table-simple.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-table-simple/mm-table-simple.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-qr-scan-window/mm-qr-scan-window.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-qr-scan-window/mm-qr-scan-window.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-shared-ui.module.ts","../../../../projects/meshmakers/shared-ui/src/lib/models/commonValidators.ts","../../../../projects/meshmakers/shared-ui/src/lib/models/abstractDetailsComponent.ts","../../../../projects/meshmakers/shared-ui/src/public-api.ts","../../../../projects/meshmakers/shared-ui/src/meshmakers-shared-ui.ts"],"sourcesContent":["import { Component, OnInit, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ErrorMessage } from '@meshmakers/shared-services';\n\n@Component({\n selector: 'mm-message-details',\n standalone: false,\n templateUrl: './mm-message-details.component.html',\n styleUrls: ['./mm-message-details.component.css']\n})\nexport class MmMessageDetailsComponent implements OnInit {\n dialogRef = inject<MatDialogRef<MmMessageDetailsComponent>>(MatDialogRef);\n data = inject(MAT_DIALOG_DATA);\n\n errorMessage: ErrorMessage;\n\n constructor() {\n const data = this.data;\n\n this.errorMessage = data.errorMessage;\n }\n\n ngOnInit(): void {}\n}\n","<mat-dialog-content>\n\n <h2>{{errorMessage.title}}</h2>\n <p>{{errorMessage.message}}</p>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button class=\"primary-button\" mat-dialog-close mat-flat-button>OK</button>\n</mat-dialog-actions>\n","import { Component, inject } from '@angular/core';\nimport {\n MAT_SNACK_BAR_DATA,\n MatSnackBarAction,\n MatSnackBarActions,\n MatSnackBarRef\n} from \"@angular/material/snack-bar\";\nimport {MatButton} from \"@angular/material/button\";\nimport {ErrorMessage} from \"@meshmakers/shared-services\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {MmMessageDetailsComponent} from \"../../mm-message-details/mm-message-details.component\";\nimport {MatIcon} from \"@angular/material/icon\";\n\n@Component({\n selector: 'mm-notification-snack-bar',\n imports: [\n MatSnackBarActions,\n MatButton,\n MatSnackBarAction,\n MatIcon\n ],\n templateUrl: './notification-snack-bar.html',\n styleUrl: './notification-snack-bar.scss'\n})\nexport class NotificationSnackBar {\n readonly errorMessage = inject<ErrorMessage>(MAT_SNACK_BAR_DATA);\n\n protected readonly snackBarRef = inject(MatSnackBarRef);\n private readonly dialog = inject(MatDialog);\n\n onShowDetails(): void {\n this.dialog.open(MmMessageDetailsComponent, {\n data: {\n errorMessage: this.errorMessage\n }\n });\n }\n}\n"," <a (click)=\"onShowDetails()\" class=\"notification-text\">\n <span>\n {{ errorMessage?.title }}\n </span>\n </a>\n <span matSnackBarActions>\n <button matButton matSnackBarAction (click)=\"onShowDetails()\"><mat-icon class=\"material-symbols-outlined\">bug_report</mat-icon>Details</button>\n <button matButton matSnackBarAction (click)=\"snackBarRef.dismissWithAction()\"><mat-icon class=\"material-symbols-outlined\">close</mat-icon>Close</button>\n </span>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ErrorMessage, MessageService } from '@meshmakers/shared-services';\nimport {MatSnackBar} from \"@angular/material/snack-bar\";\nimport {NotificationSnackBar} from \"./notification-snack-bar/notification-snack-bar\";\n\n@Component({\n selector: 'mm-notification-bar',\n standalone: false,\n templateUrl: './mm-notification-bar.component.html',\n styleUrls: ['./mm-notification-bar.component.scss']\n})\nexport class MmNotificationBarComponent implements OnInit {\n private readonly snackBar = inject(MatSnackBar);\n private readonly messageService = inject(MessageService);\n\n public errorMessage: ErrorMessage | null;\n\n constructor() {\n this.errorMessage = null;\n }\n\n ngOnInit(): void {\n this.messageService.getLatestErrorMessage().subscribe((value) => {\n this.errorMessage = value;\n if (this.errorMessage) {\n this.snackBar.openFromComponent(NotificationSnackBar, {\n data: this.errorMessage,\n horizontalPosition: \"center\",\n verticalPosition: \"top\"\n });\n }\n });\n }\n}\n","<div></div>\n","import { Component, DoCheck, ElementRef, EventEmitter, forwardRef, HostBinding, Injector, Input, OnDestroy, OnInit, ViewChild, inject } from \"@angular/core\";\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n ValidationErrors,\n Validator\n} from \"@angular/forms\";\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { debounceTime, filter, map, switchMap, tap } from \"rxjs/operators\";\nimport { MatAutocompleteActivatedEvent, MatAutocompleteSelectedEvent } from \"@angular/material/autocomplete\";\nimport { MatInput } from \"@angular/material/input\";\nimport { of, Subject } from \"rxjs\";\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\nimport { AutoCompleteDataSource } from \"@meshmakers/shared-services\";\n\n@Component({\n selector: \"mm-autocomplete\",\n standalone: false,\n templateUrl: \"./mm-autocomplete-input.component.html\",\n styleUrls: [\"./mm-autocomplete-input.component.css\"],\n host: {\n \"[id]\": \"id\",\n \"[attr.aria-describedby]\": \"describedBy\"\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MmAutocompleteInputComponent),\n multi: true\n },\n {\n provide: MatFormFieldControl,\n useExisting: MmAutocompleteInputComponent\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MmAutocompleteInputComponent),\n multi: true\n }\n ]\n})\nexport class MmAutocompleteInputComponent implements OnInit, OnDestroy, DoCheck, ControlValueAccessor, MatFormFieldControl<any>, Validator {\n elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly fm = inject(FocusMonitor);\n\n private static nextId = 0;\n public readonly searchFormControl: FormControl;\n public isLoading: boolean;\n public filteredStrings: string[] = [];\n public ngControl: NgControl | null;\n public errorState: boolean;\n public focused: boolean;\n public readonly stateChanges = new Subject<void>();\n @HostBinding()\n public readonly id = `ia-autocomplete-${MmAutocompleteInputComponent.nextId++}`;\n\n public valueChange: EventEmitter<any> = new EventEmitter<any>();\n private _selectedString: string | null;\n @ViewChild(\"input\") private readonly inputField: MatInput | null;\n @HostBinding(\"attr.aria-describedby\") private describedBy = \"\";\n private activatedValue: any;\n\n constructor() {\n const elRef = this.elRef;\n const fm = this.fm;\n\n this.ngControl = null;\n this.errorState = false;\n this._selectedString = null;\n this.inputField = null;\n this._dataSource = null;\n this._placeholder = \"\";\n this._prefix = \"\";\n\n this.searchFormControl = new FormControl();\n this.isLoading = false;\n this._disabled = false;\n this.focused = false;\n fm.monitor(elRef.nativeElement, true).subscribe((origin) => {\n this.focused = !!origin;\n this.stateChanges.next();\n });\n }\n\n private _dataSource: AutoCompleteDataSource | null;\n\n public get dataSource(): AutoCompleteDataSource | null {\n return this._dataSource;\n }\n\n @Input()\n public set dataSource(value: AutoCompleteDataSource | null) {\n this._dataSource = value;\n }\n\n private _disabled = false;\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(dis) {\n this._disabled = coerceBooleanProperty(dis);\n if (this._disabled) {\n this.searchFormControl.disable();\n } else {\n this.searchFormControl.enable();\n }\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n @Input()\n public get placeholder(): string {\n return this._placeholder;\n }\n\n public set placeholder(plh: string) {\n this._placeholder = plh;\n this.stateChanges.next();\n }\n\n private _required = false;\n\n @Input()\n public get required(): boolean {\n return this._required;\n }\n\n public set required(req) {\n this._required = coerceBooleanProperty(req);\n if (this.inputField != null) {\n this.inputField.required = this._required;\n }\n this.stateChanges.next();\n }\n\n private _prefix: string;\n\n @Input()\n public get prefix(): string {\n return this._prefix;\n }\n\n public set prefix(value: string) {\n if (value !== this._prefix) {\n this._prefix = value;\n }\n }\n\n public get value(): any {\n return this._selectedString;\n }\n\n public set value(value: any) {\n if (value !== this._selectedString) {\n this._selectedString = value;\n this.searchFormControl.setValue(value);\n this.valueChange.emit(value);\n this._propagateChange(this._selectedString);\n this.stateChanges.next();\n }\n }\n\n public get empty(): boolean {\n const n = this.searchFormControl.value;\n return !n;\n }\n\n @HostBinding(\"class.floating\")\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n ngOnInit(): void {\n this.ngControl = this.injector.get(NgControl, null);\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // If prefix defined, usually this is used for a code scanner.\n // The goal is to select the entity in direct way.\n if (this._prefix) {\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n filter((value) => typeof value === \"string\"),\n filter((value) => value.startsWith(this._prefix)),\n tap(() => (this.value = null)),\n tap(() => (this.isLoading = true)),\n map((value: string) => this._dataSource?.onPreprocessSearchString(value) ?? \"\"),\n switchMap((value) => this._dataSource?.onFilter(value) ?? of(null))\n )\n .subscribe((resultSet) => {\n if (resultSet?.list != null) {\n if (resultSet.list.length === 1) {\n this.value = resultSet.list[0];\n } else {\n this.filteredStrings = resultSet.list;\n this.searchFormControl.patchValue(resultSet.searchTerm, {\n emitEvent: false\n });\n }\n }\n this.isLoading = false;\n });\n }\n\n // This is the search functionality when search by human.\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n tap((_) => {\n this.filteredStrings = [];\n }),\n filter((value) => value != null && value.toString().length >= 1),\n tap(() => (this.isLoading = true)),\n map((value: string) => this._dataSource?.onPreprocessSearchString(value)),\n tap((value) => (this.value = value)),\n switchMap((value) => {\n if (value !== null) {\n return this._dataSource?.onFilter(String(value)) ?? of(null);\n }\n return of(null);\n })\n )\n .subscribe((resultSet) => {\n if (resultSet?.list != null) {\n this.filteredStrings = resultSet.list;\n this.searchFormControl.patchValue(resultSet.searchTerm, {\n emitEvent: false\n });\n }\n this.isLoading = false;\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n this.fm.stopMonitoring(this.elRef.nativeElement);\n }\n\n ngDoCheck(): void {\n if (this.ngControl != null) {\n this.errorState = (this.ngControl.invalid && this.ngControl.touched) ?? false;\n this.stateChanges.next();\n }\n }\n\n public clear(): void {\n this.filteredStrings = [];\n this.searchFormControl.reset(null);\n }\n\n public focus(): void {\n this.elRef.nativeElement.querySelector(\"input\")?.focus();\n }\n\n public onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n this.value = event.option.value;\n this.filteredStrings = [];\n }\n\n public onOptionActivated(event: MatAutocompleteActivatedEvent): void {\n this.activatedValue = event.option?.value;\n }\n\n public onAutoCompleteClosed(): void {\n if (this.activatedValue) {\n this.value = this.activatedValue;\n this.activatedValue = null;\n }\n }\n\n public reset(): void {\n this.value = null;\n }\n\n public onFocusOut(): void {\n if (this.filteredStrings.length === 1) {\n this.activatedValue = this.filteredStrings[0];\n this.value = this.filteredStrings[0];\n }\n }\n\n public onTouched(): void {\n this._onTouched();\n this.stateChanges.next();\n }\n\n public registerOnChange(fn: any): void {\n this._propagateChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n public writeValue(obj: any): void {\n this.clear();\n this.value = obj;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onContainerClick(event: MouseEvent): void {\n if ((event.target as Element).tagName.toLowerCase() !== \"input\") {\n this.focus();\n }\n }\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(\" \");\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n const selection: any = control.value;\n if (typeof selection === \"string\" && selection.length < 1) {\n return { incorrect: true };\n }\n return null;\n }\n\n private _propagateChange = (_: any): void => {\n };\n\n private readonly _onTouched = (): void => {\n };\n}\n","<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\"\n (closed)=\"onAutoCompleteClosed()\" (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let str of filteredStrings\" [value]=\"str\">\n {{str}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n","import { Component, DoCheck, ElementRef, EventEmitter, forwardRef, HostBinding, Injector, Input, OnDestroy, OnInit, ViewChild, inject } from \"@angular/core\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n ValidationErrors,\n Validator\n} from \"@angular/forms\";\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { EntitySelectDataSource } from \"@meshmakers/shared-services\";\nimport { Subject } from \"rxjs\";\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\nimport { debounceTime, filter, tap } from \"rxjs/operators\";\nimport { MatAutocompleteActivatedEvent, MatAutocompleteSelectedEvent } from \"@angular/material/autocomplete\";\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\n\n@Component({\n selector: \"mm-entity-select\",\n standalone: false,\n templateUrl: \"./mm-entity-select-input.component.html\",\n styleUrls: [\"./mm-entity-select-input.component.css\"],\n host: {\n \"[id]\": \"id\",\n \"[attr.aria-describedby]\": \"describedBy\"\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MmEntitySelectInputComponent),\n multi: true\n },\n {\n provide: MatFormFieldControl,\n useExisting: MmEntitySelectInputComponent\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MmEntitySelectInputComponent),\n multi: true\n }\n ]\n})\nexport class MmEntitySelectInputComponent implements OnInit, OnDestroy, DoCheck, ControlValueAccessor, MatFormFieldControl<any>, Validator {\n elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly fm = inject(FocusMonitor);\n\n private static nextId = 0;\n public readonly searchFormControl: FormControl;\n public isLoading: boolean;\n public filteredEntities: any[] = [];\n public ngControl: NgControl | null;\n public errorState: boolean;\n public focused: boolean;\n public readonly stateChanges = new Subject<void>();\n @HostBinding()\n public readonly id = `ia-entity-select-${MmEntitySelectInputComponent.nextId++}`;\n\n public valueChange: EventEmitter<any> = new EventEmitter<any>();\n private _selectedEntity: any;\n @ViewChild(\"input\") private readonly inputField: MatInput | null;\n @HostBinding(\"attr.aria-describedby\") private describedBy = \"\";\n private activatedValue: any;\n\n constructor() {\n const elRef = this.elRef;\n const fm = this.fm;\n\n this.ngControl = null;\n this.errorState = false;\n this.inputField = null;\n this._dataSource = null;\n this._placeholder = \"\";\n this._prefix = \"\";\n\n this.searchFormControl = new FormControl();\n this.isLoading = false;\n this._disabled = false;\n this.focused = false;\n fm.monitor(elRef.nativeElement, true).subscribe((origin) => {\n this.focused = !!origin;\n this.stateChanges.next();\n });\n }\n\n private _dataSource: EntitySelectDataSource<any> | null;\n\n public get dataSource(): EntitySelectDataSource<any> | null {\n return this._dataSource;\n }\n\n @Input()\n public set dataSource(value: EntitySelectDataSource<any> | null) {\n this._dataSource = value;\n }\n\n private _disabled = false;\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(dis) {\n this._disabled = coerceBooleanProperty(dis);\n if (this._disabled) {\n this.searchFormControl.disable();\n } else {\n this.searchFormControl.enable();\n }\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n @Input()\n public get placeholder(): string {\n return this._placeholder;\n }\n\n public set placeholder(plh) {\n this._placeholder = plh;\n this.stateChanges.next();\n }\n\n private _required = false;\n\n @Input()\n public get required(): boolean {\n return this._required;\n }\n\n public set required(req) {\n this._required = coerceBooleanProperty(req);\n if (this.inputField != null) {\n this.inputField.required = this._required;\n }\n this.stateChanges.next();\n }\n\n private _prefix: string;\n\n @Input()\n public get prefix(): string {\n return this._prefix;\n }\n\n public set prefix(value: string) {\n if (value !== this._prefix) {\n this._prefix = value;\n }\n }\n\n public get value(): any {\n return this._selectedEntity;\n }\n\n public set value(value: any) {\n if (value !== this._selectedEntity) {\n this.searchFormControl.setValue(value);\n this.setValue(value);\n }\n }\n\n public get empty(): boolean {\n const n = this.searchFormControl.value;\n return !n;\n }\n\n @HostBinding(\"class.floating\")\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n ngOnInit(): void {\n this.ngControl = this.injector.get(NgControl, null);\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // If prefix defined, usually this is used for a code scanner.\n // The goal is to select the entity in direct way.\n if (this._prefix) {\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n filter((value) => typeof value === \"string\"),\n filter((value) => value.startsWith(this._prefix)),\n tap(() => (this.value = null)),\n tap(() => (this.isLoading = true))\n )\n .subscribe(async (value: string) => {\n\n if (!this._dataSource)\n {\n this.isLoading = false;\n return;\n }\n\n const resultSet = await this._dataSource?.onFilter(value.replace(this._prefix, \"\").trim());\n\n if (resultSet.list) {\n if (resultSet.list.length === 1) {\n this.value = resultSet.list[0];\n } else {\n this.filteredEntities = resultSet.list;\n }\n }\n this.isLoading = false;\n });\n }\n\n // This is the search functionality when search by human.\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n tap(() => (this.filteredEntities = [])),\n filter((value: any) => typeof value === \"string\"),\n tap(() => {\n this.setValue(null);\n }),\n filter((value) => value.toString().length >= 3),\n tap(() => (this.isLoading = true))\n )\n .subscribe(async (value : string) => {\n\n if (!this._dataSource)\n {\n this.isLoading = false;\n return;\n }\n\n const resultSet = await this._dataSource.onFilter(value);\n\n if (resultSet?.list) {\n this.filteredEntities = resultSet.list;\n }\n this.isLoading = false;\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n this.fm.stopMonitoring(this.elRef.nativeElement);\n }\n\n ngDoCheck(): void {\n if (this.ngControl != null) {\n this.errorState = (this.ngControl.invalid && this.ngControl.touched) ?? false;\n this.stateChanges.next();\n }\n }\n\n public clear(): void {\n this.filteredEntities = [];\n this.searchFormControl.reset(null);\n }\n\n public focus(): void {\n this.elRef.nativeElement.querySelector(\"input\")?.focus();\n }\n\n public onEntitySelected(event: MatAutocompleteSelectedEvent): void {\n this.value = event.option.value;\n this.filteredEntities = [];\n }\n\n public onEntityActivated(event: MatAutocompleteActivatedEvent): void {\n this.activatedValue = event.option?.value;\n }\n\n public onEntityClosed(): void {\n if (this.activatedValue) {\n this.value = this.activatedValue;\n this.activatedValue = null;\n }\n }\n\n public reset(): void {\n this.value = null;\n }\n\n public onFocusOut(): void {\n if (this.filteredEntities.length === 1) {\n this.activatedValue = this.filteredEntities[0];\n this.value = this.filteredEntities[0];\n }\n }\n\n public onTouched(): void {\n this._onTouched();\n this.stateChanges.next();\n }\n\n public registerOnChange(fn: any): void {\n this._propagateChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n public writeValue(obj: any): void {\n this.clear();\n this.value = obj;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onContainerClick(event: MouseEvent): void {\n if ((event.target as Element).tagName.toLowerCase() !== \"input\") {\n this.focus();\n }\n }\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(\" \");\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n const selection: any = control.value;\n if (typeof selection === \"string\") {\n return { incorrect: true };\n }\n return null;\n }\n\n private _propagateChange = (_: any): void => {\n };\n\n private readonly _onTouched = (): void => {\n };\n\n private setValue(value: any): void {\n if (value !== this._selectedEntity) {\n this._selectedEntity = value;\n this.valueChange.emit(value);\n this._propagateChange(this._selectedEntity);\n this.stateChanges.next();\n }\n }\n}\n","<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n","import { Component, DoCheck, ElementRef, EventEmitter, forwardRef, HostBinding, Injector, Input, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\nimport { EntitySelectDataSource } from '@meshmakers/shared-services';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { of, Subject } from 'rxjs';\nimport { MatInput } from '@angular/material/input';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { debounceTime, filter, switchMap, tap } from 'rxjs/operators';\nimport { MatAutocompleteActivatedEvent, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\n\n@Component({\n selector: 'mm-multiple-entity-select',\n standalone: false,\n templateUrl: './mm-multiple-entity-select-input.component.html',\n styleUrls: ['./mm-multiple-entity-select-input.component.css'],\n host: {\n '[id]': 'id',\n '[attr.aria-describedby]': 'describedBy'\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MmMultipleEntitySelectInputComponent),\n multi: true\n },\n {\n provide: MatFormFieldControl,\n useExisting: MmMultipleEntitySelectInputComponent\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MmMultipleEntitySelectInputComponent),\n multi: true\n }\n ]\n})\nexport class MmMultipleEntitySelectInputComponent\n implements OnInit, OnDestroy, DoCheck, ControlValueAccessor, MatFormFieldControl<any[]>, Validator\n{\n elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly fm = inject(FocusMonitor);\n\n private static nextId = 0;\n public readonly valuesFormControl: FormControl;\n public readonly searchFormControl: FormControl;\n public isLoading: boolean;\n public filteredEntities: any[] = [];\n public ngControl: NgControl | null;\n public errorState: boolean;\n public focused: boolean;\n public readonly stateChanges = new Subject<void>();\n @HostBinding()\n public readonly id = `ia-multiple-entity-select-${MmMultipleEntitySelectInputComponent.nextId++}`;\n\n public valuesChange: EventEmitter<any[]> = new EventEmitter<any[]>();\n private _selectedEntities: any[] | null;\n @ViewChild('input') private readonly inputField: MatInput | null;\n @HostBinding('attr.aria-describedby') private describedBy = '';\n private activatedValue: any;\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n constructor() {\n const elRef = this.elRef;\n const fm = this.fm;\n\n this.ngControl = null;\n this.errorState = false;\n this.inputField = null;\n this._dataSource = null;\n this._placeholder = '';\n this._prefix = '';\n this._selectedEntities = null;\n\n this.valuesFormControl = new FormControl();\n this.searchFormControl = new FormControl();\n this.isLoading = false;\n this._disabled = false;\n this.focused = false;\n fm.monitor(elRef.nativeElement, true).subscribe((origin) => {\n this.focused = !!origin;\n this.stateChanges.next();\n });\n }\n\n private _dataSource: EntitySelectDataSource<any> | null;\n\n public get dataSource(): EntitySelectDataSource<any> | null {\n return this._dataSource;\n }\n\n @Input()\n public set dataSource(value: EntitySelectDataSource<any> | null) {\n this._dataSource = value;\n }\n\n private _disabled = false;\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(dis) {\n this._disabled = coerceBooleanProperty(dis);\n if (this._disabled) {\n this.searchFormControl.disable();\n } else {\n this.searchFormControl.enable();\n }\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n @Input()\n public get placeholder(): string {\n return this._placeholder;\n }\n\n public set placeholder(plh) {\n this._placeholder = plh;\n this.stateChanges.next();\n }\n\n private _required = false;\n\n @Input()\n public get required(): boolean {\n return this._required;\n }\n\n public set required(req) {\n this._required = coerceBooleanProperty(req);\n if (this.inputField != null) {\n this.inputField.required = this._required;\n }\n this.stateChanges.next();\n }\n\n private _prefix: string;\n\n @Input()\n public get prefix(): string {\n return this._prefix;\n }\n\n public set prefix(value: string) {\n if (value !== this._prefix) {\n this._prefix = value;\n }\n }\n\n public get value(): any[] | null {\n return this._selectedEntities;\n }\n\n public set value(value: any[] | null) {\n if (value !== this._selectedEntities) {\n this.valuesFormControl.setValue(value);\n this.setValue(value);\n }\n }\n\n public get empty(): boolean {\n const n = this.valuesFormControl.value;\n return !n;\n }\n\n @HostBinding('class.floating')\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n ngOnInit(): void {\n this.ngControl = this.injector.get(NgControl, null);\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // If prefix defined, usually this is used for a code scanner.\n // The goal is to select the entity in direct way.\n if (this._prefix) {\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n filter((value) => typeof value === 'string'),\n filter((value: string) => value.startsWith(this._prefix)),\n tap(() => (this.isLoading = true)),\n switchMap((value) => this._dataSource?.onFilter(value.replace(this._prefix, '').trim()) ?? of(null))\n )\n .subscribe((resultSet) => {\n if (resultSet?.list) {\n this.filteredEntities = resultSet.list;\n }\n this.isLoading = false;\n });\n }\n\n // This is the search functionality when search by human.\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n tap(() => (this.filteredEntities = [])),\n filter((value) => typeof value === 'string'),\n filter((value) => value.toString().length >= 3),\n tap(() => (this.isLoading = true)),\n switchMap((value: string) => this._dataSource?.onFilter(value) ?? of(null))\n )\n .subscribe((resultSet) => {\n const resultList = new Array<any>();\n\n if (resultSet?.list) {\n resultSet.list.forEach((value1) => {\n if (!this.value?.find((value2) => this._dataSource?.getIdEntity(value2) === this._dataSource?.getIdEntity(value1))) {\n resultList.push(value1);\n }\n });\n }\n\n this.filteredEntities = resultList;\n this.isLoading = false;\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n this.fm.stopMonitoring(this.elRef.nativeElement);\n }\n\n ngDoCheck(): void {\n if (this.ngControl != null) {\n this.errorState = (this.ngControl.invalid && this.ngControl.touched) ?? false;\n this.stateChanges.next();\n }\n }\n\n public clear(): void {\n this.filteredEntities = [];\n this.searchFormControl.reset(null);\n }\n\n public focus(): void {\n this.elRef.nativeElement.querySelector('input')?.focus();\n }\n\n public onEntitySelected(event: MatAutocompleteSelectedEvent): void {\n let list = this.value;\n if (list == null) {\n list = new Array<any>();\n }\n list.push(event.option.value);\n this.value = list;\n\n this.filteredEntities = [];\n this.searchFormControl.setValue(null);\n this.valuesFormControl.updateValueAndValidity();\n }\n\n public onEntityActivated(event: MatAutocompleteActivatedEvent): void {\n this.activatedValue = event.option?.value;\n }\n\n public onEntityClosed(): void {\n if (this.activatedValue) {\n this.value = this.activatedValue;\n this.activatedValue = null;\n }\n }\n\n public reset(): void {\n this.value = new Array<any>();\n }\n\n public onFocusOut(): void {\n // if (this.filteredEntities.length === 1) {\n // this.activatedValue = this.filteredEntities[0];\n // this.value = this.filteredEntities[0];\n // }\n }\n\n public onTouched(): void {\n this._onTouched();\n this.stateChanges.next();\n }\n\n public registerOnChange(fn: any): void {\n this._propagateChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n public writeValue(obj: any): void {\n this.clear();\n this.value = obj;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onContainerClick(event: MouseEvent): void {\n if ((event.target as Element).tagName.toLowerCase() !== 'input') {\n this.focus();\n }\n }\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n const selection: any = control.value;\n if (typeof selection === 'string') {\n return { incorrect: true };\n }\n return null;\n }\n\n remove(value: any): void {\n const list = this.value;\n if (list != null) {\n const index = list.indexOf(value);\n if (index !== -1) {\n list.splice(index, 1);\n }\n this.valuesFormControl.updateValueAndValidity();\n }\n }\n\n private _propagateChange = (_: any[]): void => {};\n\n private readonly _onTouched = (): void => {};\n\n private setValue(values: any[] | null): void {\n if (values !== this._selectedEntities) {\n this._selectedEntities = values;\n this.valuesChange.emit(values ?? []);\n this._propagateChange(this._selectedEntities ?? []);\n this.stateChanges.next();\n }\n }\n}\n","<mat-chip-grid #list>\n <mat-chip-row *ngFor=\"let entity of valuesFormControl.value\"\n (removed)=\"remove(entity)\"\n [editable]=\"false\"\n [aria-description]=\"'press enter to edit ' + dataSource?.onDisplayEntity(entity) ?? null\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n <button matChipRemove [attr.aria-label]=\"'remove ' + dataSource?.onDisplayEntity(entity) ?? null\">\n <mat-icon class=\"material-symbols-outlined\">cancel</mat-icon>\n </button>\n </mat-chip-row>\n <input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"list\"\n matChipInputAddOnBlur=\"true\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [placeholder]=\"placeholder\" matInput>\n <mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n</mat-chip-grid>\n","export class BreadcrumbData {\n\n constructor(label: string, labelTemplate: string, url: string) {\n this.label = label;\n this.labelTemplate = labelTemplate;\n this.url = url;\n }\n\n label: string;\n labelTemplate: string\n url: string;\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, PRIMARY_OUTLET, Router } from '@angular/router';\nimport { Breadcrumb, BreadcrumbService } from '@meshmakers/shared-services';\nimport { filter, map } from 'rxjs/operators';\nimport { BreadcrumbData } from \"../services/breadcrumbData\";\n\n@Component({\n selector: 'mm-breadcrumb',\n standalone: false,\n templateUrl: './mm-breadcrumb.component.html',\n styleUrl: './mm-breadcrumb.component.css'\n})\nexport class MmBreadcrumbComponent implements OnInit {\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly breadcrumbService = inject(BreadcrumbService);\n\n protected breadcrumbData: BreadcrumbData[] = [];\n @Input() fontSize = '18px';\n @Input() fontColor = '#0275d8';\n @Input() lastLinkColor = '#000';\n @Input() symbol = ' / ';\n\n constructor() {\n this.breadCrumbData();\n }\n\n ngOnInit(): void {\n this.breadcrumbService.breadcrumbLabels.subscribe((labelData: object) => {\n Object.entries(labelData).forEach(([key, value]) => {\n this.breadcrumbData.forEach((breadcrumbData: BreadcrumbData) => {\n const labelParams = breadcrumbData.labelTemplate.match(/[^{{]+(?=}})/g);\n if (labelParams) {\n for (const labelParam of labelParams) {\n if (labelParam === key) {\n breadcrumbData.label = breadcrumbData.labelTemplate.replace('{{' + labelParam + '}}', (value as string));\n }\n }\n }\n });\n });\n });\n\n this.breadcrumbService.newBreadcrumb.subscribe((breadcrumb: Breadcrumb[]) => {\n if (breadcrumb.length > 0) {\n this.updateData(this.activatedRoute, breadcrumb);\n }\n });\n }\n\n breadCrumbData(): void {\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .pipe(map(() => this.activatedRoute))\n .pipe(\n map((route) => {\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route;\n })\n )\n .pipe(filter((route) => route.outlet === PRIMARY_OUTLET))\n .subscribe((route) => {\n this.updateData(route, null);\n });\n }\n\n private updateData(route: ActivatedRoute, newBreadcrumb: Breadcrumb[] | null): void {\n if (route.snapshot.data['breadcrumb'] || newBreadcrumb) {\n const data = route.snapshot.data['breadcrumb'] ? route.snapshot.data['breadcrumb'] : newBreadcrumb;\n const breadcrumb = JSON.parse(JSON.stringify(data)) as Breadcrumb[];\n const breadcrumbData = new Array<BreadcrumbData>();\n breadcrumb.forEach((crumb : Breadcrumb) => {\n const breadcrumbDataItem = new BreadcrumbData(crumb.label, crumb.label, crumb.url);\n breadcrumbData.push(breadcrumbDataItem);\n\n if (breadcrumbDataItem.url) {\n const urlChunks = breadcrumbDataItem.url.split('/');\n for (const chunk of urlChunks) {\n if (chunk.includes(':')) {\n const paramID = chunk.replace(':', '');\n const routerParamID = route.snapshot.params[paramID] as string;\n breadcrumbDataItem.url = crumb.url.replace(`:${paramID}`, routerParamID);\n }\n }\n }\n\n const labelParams = breadcrumbDataItem.labelTemplate.match(/[^{{]+(?=}})/g);\n if (labelParams) {\n for (const labelParam of labelParams) {\n const routerParamID = decodeURIComponent((route.snapshot.params[labelParam.trim()] as string));\n if (routerParamID) {\n breadcrumbDataItem.label = breadcrumbDataItem.labelTemplate.replace('{{' + labelParam + '}}', routerParamID);\n } else {\n breadcrumbDataItem.label = breadcrumbDataItem.labelTemplate.replace('{{' + labelParam + '}}', '');\n }\n }\n }\n });\n this.breadcrumbData = breadcrumbData;\n } else {\n this.breadcrumbData = [];\n }\n }\n}\n","<mat-list class=\"mat-bread-crumb-list\" *ngIf=\"breadcrumbData.length\">\n <mat-list-item>\n <span class=\"mat-bread-crumb-spacer\">\n <span *ngFor=\"let item of breadcrumbData; let i = index\">\n <a *ngIf=\"item?.url\" [routerLink]=\"item?.url\"\n class=\"mat-bread-crumb-list-item\">{{ item.label }}</a>\n <span *ngIf=\"!item?.url\" class=\"mat-bread-crumb-list-item\">{{ item.label }}</span>\n <span *ngIf=\"breadcrumbData.length !== i+1\" class=\"mat-bread-crumb-list-item\">{{symbol}}</span>\n </span>\n </span>\n </mat-list-item>\n</mat-list>\n","export enum ButtonTypes {\n Ok,\n Cancel,\n Yes,\n No\n}\n\nexport enum DialogType {\n YesNo = 0,\n YesNoCancel = 1,\n OkCancel = 2,\n Ok = 3\n}\n\nexport interface ConfirmationWindowData {\n title: string;\n message: string;\n dialogType: DialogType;\n}\n\nexport interface ConfirmationWindowResult {\n result: ButtonTypes;\n}\n\nexport interface FileUploadData{\n title: string;\n message: string;\n mimeTypes: string;\n fileExtensions: string | null;\n}\n\nexport interface FileUploadResult {\n success: boolean;\n selectedFile: File | null;\n}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport {ButtonTypes, ConfirmationWindowData, ConfirmationWindowResult, DialogType} from \"../models/confirmation\";\n\n@Component({\n selector: 'mm-confirmation-window',\n standalone: false,\n templateUrl: './mm-confirmation-window.component.html',\n styleUrls: ['./mm-confirmation-window.component.css']\n})\nexport class MmConfirmationWindowComponent implements OnInit {\n private readonly dialogRef = inject<MatDialogRef<MmConfirmationWindowComponent>>(MatDialogRef);\n data = inject<ConfirmationWindowData>(MAT_DIALOG_DATA);\n\n button1Text: string;\n button1Result: ButtonTypes;\n button2Text: string | null;\n button2Result: ButtonTypes | null;\n button3Text: string | null;\n button3Result: ButtonTypes | null;\n\n constructor() {\n const data = this.data;\n\n this.button2Text = null;\n this.button2Result = null;\n this.button3Text = null;\n this.button3Result = null;\n\n if (data.dialogType === DialogType.OkCancel) {\n this.button1Text = 'OK';\n this.button1Result = ButtonTypes.Ok;\n this.button2Text = 'Cancel';\n this.button2Result = ButtonTypes.Cancel;\n } else if (data.dialogType === DialogType.YesNoCancel) {\n this.button1Text = 'Yes';\n this.button1Result = ButtonTypes.Yes;\n this.button2Text = 'No';\n this.button2Result = ButtonTypes.No;\n this.button3Text = 'Cancel';\n this.button3Result = ButtonTypes.Cancel;\n } else if (data.dialogType === DialogType.Ok) {\n this.button1Text = 'OK';\n this.button1Result = ButtonTypes.Ok;\n } else {\n this.button1Text = 'Yes';\n this.button1Result = ButtonTypes.Yes;\n this.button2Text = 'No';\n this.button2Result = ButtonTypes.No;\n }\n }\n\n ngOnInit(): void {}\n\n onButton1(): void {\n this.dialogRef.close(({\n result: this.button1Result\n } as ConfirmationWindowResult));\n }\n\n onButton2(): void {\n this.dialogRef.close(({\n result: this.button2Result\n } as ConfirmationWindowResult));\n }\n\n onButton3(): void {\n this.dialogRef.close(({\n result: this.button3Result\n } as ConfirmationWindowResult));\n }\n}\n","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>{{data.message}}</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onButton1()\" class=\"primary-button\" mat-flat-button>{{button1Text}}</button>\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-flat-button>{{button2Text}}</button>\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-flat-button>{{button3Text}}</button>\n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Observable } from 'rxjs';\nimport { ProgressValue } from '../models/progressValue';\n\nexport interface ProgressWindowData {\n title: string;\n isDeterminate: boolean;\n progress: Observable<ProgressValue>;\n isCancelOperationAvailable: boolean;\n cancelOperation: () => void;\n}\n\nexport type ProgressWindowResult = object\n\n@Component({\n selector: 'mm-progress-window',\n standalone: false,\n templateUrl: './mm-progress-window.component.html',\n styleUrls: ['./mm-progress-window.component.css']\n})\nexport class MmProgressWindowComponent implements OnInit {\n data = inject<ProgressWindowData>(MAT_DIALOG_DATA);\n\n public statusText: string | null;\n public progressValue: number;\n\n constructor() {\n const data = this.data;\n\n this.statusText = null;\n this.progressValue = 0;\n\n data.progress.subscribe((value) => {\n this.statusText = value.statusText;\n this.progressValue = value.progressValue;\n });\n }\n\n ngOnInit(): void {}\n\n onCancelClick(): void {\n this.data.cancelOperation();\n }\n}\n","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div>\n <mat-progress-bar *ngIf=\"data.isDeterminate\" [value]=\"progressValue\" mode=\"determinate\"></mat-progress-bar>\n <mat-progress-bar *ngIf=\"!data.isDeterminate\" mode=\"indeterminate\"></mat-progress-bar>\n <p>{{statusText}}</p>\n </div>\n</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onCancelClick()\" *ngIf=\"data.isCancelOperationAvailable\" mat-button>Cancel</button>\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { MatDialog } from '@angular/material/dialog';\nimport { map } from 'rxjs/operators';\nimport {MmConfirmationWindowComponent} from \"../mm-confirmation-window/mm-confirmation-window.component\";\nimport {ButtonTypes, ConfirmationWindowData, ConfirmationWindowResult, DialogType} from \"../models/confirmation\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfirmationService {\n private readonly dialog = inject(MatDialog);\n\n\n showYesNoConfirmationDialog(title: string, message: string): Observable<boolean> {\n const dialogRef = this.dialog.open<MmConfirmationWindowComponent, ConfirmationWindowData, ConfirmationWindowResult>(\n MmConfirmationWindowComponent,\n {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n message,\n dialogType: DialogType.YesNo\n } as ConfirmationWindowData\n }\n );\n\n return dialogRef.afterClosed().pipe(map((value) => value?.result === ButtonTypes.Yes));\n }\n\n showYesNoCancelConfirmationDialog(title: string, message: string): Observable<ConfirmationWindowResult | undefined> {\n const dialogRef = this.dialog.open<MmConfirmationWindowComponent, ConfirmationWindowData, ConfirmationWindowResult>(\n MmConfirmationWindowComponent,\n {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n message,\n dialogType: DialogType.YesNoCancel\n } as ConfirmationWindowData\n }\n );\n\n return dialogRef.afterClosed();\n }\n\n showOkCancelConfirmationDialog(title: string, message: string): Observable<boolean> {\n const dialogRef = this.dialog.open<MmConfirmationWindowComponent, ConfirmationWindowData, ConfirmationWindowResult>(\n MmConfirmationWindowComponent,\n {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n message,\n dialogType: DialogType.OkCancel\n } as ConfirmationWindowData\n }\n );\n\n return dialogRef.afterClosed().pipe(map((value) => value?.result === ButtonTypes.Ok));\n }\n\n showOkDialog(title: string, message: string): Observable<boolean> {\n const dialogRef = this.dialog.open<MmConfirmationWindowComponent, ConfirmationWindowData, ConfirmationWindowResult>(\n MmConfirmationWindowComponent,\n {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n message,\n dialogType: DialogType.Ok\n } as ConfirmationWindowData\n }\n );\n\n return dialogRef.afterClosed().pipe(map((value) => value?.result === ButtonTypes.Ok));\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ProgressValue } from '../models/progressValue';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MmProgressWindowComponent, ProgressWindowData, ProgressWindowResult } from '../mm-progress-window/mm-progress-window.component';\n\n@Injectable()\nexport class ProgressNotifierService {\n private readonly dialog = inject(MatDialog);\n\n private readonly _currentProgressValue: BehaviorSubject<ProgressValue | null>;\n private currentDialogRef: MatDialogRef<MmProgressWindowComponent, ProgressWindowResult> | null;\n\n constructor() {\n this._currentProgressValue = new BehaviorSubject<ProgressValue | null>(null);\n this.currentDialogRef = null;\n this._isCanceled = false;\n }\n\n private _isCanceled: boolean;\n\n get isCanceled(): boolean {\n return this._isCanceled;\n }\n\n set isCanceled(value) {\n this._isCanceled = value;\n }\n\n start(title: string, isDeterminate: boolean, isCancelOperationAvailable: boolean): void {\n this.isCanceled = false;\n this.reportProgressDeterminate(0, 100, 'Working...');\n\n this.currentDialogRef = this.dialog.open<MmProgressWindowComponent, ProgressWindowData, ProgressWindowResult>(MmProgressWindowComponent, {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n isDeterminate,\n progress: this._currentProgressValue.asObservable(),\n isCancelOperationAvailable,\n cancelOperation: () => {\n this.reportProgressIndeterminate('Canceling operation...');\n this.isCanceled = true;\n }\n } as ProgressWindowData\n });\n }\n\n reportProgressDeterminate(progressCurrent: number, progressMax: number, statusText: string): void {\n const progressPercentage = (progressMax / 100) * progressCurrent;\n\n this._currentProgressValue.next(({\n statusText,\n progressValue: progressPercentage\n } as ProgressValue));\n }\n\n reportProgressIndeterminate(statusText: string): void {\n this._currentProgressValue.next(({\n statusText,\n progressValue: 0\n } as ProgressValue));\n }\n\n complete(): void {\n this.currentDialogRef?.close();\n }\n}\n","import { Component, ElementRef, signal, ViewChild, inject } from \"@angular/core\";\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\nimport { FileUploadData, FileUploadResult } from \"../models/confirmation\";\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\n\n@Component({\n selector: 'mm-mm-file-upload',\n standalone: false,\n templateUrl: './mm-file-upload.component.html',\n styleUrl: './mm-file-upload.component.css'\n})\nexport class MmFileUploadComponent {\n private readonly dialogRef = inject<MatDialogRef<MmFileUploadComponent>>(MatDialogRef);\n protected data = inject<FileUploadData>(MAT_DIALOG_DATA);\n private snackBar = inject(MatSnackBar);\n\n protected fileName = signal('');\n protected fileSize = signal(0);\n protected uploadProgress = signal(0);\n @ViewChild('fileInput') protected fileInput: ElementRef | undefined;\n protected selectedFile: File | null = null;\n protected uploadSuccess: boolean;\n protected uploadError: boolean;\n\n\n constructor() {\n this.uploadError = false;\n this.uploadSuccess = false;\n }\n\n // Handler for file input change\n onFileChange(event: any): void {\n const file = event.target.files[0] as File | null;\n this.uploadFile(file);\n }\n\n // Handler for the file drop\n onFileDrop(event: DragEvent): void {\n event.preventDefault();\n const file = event.dataTransfer?.files[0] as File | null;\n this.uploadFile(file);\n }\n\n // Prevent default dragover behavior\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n }\n\n // Method to handle file upload\n uploadFile(file: File | null): void {\n const allowedMimeTypes = this.data.mimeTypes.split(',').map((mimeType) => mimeType.trim());\n const allowedFileExtensions = this.data.fileExtensions?.split(',').map((mimeType) => mimeType.trim()) ?? [];\n if (!file) {\n return;\n }\n console.log(\"type: \" + file.type);\n console.log(\"name: \" + file.name);\n const extension = file.name.substring(file.name.lastIndexOf('.')).toLowerCase();\n console.log(\"extension: \" + extension);\n\n if (allowedFileExtensions.includes(extension) || allowedMimeTypes.includes(file.type)) {\n this.selectedFile = file;\n this.fileSize.set(Math.round(file.size / 1024)); // Set file size in KB\n\n this.uploadSuccess = true;\n this.uploadError = false;\n this.fileName.set(file.name); // Set image name\n } else {\n this.uploadSuccess = false;\n this.uploadError = true;\n this.snackBar.open('File type not supported!', 'Close', {\n duration: 3000,\n panelClass: 'error',\n });\n }\n }\n\n // Method to remove a file\n removeFile(): void {\n this.selectedFile = null;\n this.fileName.set('');\n this.fileSize.set(0);\n this.uploadSuccess = false;\n this.uploadError = false;\n this.uploadProgress.set(0);\n }\n\n onOk(): void {\n this.dialogRef.close(({\n success: true,\n selectedFile: this.selectedFile\n } as FileUploadResult));\n }\n\n onCancel(): void {\n this.dialogRef.close(({\n success: false,\n selectedFile: null\n } as FileUploadResult));\n }\n}\n","<h1 mat-dialog-title>{{data.title}}</h1>\n<div\n class=\"file-upload-wrapper\"\n [class.success]=\"uploadSuccess\"\n [class.error]=\"uploadError\"\n (drop)=\"onFileDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n>\n <input\n type=\"file\"\n accept=\"{{data.fileExtensions}}\"\n (change)=\"onFileChange($event)\"\n hidden\n #fileInput\n />\n <div class=\"file-dropper\" (click)=\"fileInput.click()\">\n <mat-icon class=\"material-symbols-outlined\">upload</mat-icon>\n <p>{{data.message}}</p>\n <div *ngIf=\"fileName()\">\n <div *ngIf=\"selectedFile\">\n <p>\n <span class=\"image-name\">{{ fileName() }}</span> ({{\n fileSize()\n }} KB)\n </p>\n <mat-icon class=\"material-symbols-outlined delete-icon\" (click)=\"removeFile()\">delete</mat-icon>\n </div>\n </div>\n </div>\n</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onOk()\" [disabled]=\"!selectedFile\" mat-flat-button>Upload</button>\n <button (click)=\"onCancel()\" mat-button>Cancel</button>\n</div>\n\n","import { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from \"rxjs\";\nimport {\n FileUploadData,\n FileUploadResult\n} from \"../models/confirmation\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MmFileUploadComponent } from \"../mm-file-upload/mm-file-upload.component\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FileUploadService {\n private readonly dialog = inject(MatDialog);\n\n\n\n async showUploadDialog(title: string, message: string, mimeTypes: string, fileExtensions: string | null = null): Promise<File | null> {\n const dialogRef = this.dialog.open<MmFileUploadComponent, FileUploadData, FileUploadResult>(\n MmFileUploadComponent,\n {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n message,\n mimeTypes,\n fileExtensions\n } as FileUploadData\n }\n );\n\n const r = await firstValueFrom(dialogRef.afterClosed());\n const success = r?.success ?? false;\n if (success){\n return r?.selectedFile ?? null;\n }\n return null;\n }\n}\n","import { Component, Input } from \"@angular/core\";\nimport {\n MatCell, MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable\n} from \"@angular/material/table\";\nimport { NgForOf } from \"@angular/common\";\n import { MatSort, MatSortHeader } from '@angular/material/sort';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\n@Component({\n selector: 'mm-table-simple',\n standalone: true,\n imports: [\n MatTable,\n MatColumnDef,\n MatHeaderCell,\n MatCell,\n MatHeaderRow,\n MatRow,\n MatHeaderRowDef,\n MatRowDef,\n MatHeaderCellDef,\n MatCellDef,\n NgForOf,\n MatSort,\n MatSortHeader,\n MatFormFieldModule\n ],\n templateUrl: './mm-table-simple.component.html',\n styleUrl: './mm-table-simple.component.scss'\n})\nexport class MmTableSimpleComponent {\n @Input() sortColumn = '';\n @Input() items: any[] = [];\n @Input() columns: { key: string, header: string }[] = [];\n\n get displayedColumns(): string[] {\n return this.columns.map(col => col.key);\n }\n\n}\n","<div>\n <table mat-table [dataSource]=\"items\" matSort matSortActive=\"{{sortColumn}}\" matSortDirection=\"asc\" matSortDisableClear>\n\n <!-- Dynamic Column Definitions -->\n <ng-container *ngFor=\"let column of columns\" [matColumnDef]=\"column.key\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ column.header }}</th>\n <td mat-cell *matCellDef=\"let element\">{{ element[column.key] }}</td>\n </ng-container>\n\n <!-- Header Row -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <!-- Data Rows -->\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n</div>\n","import { Component, ElementRef, ViewChild, OnDestroy, OnInit, Output, EventEmitter, inject } from \"@angular/core\";\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\nimport { QrCodeScannerService } from '@meshmakers/shared-services';\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\nimport { firstValueFrom } from \"rxjs\";\n\n@Component({\n selector: 'mm-qr-code-scanner',\n templateUrl: './mm-qr-scan-window.component.html',\n styleUrls: ['./mm-qr-scan-window.component.css']\n})\nexport class MmQrCodeScannerComponent implements OnInit, OnDestroy {\n @ViewChild('video', { static: true }) videoRef!: ElementRef<HTMLVideoElement>;\n\n @Output() scanComplete = new EventEmitter<string | null>();\n\n //Allows skipping MatDialog for inline usage in eg Telerik\n private dialogRef = inject(MatDialogRef<MmQrCodeScannerComponent>, { optional: true, skipSelf: true });\n private snackBar = inject(MatSnackBar);\n private scannerService = inject(QrCodeScannerService);\n\n scanning = false;\n\n private async checkCameraPermission(): Promise<boolean> {\n if (!navigator.permissions || !navigator.mediaDevices) return true;\n\n try {\n const status = await navigator.permissions.query({ name: 'camera' as PermissionName });\n return status.state !== 'denied';\n\n } catch {\n return true; // fallback for Safari or unsupported browsers\n }\n }\n\n private close(result: string | null) {\n this.scanComplete.emit(result);\n\n if (this.dialogRef) {\n this.dialogRef.close(result);\n }\n }\n\n static open(dialog: MatDialog): Promise<string | null> {\n const ref = dialog.open(MmQrCodeScannerComponent, {\n width: '100%',\n height: '100%',\n panelClass: 'full-screen-dialog',\n disableClose: true\n });\n\n return firstValueFrom(ref.afterClosed());\n }\n\n async ngOnInit() {\n\n const hasPermission = await this.checkCameraPermission();\n\n if (!hasPermission) {\n this.snackBar.open(\n 'Camera access is blocked. Please enable it in your browser settings.',\n 'OK',\n {\n duration: 5000,\n horizontalPosition: 'center',\n verticalPosition: 'top',\n }\n );\n this.close(null);\n return;\n }\n\n const supported = await this.scannerService.isSupported();\n if (!supported) {\n this.snackBar.open(\n 'QR scanning is not supported in this browser.',\n 'OK',\n {\n duration: 5000,\n horizontalPosition: 'center',\n verticalPosition: 'top',\n }\n );\n this.close(null);\n return;\n }\n\n try {\n const result = await this.scannerService.scan(this.videoRef.nativeElement);\n this.close(result); // Return result to parent\n this.scanning = false;\n } catch (err) {\n console.error(\"QR scan error:\", err);\n this.close(null);\n } finally {\n this.scanning = false;\n }\n }\n\n onCancel() {\n this.scannerService.stop();\n this.close(null);\n }\n\n ngOnDestroy() {\n this.scannerService.stop();\n }\n}\n","<div class=\"scanner-container\">\n <video #video autoplay muted playsinline></video>\n <button class=\"close-btn\" (click)=\"onCancel()\">×</button>\n</div>\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { MmNotificationBarComponent } from './mm-notification-bar/mm-notification-bar.component';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MmMessageDetailsComponent } from './mm-message-details/mm-message-details.component';\nimport { MmAutocompleteInputComponent } from './mm-autocomplete-input/mm-autocomplete-input.component';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MmEntitySelectInputComponent } from './mm-entity-select-input/mm-entity-select-input.component';\nimport { MmMultipleEntitySelectInputComponent } from './mm-multiple-entity-select-input/mm-multiple-entity-select-input.component';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIcon, MatIconModule } from \"@angular/material/icon\";\nimport {MmBreadcrumbComponent} from \"./mm-breadcrumb/mm-breadcrumb.component\";\nimport {MmConfirmationWindowComponent} from \"./mm-confirmation-window/mm-confirmation-window.component\";\nimport {MmProgressWindowComponent} from \"./mm-progress-window/mm-progress-window.component\";\nimport { ConfirmationService } from \"./services/confirmation.service\";\nimport { ProgressNotifierService } from \"./services/progress-notifier.service\";\nimport { FileUploadService } from \"./services/file-upload.service\";\nimport { MmFileUploadComponent } from \"./mm-file-upload/mm-file-upload.component\";\nimport { MatListModule } from \"@angular/material/list\";\nimport { RouterLink } from \"@angular/router\";\nimport { MmTableSimpleComponent } from \"./mm-table-simple/mm-table-simple.component\";\nimport { MatProgressBar } from \"@angular/material/progress-bar\";\nimport { MmQrCodeScannerComponent } from \"./mm-qr-scan-window/mm-qr-scan-window.component\";\n\n@NgModule({\n declarations: [\n MmBreadcrumbComponent,\n MmConfirmationWindowComponent,\n MmProgressWindowComponent,\n MmNotificationBarComponent,\n MmMessageDetailsComponent,\n MmAutocompleteInputComponent,\n MmEntitySelectInputComponent,\n MmMultipleEntitySelectInputComponent,\n MmFileUploadComponent\n ],\n exports: [\n MmBreadcrumbComponent,\n MmConfirmationWindowComponent,\n MmNotificationBarComponent,\n MmAutocompleteInputComponent,\n MmEntitySelectInputComponent,\n MmMultipleEntitySelectInputComponent,\n MmFileUploadComponent,\n MmTableSimpleComponent,\n MmQrCodeScannerComponent\n ],\n imports: [\n CommonModule,\n MatToolbarModule,\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatAutocompleteModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatChipsModule,\n MatIconModule,\n ReactiveFormsModule,\n MatIcon,\n MatListModule,\n RouterLink,\n MmTableSimpleComponent,\n MatProgressBar,\n MmQrCodeScannerComponent\n ]\n})\nexport class MmSharedUiModule {\n static forRoot(): ModuleWithProviders<MmSharedUiModule> {\n return {\n ngModule: MmSharedUiModule,\n providers: [\n FileUploadService,\n ConfirmationService,\n ProgressNotifierService\n ]\n };\n }\n}\n","import { AbstractControl, ValidatorFn, Validators } from '@angular/forms';\n\nexport type CompareValueFn<TValue> = (value: TValue) => boolean;\n\nfunction isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n}\n\nexport class CommonValidators {\n public static phoneNumber(): ValidatorFn {\n return Validators.pattern('^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\\\s\\\\./0-9]*$');\n }\n\n public static httpUri(): ValidatorFn {\n return Validators.pattern(\n '^(http:\\\\/\\\\/|https:\\\\/\\\\/)([a-zA-Z0-9-_]+\\\\.)*[a-zA-Z0-9][a-zA-Z0-9-_]+(\\\\.[a-zA-Z]{2,11}?)*(:[0-9]{2,5}){0,1}\\\\/{0,1}$'\n );\n }\n\n public static ensureSameValue(sourceControlName: string): ValidatorFn {\n return (control: AbstractControl) => {\n const value = control.value;\n return value === control.parent?.get(sourceControlName)?.value ? null : { notSame: true };\n };\n }\n\n public static conditionalRequired<TCompareValue>(\n sourceControlName: string,\n sourceValueCompareExpression: CompareValueFn<TCompareValue>\n ): ValidatorFn {\n return (control: AbstractControl) => {\n if (control.parent != null && sourceValueCompareExpression((control.parent.get(sourceControlName)?.value as TCompareValue))) {\n return isEmptyInputValue(control.value) ? { required: true } : null;\n }\n return null;\n };\n }\n\n public static dependentControls(controlNames: string[]): ValidatorFn {\n return (control: AbstractControl) => {\n controlNames.forEach((controlName) => {\n control.parent?.get(controlName)?.updateValueAndValidity();\n });\n return null;\n };\n }\n}\n","import { FormGroup } from '@angular/forms';\nimport { IsoDateTime } from '@meshmakers/shared-services';\n\nexport abstract class AbstractDetailsComponent<TEntity> {\n private _loading: boolean;\n private readonly _ownerForm: FormGroup;\n private _entity: TEntity | null;\n\n protected constructor(formGroup: FormGroup) {\n this._loading = true;\n this._entity = null;\n this._ownerForm = formGroup;\n }\n\n public get loading(): boolean {\n return this._loading;\n }\n\n public set loading(value: boolean) {\n this._loading = value;\n }\n\n public get entity(): TEntity | null {\n return this._entity;\n }\n\n public set entity(value: TEntity | null) {\n this._entity = value;\n }\n\n public get ownerForm(): FormGroup {\n return this._ownerForm;\n }\n\n public get isLoaded(): boolean {\n return this._entity !== null;\n }\n\n public hasError = (controlName: string, errorName: string): boolean => {\n return this.ownerForm?.controls[controlName].hasError(errorName);\n };\n\n public hasFormError = (errorName: string): boolean => {\n return this.ownerForm?.hasError(errorName);\n };\n\n public updateDateTime(controlName: string): void {\n this.ownerForm?.get(controlName)?.setValue(IsoDateTime.utcToLocalDateTimeIso(IsoDateTime.currentUtcDateTimeIso()));\n }\n\n public copyInputMessage(inputElement: any): void {\n inputElement.select();\n document.execCommand('copy');\n inputElement.setSelectionRange(0, 0);\n }\n\n protected onProgressStarting(): void {\n this._loading = true;\n this.ownerForm?.disable();\n this.ownerForm?.updateValueAndValidity();\n }\n\n protected onProgressCompleted(): void {\n this.ownerForm?.enable();\n this._loading = false;\n }\n}\n","/*\n * Public API Surface of shared-ui\n */\n\nexport * from './lib/mm-shared-ui.module';\nexport * from './lib/mm-notification-bar/mm-notification-bar.component';\nexport * from './lib/mm-autocomplete-input/mm-autocomplete-input.component';\nexport * from './lib/mm-entity-select-input/mm-entity-select-input.component';\nexport * from './lib/mm-multiple-entity-select-input/mm-multiple-entity-select-input.component';\nexport * from './lib/mm-confirmation-window/mm-confirmation-window.component';\nexport * from './lib/mm-breadcrumb/mm-breadcrumb.component';\nexport * from './lib/mm-file-upload/mm-file-upload.component';\nexport * from './lib/mm-table-simple/mm-table-simple.component';\nexport * from './lib/mm-qr-scan-window/mm-qr-scan-window.component';\n\nexport * from './lib/services/confirmation.service';\nexport * from './lib/services/progress-notifier.service';\nexport * from './lib/services/file-upload.service';\n\nexport * from './lib/models/confirmation';\nexport * from './lib/models/commonValidators';\nexport * from './lib/models/abstractDetailsComponent';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i5","i7","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAUa,yBAAyB,CAAA;AACpC,IAAA,SAAS,GAAG,MAAM,CAA0C,YAAY,CAAC;AACzE,IAAA,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC;AAE9B,IAAA,YAAY;AAEZ,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AAEtB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;;AAGvC,IAAA,QAAQ;uGAZG,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,+ECVtC,uQAUA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,CAAA,EAAA,CAAA;;2FDAa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAClB,KAAK,EAAA,QAAA,EAAA,uQAAA,EAAA;;;MEkBN,oBAAoB,CAAA;AACtB,IAAA,YAAY,GAAG,MAAM,CAAe,kBAAkB,CAAC;AAE7C,IAAA,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC;AACtC,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;IAE3C,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;AAC1C,YAAA,IAAI,EAAE;gBACJ,YAAY,EAAE,IAAI,CAAC;AACpB;AACF,SAAA,CAAC;;uGAXO,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBjC,oeASA,EAAA,MAAA,EAAA,CAAA,gWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDOI,kBAAkB,iEAClB,SAAS,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKE,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,OAAA,EAC5B;wBACP,kBAAkB;wBAClB,SAAS;wBACT,iBAAiB;wBACjB;AACD,qBAAA,EAAA,QAAA,EAAA,oeAAA,EAAA,MAAA,EAAA,CAAA,gWAAA,CAAA,EAAA;;;METU,0BAA0B,CAAA;AACpB,IAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;AAC9B,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAEjD,IAAA,YAAY;AAEnB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;;IAG1B,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC9D,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,oBAAoB,EAAE;oBACpD,IAAI,EAAE,IAAI,CAAC,YAAY;AACvB,oBAAA,kBAAkB,EAAE,QAAQ;AAC5B,oBAAA,gBAAgB,EAAE;AACnB,iBAAA,CAAC;;AAEN,SAAC,CAAC;;uGApBO,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,gFCXvC,eACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDUa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,KAAK,EAAA,QAAA,EAAA,eAAA,EAAA;;;MEuCN,4BAA4B,CAAA;AACvC,IAAA,KAAK,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;AAElC,IAAA,OAAO,MAAM,GAAG,CAAC;AACT,IAAA,iBAAiB;AAC1B,IAAA,SAAS;IACT,eAAe,GAAa,EAAE;AAC9B,IAAA,SAAS;AACT,IAAA,UAAU;AACV,IAAA,OAAO;AACE,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAElC,IAAA,EAAE,GAAG,CAAA,gBAAA,EAAmB,4BAA4B,CAAC,MAAM,EAAE,EAAE;AAExE,IAAA,WAAW,GAAsB,IAAI,YAAY,EAAO;AACvD,IAAA,eAAe;AACc,IAAA,UAAU;IACD,WAAW,GAAG,EAAE;AACtD,IAAA,cAAc;AAEtB,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;AAElB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AAEjB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACzD,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,SAAC,CAAC;;AAGI,IAAA,WAAW;AAEnB,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW;;IAGzB,IACW,UAAU,CAAC,KAAoC,EAAA;AACxD,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;IAGlB,SAAS,GAAG,KAAK;AAEzB,IAAA,IACW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;;IAGvB,IAAW,QAAQ,CAAC,GAAG,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;;aAC3B;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;;AAEjC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGlB,IAAA,YAAY;AAEpB,IAAA,IACW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,YAAY;;IAG1B,IAAW,WAAW,CAAC,GAAW,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;IAGlB,SAAS,GAAG,KAAK;AAEzB,IAAA,IACW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;;IAGvB,IAAW,QAAQ,CAAC,GAAG,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;;AAE3C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGlB,IAAA,OAAO;AAEf,IAAA,IACW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO;;IAGrB,IAAW,MAAM,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;;AAIxB,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,eAAe;;IAG7B,IAAW,KAAK,CAAC,KAAU,EAAA;AACzB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;AAC3C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;;AAI5B,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK;QACtC,OAAO,CAAC,CAAC;;AAGX,IAAA,IACW,gBAAgB,GAAA;QACzB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;;IAGpC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;;;;AAKrC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,iBAAiB,CAAC;iBACpB,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,MAAM,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ,CAAC,EAC5C,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EACjD,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,EAC9B,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,EAClC,GAAG,CAAC,CAAC,KAAa,KAAK,IAAI,CAAC,WAAW,EAAE,wBAAwB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAC/E,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;AAEpE,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,EAAE,IAAI,IAAI,IAAI,EAAE;oBAC3B,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC/B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;;yBACzB;AACL,wBAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,IAAI;wBACrC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE;AACtD,4BAAA,SAAS,EAAE;AACZ,yBAAA,CAAC;;;AAGN,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,aAAC,CAAC;;;QAIN,IAAI,CAAC,iBAAiB,CAAC;aACpB,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,CAAC,CAAC,KAAI;AACR,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AAC3B,SAAC,CAAC,EACF,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EAChE,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,EAClC,GAAG,CAAC,CAAC,KAAa,KAAK,IAAI,CAAC,WAAW,EAAE,wBAAwB,CAAC,KAAK,CAAC,CAAC,EACzE,GAAG,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,EACpC,SAAS,CAAC,CAAC,KAAK,KAAI;AAClB,YAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,gBAAA,OAAO,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;;AAE9D,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,SAAC,CAAC;AAEH,aAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,YAAA,IAAI,SAAS,EAAE,IAAI,IAAI,IAAI,EAAE;AAC3B,gBAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,IAAI;gBACrC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE;AACtD,oBAAA,SAAS,EAAE;AACZ,iBAAA,CAAC;;AAEJ,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,SAAC,CAAC;;IAGN,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC5B,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;IAGlD,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,KAAK,KAAK;AAC7E,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;;IAIrB,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;;IAG7B,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;;AAGnD,IAAA,gBAAgB,CAAC,KAAmC,EAAA;QACzD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;AAC/B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,KAAoC,EAAA;QAC3D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK;;IAGpC,oBAAoB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;;IAIvB,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;IAGZ,UAAU,GAAA;QACf,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;YACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;;;IAIjC,SAAS,GAAA;QACd,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGnB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;AAGrB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGd,IAAA,UAAU,CAAC,GAAQ,EAAA;QACxB,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG;;AAGX,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;;AAGrB,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QACvC,IAAK,KAAK,CAAC,MAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;YAC/D,IAAI,CAAC,KAAK,EAAE;;;AAIT,IAAA,iBAAiB,CAAC,GAAa,EAAA;QACpC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;;AAGlC,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,MAAM,SAAS,GAAQ,OAAO,CAAC,KAAK;QACpC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACzD,YAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;;AAE5B,QAAA,OAAO,IAAI;;AAGL,IAAA,gBAAgB,GAAG,CAAC,CAAM,KAAU;AAC5C,KAAC;IAEgB,UAAU,GAAG,MAAW;AACzC,KAAC;uGAnSU,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,SAAA,EAjB5B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,4BAA4B,CAAC;AAC3D,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,WAAW,EAAE;AACd,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,4BAA4B,CAAC;AAC3D,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5CH,6rBAcA,EAAA,MAAA,EAAA,CAAA,wEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDgCa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBA1BxC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,KAAK,EAAA,IAAA,EAGX;AACJ,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,yBAAyB,EAAE;qBAC5B,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kCAAkC,CAAC;AAC3D,4BAAA,KAAK,EAAE;AACR,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,WAAW,EAAA;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,kCAAkC,CAAC;AAC3D,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA,EAAA,QAAA,EAAA,6rBAAA,EAAA,MAAA,EAAA,CAAA,wEAAA,CAAA,EAAA;wDAgBe,EAAE,EAAA,CAAA;sBADjB;gBAKoC,UAAU,EAAA,CAAA;sBAA9C,SAAS;uBAAC,OAAO;gBAC4B,WAAW,EAAA,CAAA;sBAAxD,WAAW;uBAAC,uBAAuB;gBAgCzB,UAAU,EAAA,CAAA;sBADpB;gBAQU,QAAQ,EAAA,CAAA;sBADlB;gBAkBU,WAAW,EAAA,CAAA;sBADrB;gBAaU,QAAQ,EAAA,CAAA;sBADlB;gBAgBU,MAAM,EAAA,CAAA;sBADhB;gBA+BU,gBAAgB,EAAA,CAAA;sBAD1B,WAAW;uBAAC,gBAAgB;;;MEnIlB,4BAA4B,CAAA;AACvC,IAAA,KAAK,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;AAElC,IAAA,OAAO,MAAM,GAAG,CAAC;AACT,IAAA,iBAAiB;AAC1B,IAAA,SAAS;IACT,gBAAgB,GAAU,EAAE;AAC5B,IAAA,SAAS;AACT,IAAA,UAAU;AACV,IAAA,OAAO;AACE,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAElC,IAAA,EAAE,GAAG,CAAA,iBAAA,EAAoB,4BAA4B,CAAC,MAAM,EAAE,EAAE;AAEzE,IAAA,WAAW,GAAsB,IAAI,YAAY,EAAO;AACvD,IAAA,eAAe;AACc,IAAA,UAAU;IACD,WAAW,GAAG,EAAE;AACtD,IAAA,cAAc;AAEtB,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;AAElB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AAEjB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACzD,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,SAAC,CAAC;;AAGI,IAAA,WAAW;AAEnB,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW;;IAGzB,IACW,UAAU,CAAC,KAAyC,EAAA;AAC7D,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;IAGlB,SAAS,GAAG,KAAK;AAEzB,IAAA,IACW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;;IAGvB,IAAW,QAAQ,CAAC,GAAG,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;;aAC3B;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;;AAEjC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGlB,IAAA,YAAY;AAEpB,IAAA,IACW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,YAAY;;IAG1B,IAAW,WAAW,CAAC,GAAG,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;IAGlB,SAAS,GAAG,KAAK;AAEzB,IAAA,IACW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;;IAGvB,IAAW,QAAQ,CAAC,GAAG,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;;AAE3C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGlB,IAAA,OAAO;AAEf,IAAA,IACW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO;;IAGrB,IAAW,MAAM,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;;AAIxB,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,eAAe;;IAG7B,IAAW,KAAK,CAAC,KAAU,EAAA;AACzB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE;AAClC,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;AAIxB,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK;QACtC,OAAO,CAAC,CAAC;;AAGX,IAAA,IACW,gBAAgB,GAAA;QACzB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;;IAGpC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;;;;AAKrC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,iBAAiB,CAAC;AACpB,iBAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,MAAM,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ,CAAC,EAC5C,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EACjD,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,EAC9B,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;AAEnC,iBAAA,SAAS,CAAC,OAAO,KAAa,KAAI;AAEjC,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EACrB;AACE,oBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;oBACtB;;gBAGF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAE1F,gBAAA,IAAI,SAAS,CAAC,IAAI,EAAE;oBAClB,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC/B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;;yBACzB;AACL,wBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,IAAI;;;AAG1C,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,aAAC,CAAC;;;QAIN,IAAI,CAAC,iBAAiB,CAAC;AACpB,aAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,OAAO,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,EACvC,MAAM,CAAC,CAAC,KAAU,KAAK,OAAO,KAAK,KAAK,QAAQ,CAAC,EACjD,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrB,SAAC,CAAC,EACF,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EAC/C,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;AAEnC,aAAA,SAAS,CAAC,OAAO,KAAc,KAAI;AAElC,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EACrB;AACE,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;gBACtB;;YAGF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAExD,YAAA,IAAI,SAAS,EAAE,IAAI,EAAE;AACnB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,IAAI;;AAExC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,SAAC,CAAC;;IAGN,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC5B,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;IAGlD,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,KAAK,KAAK;AAC7E,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;;IAIrB,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;;IAG7B,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;;AAGnD,IAAA,gBAAgB,CAAC,KAAmC,EAAA;QACzD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;AAC/B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;AAGrB,IAAA,iBAAiB,CAAC,KAAoC,EAAA;QAC3D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK;;IAGpC,cAAc,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;;IAIvB,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;IAGZ,UAAU,GAAA;QACf,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;;;IAIlC,SAAS,GAAA;QACd,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGnB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;AAGrB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGd,IAAA,UAAU,CAAC,GAAQ,EAAA;QACxB,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG;;AAGX,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;;AAGrB,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QACvC,IAAK,KAAK,CAAC,MAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;YAC/D,IAAI,CAAC,KAAK,EAAE;;;AAIT,IAAA,iBAAiB,CAAC,GAAa,EAAA;QACpC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;;AAGlC,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,MAAM,SAAS,GAAQ,OAAO,CAAC,KAAK;AACpC,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACjC,YAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;;AAE5B,QAAA,OAAO,IAAI;;AAGL,IAAA,gBAAgB,GAAG,CAAC,CAAM,KAAU;AAC5C,KAAC;IAEgB,UAAU,GAAG,MAAW;AACzC,KAAC;AAEO,IAAA,QAAQ,CAAC,KAAU,EAAA;AACzB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;AAC3C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;;uGA1SjB,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,SAAA,EAjB5B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,4BAA4B,CAAC;AAC3D,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,WAAW,EAAE;AACd,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,4BAA4B,CAAC;AAC3D,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5CH,4xBAcA,EAAA,MAAA,EAAA,CAAA,wEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDgCa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBA1BxC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,KAAK,EAAA,IAAA,EAGX;AACJ,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,yBAAyB,EAAE;qBAC5B,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kCAAkC,CAAC;AAC3D,4BAAA,KAAK,EAAE;AACR,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,WAAW,EAAA;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,kCAAkC,CAAC;AAC3D,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA,EAAA,QAAA,EAAA,4xBAAA,EAAA,MAAA,EAAA,CAAA,wEAAA,CAAA,EAAA;wDAgBe,EAAE,EAAA,CAAA;sBADjB;gBAKoC,UAAU,EAAA,CAAA;sBAA9C,SAAS;uBAAC,OAAO;gBAC4B,WAAW,EAAA,CAAA;sBAAxD,WAAW;uBAAC,uBAAuB;gBA+BzB,UAAU,EAAA,CAAA;sBADpB;gBAQU,QAAQ,EAAA,CAAA;sBADlB;gBAkBU,WAAW,EAAA,CAAA;sBADrB;gBAaU,QAAQ,EAAA,CAAA;sBADlB;gBAgBU,MAAM,EAAA,CAAA;sBADhB;gBA4BU,gBAAgB,EAAA,CAAA;sBAD1B,WAAW;uBAAC,gBAAgB;;;ME9HlB,oCAAoC,CAAA;AAG/C,IAAA,KAAK,GAAG,MAAM,CAA0B,UAAU,CAAC;AAClC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;AAElC,IAAA,OAAO,MAAM,GAAG,CAAC;AACT,IAAA,iBAAiB;AACjB,IAAA,iBAAiB;AAC1B,IAAA,SAAS;IACT,gBAAgB,GAAU,EAAE;AAC5B,IAAA,SAAS;AACT,IAAA,UAAU;AACV,IAAA,OAAO;AACE,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAElC,IAAA,EAAE,GAAG,CAAA,0BAAA,EAA6B,oCAAoC,CAAC,MAAM,EAAE,EAAE;AAE1F,IAAA,YAAY,GAAwB,IAAI,YAAY,EAAS;AAC5D,IAAA,iBAAiB;AACY,IAAA,UAAU;IACD,WAAW,GAAG,EAAE;AACtD,IAAA,cAAc;AACb,IAAA,kBAAkB,GAAG,CAAC,KAAK,EAAE,KAAK,CAAU;AAErD,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;AAElB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAE7B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE;AAC1C,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,EAAE;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACzD,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,SAAC,CAAC;;AAGI,IAAA,WAAW;AAEnB,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW;;IAGzB,IACW,UAAU,CAAC,KAAyC,EAAA;AAC7D,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;IAGlB,SAAS,GAAG,KAAK;AAEzB,IAAA,IACW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;;IAGvB,IAAW,QAAQ,CAAC,GAAG,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;;aAC3B;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;;AAEjC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGlB,IAAA,YAAY;AAEpB,IAAA,IACW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,YAAY;;IAG1B,IAAW,WAAW,CAAC,GAAG,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;IAGlB,SAAS,GAAG,KAAK;AAEzB,IAAA,IACW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;;IAGvB,IAAW,QAAQ,CAAC,GAAG,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;;AAE3C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGlB,IAAA,OAAO;AAEf,IAAA,IACW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO;;IAGrB,IAAW,MAAM,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;;AAIxB,IAAA,IAAW,KAAK,GAAA;QACd,OAAO,IAAI,CAAC,iBAAiB;;IAG/B,IAAW,KAAK,CAAC,KAAmB,EAAA;AAClC,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,iBAAiB,EAAE;AACpC,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;;;AAIxB,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK;QACtC,OAAO,CAAC,CAAC;;AAGX,IAAA,IACW,gBAAgB,GAAA;QACzB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;;IAGpC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;;;;AAKrC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,iBAAiB,CAAC;AACpB,iBAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,MAAM,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ,CAAC,EAC5C,MAAM,CAAC,CAAC,KAAa,KAAK,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EACzD,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,EAClC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;AAErG,iBAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,gBAAA,IAAI,SAAS,EAAE,IAAI,EAAE;AACnB,oBAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,IAAI;;AAExC,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,aAAC,CAAC;;;QAIN,IAAI,CAAC,iBAAiB,CAAC;AACpB,aAAA,IAAI,CACH,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,OAAO,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,EACvC,MAAM,CAAC,CAAC,KAAK,KAAK,OAAO,KAAK,KAAK,QAAQ,CAAC,EAC5C,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EAC/C,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,EAClC,SAAS,CAAC,CAAC,KAAa,KAAK,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;AAE5E,aAAA,SAAS,CAAC,CAAC,SAAS,KAAI;AACvB,YAAA,MAAM,UAAU,GAAG,IAAI,KAAK,EAAO;AAEnC,YAAA,IAAI,SAAS,EAAE,IAAI,EAAE;gBACnB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAChC,oBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE;AAClH,wBAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;;AAE3B,iBAAC,CAAC;;AAGJ,YAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,SAAC,CAAC;;IAGN,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC5B,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;;IAGlD,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,KAAK,KAAK;AAC7E,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;;IAIrB,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;;IAG7B,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;;AAGnD,IAAA,gBAAgB,CAAC,KAAmC,EAAA;AACzD,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK;AACrB,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,YAAA,IAAI,GAAG,IAAI,KAAK,EAAO;;QAEzB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAEjB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE;;AAG1C,IAAA,iBAAiB,CAAC,KAAoC,EAAA;QAC3D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK;;IAGpC,cAAc,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;;IAIvB,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAO;;IAGxB,UAAU,GAAA;;;;;;IAOV,SAAS,GAAA;QACd,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGnB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;AAGrB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGd,IAAA,UAAU,CAAC,GAAQ,EAAA;QACxB,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG;;AAGX,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;;AAGrB,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QACvC,IAAK,KAAK,CAAC,MAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;YAC/D,IAAI,CAAC,KAAK,EAAE;;;AAIT,IAAA,iBAAiB,CAAC,GAAa,EAAA;QACpC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;;AAGlC,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,MAAM,SAAS,GAAQ,OAAO,CAAC,KAAK;AACpC,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACjC,YAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;;AAE5B,QAAA,OAAO,IAAI;;AAGb,IAAA,MAAM,CAAC,KAAU,EAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;AAEvB,YAAA,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE;;;AAI3C,IAAA,gBAAgB,GAAG,CAAC,CAAQ,KAAU,GAAG;AAEhC,IAAA,UAAU,GAAG,MAAW,GAAG;AAEpC,IAAA,QAAQ,CAAC,MAAoB,EAAA;AACnC,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,iBAAiB,EAAE;AACrC,YAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM;YAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;AACnD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;;uGAjTjB,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oCAAoC,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,SAAA,EAjBpC;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oCAAoC,CAAC;AACnE,gBAAA,KAAK,EAAE;AACR,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,WAAW,EAAE;AACd,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oCAAoC,CAAC;AACnE,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7CH,sgDA6BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,IAAA,EAAA,UAAA,EAAA,UAAA,EAAA,iCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,wEAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDkBa,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBA1BhD,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,KAAK,EAAA,IAAA,EAGX;AACJ,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,yBAAyB,EAAE;qBAC5B,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,0CAA0C,CAAC;AACnE,4BAAA,KAAK,EAAE;AACR,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,WAAW,EAAA;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,0CAA0C,CAAC;AACnE,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA,EAAA,QAAA,EAAA,sgDAAA,EAAA;wDAmBe,EAAE,EAAA,CAAA;sBADjB;gBAKoC,UAAU,EAAA,CAAA;sBAA9C,SAAS;uBAAC,OAAO;gBAC4B,WAAW,EAAA,CAAA;sBAAxD,WAAW;uBAAC,uBAAuB;gBAkCzB,UAAU,EAAA,CAAA;sBADpB;gBAQU,QAAQ,EAAA,CAAA;sBADlB;gBAkBU,WAAW,EAAA,CAAA;sBADrB;gBAaU,QAAQ,EAAA,CAAA;sBADlB;gBAgBU,MAAM,EAAA,CAAA;sBADhB;gBA4BU,gBAAgB,EAAA,CAAA;sBAD1B,WAAW;uBAAC,gBAAgB;;;MEpLlB,cAAc,CAAA;AAEzB,IAAA,WAAA,CAAY,KAAa,EAAE,aAAqB,EAAE,GAAW,EAAA;AAC3D,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;;AAGhB,IAAA,KAAK;AACL,IAAA,aAAa;AACb,IAAA,GAAG;AACJ;;MCCY,qBAAqB,CAAA;AACf,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAEpD,cAAc,GAAqB,EAAE;IACtC,QAAQ,GAAG,MAAM;IACjB,SAAS,GAAG,SAAS;IACrB,aAAa,GAAG,MAAM;IACtB,MAAM,GAAG,KAAK;AAEvB,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,cAAc,EAAE;;IAGvB,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,SAAiB,KAAI;AACtE,YAAA,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;gBACjD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,cAA8B,KAAI;oBAC7D,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC;oBACvE,IAAI,WAAW,EAAE;AACf,wBAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AACpC,4BAAA,IAAI,UAAU,KAAK,GAAG,EAAE;AACtB,gCAAA,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,UAAU,GAAG,IAAI,EAAG,KAAgB,CAAC;;;;AAIhH,iBAAC,CAAC;AACJ,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,UAAwB,KAAI;AAC1E,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC;;AAEpD,SAAC,CAAC;;IAGJ,cAAc,GAAA;QACZ,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,aAAa,CAAC;aACtD,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC;AACnC,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,KAAK,KAAI;AACZ,YAAA,OAAO,KAAK,CAAC,UAAU,EAAE;AACvB,gBAAA,KAAK,GAAG,KAAK,CAAC,UAAU;;AAE1B,YAAA,OAAO,KAAK;AACd,SAAC,CAAC;AAEH,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC;AACvD,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;AAC9B,SAAC,CAAC;;IAGE,UAAU,CAAC,KAAqB,EAAE,aAAkC,EAAA;QAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,aAAa,EAAE;YACtD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,aAAa;AAClG,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAiB;AACnE,YAAA,MAAM,cAAc,GAAG,IAAI,KAAK,EAAkB;AAClD,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,KAAkB,KAAI;AACxC,gBAAA,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;AAClF,gBAAA,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAEvC,gBAAA,IAAI,kBAAkB,CAAC,GAAG,EAAE;oBAC1B,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACnD,oBAAA,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;AAC7B,wBAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;4BACvB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;4BACtC,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAW;AAC9D,4BAAA,kBAAkB,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAA,CAAE,EAAE,aAAa,CAAC;;;;gBAK9E,MAAM,WAAW,GAAG,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC;gBAC3E,IAAI,WAAW,EAAE;AACf,oBAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AACpC,wBAAA,MAAM,aAAa,GAAG,kBAAkB,CAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAY,CAAC;wBAC9F,IAAI,aAAa,EAAE;AACjB,4BAAA,kBAAkB,CAAC,KAAK,GAAG,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,UAAU,GAAG,IAAI,EAAE,aAAa,CAAC;;6BACvG;AACL,4BAAA,kBAAkB,CAAC,KAAK,GAAG,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,UAAU,GAAG,IAAI,EAAE,EAAE,CAAC;;;;AAIzG,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,cAAc,GAAG,cAAc;;aAC/B;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;;;uGA1FjB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,sLCZlC,8nBAYA,EAAA,MAAA,EAAA,CAAA,2EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDAa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cACb,KAAK,EAAA,QAAA,EAAA,8nBAAA,EAAA,MAAA,EAAA,CAAA,2EAAA,CAAA,EAAA;wDAUR,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,MAAM,EAAA,CAAA;sBAAd;;;IErBS;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAE;AACF,IAAA,WAAA,CAAA,WAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,WAAA,CAAA,WAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG;AACH,IAAA,WAAA,CAAA,WAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAE;AACJ,CAAC,EALW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;IAOX;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,UAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT,IAAA,UAAA,CAAA,UAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAe;AACf,IAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY;AACZ,IAAA,UAAA,CAAA,UAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAM;AACR,CAAC,EALW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;MCGT,6BAA6B,CAAA;AACvB,IAAA,SAAS,GAAG,MAAM,CAA8C,YAAY,CAAC;AAC9F,IAAA,IAAI,GAAG,MAAM,CAAyB,eAAe,CAAC;AAEtD,IAAA,WAAW;AACX,IAAA,aAAa;AACb,IAAA,WAAW;AACX,IAAA,aAAa;AACb,IAAA,WAAW;AACX,IAAA,aAAa;AAEb,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AAEtB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAEzB,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,QAAQ,EAAE;AAC3C,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,GAAG,QAAQ;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,MAAM;;aAClC,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,WAAW,EAAE;AACrD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG;AACpC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,GAAG,QAAQ;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,MAAM;;aAClC,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,EAAE,EAAE;AAC5C,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,EAAE;;aAC9B;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG;AACpC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,EAAE;;;AAIvC,IAAA,QAAQ;IAER,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE;YACpB,MAAM,EAAE,IAAI,CAAC;AACe,SAAA,CAAC;;IAGjC,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE;YACpB,MAAM,EAAE,IAAI,CAAC;AACe,SAAA,CAAC;;IAGjC,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE;YACpB,MAAM,EAAE,IAAI,CAAC;AACe,SAAA,CAAC;;uGA3DtB,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,mFCV1C,4cAOA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,CAAA,EAAA,CAAA;;2FDGa,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBANzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,cACtB,KAAK,EAAA,QAAA,EAAA,4cAAA,EAAA;;;MEeN,yBAAyB,CAAA;AACpC,IAAA,IAAI,GAAG,MAAM,CAAqB,eAAe,CAAC;AAE3C,IAAA,UAAU;AACV,IAAA,aAAa;AAEpB,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AAEtB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;QAEtB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;AAClC,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa;AAC1C,SAAC,CAAC;;AAGJ,IAAA,QAAQ;IAER,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;;uGArBlB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,+ECrBtC,sgBAWA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDUa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAClB,KAAK,EAAA,QAAA,EAAA,sgBAAA,EAAA;;;MEPN,mBAAmB,CAAA;AACb,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;IAG3C,2BAA2B,CAAC,KAAa,EAAE,OAAe,EAAA;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAChC,6BAA6B,EAC7B;AACE,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE;gBACJ,KAAK;gBACL,OAAO;gBACP,UAAU,EAAE,UAAU,CAAC;AACE;AAC5B,SAAA,CACF;QAED,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;;IAGxF,iCAAiC,CAAC,KAAa,EAAE,OAAe,EAAA;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAChC,6BAA6B,EAC7B;AACE,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE;gBACJ,KAAK;gBACL,OAAO;gBACP,UAAU,EAAE,UAAU,CAAC;AACE;AAC5B,SAAA,CACF;AAED,QAAA,OAAO,SAAS,CAAC,WAAW,EAAE;;IAGhC,8BAA8B,CAAC,KAAa,EAAE,OAAe,EAAA;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAChC,6BAA6B,EAC7B;AACE,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE;gBACJ,KAAK;gBACL,OAAO;gBACP,UAAU,EAAE,UAAU,CAAC;AACE;AAC5B,SAAA,CACF;QAED,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC;;IAGvF,YAAY,CAAC,KAAa,EAAE,OAAe,EAAA;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAChC,6BAA6B,EAC7B;AACE,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE;gBACJ,KAAK;gBACL,OAAO;gBACP,UAAU,EAAE,UAAU,CAAC;AACE;AAC5B,SAAA,CACF;QAED,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,MAAM,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC;;uGArE5E,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCFY,uBAAuB,CAAA;AACjB,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AAE1B,IAAA,qBAAqB;AAC9B,IAAA,gBAAgB;AAExB,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,qBAAqB,GAAG,IAAI,eAAe,CAAuB,IAAI,CAAC;AAC5E,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;AAGlB,IAAA,WAAW;AAEnB,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;;IAGzB,IAAI,UAAU,CAAC,KAAK,EAAA;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;;AAG1B,IAAA,KAAK,CAAC,KAAa,EAAE,aAAsB,EAAE,0BAAmC,EAAA;AAC9E,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,IAAI,CAAC,yBAAyB,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC;QAEpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAsE,yBAAyB,EAAE;AACvI,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE;gBACJ,KAAK;gBACL,aAAa;AACb,gBAAA,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;gBACnD,0BAA0B;gBAC1B,eAAe,EAAE,MAAK;AACpB,oBAAA,IAAI,CAAC,2BAA2B,CAAC,wBAAwB,CAAC;AAC1D,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;AAEH;AACxB,SAAA,CAAC;;AAGJ,IAAA,yBAAyB,CAAC,eAAuB,EAAE,WAAmB,EAAE,UAAkB,EAAA;QACxF,MAAM,kBAAkB,GAAG,CAAC,WAAW,GAAG,GAAG,IAAI,eAAe;AAEhE,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAE;YAC/B,UAAU;AACV,YAAA,aAAa,EAAE;AACE,SAAA,CAAC;;AAGtB,IAAA,2BAA2B,CAAC,UAAkB,EAAA;AAC5C,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAE;YAC/B,UAAU;AACV,YAAA,aAAa,EAAE;AACE,SAAA,CAAC;;IAGtB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE;;uGA3DrB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAvB,uBAAuB,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;MCKY,qBAAqB,CAAA;AACf,IAAA,SAAS,GAAG,MAAM,CAAsC,YAAY,CAAC;AAC5E,IAAA,IAAI,GAAG,MAAM,CAAiB,eAAe,CAAC;AAChD,IAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;AAE5B,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,QAAQ,GAAG,MAAM,CAAC,CAAC,oDAAC;AACpB,IAAA,cAAc,GAAG,MAAM,CAAC,CAAC,0DAAC;AACF,IAAA,SAAS;IACjC,YAAY,GAAgB,IAAI;AAChC,IAAA,aAAa;AACb,IAAA,WAAW;AAGrB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;;AAI5B,IAAA,YAAY,CAAC,KAAU,EAAA;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAgB;AACjD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;;;AAIvB,IAAA,UAAU,CAAC,KAAgB,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAgB;AACxD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;;;AAIvB,IAAA,UAAU,CAAC,KAAgB,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;;;AAIxB,IAAA,UAAU,CAAC,IAAiB,EAAA;QAC1B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1F,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;QAC3G,IAAI,CAAC,IAAI,EAAE;YACT;;QAEF,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;AAC/E,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC;AAEtC,QAAA,IAAI,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACrF,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AAEhD,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;aACxB;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,OAAO,EAAE;AACtD,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,UAAU,EAAE,OAAO;AACpB,aAAA,CAAC;;;;IAKN,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;;IAG5B,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE;AACpB,YAAA,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,IAAI,CAAC;AACC,SAAA,CAAC;;IAGzB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE;AACpB,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,YAAY,EAAE;AACM,SAAA,CAAC;;uGAvFd,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,sLCXlC,slCAmCA,EAAA,MAAA,EAAA,CAAA,qhBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDxBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cACjB,KAAK,EAAA,QAAA,EAAA,slCAAA,EAAA,MAAA,EAAA,CAAA,qhBAAA,CAAA,EAAA;wDAYiB,SAAS,EAAA,CAAA;sBAA1C,SAAS;uBAAC,WAAW;;;MEPX,iBAAiB,CAAA;AACX,IAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;IAI3C,MAAM,gBAAgB,CAAC,KAAa,EAAE,OAAe,EAAE,SAAiB,EAAE,cAAA,GAAgC,IAAI,EAAA;QAC5G,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAChC,qBAAqB,EACrB;AACE,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,IAAI,EAAE;gBACJ,KAAK;gBACL,OAAO;gBACP,SAAS;gBACT;AACiB;AACpB,SAAA,CACF;QAED,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AACvD,QAAA,MAAM,OAAO,GAAI,CAAC,EAAE,OAAO,IAAI,KAAK;QACpC,IAAI,OAAO,EAAC;AACV,YAAA,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI;;AAEhC,QAAA,OAAO,IAAI;;uGAzBF,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MC2BY,sBAAsB,CAAA;IACxB,UAAU,GAAI,EAAE;IAChB,KAAK,GAAU,EAAE;IACjB,OAAO,GAAsC,EAAE;AAExD,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;;uGAN9B,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtCnC,wpBAeA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDKI,QAAQ,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,aAAa,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,OAAO,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,YAAY,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,MAAM,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,SAAS,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,OAAO,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,aAAa,sMACb,kBAAkB,EAAA,CAAA,EAAA,CAAA;;2FAKT,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAtBlC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP;wBACP,QAAQ;wBACR,YAAY;wBACZ,aAAa;wBACb,OAAO;wBACP,YAAY;wBACZ,MAAM;wBACN,eAAe;wBACf,SAAS;wBACT,gBAAgB;wBAChB,UAAU;wBACV,OAAO;wBACP,OAAO;wBACP,aAAa;wBACb;AACD,qBAAA,EAAA,QAAA,EAAA,wpBAAA,EAAA;8BAKQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,OAAO,EAAA,CAAA;sBAAf;;;ME9BU,wBAAwB,CAAA;AACG,IAAA,QAAQ;AAEpC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAiB;;AAGlD,IAAA,SAAS,GAAG,MAAM,EAAC,YAAsC,GAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC9F,IAAA,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;AAC9B,IAAA,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAErD,QAAQ,GAAG,KAAK;AAER,IAAA,MAAM,qBAAqB,GAAA;QACjC,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,YAAY;AAAE,YAAA,OAAO,IAAI;AAElE,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAA0B,EAAE,CAAC;AACtF,YAAA,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;;AAEhC,QAAA,MAAM;YACN,OAAO,IAAI,CAAC;;;AAIR,IAAA,KAAK,CAAC,MAAqB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;;;IAIhC,OAAO,IAAI,CAAC,MAAiB,EAAA;AAC3B,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAChD,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,UAAU,EAAE,oBAAoB;AAChC,YAAA,YAAY,EAAE;AACf,SAAA,CAAC;AAEF,QAAA,OAAO,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;;AAG1C,IAAA,MAAM,QAAQ,GAAA;AAEZ,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE;QAExD,IAAI,CAAC,aAAa,EAAE;YAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,sEAAsE,EACtE,IAAI,EACJ;AACE,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,kBAAkB,EAAE,QAAQ;AAC5B,gBAAA,gBAAgB,EAAE,KAAK;AACxB,aAAA,CACF;AACD,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAChB;;QAGF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;QACzD,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,+CAA+C,EAC/C,IAAI,EACJ;AACE,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,kBAAkB,EAAE,QAAQ;AAC5B,gBAAA,gBAAgB,EAAE,KAAK;AACxB,aAAA,CACA;AACH,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAChB;;AAGF,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC1E,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;QACrB,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC;AACpC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;gBACR;AACR,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;;IAIzB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;IAGlB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;uGA9FjB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,0OCXrC,wKAIA,EAAA,MAAA,EAAA,CAAA,wTAAA,CAAA,EAAA,CAAA;;2FDOa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,wKAAA,EAAA,MAAA,EAAA,CAAA,wTAAA,CAAA,EAAA;8BAKQ,QAAQ,EAAA,CAAA;sBAA7C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAE1B,YAAY,EAAA,CAAA;sBAArB;;;ME2DU,gBAAgB,CAAA;AAC3B,IAAA,OAAO,OAAO,GAAA;QACZ,OAAO;AACL,YAAA,QAAQ,EAAE,gBAAgB;AAC1B,YAAA,SAAS,EAAE;gBACT,iBAAiB;gBACjB,mBAAmB;gBACnB;AACD;SACF;;uGATQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,iBAzCzB,qBAAqB;YACrB,6BAA6B;YAC7B,yBAAyB;YACzB,0BAA0B;YAC1B,yBAAyB;YACzB,4BAA4B;YAC5B,4BAA4B;YAC5B,oCAAoC;AACpC,YAAA,qBAAqB,aAcrB,YAAY;YACZ,gBAAgB;YAChB,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,qBAAqB;YACrB,cAAc;YACd,wBAAwB;YACxB,cAAc;YACd,aAAa;YACb,mBAAmB;YACnB,OAAO;YACP,aAAa;YACb,UAAU;YACV,sBAAsB;YACtB,cAAc;AACd,YAAA,wBAAwB,aA3BxB,qBAAqB;YACrB,6BAA6B;YAC7B,0BAA0B;YAC1B,4BAA4B;YAC5B,4BAA4B;YAC5B,oCAAoC;YACpC,qBAAqB;YACrB,sBAAsB;YACtB,wBAAwB,CAAA,EAAA,CAAA;AAsBf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAnBzB,YAAY;YACZ,gBAAgB;YAChB,eAAe;YACf,iBAAiB;YACjB,eAAe;YACf,qBAAqB;YACrB,cAAc;YACd,wBAAwB;YACxB,cAAc;YACd,aAAa;YACb,mBAAmB;YACnB,OAAO;YACP,aAAa;YAEb,sBAAsB;YACtB,cAAc,CAAA,EAAA,CAAA;;2FAIL,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA3C5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,qBAAqB;wBACrB,6BAA6B;wBAC7B,yBAAyB;wBACzB,0BAA0B;wBAC1B,yBAAyB;wBACzB,4BAA4B;wBAC5B,4BAA4B;wBAC5B,oCAAoC;wBACpC;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,qBAAqB;wBACrB,6BAA6B;wBAC7B,0BAA0B;wBAC1B,4BAA4B;wBAC5B,4BAA4B;wBAC5B,oCAAoC;wBACpC,qBAAqB;wBACrB,sBAAsB;wBACtB;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,gBAAgB;wBAChB,eAAe;wBACf,iBAAiB;wBACjB,eAAe;wBACf,qBAAqB;wBACrB,cAAc;wBACd,wBAAwB;wBACxB,cAAc;wBACd,aAAa;wBACb,mBAAmB;wBACnB,OAAO;wBACP,aAAa;wBACb,UAAU;wBACV,sBAAsB;wBACtB,cAAc;wBACd;AACD;AACF,iBAAA;;;ACpED,SAAS,iBAAiB,CAAC,KAAU,EAAA;;IAEnC,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAC5C;MAEa,gBAAgB,CAAA;AACpB,IAAA,OAAO,WAAW,GAAA;AACvB,QAAA,OAAO,UAAU,CAAC,OAAO,CAAC,gDAAgD,CAAC;;AAGtE,IAAA,OAAO,OAAO,GAAA;AACnB,QAAA,OAAO,UAAU,CAAC,OAAO,CACvB,0HAA0H,CAC3H;;IAGI,OAAO,eAAe,CAAC,iBAAyB,EAAA;QACrD,OAAO,CAAC,OAAwB,KAAI;AAClC,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;YAC3B,OAAO,KAAK,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;AAC3F,SAAC;;AAGI,IAAA,OAAO,mBAAmB,CAC/B,iBAAyB,EACzB,4BAA2D,EAAA;QAE3D,OAAO,CAAC,OAAwB,KAAI;YAClC,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,IAAI,4BAA4B,CAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAuB,CAAC,EAAE;AAC3H,gBAAA,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI;;AAErE,YAAA,OAAO,IAAI;AACb,SAAC;;IAGI,OAAO,iBAAiB,CAAC,YAAsB,EAAA;QACpD,OAAO,CAAC,OAAwB,KAAI;AAClC,YAAA,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;gBACnC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,sBAAsB,EAAE;AAC5D,aAAC,CAAC;AACF,YAAA,OAAO,IAAI;AACb,SAAC;;AAEJ;;MC5CqB,wBAAwB,CAAA;AACpC,IAAA,QAAQ;AACC,IAAA,UAAU;AACnB,IAAA,OAAO;AAEf,IAAA,WAAA,CAAsB,SAAoB,EAAA;AACxC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;;AAG7B,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ;;IAGtB,IAAW,OAAO,CAAC,KAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAGvB,IAAA,IAAW,MAAM,GAAA;QACf,OAAO,IAAI,CAAC,OAAO;;IAGrB,IAAW,MAAM,CAAC,KAAqB,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;AAGtB,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU;;AAGxB,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI;;AAGvB,IAAA,QAAQ,GAAG,CAAC,WAAmB,EAAE,SAAiB,KAAa;AACpE,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;AAClE,KAAC;AAEM,IAAA,YAAY,GAAG,CAAC,SAAiB,KAAa;QACnD,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;AAC5C,KAAC;AAEM,IAAA,cAAc,CAAC,WAAmB,EAAA;QACvC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,qBAAqB,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,CAAC;;AAG7G,IAAA,gBAAgB,CAAC,YAAiB,EAAA;QACvC,YAAY,CAAC,MAAM,EAAE;AACrB,QAAA,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;AAC5B,QAAA,YAAY,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;;IAG5B,kBAAkB,GAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AACzB,QAAA,IAAI,CAAC,SAAS,EAAE,sBAAsB,EAAE;;IAGhC,mBAAmB,GAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAExB;;AClED;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"meshmakers-shared-ui.mjs","sources":["../../../../projects/meshmakers/shared-ui/src/lib/mm-message-details/mm-message-details.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-message-details/mm-message-details.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-notification-bar/notification-snack-bar/notification-snack-bar.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-notification-bar/notification-snack-bar/notification-snack-bar.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-notification-bar/mm-notification-bar.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-notification-bar/mm-notification-bar.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-autocomplete-input/mm-autocomplete-input.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-autocomplete-input/mm-autocomplete-input.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-entity-select-input/mm-entity-select-input.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-entity-select-input/mm-entity-select-input.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-multiple-entity-select-input/mm-multiple-entity-select-input.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-multiple-entity-select-input/mm-multiple-entity-select-input.component.html","../../../../projects/meshmakers/shared-ui/src/lib/services/breadcrumbData.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-breadcrumb/mm-breadcrumb.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-breadcrumb/mm-breadcrumb.component.html","../../../../projects/meshmakers/shared-ui/src/lib/models/confirmation.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-confirmation-window/mm-confirmation-window.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-confirmation-window/mm-confirmation-window.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-progress-window/mm-progress-window.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-progress-window/mm-progress-window.component.html","../../../../projects/meshmakers/shared-ui/src/lib/services/confirmation.service.ts","../../../../projects/meshmakers/shared-ui/src/lib/services/progress-notifier.service.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-file-upload/mm-file-upload.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-file-upload/mm-file-upload.component.html","../../../../projects/meshmakers/shared-ui/src/lib/services/file-upload.service.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-table-simple/mm-table-simple.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-table-simple/mm-table-simple.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-qr-scan-window/mm-qr-scan-window.component.ts","../../../../projects/meshmakers/shared-ui/src/lib/mm-qr-scan-window/mm-qr-scan-window.component.html","../../../../projects/meshmakers/shared-ui/src/lib/mm-shared-ui.module.ts","../../../../projects/meshmakers/shared-ui/src/lib/models/commonValidators.ts","../../../../projects/meshmakers/shared-ui/src/lib/models/abstractDetailsComponent.ts","../../../../projects/meshmakers/shared-ui/src/public-api.ts","../../../../projects/meshmakers/shared-ui/src/meshmakers-shared-ui.ts"],"sourcesContent":["import { Component, OnInit, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ErrorMessage } from '@meshmakers/shared-services';\n\n@Component({\n selector: 'mm-message-details',\n standalone: false,\n templateUrl: './mm-message-details.component.html',\n styleUrls: ['./mm-message-details.component.css']\n})\nexport class MmMessageDetailsComponent implements OnInit {\n dialogRef = inject<MatDialogRef<MmMessageDetailsComponent>>(MatDialogRef);\n data = inject(MAT_DIALOG_DATA);\n\n errorMessage: ErrorMessage;\n\n constructor() {\n const data = this.data;\n\n this.errorMessage = data.errorMessage;\n }\n\n ngOnInit(): void {}\n}\n","<mat-dialog-content>\n\n <h2>{{errorMessage.title}}</h2>\n <p>{{errorMessage.message}}</p>\n\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button class=\"primary-button\" mat-dialog-close mat-flat-button>OK</button>\n</mat-dialog-actions>\n","import { Component, inject } from '@angular/core';\nimport {\n MAT_SNACK_BAR_DATA,\n MatSnackBarAction,\n MatSnackBarActions,\n MatSnackBarRef\n} from \"@angular/material/snack-bar\";\nimport {MatButton} from \"@angular/material/button\";\nimport {ErrorMessage} from \"@meshmakers/shared-services\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {MmMessageDetailsComponent} from \"../../mm-message-details/mm-message-details.component\";\nimport {MatIcon} from \"@angular/material/icon\";\n\n@Component({\n selector: 'mm-notification-snack-bar',\n imports: [\n MatSnackBarActions,\n MatButton,\n MatSnackBarAction,\n MatIcon\n ],\n templateUrl: './notification-snack-bar.html',\n styleUrl: './notification-snack-bar.scss'\n})\nexport class NotificationSnackBar {\n readonly errorMessage = inject<ErrorMessage>(MAT_SNACK_BAR_DATA);\n\n protected readonly snackBarRef = inject(MatSnackBarRef);\n private readonly dialog = inject(MatDialog);\n\n onShowDetails(): void {\n this.dialog.open(MmMessageDetailsComponent, {\n data: {\n errorMessage: this.errorMessage\n }\n });\n }\n}\n"," <a (click)=\"onShowDetails()\" class=\"notification-text\">\n <span>\n {{ errorMessage?.title }}\n </span>\n </a>\n <span matSnackBarActions>\n <button matButton matSnackBarAction (click)=\"onShowDetails()\"><mat-icon class=\"material-symbols-outlined\">bug_report</mat-icon>Details</button>\n <button matButton matSnackBarAction (click)=\"snackBarRef.dismissWithAction()\"><mat-icon class=\"material-symbols-outlined\">close</mat-icon>Close</button>\n </span>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { ErrorMessage, MessageService } from '@meshmakers/shared-services';\nimport {MatSnackBar} from \"@angular/material/snack-bar\";\nimport {NotificationSnackBar} from \"./notification-snack-bar/notification-snack-bar\";\n\n@Component({\n selector: 'mm-notification-bar',\n standalone: false,\n templateUrl: './mm-notification-bar.component.html',\n styleUrls: ['./mm-notification-bar.component.scss']\n})\nexport class MmNotificationBarComponent implements OnInit {\n private readonly snackBar = inject(MatSnackBar);\n private readonly messageService = inject(MessageService);\n\n public errorMessage: ErrorMessage | null;\n\n constructor() {\n this.errorMessage = null;\n }\n\n ngOnInit(): void {\n this.messageService.getLatestErrorMessage().subscribe((value) => {\n this.errorMessage = value;\n if (this.errorMessage) {\n this.snackBar.openFromComponent(NotificationSnackBar, {\n data: this.errorMessage,\n horizontalPosition: \"center\",\n verticalPosition: \"top\"\n });\n }\n });\n }\n}\n","<div></div>\n","import { Component, DoCheck, ElementRef, EventEmitter, forwardRef, HostBinding, Injector, Input, OnDestroy, OnInit, ViewChild, inject } from \"@angular/core\";\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n ValidationErrors,\n Validator\n} from \"@angular/forms\";\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { debounceTime, filter, map, switchMap, tap } from \"rxjs/operators\";\nimport { MatAutocompleteActivatedEvent, MatAutocompleteSelectedEvent } from \"@angular/material/autocomplete\";\nimport { MatInput } from \"@angular/material/input\";\nimport { of, Subject } from \"rxjs\";\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\nimport { AutoCompleteDataSource } from \"@meshmakers/shared-services\";\n\n@Component({\n selector: \"mm-autocomplete\",\n standalone: false,\n templateUrl: \"./mm-autocomplete-input.component.html\",\n styleUrls: [\"./mm-autocomplete-input.component.css\"],\n host: {\n \"[id]\": \"id\",\n \"[attr.aria-describedby]\": \"describedBy\"\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MmAutocompleteInputComponent),\n multi: true\n },\n {\n provide: MatFormFieldControl,\n useExisting: MmAutocompleteInputComponent\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MmAutocompleteInputComponent),\n multi: true\n }\n ]\n})\nexport class MmAutocompleteInputComponent implements OnInit, OnDestroy, DoCheck, ControlValueAccessor, MatFormFieldControl<any>, Validator {\n elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly fm = inject(FocusMonitor);\n\n private static nextId = 0;\n public readonly searchFormControl: FormControl;\n public isLoading: boolean;\n public filteredStrings: string[] = [];\n public ngControl: NgControl | null;\n public errorState: boolean;\n public focused: boolean;\n public readonly stateChanges = new Subject<void>();\n @HostBinding()\n public readonly id = `ia-autocomplete-${MmAutocompleteInputComponent.nextId++}`;\n\n public valueChange: EventEmitter<any> = new EventEmitter<any>();\n private _selectedString: string | null;\n @ViewChild(\"input\") private readonly inputField: MatInput | null;\n @HostBinding(\"attr.aria-describedby\") private describedBy = \"\";\n private activatedValue: any;\n\n constructor() {\n const elRef = this.elRef;\n const fm = this.fm;\n\n this.ngControl = null;\n this.errorState = false;\n this._selectedString = null;\n this.inputField = null;\n this._dataSource = null;\n this._placeholder = \"\";\n this._prefix = \"\";\n\n this.searchFormControl = new FormControl();\n this.isLoading = false;\n this._disabled = false;\n this.focused = false;\n fm.monitor(elRef.nativeElement, true).subscribe((origin) => {\n this.focused = !!origin;\n this.stateChanges.next();\n });\n }\n\n private _dataSource: AutoCompleteDataSource | null;\n\n public get dataSource(): AutoCompleteDataSource | null {\n return this._dataSource;\n }\n\n @Input()\n public set dataSource(value: AutoCompleteDataSource | null) {\n this._dataSource = value;\n }\n\n private _disabled = false;\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(dis) {\n this._disabled = coerceBooleanProperty(dis);\n if (this._disabled) {\n this.searchFormControl.disable();\n } else {\n this.searchFormControl.enable();\n }\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n @Input()\n public get placeholder(): string {\n return this._placeholder;\n }\n\n public set placeholder(plh: string) {\n this._placeholder = plh;\n this.stateChanges.next();\n }\n\n private _required = false;\n\n @Input()\n public get required(): boolean {\n return this._required;\n }\n\n public set required(req) {\n this._required = coerceBooleanProperty(req);\n if (this.inputField != null) {\n this.inputField.required = this._required;\n }\n this.stateChanges.next();\n }\n\n private _prefix: string;\n\n @Input()\n public get prefix(): string {\n return this._prefix;\n }\n\n public set prefix(value: string) {\n if (value !== this._prefix) {\n this._prefix = value;\n }\n }\n\n public get value(): any {\n return this._selectedString;\n }\n\n public set value(value: any) {\n if (value !== this._selectedString) {\n this._selectedString = value;\n this.searchFormControl.setValue(value);\n this.valueChange.emit(value);\n this._propagateChange(this._selectedString);\n this.stateChanges.next();\n }\n }\n\n public get empty(): boolean {\n const n = this.searchFormControl.value;\n return !n;\n }\n\n @HostBinding(\"class.floating\")\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n ngOnInit(): void {\n this.ngControl = this.injector.get(NgControl, null);\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // If prefix defined, usually this is used for a code scanner.\n // The goal is to select the entity in direct way.\n if (this._prefix) {\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n filter((value) => typeof value === \"string\"),\n filter((value) => value.startsWith(this._prefix)),\n tap(() => (this.value = null)),\n tap(() => (this.isLoading = true)),\n map((value: string) => this._dataSource?.onPreprocessSearchString(value) ?? \"\"),\n switchMap((value) => this._dataSource?.onFilter(value) ?? of(null))\n )\n .subscribe((resultSet) => {\n if (resultSet?.list != null) {\n if (resultSet.list.length === 1) {\n this.value = resultSet.list[0];\n } else {\n this.filteredStrings = resultSet.list;\n this.searchFormControl.patchValue(resultSet.searchTerm, {\n emitEvent: false\n });\n }\n }\n this.isLoading = false;\n });\n }\n\n // This is the search functionality when search by human.\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n tap((_) => {\n this.filteredStrings = [];\n }),\n filter((value) => value != null && value.toString().length >= 1),\n tap(() => (this.isLoading = true)),\n map((value: string) => this._dataSource?.onPreprocessSearchString(value)),\n tap((value) => (this.value = value)),\n switchMap((value) => {\n if (value !== null) {\n return this._dataSource?.onFilter(String(value)) ?? of(null);\n }\n return of(null);\n })\n )\n .subscribe((resultSet) => {\n if (resultSet?.list != null) {\n this.filteredStrings = resultSet.list;\n this.searchFormControl.patchValue(resultSet.searchTerm, {\n emitEvent: false\n });\n }\n this.isLoading = false;\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n this.fm.stopMonitoring(this.elRef.nativeElement);\n }\n\n ngDoCheck(): void {\n if (this.ngControl != null) {\n this.errorState = (this.ngControl.invalid && this.ngControl.touched) ?? false;\n this.stateChanges.next();\n }\n }\n\n public clear(): void {\n this.filteredStrings = [];\n this.searchFormControl.reset(null);\n }\n\n public focus(): void {\n this.elRef.nativeElement.querySelector(\"input\")?.focus();\n }\n\n public onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n this.value = event.option.value;\n this.filteredStrings = [];\n }\n\n public onOptionActivated(event: MatAutocompleteActivatedEvent): void {\n this.activatedValue = event.option?.value;\n }\n\n public onAutoCompleteClosed(): void {\n if (this.activatedValue) {\n this.value = this.activatedValue;\n this.activatedValue = null;\n }\n }\n\n public reset(): void {\n this.value = null;\n }\n\n public onFocusOut(): void {\n if (this.filteredStrings.length === 1) {\n this.activatedValue = this.filteredStrings[0];\n this.value = this.filteredStrings[0];\n }\n }\n\n public onTouched(): void {\n this._onTouched();\n this.stateChanges.next();\n }\n\n public registerOnChange(fn: any): void {\n this._propagateChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n public writeValue(obj: any): void {\n this.clear();\n this.value = obj;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onContainerClick(event: MouseEvent): void {\n if ((event.target as Element).tagName.toLowerCase() !== \"input\") {\n this.focus();\n }\n }\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(\" \");\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n const selection: any = control.value;\n if (typeof selection === \"string\" && selection.length < 1) {\n return { incorrect: true };\n }\n return null;\n }\n\n private _propagateChange = (_: any): void => {\n };\n\n private readonly _onTouched = (): void => {\n };\n}\n","<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\"\n (closed)=\"onAutoCompleteClosed()\" (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let str of filteredStrings\" [value]=\"str\">\n {{str}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n","import { Component, DoCheck, ElementRef, EventEmitter, forwardRef, HostBinding, Injector, Input, OnDestroy, OnInit, ViewChild, inject } from \"@angular/core\";\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n ValidationErrors,\n Validator\n} from \"@angular/forms\";\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { EntitySelectDataSource } from \"@meshmakers/shared-services\";\nimport { Subject } from \"rxjs\";\nimport { FocusMonitor } from \"@angular/cdk/a11y\";\nimport { debounceTime, filter, tap } from \"rxjs/operators\";\nimport { MatAutocompleteActivatedEvent, MatAutocompleteSelectedEvent } from \"@angular/material/autocomplete\";\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\n\n@Component({\n selector: \"mm-entity-select\",\n standalone: false,\n templateUrl: \"./mm-entity-select-input.component.html\",\n styleUrls: [\"./mm-entity-select-input.component.css\"],\n host: {\n \"[id]\": \"id\",\n \"[attr.aria-describedby]\": \"describedBy\"\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MmEntitySelectInputComponent),\n multi: true\n },\n {\n provide: MatFormFieldControl,\n useExisting: MmEntitySelectInputComponent\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MmEntitySelectInputComponent),\n multi: true\n }\n ]\n})\nexport class MmEntitySelectInputComponent implements OnInit, OnDestroy, DoCheck, ControlValueAccessor, MatFormFieldControl<any>, Validator {\n elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly fm = inject(FocusMonitor);\n\n private static nextId = 0;\n public readonly searchFormControl: FormControl;\n public isLoading: boolean;\n public filteredEntities: any[] = [];\n public ngControl: NgControl | null;\n public errorState: boolean;\n public focused: boolean;\n public readonly stateChanges = new Subject<void>();\n @HostBinding()\n public readonly id = `ia-entity-select-${MmEntitySelectInputComponent.nextId++}`;\n\n public valueChange: EventEmitter<any> = new EventEmitter<any>();\n private _selectedEntity: any;\n @ViewChild(\"input\") private readonly inputField: MatInput | null;\n @HostBinding(\"attr.aria-describedby\") private describedBy = \"\";\n private activatedValue: any;\n\n constructor() {\n const elRef = this.elRef;\n const fm = this.fm;\n\n this.ngControl = null;\n this.errorState = false;\n this.inputField = null;\n this._dataSource = null;\n this._placeholder = \"\";\n this._prefix = \"\";\n\n this.searchFormControl = new FormControl();\n this.isLoading = false;\n this._disabled = false;\n this.focused = false;\n fm.monitor(elRef.nativeElement, true).subscribe((origin) => {\n this.focused = !!origin;\n this.stateChanges.next();\n });\n }\n\n private _dataSource: EntitySelectDataSource<any> | null;\n\n public get dataSource(): EntitySelectDataSource<any> | null {\n return this._dataSource;\n }\n\n @Input()\n public set dataSource(value: EntitySelectDataSource<any> | null) {\n this._dataSource = value;\n }\n\n private _disabled = false;\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(dis) {\n this._disabled = coerceBooleanProperty(dis);\n if (this._disabled) {\n this.searchFormControl.disable();\n } else {\n this.searchFormControl.enable();\n }\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n @Input()\n public get placeholder(): string {\n return this._placeholder;\n }\n\n public set placeholder(plh) {\n this._placeholder = plh;\n this.stateChanges.next();\n }\n\n private _required = false;\n\n @Input()\n public get required(): boolean {\n return this._required;\n }\n\n public set required(req) {\n this._required = coerceBooleanProperty(req);\n if (this.inputField != null) {\n this.inputField.required = this._required;\n }\n this.stateChanges.next();\n }\n\n private _prefix: string;\n\n @Input()\n public get prefix(): string {\n return this._prefix;\n }\n\n public set prefix(value: string) {\n if (value !== this._prefix) {\n this._prefix = value;\n }\n }\n\n public get value(): any {\n return this._selectedEntity;\n }\n\n public set value(value: any) {\n if (value !== this._selectedEntity) {\n this.searchFormControl.setValue(value);\n this.setValue(value);\n }\n }\n\n public get empty(): boolean {\n const n = this.searchFormControl.value;\n return !n;\n }\n\n @HostBinding(\"class.floating\")\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n ngOnInit(): void {\n this.ngControl = this.injector.get(NgControl, null);\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // If prefix defined, usually this is used for a code scanner.\n // The goal is to select the entity in direct way.\n if (this._prefix) {\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n filter((value) => typeof value === \"string\"),\n filter((value) => value.startsWith(this._prefix)),\n tap(() => (this.value = null)),\n tap(() => (this.isLoading = true))\n )\n .subscribe(async (value: string) => {\n\n if (!this._dataSource)\n {\n this.isLoading = false;\n return;\n }\n\n const resultSet = await this._dataSource?.onFilter(value.replace(this._prefix, \"\").trim());\n\n if (resultSet.list) {\n if (resultSet.list.length === 1) {\n this.value = resultSet.list[0];\n } else {\n this.filteredEntities = resultSet.list;\n }\n }\n this.isLoading = false;\n });\n }\n\n // This is the search functionality when search by human.\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n tap(() => (this.filteredEntities = [])),\n filter((value: any) => typeof value === \"string\"),\n tap(() => {\n this.setValue(null);\n }),\n filter((value) => value.toString().length >= 3),\n tap(() => (this.isLoading = true))\n )\n .subscribe(async (value : string) => {\n\n if (!this._dataSource)\n {\n this.isLoading = false;\n return;\n }\n\n const resultSet = await this._dataSource.onFilter(value);\n\n if (resultSet?.list) {\n this.filteredEntities = resultSet.list;\n }\n this.isLoading = false;\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n this.fm.stopMonitoring(this.elRef.nativeElement);\n }\n\n ngDoCheck(): void {\n if (this.ngControl != null) {\n this.errorState = (this.ngControl.invalid && this.ngControl.touched) ?? false;\n this.stateChanges.next();\n }\n }\n\n public clear(): void {\n this.filteredEntities = [];\n this.searchFormControl.reset(null);\n }\n\n public focus(): void {\n this.elRef.nativeElement.querySelector(\"input\")?.focus();\n }\n\n public onEntitySelected(event: MatAutocompleteSelectedEvent): void {\n this.value = event.option.value;\n this.filteredEntities = [];\n }\n\n public onEntityActivated(event: MatAutocompleteActivatedEvent): void {\n this.activatedValue = event.option?.value;\n }\n\n public onEntityClosed(): void {\n if (this.activatedValue) {\n this.value = this.activatedValue;\n this.activatedValue = null;\n }\n }\n\n public reset(): void {\n this.value = null;\n }\n\n public onFocusOut(): void {\n if (this.filteredEntities.length === 1) {\n this.activatedValue = this.filteredEntities[0];\n this.value = this.filteredEntities[0];\n }\n }\n\n public onTouched(): void {\n this._onTouched();\n this.stateChanges.next();\n }\n\n public registerOnChange(fn: any): void {\n this._propagateChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n public writeValue(obj: any): void {\n this.clear();\n this.value = obj;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onContainerClick(event: MouseEvent): void {\n if ((event.target as Element).tagName.toLowerCase() !== \"input\") {\n this.focus();\n }\n }\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(\" \");\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n const selection: any = control.value;\n if (typeof selection === \"string\") {\n return { incorrect: true };\n }\n return null;\n }\n\n private _propagateChange = (_: any): void => {\n };\n\n private readonly _onTouched = (): void => {\n };\n\n private setValue(value: any): void {\n if (value !== this._selectedEntity) {\n this._selectedEntity = value;\n this.valueChange.emit(value);\n this._propagateChange(this._selectedEntity);\n this.stateChanges.next();\n }\n }\n}\n","<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\" matInput>\n<mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n</mat-autocomplete>\n","import { Component, DoCheck, ElementRef, EventEmitter, forwardRef, HostBinding, Injector, Input, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\nimport { EntitySelectDataSource } from '@meshmakers/shared-services';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n NgControl,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { of, Subject } from 'rxjs';\nimport { MatInput } from '@angular/material/input';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { debounceTime, filter, switchMap, tap } from 'rxjs/operators';\nimport { MatAutocompleteActivatedEvent, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\n\n@Component({\n selector: 'mm-multiple-entity-select',\n standalone: false,\n templateUrl: './mm-multiple-entity-select-input.component.html',\n styleUrls: ['./mm-multiple-entity-select-input.component.css'],\n host: {\n '[id]': 'id',\n '[attr.aria-describedby]': 'describedBy'\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MmMultipleEntitySelectInputComponent),\n multi: true\n },\n {\n provide: MatFormFieldControl,\n useExisting: MmMultipleEntitySelectInputComponent\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MmMultipleEntitySelectInputComponent),\n multi: true\n }\n ]\n})\nexport class MmMultipleEntitySelectInputComponent\n implements OnInit, OnDestroy, DoCheck, ControlValueAccessor, MatFormFieldControl<any[]>, Validator\n{\n elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly fm = inject(FocusMonitor);\n\n private static nextId = 0;\n public readonly valuesFormControl: FormControl;\n public readonly searchFormControl: FormControl;\n public isLoading: boolean;\n public filteredEntities: any[] = [];\n public ngControl: NgControl | null;\n public errorState: boolean;\n public focused: boolean;\n public readonly stateChanges = new Subject<void>();\n @HostBinding()\n public readonly id = `ia-multiple-entity-select-${MmMultipleEntitySelectInputComponent.nextId++}`;\n\n public valuesChange: EventEmitter<any[]> = new EventEmitter<any[]>();\n private _selectedEntities: any[] | null;\n @ViewChild('input') private readonly inputField: MatInput | null;\n @HostBinding('attr.aria-describedby') private describedBy = '';\n private activatedValue: any;\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n constructor() {\n const elRef = this.elRef;\n const fm = this.fm;\n\n this.ngControl = null;\n this.errorState = false;\n this.inputField = null;\n this._dataSource = null;\n this._placeholder = '';\n this._prefix = '';\n this._selectedEntities = null;\n\n this.valuesFormControl = new FormControl();\n this.searchFormControl = new FormControl();\n this.isLoading = false;\n this._disabled = false;\n this.focused = false;\n fm.monitor(elRef.nativeElement, true).subscribe((origin) => {\n this.focused = !!origin;\n this.stateChanges.next();\n });\n }\n\n private _dataSource: EntitySelectDataSource<any> | null;\n\n public get dataSource(): EntitySelectDataSource<any> | null {\n return this._dataSource;\n }\n\n @Input()\n public set dataSource(value: EntitySelectDataSource<any> | null) {\n this._dataSource = value;\n }\n\n private _disabled = false;\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(dis) {\n this._disabled = coerceBooleanProperty(dis);\n if (this._disabled) {\n this.searchFormControl.disable();\n } else {\n this.searchFormControl.enable();\n }\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n @Input()\n public get placeholder(): string {\n return this._placeholder;\n }\n\n public set placeholder(plh) {\n this._placeholder = plh;\n this.stateChanges.next();\n }\n\n private _required = false;\n\n @Input()\n public get required(): boolean {\n return this._required;\n }\n\n public set required(req) {\n this._required = coerceBooleanProperty(req);\n if (this.inputField != null) {\n this.inputField.required = this._required;\n }\n this.stateChanges.next();\n }\n\n private _prefix: string;\n\n @Input()\n public get prefix(): string {\n return this._prefix;\n }\n\n public set prefix(value: string) {\n if (value !== this._prefix) {\n this._prefix = value;\n }\n }\n\n public get value(): any[] | null {\n return this._selectedEntities;\n }\n\n public set value(value: any[] | null) {\n if (value !== this._selectedEntities) {\n this.valuesFormControl.setValue(value);\n this.setValue(value);\n }\n }\n\n public get empty(): boolean {\n const n = this.valuesFormControl.value;\n return !n;\n }\n\n @HostBinding('class.floating')\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n ngOnInit(): void {\n this.ngControl = this.injector.get(NgControl, null);\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // If prefix defined, usually this is used for a code scanner.\n // The goal is to select the entity in direct way.\n if (this._prefix) {\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n filter((value) => typeof value === 'string'),\n filter((value: string) => value.startsWith(this._prefix)),\n tap(() => (this.isLoading = true)),\n switchMap((value) => this._dataSource?.onFilter(value.replace(this._prefix, '').trim()) ?? of(null))\n )\n .subscribe((resultSet) => {\n if (resultSet?.list) {\n this.filteredEntities = resultSet.list;\n }\n this.isLoading = false;\n });\n }\n\n // This is the search functionality when search by human.\n this.searchFormControl.valueChanges\n .pipe(\n debounceTime(300),\n tap(() => (this.filteredEntities = [])),\n filter((value) => typeof value === 'string'),\n filter((value) => value.toString().length >= 3),\n tap(() => (this.isLoading = true)),\n switchMap((value: string) => this._dataSource?.onFilter(value) ?? of(null))\n )\n .subscribe((resultSet) => {\n const resultList = new Array<any>();\n\n if (resultSet?.list) {\n resultSet.list.forEach((value1) => {\n if (!this.value?.find((value2) => this._dataSource?.getIdEntity(value2) === this._dataSource?.getIdEntity(value1))) {\n resultList.push(value1);\n }\n });\n }\n\n this.filteredEntities = resultList;\n this.isLoading = false;\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n this.fm.stopMonitoring(this.elRef.nativeElement);\n }\n\n ngDoCheck(): void {\n if (this.ngControl != null) {\n this.errorState = (this.ngControl.invalid && this.ngControl.touched) ?? false;\n this.stateChanges.next();\n }\n }\n\n public clear(): void {\n this.filteredEntities = [];\n this.searchFormControl.reset(null);\n }\n\n public focus(): void {\n this.elRef.nativeElement.querySelector('input')?.focus();\n }\n\n public onEntitySelected(event: MatAutocompleteSelectedEvent): void {\n let list = this.value;\n if (list == null) {\n list = new Array<any>();\n }\n list.push(event.option.value);\n this.value = list;\n\n this.filteredEntities = [];\n this.searchFormControl.setValue(null);\n this.valuesFormControl.updateValueAndValidity();\n }\n\n public onEntityActivated(event: MatAutocompleteActivatedEvent): void {\n this.activatedValue = event.option?.value;\n }\n\n public onEntityClosed(): void {\n if (this.activatedValue) {\n this.value = this.activatedValue;\n this.activatedValue = null;\n }\n }\n\n public reset(): void {\n this.value = new Array<any>();\n }\n\n public onFocusOut(): void {\n // if (this.filteredEntities.length === 1) {\n // this.activatedValue = this.filteredEntities[0];\n // this.value = this.filteredEntities[0];\n // }\n }\n\n public onTouched(): void {\n this._onTouched();\n this.stateChanges.next();\n }\n\n public registerOnChange(fn: any): void {\n this._propagateChange = fn;\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n public writeValue(obj: any): void {\n this.clear();\n this.value = obj;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public onContainerClick(event: MouseEvent): void {\n if ((event.target as Element).tagName.toLowerCase() !== 'input') {\n this.focus();\n }\n }\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n const selection: any = control.value;\n if (typeof selection === 'string') {\n return { incorrect: true };\n }\n return null;\n }\n\n remove(value: any): void {\n const list = this.value;\n if (list != null) {\n const index = list.indexOf(value);\n if (index !== -1) {\n list.splice(index, 1);\n }\n this.valuesFormControl.updateValueAndValidity();\n }\n }\n\n private _propagateChange = (_: any[]): void => {};\n\n private readonly _onTouched = (): void => {};\n\n private setValue(values: any[] | null): void {\n if (values !== this._selectedEntities) {\n this._selectedEntities = values;\n this.valuesChange.emit(values ?? []);\n this._propagateChange(this._selectedEntities ?? []);\n this.stateChanges.next();\n }\n }\n}\n","<mat-chip-grid #list>\n <mat-chip-row *ngFor=\"let entity of valuesFormControl.value\"\n (removed)=\"remove(entity)\"\n [editable]=\"false\"\n [aria-description]=\"'press enter to edit ' + dataSource?.onDisplayEntity(entity) ?? null\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n <button matChipRemove [attr.aria-label]=\"'remove ' + dataSource?.onDisplayEntity(entity) ?? null\">\n <mat-icon class=\"material-symbols-outlined\">cancel</mat-icon>\n </button>\n </mat-chip-row>\n <input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"list\"\n matChipInputAddOnBlur=\"true\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [placeholder]=\"placeholder\" matInput>\n <mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\n [displayWith]=\"dataSource?.onDisplayEntity ?? null\">\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </mat-option>\n <ng-container *ngIf=\"!isLoading\">\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\n {{dataSource?.onDisplayEntity(entity) ?? null}}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n</mat-chip-grid>\n","export class BreadcrumbData {\n\n constructor(label: string, labelTemplate: string, url: string) {\n this.label = label;\n this.labelTemplate = labelTemplate;\n this.url = url;\n }\n\n label: string;\n labelTemplate: string\n url: string;\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, PRIMARY_OUTLET, Router } from '@angular/router';\nimport { Breadcrumb, BreadcrumbService } from '@meshmakers/shared-services';\nimport { filter, map } from 'rxjs/operators';\nimport { BreadcrumbData } from \"../services/breadcrumbData\";\n\n@Component({\n selector: 'mm-breadcrumb',\n standalone: false,\n templateUrl: './mm-breadcrumb.component.html',\n styleUrl: './mm-breadcrumb.component.css'\n})\nexport class MmBreadcrumbComponent implements OnInit {\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly breadcrumbService = inject(BreadcrumbService);\n\n protected breadcrumbData: BreadcrumbData[] = [];\n @Input() fontSize = '18px';\n @Input() fontColor = '#0275d8';\n @Input() lastLinkColor = '#000';\n @Input() symbol = ' / ';\n\n constructor() {\n this.breadCrumbData();\n }\n\n ngOnInit(): void {\n this.breadcrumbService.breadcrumbLabels.subscribe((labelData: object) => {\n Object.entries(labelData).forEach(([key, value]) => {\n this.breadcrumbData.forEach((breadcrumbData: BreadcrumbData) => {\n const labelParams = breadcrumbData.labelTemplate.match(/[^{{]+(?=}})/g);\n if (labelParams) {\n for (const labelParam of labelParams) {\n if (labelParam === key) {\n breadcrumbData.label = breadcrumbData.labelTemplate.replace('{{' + labelParam + '}}', (value as string));\n }\n }\n }\n });\n });\n });\n\n this.breadcrumbService.newBreadcrumb.subscribe((breadcrumb: Breadcrumb[]) => {\n if (breadcrumb.length > 0) {\n this.updateData(this.activatedRoute, breadcrumb);\n }\n });\n }\n\n breadCrumbData(): void {\n this.router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .pipe(map(() => this.activatedRoute))\n .pipe(\n map((route) => {\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route;\n })\n )\n .pipe(filter((route) => route.outlet === PRIMARY_OUTLET))\n .subscribe((route) => {\n this.updateData(route, null);\n });\n }\n\n private updateData(route: ActivatedRoute, newBreadcrumb: Breadcrumb[] | null): void {\n if (route.snapshot.data['breadcrumb'] || newBreadcrumb) {\n const data = route.snapshot.data['breadcrumb'] ? route.snapshot.data['breadcrumb'] : newBreadcrumb;\n const breadcrumb = JSON.parse(JSON.stringify(data)) as Breadcrumb[];\n const breadcrumbData = new Array<BreadcrumbData>();\n breadcrumb.forEach((crumb : Breadcrumb) => {\n const breadcrumbDataItem = new BreadcrumbData(crumb.label, crumb.label, crumb.url);\n breadcrumbData.push(breadcrumbDataItem);\n\n if (breadcrumbDataItem.url) {\n const urlChunks = breadcrumbDataItem.url.split('/');\n for (const chunk of urlChunks) {\n if (chunk.includes(':')) {\n const paramID = chunk.replace(':', '');\n const routerParamID = route.snapshot.params[paramID] as string;\n breadcrumbDataItem.url = crumb.url.replace(`:${paramID}`, routerParamID);\n }\n }\n }\n\n const labelParams = breadcrumbDataItem.labelTemplate.match(/[^{{]+(?=}})/g);\n if (labelParams) {\n for (const labelParam of labelParams) {\n const routerParamID = decodeURIComponent((route.snapshot.params[labelParam.trim()] as string));\n if (routerParamID) {\n breadcrumbDataItem.label = breadcrumbDataItem.labelTemplate.replace('{{' + labelParam + '}}', routerParamID);\n } else {\n breadcrumbDataItem.label = breadcrumbDataItem.labelTemplate.replace('{{' + labelParam + '}}', '');\n }\n }\n }\n });\n this.breadcrumbData = breadcrumbData;\n } else {\n this.breadcrumbData = [];\n }\n }\n}\n","<mat-list class=\"mat-bread-crumb-list\" *ngIf=\"breadcrumbData.length\">\n <mat-list-item>\n <span class=\"mat-bread-crumb-spacer\">\n <span *ngFor=\"let item of breadcrumbData; let i = index\">\n <a *ngIf=\"item?.url\" [routerLink]=\"item?.url\"\n class=\"mat-bread-crumb-list-item\">{{ item.label }}</a>\n <span *ngIf=\"!item?.url\" class=\"mat-bread-crumb-list-item\">{{ item.label }}</span>\n <span *ngIf=\"breadcrumbData.length !== i+1\" class=\"mat-bread-crumb-list-item\">{{symbol}}</span>\n </span>\n </span>\n </mat-list-item>\n</mat-list>\n","export enum ButtonTypes {\n Ok,\n Cancel,\n Yes,\n No\n}\n\nexport enum DialogType {\n YesNo = 0,\n YesNoCancel = 1,\n OkCancel = 2,\n Ok = 3\n}\n\nexport interface ConfirmationWindowData {\n title: string;\n message: string;\n dialogType: DialogType;\n okButtonText?: string\n cancelButtonText?: string;\n yesButtonText?: string;\n noButtonText?: string;\n}\n\nexport interface ConfirmationWindowResult {\n result: ButtonTypes;\n}\n\nexport interface FileUploadData{\n title: string;\n message: string;\n mimeTypes: string;\n fileExtensions: string | null;\n}\n\nexport interface FileUploadResult {\n success: boolean;\n selectedFile: File | null;\n}\n","import {Component, OnInit, inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {ButtonTypes, ConfirmationWindowData, ConfirmationWindowResult, DialogType} from \"../models/confirmation\";\n\n@Component({\n selector: 'mm-confirmation-window',\n standalone: false,\n templateUrl: './mm-confirmation-window.component.html',\n styleUrls: ['./mm-confirmation-window.component.css']\n})\nexport class MmConfirmationWindowComponent implements OnInit {\n private readonly dialogRef = inject<MatDialogRef<MmConfirmationWindowComponent>>(MatDialogRef);\n data = inject<ConfirmationWindowData>(MAT_DIALOG_DATA);\n\n button1Text: string;\n button1Result: ButtonTypes;\n button2Text: string | null;\n button2Result: ButtonTypes | null;\n button3Text: string | null;\n button3Result: ButtonTypes | null;\n\n constructor() {\n const data = this.data;\n\n this.button2Text = null;\n this.button2Result = null;\n this.button3Text = null;\n this.button3Result = null;\n\n if (data.dialogType === DialogType.OkCancel) {\n this.button1Text = data.okButtonText ?? 'OK';\n this.button1Result = ButtonTypes.Ok;\n this.button2Text = data.cancelButtonText ?? 'Cancel';\n this.button2Result = ButtonTypes.Cancel;\n } else if (data.dialogType === DialogType.YesNoCancel) {\n this.button1Text = data.yesButtonText ?? 'Yes';\n this.button1Result = ButtonTypes.Yes;\n this.button2Text = data.noButtonText ?? 'No';\n this.button2Result = ButtonTypes.No;\n this.button3Text = data.cancelButtonText ?? 'Cancel';\n this.button3Result = ButtonTypes.Cancel;\n } else if (data.dialogType === DialogType.Ok) {\n this.button1Text = data.okButtonText ?? 'OK';\n this.button1Result = ButtonTypes.Ok;\n } else {\n this.button1Text = data.yesButtonText ?? 'Yes';\n this.button1Result = ButtonTypes.Yes;\n this.button2Text = data.noButtonText ?? 'No';\n this.button2Result = ButtonTypes.No;\n }\n }\n\n ngOnInit(): void {\n }\n\n onButton1(): void {\n this.dialogRef.close(({\n result: this.button1Result\n } as ConfirmationWindowResult));\n }\n\n onButton2(): void {\n this.dialogRef.close(({\n result: this.button2Result\n } as ConfirmationWindowResult));\n }\n\n onButton3(): void {\n this.dialogRef.close(({\n result: this.button3Result\n } as ConfirmationWindowResult));\n }\n}\n","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>{{data.message}}</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onButton1()\" class=\"primary-button\" mat-flat-button>{{button1Text}}</button>\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-flat-button>{{button2Text}}</button>\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-flat-button>{{button3Text}}</button>\n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Observable } from 'rxjs';\nimport { ProgressValue } from '../models/progressValue';\n\nexport interface ProgressWindowData {\n title: string;\n isDeterminate: boolean;\n progress: Observable<ProgressValue>;\n isCancelOperationAvailable: boolean;\n cancelOperation: () => void;\n}\n\nexport type ProgressWindowResult = object\n\n@Component({\n selector: 'mm-progress-window',\n standalone: false,\n templateUrl: './mm-progress-window.component.html',\n styleUrls: ['./mm-progress-window.component.css']\n})\nexport class MmProgressWindowComponent implements OnInit {\n data = inject<ProgressWindowData>(MAT_DIALOG_DATA);\n\n public statusText: string | null;\n public progressValue: number;\n\n constructor() {\n const data = this.data;\n\n this.statusText = null;\n this.progressValue = 0;\n\n data.progress.subscribe((value) => {\n this.statusText = value.statusText;\n this.progressValue = value.progressValue;\n });\n }\n\n ngOnInit(): void {}\n\n onCancelClick(): void {\n this.data.cancelOperation();\n }\n}\n","<h1 mat-dialog-title>{{data.title}}</h1>\n<div mat-dialog-content>\n <div>\n <mat-progress-bar *ngIf=\"data.isDeterminate\" [value]=\"progressValue\" mode=\"determinate\"></mat-progress-bar>\n <mat-progress-bar *ngIf=\"!data.isDeterminate\" mode=\"indeterminate\"></mat-progress-bar>\n <p>{{statusText}}</p>\n </div>\n</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onCancelClick()\" *ngIf=\"data.isCancelOperationAvailable\" mat-button>Cancel</button>\n</div>\n","// noinspection JSUnusedGlobalSymbols\n\nimport {Injectable, inject} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {MatDialog} from '@angular/material/dialog';\nimport {map} from 'rxjs/operators';\nimport {MmConfirmationWindowComponent} from \"../mm-confirmation-window/mm-confirmation-window.component\";\nimport {ButtonTypes, ConfirmationWindowData, ConfirmationWindowResult, DialogType} from \"../models/confirmation\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfirmationService {\n private readonly dialog = inject(MatDialog);\n\n showYesNoConfirmationDialog(title: string, message: string, yesButtonText?: string, noButtonText?: string): Observable<boolean> {\n const dialogRef = this.dialog.open<MmConfirmationWindowComponent, ConfirmationWindowData, ConfirmationWindowResult>(\n MmConfirmationWindowComponent,\n {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n message,\n yesButtonText,\n noButtonText,\n dialogType: DialogType.YesNo\n } as ConfirmationWindowData\n }\n );\n\n return dialogRef.afterClosed().pipe(map((value) => value?.result === ButtonTypes.Yes));\n }\n\n showYesNoCancelConfirmationDialog(title: string, message: string, yesButtonText?: string, noButtonText?: string, cancelButtonText?: string): Observable<ConfirmationWindowResult | undefined> {\n const dialogRef = this.dialog.open<MmConfirmationWindowComponent, ConfirmationWindowData, ConfirmationWindowResult>(\n MmConfirmationWindowComponent,\n {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n message,\n yesButtonText,\n noButtonText,\n cancelButtonText,\n dialogType: DialogType.YesNoCancel\n } as ConfirmationWindowData\n }\n );\n\n return dialogRef.afterClosed();\n }\n\n showOkCancelConfirmationDialog(title: string, message: string, okButtonText?: string, cancelButtonText?: string): Observable<boolean> {\n const dialogRef = this.dialog.open<MmConfirmationWindowComponent, ConfirmationWindowData, ConfirmationWindowResult>(\n MmConfirmationWindowComponent,\n {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n message,\n okButtonText,\n cancelButtonText,\n dialogType: DialogType.OkCancel\n } as ConfirmationWindowData\n }\n );\n\n return dialogRef.afterClosed().pipe(map((value) => value?.result === ButtonTypes.Ok));\n }\n\n showOkDialog(title: string, message: string, okButtonText?: string): Observable<boolean> {\n const dialogRef = this.dialog.open<MmConfirmationWindowComponent, ConfirmationWindowData, ConfirmationWindowResult>(\n MmConfirmationWindowComponent,\n {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n message,\n okButtonText,\n dialogType: DialogType.Ok\n } as ConfirmationWindowData\n }\n );\n\n return dialogRef.afterClosed().pipe(map((value) => value?.result === ButtonTypes.Ok));\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ProgressValue } from '../models/progressValue';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MmProgressWindowComponent, ProgressWindowData, ProgressWindowResult } from '../mm-progress-window/mm-progress-window.component';\n\n@Injectable()\nexport class ProgressNotifierService {\n private readonly dialog = inject(MatDialog);\n\n private readonly _currentProgressValue: BehaviorSubject<ProgressValue | null>;\n private currentDialogRef: MatDialogRef<MmProgressWindowComponent, ProgressWindowResult> | null;\n\n constructor() {\n this._currentProgressValue = new BehaviorSubject<ProgressValue | null>(null);\n this.currentDialogRef = null;\n this._isCanceled = false;\n }\n\n private _isCanceled: boolean;\n\n get isCanceled(): boolean {\n return this._isCanceled;\n }\n\n set isCanceled(value) {\n this._isCanceled = value;\n }\n\n start(title: string, isDeterminate: boolean, isCancelOperationAvailable: boolean): void {\n this.isCanceled = false;\n this.reportProgressDeterminate(0, 100, 'Working...');\n\n this.currentDialogRef = this.dialog.open<MmProgressWindowComponent, ProgressWindowData, ProgressWindowResult>(MmProgressWindowComponent, {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n isDeterminate,\n progress: this._currentProgressValue.asObservable(),\n isCancelOperationAvailable,\n cancelOperation: () => {\n this.reportProgressIndeterminate('Canceling operation...');\n this.isCanceled = true;\n }\n } as ProgressWindowData\n });\n }\n\n reportProgressDeterminate(progressCurrent: number, progressMax: number, statusText: string): void {\n const progressPercentage = progressMax > 0 ? (progressCurrent / progressMax) * 100 : 0;\n\n this._currentProgressValue.next(({\n statusText,\n progressValue: progressPercentage\n } as ProgressValue));\n }\n\n reportProgressIndeterminate(statusText: string): void {\n this._currentProgressValue.next(({\n statusText,\n progressValue: 0\n } as ProgressValue));\n }\n\n complete(): void {\n this.currentDialogRef?.close();\n }\n}\n","import { Component, ElementRef, signal, ViewChild, inject } from \"@angular/core\";\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\nimport { FileUploadData, FileUploadResult } from \"../models/confirmation\";\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\n\n@Component({\n selector: 'mm-mm-file-upload',\n standalone: false,\n templateUrl: './mm-file-upload.component.html',\n styleUrl: './mm-file-upload.component.css'\n})\nexport class MmFileUploadComponent {\n private readonly dialogRef = inject<MatDialogRef<MmFileUploadComponent>>(MatDialogRef);\n protected data = inject<FileUploadData>(MAT_DIALOG_DATA);\n private snackBar = inject(MatSnackBar);\n\n protected fileName = signal('');\n protected fileSize = signal(0);\n protected uploadProgress = signal(0);\n @ViewChild('fileInput') protected fileInput: ElementRef | undefined;\n protected selectedFile: File | null = null;\n protected uploadSuccess: boolean;\n protected uploadError: boolean;\n\n\n constructor() {\n this.uploadError = false;\n this.uploadSuccess = false;\n }\n\n // Handler for file input change\n onFileChange(event: any): void {\n const file = event.target.files[0] as File | null;\n this.uploadFile(file);\n }\n\n // Handler for the file drop\n onFileDrop(event: DragEvent): void {\n event.preventDefault();\n const file = event.dataTransfer?.files[0] as File | null;\n this.uploadFile(file);\n }\n\n // Prevent default dragover behavior\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n }\n\n // Method to handle file upload\n uploadFile(file: File | null): void {\n const allowedMimeTypes = this.data.mimeTypes.split(',').map((mimeType) => mimeType.trim());\n const allowedFileExtensions = this.data.fileExtensions?.split(',').map((mimeType) => mimeType.trim()) ?? [];\n if (!file) {\n return;\n }\n console.log(\"type: \" + file.type);\n console.log(\"name: \" + file.name);\n const extension = file.name.substring(file.name.lastIndexOf('.')).toLowerCase();\n console.log(\"extension: \" + extension);\n\n if (allowedFileExtensions.includes(extension) || allowedMimeTypes.includes(file.type)) {\n this.selectedFile = file;\n this.fileSize.set(Math.round(file.size / 1024)); // Set file size in KB\n\n this.uploadSuccess = true;\n this.uploadError = false;\n this.fileName.set(file.name); // Set image name\n } else {\n this.uploadSuccess = false;\n this.uploadError = true;\n this.snackBar.open('File type not supported!', 'Close', {\n duration: 3000,\n panelClass: 'error',\n });\n }\n }\n\n // Method to remove a file\n removeFile(): void {\n this.selectedFile = null;\n this.fileName.set('');\n this.fileSize.set(0);\n this.uploadSuccess = false;\n this.uploadError = false;\n this.uploadProgress.set(0);\n }\n\n onOk(): void {\n this.dialogRef.close(({\n success: true,\n selectedFile: this.selectedFile\n } as FileUploadResult));\n }\n\n onCancel(): void {\n this.dialogRef.close(({\n success: false,\n selectedFile: null\n } as FileUploadResult));\n }\n}\n","<h1 mat-dialog-title>{{data.title}}</h1>\n<div\n class=\"file-upload-wrapper\"\n [class.success]=\"uploadSuccess\"\n [class.error]=\"uploadError\"\n (drop)=\"onFileDrop($event)\"\n (dragover)=\"onDragOver($event)\"\n>\n <input\n type=\"file\"\n accept=\"{{data.fileExtensions}}\"\n (change)=\"onFileChange($event)\"\n hidden\n #fileInput\n />\n <div class=\"file-dropper\" (click)=\"fileInput.click()\">\n <mat-icon class=\"material-symbols-outlined\">upload</mat-icon>\n <p>{{data.message}}</p>\n <div *ngIf=\"fileName()\">\n <div *ngIf=\"selectedFile\">\n <p>\n <span class=\"image-name\">{{ fileName() }}</span> ({{\n fileSize()\n }} KB)\n </p>\n <mat-icon class=\"material-symbols-outlined delete-icon\" (click)=\"removeFile()\">delete</mat-icon>\n </div>\n </div>\n </div>\n</div>\n<div style=\"justify-content: flex-end;\" mat-dialog-actions>\n <button (click)=\"onOk()\" [disabled]=\"!selectedFile\" mat-flat-button>Upload</button>\n <button (click)=\"onCancel()\" mat-button>Cancel</button>\n</div>\n\n","import { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from \"rxjs\";\nimport {\n FileUploadData,\n FileUploadResult\n} from \"../models/confirmation\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { MmFileUploadComponent } from \"../mm-file-upload/mm-file-upload.component\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FileUploadService {\n private readonly dialog = inject(MatDialog);\n\n\n\n async showUploadDialog(title: string, message: string, mimeTypes: string, fileExtensions: string | null = null): Promise<File | null> {\n const dialogRef = this.dialog.open<MmFileUploadComponent, FileUploadData, FileUploadResult>(\n MmFileUploadComponent,\n {\n width: '50vw',\n maxWidth: '50vw',\n data: {\n title,\n message,\n mimeTypes,\n fileExtensions\n } as FileUploadData\n }\n );\n\n const r = await firstValueFrom(dialogRef.afterClosed());\n const success = r?.success ?? false;\n if (success){\n return r?.selectedFile ?? null;\n }\n return null;\n }\n}\n","import { Component, Input } from \"@angular/core\";\nimport {\n MatCell, MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable\n} from \"@angular/material/table\";\nimport { NgForOf } from \"@angular/common\";\n import { MatSort, MatSortHeader } from '@angular/material/sort';\nimport {MatFormFieldModule} from '@angular/material/form-field';\n\n@Component({\n selector: 'mm-table-simple',\n standalone: true,\n imports: [\n MatTable,\n MatColumnDef,\n MatHeaderCell,\n MatCell,\n MatHeaderRow,\n MatRow,\n MatHeaderRowDef,\n MatRowDef,\n MatHeaderCellDef,\n MatCellDef,\n NgForOf,\n MatSort,\n MatSortHeader,\n MatFormFieldModule\n ],\n templateUrl: './mm-table-simple.component.html',\n styleUrl: './mm-table-simple.component.scss'\n})\nexport class MmTableSimpleComponent {\n @Input() sortColumn = '';\n @Input() items: any[] = [];\n @Input() columns: { key: string, header: string }[] = [];\n\n get displayedColumns(): string[] {\n return this.columns.map(col => col.key);\n }\n\n}\n","<div>\n <table mat-table [dataSource]=\"items\" matSort matSortActive=\"{{sortColumn}}\" matSortDirection=\"asc\" matSortDisableClear>\n\n <!-- Dynamic Column Definitions -->\n <ng-container *ngFor=\"let column of columns\" [matColumnDef]=\"column.key\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ column.header }}</th>\n <td mat-cell *matCellDef=\"let element\">{{ element[column.key] }}</td>\n </ng-container>\n\n <!-- Header Row -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <!-- Data Rows -->\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n</div>\n","import { Component, ElementRef, ViewChild, OnDestroy, OnInit, Output, EventEmitter, inject } from \"@angular/core\";\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\nimport { QrCodeScannerService } from '@meshmakers/shared-services';\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\nimport { firstValueFrom } from \"rxjs\";\n\n@Component({\n selector: 'mm-qr-code-scanner',\n templateUrl: './mm-qr-scan-window.component.html',\n styleUrls: ['./mm-qr-scan-window.component.css']\n})\nexport class MmQrCodeScannerComponent implements OnInit, OnDestroy {\n @ViewChild('video', { static: true }) videoRef!: ElementRef<HTMLVideoElement>;\n\n @Output() scanComplete = new EventEmitter<string | null>();\n\n //Allows skipping MatDialog for inline usage in eg Telerik\n private dialogRef = inject(MatDialogRef<MmQrCodeScannerComponent>, { optional: true, skipSelf: true });\n private snackBar = inject(MatSnackBar);\n private scannerService = inject(QrCodeScannerService);\n\n scanning = false;\n\n private async checkCameraPermission(): Promise<boolean> {\n if (!navigator.permissions || !navigator.mediaDevices) return true;\n\n try {\n const status = await navigator.permissions.query({ name: 'camera' as PermissionName });\n return status.state !== 'denied';\n\n } catch {\n return true; // fallback for Safari or unsupported browsers\n }\n }\n\n private close(result: string | null) {\n this.scanComplete.emit(result);\n\n if (this.dialogRef) {\n this.dialogRef.close(result);\n }\n }\n\n static open(dialog: MatDialog): Promise<string | null> {\n const ref = dialog.open(MmQrCodeScannerComponent, {\n width: '100%',\n height: '100%',\n panelClass: 'full-screen-dialog',\n disableClose: true\n });\n\n return firstValueFrom(ref.afterClosed());\n }\n\n async ngOnInit() {\n\n const hasPermission = await this.checkCameraPermission();\n\n if (!hasPermission) {\n this.snackBar.open(\n 'Camera access is blocked. Please enable it in your browser settings.',\n 'OK',\n {\n duration: 5000,\n horizontalPosition: 'center',\n verticalPosition: 'top',\n }\n );\n this.close(null);\n return;\n }\n\n const supported = await this.scannerService.isSupported();\n if (!supported) {\n this.snackBar.open(\n 'QR scanning is not supported in this browser.',\n 'OK',\n {\n duration: 5000,\n horizontalPosition: 'center',\n verticalPosition: 'top',\n }\n );\n this.close(null);\n return;\n }\n\n try {\n const result = await this.scannerService.scan(this.videoRef.nativeElement);\n this.close(result); // Return result to parent\n this.scanning = false;\n } catch (err) {\n console.error(\"QR scan error:\", err);\n this.close(null);\n } finally {\n this.scanning = false;\n }\n }\n\n onCancel() {\n this.scannerService.stop();\n this.close(null);\n }\n\n ngOnDestroy() {\n this.scannerService.stop();\n }\n}\n","<div class=\"scanner-container\">\n <video #video autoplay muted playsinline></video>\n <button class=\"close-btn\" (click)=\"onCancel()\">×</button>\n</div>\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { MmNotificationBarComponent } from './mm-notification-bar/mm-notification-bar.component';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MmMessageDetailsComponent } from './mm-message-details/mm-message-details.component';\nimport { MmAutocompleteInputComponent } from './mm-autocomplete-input/mm-autocomplete-input.component';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MmEntitySelectInputComponent } from './mm-entity-select-input/mm-entity-select-input.component';\nimport { MmMultipleEntitySelectInputComponent } from './mm-multiple-entity-select-input/mm-multiple-entity-select-input.component';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIcon, MatIconModule } from \"@angular/material/icon\";\nimport {MmBreadcrumbComponent} from \"./mm-breadcrumb/mm-breadcrumb.component\";\nimport {MmConfirmationWindowComponent} from \"./mm-confirmation-window/mm-confirmation-window.component\";\nimport {MmProgressWindowComponent} from \"./mm-progress-window/mm-progress-window.component\";\nimport { ConfirmationService } from \"./services/confirmation.service\";\nimport { ProgressNotifierService } from \"./services/progress-notifier.service\";\nimport { FileUploadService } from \"./services/file-upload.service\";\nimport { MmFileUploadComponent } from \"./mm-file-upload/mm-file-upload.component\";\nimport { MatListModule } from \"@angular/material/list\";\nimport { RouterLink } from \"@angular/router\";\nimport { MmTableSimpleComponent } from \"./mm-table-simple/mm-table-simple.component\";\nimport { MatProgressBar } from \"@angular/material/progress-bar\";\nimport { MmQrCodeScannerComponent } from \"./mm-qr-scan-window/mm-qr-scan-window.component\";\n\n@NgModule({\n declarations: [\n MmBreadcrumbComponent,\n MmConfirmationWindowComponent,\n MmProgressWindowComponent,\n MmNotificationBarComponent,\n MmMessageDetailsComponent,\n MmAutocompleteInputComponent,\n MmEntitySelectInputComponent,\n MmMultipleEntitySelectInputComponent,\n MmFileUploadComponent\n ],\n exports: [\n MmBreadcrumbComponent,\n MmConfirmationWindowComponent,\n MmNotificationBarComponent,\n MmAutocompleteInputComponent,\n MmEntitySelectInputComponent,\n MmMultipleEntitySelectInputComponent,\n MmFileUploadComponent,\n MmTableSimpleComponent,\n MmQrCodeScannerComponent\n ],\n imports: [\n CommonModule,\n MatToolbarModule,\n MatButtonModule,\n MatSnackBarModule,\n MatDialogModule,\n MatAutocompleteModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatChipsModule,\n MatIconModule,\n ReactiveFormsModule,\n MatIcon,\n MatListModule,\n RouterLink,\n MmTableSimpleComponent,\n MatProgressBar,\n MmQrCodeScannerComponent\n ]\n})\nexport class MmSharedUiModule {\n static forRoot(): ModuleWithProviders<MmSharedUiModule> {\n return {\n ngModule: MmSharedUiModule,\n providers: [\n FileUploadService,\n ConfirmationService,\n ProgressNotifierService\n ]\n };\n }\n}\n","import { AbstractControl, ValidatorFn, Validators } from '@angular/forms';\n\nexport type CompareValueFn<TValue> = (value: TValue) => boolean;\n\nfunction isEmptyInputValue(value: any): boolean {\n // we don't check for string here so it also works with arrays\n return value == null || value.length === 0;\n}\n\nexport class CommonValidators {\n public static phoneNumber(): ValidatorFn {\n return Validators.pattern('^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\\\s\\\\./0-9]*$');\n }\n\n public static httpUri(): ValidatorFn {\n return Validators.pattern(\n '^(http:\\\\/\\\\/|https:\\\\/\\\\/)([a-zA-Z0-9-_]+\\\\.)*[a-zA-Z0-9][a-zA-Z0-9-_]+(\\\\.[a-zA-Z]{2,11}?)*(:[0-9]{2,5}){0,1}\\\\/{0,1}$'\n );\n }\n\n public static ensureSameValue(sourceControlName: string): ValidatorFn {\n return (control: AbstractControl) => {\n const value = control.value;\n return value === control.parent?.get(sourceControlName)?.value ? null : { notSame: true };\n };\n }\n\n public static conditionalRequired<TCompareValue>(\n sourceControlName: string,\n sourceValueCompareExpression: CompareValueFn<TCompareValue>\n ): ValidatorFn {\n return (control: AbstractControl) => {\n if (control.parent != null && sourceValueCompareExpression((control.parent.get(sourceControlName)?.value as TCompareValue))) {\n return isEmptyInputValue(control.value) ? { required: true } : null;\n }\n return null;\n };\n }\n\n public static dependentControls(controlNames: string[]): ValidatorFn {\n return (control: AbstractControl) => {\n controlNames.forEach((controlName) => {\n control.parent?.get(controlName)?.updateValueAndValidity();\n });\n return null;\n };\n }\n}\n","import { FormGroup } from '@angular/forms';\nimport { IsoDateTime } from '@meshmakers/shared-services';\n\nexport abstract class AbstractDetailsComponent<TEntity> {\n private _loading: boolean;\n private readonly _ownerForm: FormGroup;\n private _entity: TEntity | null;\n\n protected constructor(formGroup: FormGroup) {\n this._loading = true;\n this._entity = null;\n this._ownerForm = formGroup;\n }\n\n public get loading(): boolean {\n return this._loading;\n }\n\n public set loading(value: boolean) {\n this._loading = value;\n }\n\n public get entity(): TEntity | null {\n return this._entity;\n }\n\n public set entity(value: TEntity | null) {\n this._entity = value;\n }\n\n public get ownerForm(): FormGroup {\n return this._ownerForm;\n }\n\n public get isLoaded(): boolean {\n return this._entity !== null;\n }\n\n public hasError = (controlName: string, errorName: string): boolean => {\n return this.ownerForm?.controls[controlName].hasError(errorName);\n };\n\n public hasFormError = (errorName: string): boolean => {\n return this.ownerForm?.hasError(errorName);\n };\n\n public updateDateTime(controlName: string): void {\n this.ownerForm?.get(controlName)?.setValue(IsoDateTime.utcToLocalDateTimeIso(IsoDateTime.currentUtcDateTimeIso()));\n }\n\n public copyInputMessage(inputElement: any): void {\n inputElement.select();\n document.execCommand('copy');\n inputElement.setSelectionRange(0, 0);\n }\n\n protected onProgressStarting(): void {\n this._loading = true;\n this.ownerForm?.disable();\n this.ownerForm?.updateValueAndValidity();\n }\n\n protected onProgressCompleted(): void {\n this.ownerForm?.enable();\n this._loading = false;\n }\n}\n","/*\n * Public API Surface of shared-ui\n */\n\nexport * from './lib/mm-shared-ui.module';\nexport * from './lib/mm-notification-bar/mm-notification-bar.component';\nexport * from './lib/mm-autocomplete-input/mm-autocomplete-input.component';\nexport * from './lib/mm-entity-select-input/mm-entity-select-input.component';\nexport * from './lib/mm-multiple-entity-select-input/mm-multiple-entity-select-input.component';\nexport * from './lib/mm-confirmation-window/mm-confirmation-window.component';\nexport * from './lib/mm-breadcrumb/mm-breadcrumb.component';\nexport * from './lib/mm-file-upload/mm-file-upload.component';\nexport * from './lib/mm-table-simple/mm-table-simple.component';\nexport * from './lib/mm-qr-scan-window/mm-qr-scan-window.component';\n\nexport * from './lib/services/confirmation.service';\nexport * from './lib/services/progress-notifier.service';\nexport * from './lib/services/file-upload.service';\n\nexport * from './lib/models/confirmation';\nexport * from './lib/models/commonValidators';\nexport * from './lib/models/abstractDetailsComponent';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i5","i7","i4"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -61,6 +61,10 @@ interface ConfirmationWindowData {
61
61
  title: string;
62
62
  message: string;
63
63
  dialogType: DialogType;
64
+ okButtonText?: string;
65
+ cancelButtonText?: string;
66
+ yesButtonText?: string;
67
+ noButtonText?: string;
64
68
  }
65
69
  interface ConfirmationWindowResult {
66
70
  result: ButtonTypes;
@@ -390,10 +394,10 @@ declare class MmSharedUiModule {
390
394
 
391
395
  declare class ConfirmationService {
392
396
  private readonly dialog;
393
- showYesNoConfirmationDialog(title: string, message: string): Observable<boolean>;
394
- showYesNoCancelConfirmationDialog(title: string, message: string): Observable<ConfirmationWindowResult | undefined>;
395
- showOkCancelConfirmationDialog(title: string, message: string): Observable<boolean>;
396
- showOkDialog(title: string, message: string): Observable<boolean>;
397
+ showYesNoConfirmationDialog(title: string, message: string, yesButtonText?: string, noButtonText?: string): Observable<boolean>;
398
+ showYesNoCancelConfirmationDialog(title: string, message: string, yesButtonText?: string, noButtonText?: string, cancelButtonText?: string): Observable<ConfirmationWindowResult | undefined>;
399
+ showOkCancelConfirmationDialog(title: string, message: string, okButtonText?: string, cancelButtonText?: string): Observable<boolean>;
400
+ showOkDialog(title: string, message: string, okButtonText?: string): Observable<boolean>;
397
401
  static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmationService, never>;
398
402
  static ɵprov: i0.ɵɵInjectableDeclaration<ConfirmationService>;
399
403
  }
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@meshmakers/shared-ui",
3
- "version": "3.2.127-0",
3
+ "version": "3.2.129-0",
4
4
  "peerDependencies": {
5
- "@angular/common": "^20.1.2",
6
- "@angular/core": "^20.1.2"
5
+ "@angular/common": "^20.1.6",
6
+ "@angular/core": "^20.1.6"
7
7
  },
8
8
  "dependencies": {
9
9
  "tslib": "^2.8.1"