@smartbit4all/ng-client 6.0.54 → 6.0.56

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.
Files changed (21) hide show
  1. package/esm2022/lib/smart-client/smart-component-api-client.mjs +4 -1
  2. package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +22 -1
  3. package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +25 -23
  4. package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +5 -1
  5. package/esm2022/lib/smart-filter-editor/project.mjs +2 -1
  6. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +1 -1
  7. package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +8 -3
  8. package/esm2022/lib/smart-filter-editor/smart-filter-widget/smart-filter-widget.component.mjs +58 -0
  9. package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +8 -5
  10. package/fesm2022/smartbit4all-ng-client.mjs +870 -785
  11. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  12. package/lib/smart-component-layout/smart-component-layout-utility.d.ts +6 -0
  13. package/lib/smart-component-layout/smart-component-layout.component.d.ts +6 -4
  14. package/lib/smart-component-layout/smart-component-layout.module.d.ts +4 -3
  15. package/lib/smart-filter-editor/project.d.ts +1 -0
  16. package/lib/smart-filter-editor/smart-filter-editor.module.d.ts +9 -8
  17. package/lib/smart-filter-editor/smart-filter-widget/smart-filter-widget.component.d.ts +23 -0
  18. package/lib/smart-form/smartfileuploader/smartfileuploader.component.d.ts +1 -1
  19. package/package.json +1 -1
  20. package/smartbit4all-ng-client-6.0.56.tgz +0 -0
  21. package/smartbit4all-ng-client-6.0.54.tgz +0 -0
@@ -7547,7 +7547,7 @@ class SmartfileuploaderComponent {
7547
7547
  this.files = [validFiles[0]];
7548
7548
  }
7549
7549
  if (this.autoUpload && this.errors.length == 0) {
7550
- this.uploadFile();
7550
+ this.uploadFile(null);
7551
7551
  }
7552
7552
  }
7553
7553
  getFile(event) {
@@ -7589,7 +7589,10 @@ class SmartfileuploaderComponent {
7589
7589
  remove(index) {
7590
7590
  this.files.splice(index, 1);
7591
7591
  }
7592
- uploadFile() {
7592
+ uploadFile(event) {
7593
+ if (event && event.event) {
7594
+ event.event.stopPropagation();
7595
+ }
7593
7596
  this.uploadCallback(this.files);
7594
7597
  }
7595
7598
  formatSize(bytes) {
@@ -7649,11 +7652,11 @@ class SmartfileuploaderComponent {
7649
7652
  };
7650
7653
  }
7651
7654
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartfileuploaderComponent, deps: [{ token: i1$4.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
7652
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartfileuploaderComponent, selector: "smartfileuploader", inputs: { uploadCallback: "uploadCallback", fileFormats: "fileFormats", maxSizeMb: "maxSizeMb", i18n: "i18n", useIconButton: "useIconButton", isMultiple: "isMultiple", autoUpload: "autoUpload", isDisabled: "isDisabled" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div\r\n class=\"container\"\r\n [ngClass]=\"{ disabledWidget: isDisabled }\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n [class.dragover]=\"isDragOver\"\r\n>\r\n <div class=\"fileContainer\" (click)=\"fileInput.click()\">\r\n <input\r\n #fileInput\r\n id=\"addFile\"\r\n placeholder=\"fileInput\"\r\n type=\"file\"\r\n (change)=\"getFile($event)\"\r\n class=\"file\"\r\n accept=\"{{ fileFormats?.join(', ') }}\"\r\n [size]=\"maxSizeMb\"\r\n [multiple]=\"isMultiple\"\r\n [disabled]=\"isDisabled\"\r\n style=\"display: none\"\r\n />\r\n <div class=\"fileUploadContentContainer\">\r\n <div class=\"icon\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"addFileButton\">\r\n <mat-icon color=\"primary\" class=\"addCircle\">add_circle</mat-icon>\r\n </mat-label>\r\n <button *ngIf=\"!useIconButton\" mat-raised-button color=\"primary\" class=\"addFileButton\">\r\n {{ i18n!.addFile }}\r\n </button>\r\n </div>\r\n <div class=\"labels\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"label primary title\">\r\n {{ i18n!.addFile }}\r\n </mat-label>\r\n <mat-label class=\"label secondary\"> {{ i18n!.browseOrDrag }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.maxSize }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.formats }} </mat-label>\r\n </div>\r\n <div class=\"uploadButton\" *ngIf=\"files.length\">\r\n <ui-action-button\r\n (actionClick)=\"uploadFile()\"\r\n [code]=\"'default-upload'\"\r\n [descriptor]=\"uploadButton\"\r\n >\r\n </ui-action-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"errors.length\" class=\"errorMessage\">\r\n <smart-icon [icon]=\"'error'\" [color]=\"'warn'\"></smart-icon>\r\n <div class=\"errors\">\r\n <span *ngFor=\"let error of errors\">{{ error }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"files.length\" class=\"uploadedFilesContainer\">\r\n <div *ngFor=\"let file of files; let i = index\" class=\"uploadedFile\">\r\n <ng-container *ngIf=\"filePreviewUrl(file); else fileIcon\">\r\n <img [src]=\"filePreviewUrl(file)\" [alt]=\"file.name\" width=\"50\" height=\"50\" />\r\n </ng-container>\r\n <ng-template #fileIcon>\r\n <smart-icon [icon]=\"'insert_drive_file'\"></smart-icon>\r\n </ng-template>\r\n\r\n <div class=\"fileData\">\r\n <div class=\"fileDataContainer\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fileActions\">\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n (click)=\"downloadFile(file)\"\r\n [attr.data-testid]=\"'default_download'\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n icon=\"delete\"\r\n [attr.data-testid]=\"'default_remove'\"\r\n (click)=\"remove(i)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}.container{display:flex;flex-direction:column;border:2px dashed var(--border-color);border-radius:var(--def-border-radius)}.fileContainer{cursor:pointer;padding:1rem;display:flex;flex-direction:column}.fileContainer:hover{background-color:rgb(from var(--border-color) r g b / .1)}.disabledWidget ::ng-deep .fileContainer:hover{background-color:unset;cursor:unset}.disabledWidget ::ng-deep *{opacity:.85}.dragover{background-color:rgb(from var(--border-color) r g b / .1)}.fileUploadContentContainer{display:flex;flex-direction:row;gap:1rem}.icon mat-icon{font-size:3rem;width:unset;height:unset}.icon{align-content:center}.labels{flex:1;display:flex;flex-direction:column;justify-content:center;width:fit-content}.uploadButton{align-content:center}.primary{color:var(--primary-color)}.secondary{color:var(--gray)}.label{margin:unset}.subLabel{font-size:smaller}.title{padding-bottom:.3rem}.errorMessage,.uploadedFilesContainer{border-top:2px solid var(--border-color)}.errorMessage{display:flex;flex-direction:row;align-items:center;color:var(--warninig-color);padding:.5rem 1rem;gap:1rem}.errorMessage ::ng-deep mat-icon{color:var(--warninig-color)}.errors{display:flex;flex-direction:column}.uploadedFile{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:1rem;border-bottom:1px solid #e0e0e0;gap:1rem}.uploadedFile:last-child{border-bottom:none}.fileSize{display:flex;flex-direction:row;font-size:smaller}.fileData{flex:1;display:flex;flex-direction:column}.fileDataContainer{display:flex;flex-direction:column;justify-content:flex-end;width:fit-content}.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}smart-icon ::ng-deep mat-icon{font-size:3rem;width:unset;height:unset}.fileActions{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileActions ::ng-deep .pi{width:unset!important}.removeIcon ::ng-deep i,.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}.removeIcon ::ng-deep .pi,.downloadIcon ::ng-deep .pi{font-size:1.5rem!important}.removeIcon ::ng-deep mat-icon,.downloadIcon ::ng-deep mat-icon{font-size:2rem}.removeIcon:hover,.downloadIcon:hover{cursor:pointer}smart-icon{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "directive", type: i11.MatLabel, selector: "mat-label" }, { kind: "component", type: UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "identifier", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
7655
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartfileuploaderComponent, selector: "smartfileuploader", inputs: { uploadCallback: "uploadCallback", fileFormats: "fileFormats", maxSizeMb: "maxSizeMb", i18n: "i18n", useIconButton: "useIconButton", isMultiple: "isMultiple", autoUpload: "autoUpload", isDisabled: "isDisabled" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div\r\n class=\"container\"\r\n [ngClass]=\"{ disabledWidget: isDisabled }\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n [class.dragover]=\"isDragOver\"\r\n>\r\n <div class=\"fileContainer\" (click)=\"fileInput.click()\">\r\n <input\r\n #fileInput\r\n id=\"addFile\"\r\n placeholder=\"fileInput\"\r\n type=\"file\"\r\n (change)=\"getFile($event)\"\r\n class=\"file\"\r\n accept=\"{{ fileFormats?.join(', ') }}\"\r\n [size]=\"maxSizeMb\"\r\n [multiple]=\"isMultiple\"\r\n [disabled]=\"isDisabled\"\r\n style=\"display: none\"\r\n />\r\n <div class=\"fileUploadContentContainer\">\r\n <div class=\"icon\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"addFileButton\">\r\n <mat-icon color=\"primary\" class=\"addCircle\">add_circle</mat-icon>\r\n </mat-label>\r\n <button *ngIf=\"!useIconButton\" mat-raised-button color=\"primary\" class=\"addFileButton\">\r\n {{ i18n!.addFile }}\r\n </button>\r\n </div>\r\n <div class=\"labels\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"label primary title\">\r\n {{ i18n!.addFile }}\r\n </mat-label>\r\n <mat-label class=\"label secondary\"> {{ i18n!.browseOrDrag }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.maxSize }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.formats }} </mat-label>\r\n </div>\r\n <div class=\"uploadButton\" *ngIf=\"files.length\">\r\n <ui-action-button\r\n (actionClick)=\"uploadFile($event)\"\r\n [code]=\"'default-upload'\"\r\n [descriptor]=\"uploadButton\"\r\n >\r\n </ui-action-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"errors.length\" class=\"errorMessage\">\r\n <smart-icon [icon]=\"'error'\" [color]=\"'warn'\"></smart-icon>\r\n <div class=\"errors\">\r\n <span *ngFor=\"let error of errors\">{{ error }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"files.length\" class=\"uploadedFilesContainer\">\r\n <div *ngFor=\"let file of files; let i = index\" class=\"uploadedFile\">\r\n <ng-container *ngIf=\"filePreviewUrl(file); else fileIcon\">\r\n <img [src]=\"filePreviewUrl(file)\" [alt]=\"file.name\" width=\"50\" height=\"50\" />\r\n </ng-container>\r\n <ng-template #fileIcon>\r\n <smart-icon [icon]=\"'insert_drive_file'\"></smart-icon>\r\n </ng-template>\r\n\r\n <div class=\"fileData\">\r\n <div class=\"fileDataContainer\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fileActions\">\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n (click)=\"downloadFile(file)\"\r\n [attr.data-testid]=\"'default_download'\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n icon=\"delete\"\r\n [attr.data-testid]=\"'default_remove'\"\r\n (click)=\"remove(i)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}.container{display:flex;flex-direction:column;border:2px dashed var(--border-color);border-radius:var(--def-border-radius)}.fileContainer{cursor:pointer;padding:1rem;display:flex;flex-direction:column}.fileContainer:hover{background-color:rgb(from var(--border-color) r g b / .1)}.disabledWidget ::ng-deep .fileContainer:hover{background-color:unset;cursor:unset}.disabledWidget ::ng-deep *{opacity:.85}.dragover{background-color:rgb(from var(--border-color) r g b / .1)}.fileUploadContentContainer{display:flex;flex-direction:row;gap:1rem}.icon mat-icon{font-size:3rem;width:unset;height:unset}.icon{align-content:center}.labels{flex:1;display:flex;flex-direction:column;justify-content:center;width:fit-content}.uploadButton{align-content:center}.primary{color:var(--primary-color)}.secondary{color:var(--gray)}.label{margin:unset}.subLabel{font-size:smaller}.title{padding-bottom:.3rem}.errorMessage,.uploadedFilesContainer{border-top:2px solid var(--border-color)}.errorMessage{display:flex;flex-direction:row;align-items:center;color:var(--warninig-color);padding:.5rem 1rem;gap:1rem}.errorMessage ::ng-deep mat-icon{color:var(--warninig-color)}.errors{display:flex;flex-direction:column}.uploadedFile{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:1rem;border-bottom:1px solid #e0e0e0;gap:1rem}.uploadedFile:last-child{border-bottom:none}.fileSize{display:flex;flex-direction:row;font-size:smaller}.fileData{flex:1;display:flex;flex-direction:column}.fileDataContainer{display:flex;flex-direction:column;justify-content:flex-end;width:fit-content}.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}smart-icon ::ng-deep mat-icon{font-size:3rem;width:unset;height:unset}.fileActions{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileActions ::ng-deep .pi{width:unset!important}.removeIcon ::ng-deep i,.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}.removeIcon ::ng-deep .pi,.downloadIcon ::ng-deep .pi{font-size:1.5rem!important}.removeIcon ::ng-deep mat-icon,.downloadIcon ::ng-deep mat-icon{font-size:2rem}.removeIcon:hover,.downloadIcon:hover{cursor:pointer}smart-icon{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "directive", type: i11.MatLabel, selector: "mat-label" }, { kind: "component", type: UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "identifier", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
7653
7656
  }
7654
7657
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartfileuploaderComponent, decorators: [{
7655
7658
  type: Component,
7656
- args: [{ selector: 'smartfileuploader', template: "<div\r\n class=\"container\"\r\n [ngClass]=\"{ disabledWidget: isDisabled }\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n [class.dragover]=\"isDragOver\"\r\n>\r\n <div class=\"fileContainer\" (click)=\"fileInput.click()\">\r\n <input\r\n #fileInput\r\n id=\"addFile\"\r\n placeholder=\"fileInput\"\r\n type=\"file\"\r\n (change)=\"getFile($event)\"\r\n class=\"file\"\r\n accept=\"{{ fileFormats?.join(', ') }}\"\r\n [size]=\"maxSizeMb\"\r\n [multiple]=\"isMultiple\"\r\n [disabled]=\"isDisabled\"\r\n style=\"display: none\"\r\n />\r\n <div class=\"fileUploadContentContainer\">\r\n <div class=\"icon\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"addFileButton\">\r\n <mat-icon color=\"primary\" class=\"addCircle\">add_circle</mat-icon>\r\n </mat-label>\r\n <button *ngIf=\"!useIconButton\" mat-raised-button color=\"primary\" class=\"addFileButton\">\r\n {{ i18n!.addFile }}\r\n </button>\r\n </div>\r\n <div class=\"labels\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"label primary title\">\r\n {{ i18n!.addFile }}\r\n </mat-label>\r\n <mat-label class=\"label secondary\"> {{ i18n!.browseOrDrag }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.maxSize }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.formats }} </mat-label>\r\n </div>\r\n <div class=\"uploadButton\" *ngIf=\"files.length\">\r\n <ui-action-button\r\n (actionClick)=\"uploadFile()\"\r\n [code]=\"'default-upload'\"\r\n [descriptor]=\"uploadButton\"\r\n >\r\n </ui-action-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"errors.length\" class=\"errorMessage\">\r\n <smart-icon [icon]=\"'error'\" [color]=\"'warn'\"></smart-icon>\r\n <div class=\"errors\">\r\n <span *ngFor=\"let error of errors\">{{ error }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"files.length\" class=\"uploadedFilesContainer\">\r\n <div *ngFor=\"let file of files; let i = index\" class=\"uploadedFile\">\r\n <ng-container *ngIf=\"filePreviewUrl(file); else fileIcon\">\r\n <img [src]=\"filePreviewUrl(file)\" [alt]=\"file.name\" width=\"50\" height=\"50\" />\r\n </ng-container>\r\n <ng-template #fileIcon>\r\n <smart-icon [icon]=\"'insert_drive_file'\"></smart-icon>\r\n </ng-template>\r\n\r\n <div class=\"fileData\">\r\n <div class=\"fileDataContainer\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fileActions\">\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n (click)=\"downloadFile(file)\"\r\n [attr.data-testid]=\"'default_download'\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n icon=\"delete\"\r\n [attr.data-testid]=\"'default_remove'\"\r\n (click)=\"remove(i)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}.container{display:flex;flex-direction:column;border:2px dashed var(--border-color);border-radius:var(--def-border-radius)}.fileContainer{cursor:pointer;padding:1rem;display:flex;flex-direction:column}.fileContainer:hover{background-color:rgb(from var(--border-color) r g b / .1)}.disabledWidget ::ng-deep .fileContainer:hover{background-color:unset;cursor:unset}.disabledWidget ::ng-deep *{opacity:.85}.dragover{background-color:rgb(from var(--border-color) r g b / .1)}.fileUploadContentContainer{display:flex;flex-direction:row;gap:1rem}.icon mat-icon{font-size:3rem;width:unset;height:unset}.icon{align-content:center}.labels{flex:1;display:flex;flex-direction:column;justify-content:center;width:fit-content}.uploadButton{align-content:center}.primary{color:var(--primary-color)}.secondary{color:var(--gray)}.label{margin:unset}.subLabel{font-size:smaller}.title{padding-bottom:.3rem}.errorMessage,.uploadedFilesContainer{border-top:2px solid var(--border-color)}.errorMessage{display:flex;flex-direction:row;align-items:center;color:var(--warninig-color);padding:.5rem 1rem;gap:1rem}.errorMessage ::ng-deep mat-icon{color:var(--warninig-color)}.errors{display:flex;flex-direction:column}.uploadedFile{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:1rem;border-bottom:1px solid #e0e0e0;gap:1rem}.uploadedFile:last-child{border-bottom:none}.fileSize{display:flex;flex-direction:row;font-size:smaller}.fileData{flex:1;display:flex;flex-direction:column}.fileDataContainer{display:flex;flex-direction:column;justify-content:flex-end;width:fit-content}.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}smart-icon ::ng-deep mat-icon{font-size:3rem;width:unset;height:unset}.fileActions{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileActions ::ng-deep .pi{width:unset!important}.removeIcon ::ng-deep i,.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}.removeIcon ::ng-deep .pi,.downloadIcon ::ng-deep .pi{font-size:1.5rem!important}.removeIcon ::ng-deep mat-icon,.downloadIcon ::ng-deep mat-icon{font-size:2rem}.removeIcon:hover,.downloadIcon:hover{cursor:pointer}smart-icon{display:flex;align-items:center}\n"] }]
7659
+ args: [{ selector: 'smartfileuploader', template: "<div\r\n class=\"container\"\r\n [ngClass]=\"{ disabledWidget: isDisabled }\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n [class.dragover]=\"isDragOver\"\r\n>\r\n <div class=\"fileContainer\" (click)=\"fileInput.click()\">\r\n <input\r\n #fileInput\r\n id=\"addFile\"\r\n placeholder=\"fileInput\"\r\n type=\"file\"\r\n (change)=\"getFile($event)\"\r\n class=\"file\"\r\n accept=\"{{ fileFormats?.join(', ') }}\"\r\n [size]=\"maxSizeMb\"\r\n [multiple]=\"isMultiple\"\r\n [disabled]=\"isDisabled\"\r\n style=\"display: none\"\r\n />\r\n <div class=\"fileUploadContentContainer\">\r\n <div class=\"icon\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"addFileButton\">\r\n <mat-icon color=\"primary\" class=\"addCircle\">add_circle</mat-icon>\r\n </mat-label>\r\n <button *ngIf=\"!useIconButton\" mat-raised-button color=\"primary\" class=\"addFileButton\">\r\n {{ i18n!.addFile }}\r\n </button>\r\n </div>\r\n <div class=\"labels\">\r\n <mat-label *ngIf=\"useIconButton\" class=\"label primary title\">\r\n {{ i18n!.addFile }}\r\n </mat-label>\r\n <mat-label class=\"label secondary\"> {{ i18n!.browseOrDrag }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.maxSize }} </mat-label>\r\n <mat-label class=\"subLabel primary\"> {{ i18n!.formats }} </mat-label>\r\n </div>\r\n <div class=\"uploadButton\" *ngIf=\"files.length\">\r\n <ui-action-button\r\n (actionClick)=\"uploadFile($event)\"\r\n [code]=\"'default-upload'\"\r\n [descriptor]=\"uploadButton\"\r\n >\r\n </ui-action-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"errors.length\" class=\"errorMessage\">\r\n <smart-icon [icon]=\"'error'\" [color]=\"'warn'\"></smart-icon>\r\n <div class=\"errors\">\r\n <span *ngFor=\"let error of errors\">{{ error }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"files.length\" class=\"uploadedFilesContainer\">\r\n <div *ngFor=\"let file of files; let i = index\" class=\"uploadedFile\">\r\n <ng-container *ngIf=\"filePreviewUrl(file); else fileIcon\">\r\n <img [src]=\"filePreviewUrl(file)\" [alt]=\"file.name\" width=\"50\" height=\"50\" />\r\n </ng-container>\r\n <ng-template #fileIcon>\r\n <smart-icon [icon]=\"'insert_drive_file'\"></smart-icon>\r\n </ng-template>\r\n\r\n <div class=\"fileData\">\r\n <div class=\"fileDataContainer\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fileActions\">\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n (click)=\"downloadFile(file)\"\r\n [attr.data-testid]=\"'default_download'\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n icon=\"delete\"\r\n [attr.data-testid]=\"'default_remove'\"\r\n (click)=\"remove(i)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}.container{display:flex;flex-direction:column;border:2px dashed var(--border-color);border-radius:var(--def-border-radius)}.fileContainer{cursor:pointer;padding:1rem;display:flex;flex-direction:column}.fileContainer:hover{background-color:rgb(from var(--border-color) r g b / .1)}.disabledWidget ::ng-deep .fileContainer:hover{background-color:unset;cursor:unset}.disabledWidget ::ng-deep *{opacity:.85}.dragover{background-color:rgb(from var(--border-color) r g b / .1)}.fileUploadContentContainer{display:flex;flex-direction:row;gap:1rem}.icon mat-icon{font-size:3rem;width:unset;height:unset}.icon{align-content:center}.labels{flex:1;display:flex;flex-direction:column;justify-content:center;width:fit-content}.uploadButton{align-content:center}.primary{color:var(--primary-color)}.secondary{color:var(--gray)}.label{margin:unset}.subLabel{font-size:smaller}.title{padding-bottom:.3rem}.errorMessage,.uploadedFilesContainer{border-top:2px solid var(--border-color)}.errorMessage{display:flex;flex-direction:row;align-items:center;color:var(--warninig-color);padding:.5rem 1rem;gap:1rem}.errorMessage ::ng-deep mat-icon{color:var(--warninig-color)}.errors{display:flex;flex-direction:column}.uploadedFile{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:1rem;border-bottom:1px solid #e0e0e0;gap:1rem}.uploadedFile:last-child{border-bottom:none}.fileSize{display:flex;flex-direction:row;font-size:smaller}.fileData{flex:1;display:flex;flex-direction:column}.fileDataContainer{display:flex;flex-direction:column;justify-content:flex-end;width:fit-content}.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}smart-icon ::ng-deep mat-icon{font-size:3rem;width:unset;height:unset}.fileActions{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileActions ::ng-deep .pi{width:unset!important}.removeIcon ::ng-deep i,.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}.removeIcon ::ng-deep .pi,.downloadIcon ::ng-deep .pi{font-size:1.5rem!important}.removeIcon ::ng-deep mat-icon,.downloadIcon ::ng-deep mat-icon{font-size:2rem}.removeIcon:hover,.downloadIcon:hover{cursor:pointer}smart-icon{display:flex;align-items:center}\n"] }]
7657
7660
  }], ctorParameters: () => [{ type: i1$4.MatSnackBar }], propDecorators: { fileInput: [{
7658
7661
  type: ViewChild,
7659
7662
  args: ['fileInput']
@@ -21247,6 +21250,27 @@ class SmartComponentLayoutUtility {
21247
21250
  }
21248
21251
  return result;
21249
21252
  }
21253
+ /**
21254
+ * The editors of the filter widgets in the layout tree. A widget whose builder model has not
21255
+ * arrived yet has no editor and is left out until it does.
21256
+ */
21257
+ static getFilters(comp) {
21258
+ const result = [];
21259
+ if (comp.components) {
21260
+ const children = comp.components
21261
+ .map((c) => SmartComponentLayoutUtility.getFilters(c))
21262
+ .reduce((acc, value) => acc.concat(value), []);
21263
+ result.push(...children);
21264
+ }
21265
+ const expandable = this.getExpandableComponent(comp);
21266
+ if (expandable) {
21267
+ result.push(...this.getFilters(expandable));
21268
+ }
21269
+ if (comp.smartFilterComponent?.contentComponent) {
21270
+ result.push(comp.smartFilterComponent.contentComponent);
21271
+ }
21272
+ return result;
21273
+ }
21250
21274
  static getTrees(comp) {
21251
21275
  let result = [];
21252
21276
  if (comp.components) {
@@ -22340,501 +22364,389 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
22340
22364
  type: Output
22341
22365
  }] } });
22342
22366
 
22343
- class SmartComponentLayoutComponent {
22344
- get testId() {
22345
- return this.smartComponentLayout?.identifier ?? null;
22346
- }
22347
- get isHorizontal() {
22348
- return (this.smartComponentLayout?.type === this.type().CONTAINER &&
22349
- this.smartComponentLayout?.direction === 'horizontal');
22367
+ /**
22368
+ * Custom HttpParameterCodec
22369
+ * Workaround for https://github.com/angular/angular/issues/18261
22370
+ */
22371
+ class CustomHttpParameterCodec {
22372
+ encodeKey(k) {
22373
+ return encodeURIComponent(k);
22350
22374
  }
22351
- get isVertical() {
22352
- return (this.smartComponentLayout?.type === this.type().CONTAINER &&
22353
- (this.smartComponentLayout?.direction ?? 'vertical') === 'vertical');
22375
+ encodeValue(v) {
22376
+ return encodeURIComponent(v);
22354
22377
  }
22355
- set embeddedSlotVcRefSetter(vcRef) {
22356
- this._embeddedSlotVcRef = vcRef;
22357
- if (vcRef) {
22358
- this.tryRegisterEmbeddedSlot();
22359
- }
22378
+ decodeKey(k) {
22379
+ return decodeURIComponent(k);
22360
22380
  }
22361
- constructor(layoutService, viewContext, element, renderer) {
22362
- this.layoutService = layoutService;
22363
- this.viewContext = viewContext;
22364
- this.element = element;
22365
- this.renderer = renderer;
22366
- this._destroy$ = new Subject();
22367
- this.appRef = inject(ApplicationRef);
22368
- this.formRef = viewChild(SmartformComponent);
22369
- this.onFormChange = effect(() => {
22370
- const form = this.formRef();
22371
- if (this.smartForm && form && this.parentSmartComponent) {
22372
- this.parentSmartComponent.handleDataChangeSubscriptions(form);
22373
- this.parentSmartComponent.handleUploadCallback(form);
22374
- form.markAllWidgetsForChangeDetection();
22375
- }
22376
- });
22377
- this.pendingOrphanCleanup = false;
22378
- this.embeddedSlotActive = false;
22381
+ decodeValue(v) {
22382
+ return decodeURIComponent(v);
22379
22383
  }
22380
- ngAfterViewInit() {
22381
- if (this.smartFormList?.first) {
22382
- this.setFormComponent(this.smartFormList?.first);
22383
- }
22384
- this.smartFormList.changes
22385
- .pipe(takeUntil(this._destroy$))
22386
- .subscribe((list) => {
22387
- this.setFormComponent(list.first);
22388
- });
22389
- if (this.smartGridList?.first) {
22390
- this.setGridComponent(this.smartGridList?.first);
22384
+ }
22385
+
22386
+ const BASE_PATH = new InjectionToken('basePath');
22387
+ const COLLECTION_FORMATS = {
22388
+ 'csv': ',',
22389
+ 'tsv': ' ',
22390
+ 'ssv': ' ',
22391
+ 'pipes': '|'
22392
+ };
22393
+
22394
+ class Configuration {
22395
+ constructor(configurationParameters = {}) {
22396
+ this.apiKeys = configurationParameters.apiKeys;
22397
+ this.username = configurationParameters.username;
22398
+ this.password = configurationParameters.password;
22399
+ this.accessToken = configurationParameters.accessToken;
22400
+ this.basePath = configurationParameters.basePath;
22401
+ this.withCredentials = configurationParameters.withCredentials;
22402
+ this.encoder = configurationParameters.encoder;
22403
+ if (configurationParameters.encodeParam) {
22404
+ this.encodeParam = configurationParameters.encodeParam;
22391
22405
  }
22392
- this.smartGridList.changes
22393
- .pipe(takeUntil(this._destroy$))
22394
- .subscribe((list) => {
22395
- this.setGridComponent(list.first);
22396
- });
22397
- if (this.smartMapList?.first) {
22398
- this.setMapComponent(this.smartMapList?.first);
22406
+ else {
22407
+ this.encodeParam = param => this.defaultEncodeParam(param);
22399
22408
  }
22400
- this.smartMapList.changes.pipe(takeUntil(this._destroy$)).subscribe((maps) => {
22401
- this.setMapComponent(maps.first);
22402
- });
22403
- if (this.smartDiagramList?.first) {
22404
- this.setDiagramComponent(this.smartDiagramList?.first);
22409
+ if (configurationParameters.credentials) {
22410
+ this.credentials = configurationParameters.credentials;
22405
22411
  }
22406
- this.smartDiagramList.changes.pipe(takeUntil(this._destroy$)).subscribe((diagrams) => {
22407
- this.setDiagramComponent(diagrams.first);
22408
- });
22409
- this.smartFilterList.changes
22410
- .pipe(takeUntil(this._destroy$))
22411
- .subscribe((list) => {
22412
- if (!this.smartFilterComponent) {
22413
- this.smartFilterComponent = list.first;
22414
- this.bindFilter();
22415
- }
22416
- });
22417
- if (this.toolbarList?.first) {
22418
- this.setToolbarComponent(this.toolbarList?.first);
22412
+ else {
22413
+ this.credentials = {};
22419
22414
  }
22420
- this.toolbarList.changes
22421
- .pipe(takeUntil(this._destroy$))
22422
- .subscribe((list) => {
22423
- this.setToolbarComponent(list.first);
22424
- });
22425
- this.setUp();
22426
22415
  }
22427
- ngAfterViewChecked() {
22428
- if (this.pendingOrphanCleanup) {
22429
- this.pendingOrphanCleanup = false;
22430
- this.viewContext.cleanupOrphanedEmbeddedViews(this.uuid);
22416
+ /**
22417
+ * Select the correct content-type to use for a request.
22418
+ * Uses {@link Configuration#isJsonMime} to determine the correct content-type.
22419
+ * If no content type is found return the first found type if the contentTypes is not empty
22420
+ * @param contentTypes - the array of content types that are available for selection
22421
+ * @returns the selected content-type or <code>undefined</code> if no selection could be made.
22422
+ */
22423
+ selectHeaderContentType(contentTypes) {
22424
+ if (contentTypes.length === 0) {
22425
+ return undefined;
22426
+ }
22427
+ const type = contentTypes.find((x) => this.isJsonMime(x));
22428
+ if (type === undefined) {
22429
+ return contentTypes[0];
22431
22430
  }
22431
+ return type;
22432
22432
  }
22433
- ngOnDestroy() {
22434
- if (this.embeddedSlotContainerId && this.uuid) {
22435
- this.viewContext.unregisterEmbeddedSlot(this.uuid, this.embeddedSlotContainerId);
22433
+ /**
22434
+ * Select the correct accept content-type to use for a request.
22435
+ * Uses {@link Configuration#isJsonMime} to determine the correct accept content-type.
22436
+ * If no content type is found return the first found type if the contentTypes is not empty
22437
+ * @param accepts - the array of content types that are available for selection.
22438
+ * @returns the selected content-type or <code>undefined</code> if no selection could be made.
22439
+ */
22440
+ selectHeaderAccept(accepts) {
22441
+ if (accepts.length === 0) {
22442
+ return undefined;
22436
22443
  }
22437
- this._destroy$.next();
22438
- this._destroy$.complete();
22444
+ const type = accepts.find((x) => this.isJsonMime(x));
22445
+ if (type === undefined) {
22446
+ return accepts[0];
22447
+ }
22448
+ return type;
22439
22449
  }
22440
- ngOnChanges(changes) {
22441
- this.setUp();
22450
+ /**
22451
+ * Check if the given MIME is a JSON MIME.
22452
+ * JSON MIME examples:
22453
+ * application/json
22454
+ * application/json; charset=UTF8
22455
+ * APPLICATION/JSON
22456
+ * application/vnd.company+json
22457
+ * @param mime - MIME (Multipurpose Internet Mail Extensions)
22458
+ * @return True if the given MIME is JSON, false otherwise.
22459
+ */
22460
+ isJsonMime(mime) {
22461
+ const jsonMime = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
22462
+ return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
22442
22463
  }
22443
- setUp() {
22444
- if (!this.parentSmartComponent || !this.smartComponentLayout) {
22445
- return;
22464
+ lookupCredential(key) {
22465
+ const value = this.credentials[key];
22466
+ return typeof value === 'function'
22467
+ ? value()
22468
+ : value;
22469
+ }
22470
+ defaultEncodeParam(param) {
22471
+ // This implementation exists as fallback for missing configuration
22472
+ // and for backwards compatibility to older typescript-angular generator versions.
22473
+ // It only works for the 'simple' parameter style.
22474
+ // Date-handling only works for the 'date-time' format.
22475
+ // All other styles and Date-formats are probably handled incorrectly.
22476
+ //
22477
+ // But: if that's all you need (i.e.: the most common use-case): no need for customization!
22478
+ const value = param.dataFormat === 'date-time' && param.value instanceof Date
22479
+ ? param.value.toISOString()
22480
+ : param.value;
22481
+ return encodeURIComponent(String(value));
22482
+ }
22483
+ }
22484
+
22485
+ /**
22486
+ * Filter API 2
22487
+ * Filter API 2
22488
+ *
22489
+ * The version of the OpenAPI document: 1.0.0
22490
+ * Contact: info@it4all.hu
22491
+ *
22492
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
22493
+ * https://openapi-generator.tech
22494
+ * Do not edit the class manually.
22495
+ */
22496
+ /* tslint:disable:no-unused-variable member-ordering */
22497
+ class FilterService {
22498
+ constructor(httpClient, basePath, configuration) {
22499
+ this.httpClient = httpClient;
22500
+ this.basePath = 'http://localhost';
22501
+ this.defaultHeaders = new HttpHeaders();
22502
+ this.configuration = new Configuration();
22503
+ if (configuration) {
22504
+ this.configuration = configuration;
22446
22505
  }
22447
- if (deepEqual(this.smartComponentLayout, this.currentLayout)) {
22448
- // no layout change, keep current state
22449
- this.smartComponentLayout = this.currentLayout;
22450
- return;
22506
+ if (typeof this.configuration.basePath !== 'string') {
22507
+ if (Array.isArray(basePath) && basePath.length > 0) {
22508
+ basePath = basePath[0];
22509
+ }
22510
+ if (typeof basePath !== 'string') {
22511
+ basePath = this.basePath;
22512
+ }
22513
+ this.configuration.basePath = basePath;
22451
22514
  }
22452
- // layout changed, render, but save current
22453
- // this.currentLayout = JSON.parse(JSON.stringify(this.smartComponentLayout));
22454
- SmartComponentLayoutUtility.clearFormHandlers(this);
22455
- this.currentLayout = this.smartComponentLayout;
22456
- this.uuid = this.parentSmartComponent.uuid;
22457
- this.treeService = this.parentSmartComponent.smartTreeService;
22458
- // Top-level layout: detach embedded views before the tree is re-rendered,
22459
- // so they survive *ngFor component destruction
22460
- if (!this.parentLayoutComponent && this.uuid) {
22461
- this.viewContext.detachAllEmbeddedViews(this.uuid);
22462
- this.pendingOrphanCleanup = true;
22515
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
22516
+ }
22517
+ // @ts-ignore
22518
+ addToHttpParams(httpParams, value, key) {
22519
+ if (typeof value === "object" && value instanceof Date === false) {
22520
+ httpParams = this.addToHttpParamsRecursive(httpParams, value);
22463
22521
  }
22464
- this.smartComponentLayout?.direction;
22465
- // the nature of the layout might have changed (e.g. from GRID to FORM), we null out every
22466
- // template-related element, so no stale data is left on screen:
22467
- this.expandableSection = undefined;
22468
- this.smartForm = undefined;
22469
- this.smartFormComponent = undefined;
22470
- this.smartGrid = undefined;
22471
- this.smartGridComponent = undefined;
22472
- this.smartFilter = undefined;
22473
- this.smartFilterComponent = undefined;
22474
- this.smartGrid = undefined;
22475
- this.toolbarId = undefined;
22476
- this.toolbar = undefined;
22477
- // null out toolbar?
22478
- this.mapId = undefined;
22479
- this.smartDiagramId = undefined;
22480
- if (this.embeddedSlotContainerId && this.uuid) {
22481
- this.viewContext.unregisterEmbeddedSlot(this.uuid, this.embeddedSlotContainerId);
22482
- }
22483
- this.embeddedSlotActive = false;
22484
- this.embeddedSlotContainerId = undefined;
22485
- if (this.smartComponentLayout?.expandable) {
22486
- this.constructExpandableSection();
22522
+ else {
22523
+ httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
22487
22524
  }
22488
- else if (this.smartComponentLayout?.type === ComponentType.FORM) {
22489
- this.constructForm();
22525
+ return httpParams;
22526
+ }
22527
+ addToHttpParamsRecursive(httpParams, value, key) {
22528
+ if (value == null) {
22529
+ return httpParams;
22490
22530
  }
22491
- else if (this.smartComponentLayout?.type === ComponentType.WIDGET) {
22492
- if (this.smartComponentLayout.widget?.type === ComponentWidgetType.GRID) {
22493
- this.constructGrid();
22494
- }
22495
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.FILTER) {
22496
- console.warn('ComponentWidgetType.FILTER is not supported');
22497
- // this.constructFilter();
22498
- }
22499
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.TREE) {
22500
- this.constructTree();
22501
- }
22502
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.TOOLBAR) {
22503
- this.constructToolbar();
22504
- }
22505
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.MAP) {
22506
- this.constructMap();
22507
- }
22508
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.DIAGRAM) {
22509
- this.construcDiagram();
22531
+ if (typeof value === "object") {
22532
+ if (Array.isArray(value)) {
22533
+ value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
22510
22534
  }
22511
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.EMBEDDED_SLOT) {
22512
- this.constructEmbeddedSlot();
22535
+ else if (value instanceof Date) {
22536
+ if (key != null) {
22537
+ httpParams = httpParams.append(key, value.toISOString().substr(0, 10));
22538
+ }
22539
+ else {
22540
+ throw Error("key may not be null if value is Date");
22541
+ }
22513
22542
  }
22514
- if (!this.parentLayoutComponent) {
22515
- // only top level component should call init actions
22516
- this.parentSmartComponent.initActions();
22543
+ else {
22544
+ Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
22517
22545
  }
22518
22546
  }
22519
- SmartStyleUtility.applyStyle(this.smartComponentLayout.style, this.element, this.renderer);
22520
- }
22521
- type() {
22522
- return ComponentType;
22523
- }
22524
- constructExpandableSection() {
22525
- let data = { ...this.smartComponentLayout };
22526
- data.expandable = false;
22527
- this.expandableSection = {
22528
- title: this.smartComponentLayout?.expandableSectionLabel ?? '',
22529
- inputs: new Map([
22530
- ['smartComponentLayout', data],
22531
- ['parentSmartComponent', this.parentSmartComponent],
22532
- ['parentLayoutComponent', this.parentLayoutComponent],
22533
- ]),
22534
- headerToolbarId: this.smartComponentLayout?.expandableSectionHeaderToolbarId,
22535
- customComponent: SmartComponentLayoutComponent,
22536
- };
22537
- }
22538
- constructForm() {
22539
- const widgets = this.layoutService.render({
22540
- layoutDefinitions: this.smartComponentLayout?.form,
22541
- });
22542
- if (this.gridRow && !this.gridRow.valueSets && this.parentSmartComponent?.model) {
22543
- this.gridRow.valueSets = this.parentSmartComponent.model.valueSets;
22547
+ else if (key != null) {
22548
+ httpParams = httpParams.append(key, value);
22544
22549
  }
22545
- this.smartForm = {
22546
- direction: this.getFormLayout(),
22547
- componentModel: this.gridRow ? this.gridRow : this.parentSmartComponent?.model,
22548
- widgets,
22549
- };
22550
- this.bindForm();
22551
- }
22552
- getFormLayout() {
22553
- if (this.smartComponentLayout?.direction) {
22554
- return this.smartComponentLayout?.direction === LayoutDirection.HORIZONTAL
22555
- ? SmartFormWidgetDirection.ROW
22556
- : SmartFormWidgetDirection.COL;
22550
+ else {
22551
+ throw Error("key may not be null if value is not object or array");
22557
22552
  }
22558
- return SmartFormWidgetDirection.COL;
22553
+ return httpParams;
22559
22554
  }
22560
- setFormComponent(comp) {
22561
- if (!this.smartFormComponent) {
22562
- this.smartFormComponent = comp;
22563
- this.bindForm();
22555
+ load(uuid, filterIdentifier, observe = 'body', reportProgress = false, options) {
22556
+ if (uuid === null || uuid === undefined) {
22557
+ throw new Error('Required parameter uuid was null or undefined when calling load.');
22564
22558
  }
22565
- }
22566
- bindForm() {
22567
- if (this.parentSmartComponent?.useQueryLists) {
22568
- return;
22559
+ if (filterIdentifier === null || filterIdentifier === undefined) {
22560
+ throw new Error('Required parameter filterIdentifier was null or undefined when calling load.');
22569
22561
  }
22570
- if (this.smartForm && this.smartFormComponent) {
22571
- this.parentSmartComponent?.addForm(
22572
- // unique identifier for the form
22573
- `form_${this.makeid(5)}`, this.smartForm, this.smartFormComponent);
22562
+ let localVarHeaders = this.defaultHeaders;
22563
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
22564
+ if (localVarHttpHeaderAcceptSelected === undefined) {
22565
+ // to determine the Accept header
22566
+ const httpHeaderAccepts = [
22567
+ 'application/json'
22568
+ ];
22569
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
22574
22570
  }
22575
- }
22576
- makeid(length) {
22577
- let result = '';
22578
- const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
22579
- const charactersLength = characters.length;
22580
- let counter = 0;
22581
- while (counter < length) {
22582
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
22583
- counter += 1;
22571
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
22572
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
22584
22573
  }
22585
- return result;
22586
- }
22587
- constructGrid() {
22588
- this.smartGrid = {
22589
- gridIdentifier: this.smartComponentLayout?.widget?.identifier,
22590
- gridModel: {
22591
- page: {},
22592
- },
22593
- options: {
22594
- rowUiActionType: GridUiActionType.POPUP_MENU,
22595
- },
22596
- layoutDef: SmartLayoutDef.TABLE,
22597
- paginator: false,
22598
- layoutComponent: SmartComponentLayoutComponent,
22599
- layoutUtility: SmartComponentLayoutUtility,
22600
- };
22601
- this.bindGrid();
22602
- }
22603
- setGridComponent(comp) {
22604
- if (!this.smartGridComponent) {
22605
- this.smartGridComponent = comp;
22606
- this.bindGrid();
22574
+ let localVarHttpContext = options && options.context;
22575
+ if (localVarHttpContext === undefined) {
22576
+ localVarHttpContext = new HttpContext();
22607
22577
  }
22608
- }
22609
- bindGrid() {
22610
- if (this.parentSmartComponent?.useQueryLists) {
22611
- if (this.smartGrid && this.smartGridComponent && this.parentSmartComponent) {
22612
- this.parentSmartComponent.setupGridServices(this.smartGridComponent);
22578
+ let responseType_ = 'json';
22579
+ if (localVarHttpHeaderAcceptSelected) {
22580
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
22581
+ responseType_ = 'text';
22582
+ }
22583
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
22584
+ responseType_ = 'json';
22585
+ }
22586
+ else {
22587
+ responseType_ = 'blob';
22613
22588
  }
22614
- return;
22615
- }
22616
- if (this.smartGrid && this.smartGridComponent) {
22617
- this.smartGrid = this.parentSmartComponent?.addGrid(this.smartGrid, {
22618
- rowUiActionType: GridUiActionType.POPUP_MENU,
22619
- }, false, this.smartGridComponent);
22620
22589
  }
22590
+ let localVarPath = `/filter/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "filterIdentifier", value: filterIdentifier, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/load`;
22591
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
22592
+ context: localVarHttpContext,
22593
+ responseType: responseType_,
22594
+ withCredentials: this.configuration.withCredentials,
22595
+ headers: localVarHeaders,
22596
+ observe: observe,
22597
+ reportProgress: reportProgress
22598
+ });
22621
22599
  }
22622
- constructMap() {
22623
- this.mapId = this.smartComponentLayout?.widget?.identifier;
22624
- this.bindMap();
22625
- }
22626
- construcDiagram() {
22627
- this.smartDiagramId = this.smartComponentLayout?.widget?.identifier;
22628
- this.bindDiagram();
22629
- }
22630
- setMapComponent(comp) {
22631
- if (!this.smartMapComponent) {
22632
- this.smartMapComponent = comp;
22633
- this.bindMap();
22600
+ performWidgetAction(uuid, filterIdentifier, body, observe = 'body', reportProgress = false, options) {
22601
+ if (uuid === null || uuid === undefined) {
22602
+ throw new Error('Required parameter uuid was null or undefined when calling performWidgetAction.');
22634
22603
  }
22635
- }
22636
- setDiagramComponent(comp) {
22637
- if (!this.smartDiagramComponent) {
22638
- this.smartDiagramComponent = comp;
22639
- this.bindDiagram();
22604
+ if (filterIdentifier === null || filterIdentifier === undefined) {
22605
+ throw new Error('Required parameter filterIdentifier was null or undefined when calling performWidgetAction.');
22640
22606
  }
22641
- }
22642
- bindMap() {
22643
- if (this.parentSmartComponent.useQueryLists) {
22644
- return;
22607
+ if (body === null || body === undefined) {
22608
+ throw new Error('Required parameter body was null or undefined when calling performWidgetAction.');
22645
22609
  }
22646
- console.warn('Map components are only supported through QueryLists!');
22647
- }
22648
- bindDiagram() {
22649
- if (this.parentSmartComponent.useQueryLists) {
22650
- return;
22610
+ let localVarHeaders = this.defaultHeaders;
22611
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
22612
+ if (localVarHttpHeaderAcceptSelected === undefined) {
22613
+ // to determine the Accept header
22614
+ const httpHeaderAccepts = [
22615
+ 'application/json'
22616
+ ];
22617
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
22651
22618
  }
22652
- console.warn('Diagram components are only supported through QueryLists!');
22653
- }
22654
- setToolbarComponent(comp) {
22655
- this.toolbar = comp;
22656
- }
22657
- // NOT USED, DOESN'T WORK
22658
- // constructFilter(): void {
22659
- // this.smartFilter = (this.smartComponentLayout!.parentComponent as any).addFilter(
22660
- // `filter_${this.makeid(5)}`,
22661
- // this.smartComponentLayout?.widget?.filterExpressionFieldList,
22662
- // this.smartComponentLayout?.widget?.filterType,
22663
- // this.smartFilterComponent
22664
- // );
22665
- // }
22666
- bindFilter() {
22667
- // TODO
22668
- }
22669
- constructTree() {
22670
- if (this.parentSmartComponent?.useQueryLists) {
22671
- return;
22619
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
22620
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
22672
22621
  }
22673
- this.parentSmartComponent.setUpDefaultTree(this.smartComponentLayout?.widget?.identifier);
22674
- this.treeService?.initialize();
22675
- }
22676
- constructToolbar() {
22677
- let toolbarId = this.smartComponentLayout?.widget?.identifier;
22678
- if (this.toolbarId !== toolbarId) {
22679
- this.toolbarId = toolbarId;
22622
+ let localVarHttpContext = options && options.context;
22623
+ if (localVarHttpContext === undefined) {
22624
+ localVarHttpContext = new HttpContext();
22680
22625
  }
22681
- let properties = this.smartComponentLayout?.widget?.properties;
22682
- if (properties && properties['toolbar_properties']) {
22683
- this.toolbarPropertes = properties['toolbar_properties'];
22626
+ // to determine the Content-Type header
22627
+ const consumes = [
22628
+ 'application/json'
22629
+ ];
22630
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
22631
+ if (httpContentTypeSelected !== undefined) {
22632
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
22684
22633
  }
22634
+ let responseType_ = 'json';
22635
+ if (localVarHttpHeaderAcceptSelected) {
22636
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
22637
+ responseType_ = 'text';
22638
+ }
22639
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
22640
+ responseType_ = 'json';
22641
+ }
22642
+ else {
22643
+ responseType_ = 'blob';
22644
+ }
22645
+ }
22646
+ let localVarPath = `/filter/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "filterIdentifier", value: filterIdentifier, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/performWidgetAction`;
22647
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
22648
+ context: localVarHttpContext,
22649
+ body: body,
22650
+ responseType: responseType_,
22651
+ withCredentials: this.configuration.withCredentials,
22652
+ headers: localVarHeaders,
22653
+ observe: observe,
22654
+ reportProgress: reportProgress
22655
+ });
22685
22656
  }
22686
- constructEmbeddedSlot() {
22687
- this.embeddedSlotContainerId = this.smartComponentLayout?.widget?.identifier;
22688
- this.embeddedSlotActive = true;
22689
- this.tryRegisterEmbeddedSlot();
22657
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
22658
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, providedIn: 'root' }); }
22659
+ }
22660
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, decorators: [{
22661
+ type: Injectable,
22662
+ args: [{
22663
+ providedIn: 'root'
22664
+ }]
22665
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
22666
+ type: Optional
22667
+ }, {
22668
+ type: Inject,
22669
+ args: [BASE_PATH]
22670
+ }] }, { type: Configuration, decorators: [{
22671
+ type: Optional
22672
+ }] }] });
22673
+
22674
+ class SmartFilterEditorService {
22675
+ constructor(service, viewCtxService) {
22676
+ this.service = service;
22677
+ this.viewCtxService = viewCtxService;
22678
+ this.modelChanged = new Subject();
22679
+ this.submit = new Subject();
22680
+ this.itemSelected = new Subject();
22681
+ this.toolbars = [];
22690
22682
  }
22691
- tryRegisterEmbeddedSlot() {
22692
- if (this.embeddedSlotContainerId && this.uuid && this._embeddedSlotVcRef) {
22693
- // An EMBEDDED_SLOT widget slot is LAYOUT-kind: it lives inside the re-rendering
22694
- // layout *ngFor, so its child must be detached before a top-level re-render and
22695
- // reattaches when this slot re-registers. (#28870)
22696
- this.viewContext.registerEmbeddedSlot(this.uuid, this.embeddedSlotContainerId, this._embeddedSlotVcRef, 'layout');
22683
+ submitForm(validate) {
22684
+ // NOPE
22685
+ }
22686
+ getInvalidFields() {
22687
+ return { invalidFieldKeys: [], invalidFieldNames: [] };
22688
+ }
22689
+ getComplexToolbars() {
22690
+ return [...this.toolbars];
22691
+ }
22692
+ setComplexToolbars(toolbars) {
22693
+ this.toolbars = [...toolbars];
22694
+ this.parentSmartComponent?.initActions();
22695
+ }
22696
+ async load() {
22697
+ if (this.config.uuid) {
22698
+ this.model = await this.service.load(this.config.uuid, this.config.identifier).toPromise();
22699
+ this.modelChanged.next();
22697
22700
  }
22698
22701
  }
22699
- updateUuid(newUuid) {
22700
- const oldUuid = this.uuid;
22701
- this.uuid = newUuid;
22702
- if (oldUuid !== newUuid && this.embeddedSlotContainerId) {
22703
- if (oldUuid) {
22704
- this.viewContext.unregisterEmbeddedSlot(oldUuid, this.embeddedSlotContainerId);
22702
+ async peformWidgetAction(request) {
22703
+ if (this.config.uuid) {
22704
+ let filterView = this.viewCtxService
22705
+ .getCurrentViewContext()
22706
+ ?.views.find((view) => view.uuid == this.config.uuid);
22707
+ if (filterView && filterView.state != ViewState.CLOSED) {
22708
+ this.model = await this.service
22709
+ .performWidgetAction(this.config.uuid, this.config.identifier, request)
22710
+ .toPromise();
22711
+ this.modelChanged.next();
22705
22712
  }
22706
- this.tryRegisterEmbeddedSlot();
22707
22713
  }
22708
22714
  }
22709
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutComponent, deps: [{ token: SmartformLayoutDefinitionService }, { token: SmartViewContextService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
22710
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: { smartComponentLayout: "smartComponentLayout", parentLayoutComponent: "parentLayoutComponent", parentSmartComponent: "parentSmartComponent", gridRow: "gridRow" }, host: { properties: { "attr.data-testid": "this.testId", "class.horizontal": "this.isHorizontal", "class.vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "formRef", first: true, predicate: SmartformComponent, descendants: true, isSignal: true }, { propertyName: "embeddedSlotVcRefSetter", first: true, predicate: ["embeddedSlot"], descendants: true, read: ViewContainerRef }, { propertyName: "smartFormList", predicate: ["form"], descendants: true }, { propertyName: "smartGridList", predicate: ["grid"], descendants: true }, { propertyName: "smartMapList", predicate: ["map"], descendants: true }, { propertyName: "smartDiagramList", predicate: ["diagram"], descendants: true }, { propertyName: "smartFilterList", predicate: ["filter"], descendants: true }, { propertyName: "toolbarList", predicate: ["toolbar"], descendants: true }, { propertyName: "expandableComponents", predicate: ExpandableSectionComponent, descendants: true }, { propertyName: "components", predicate: SmartComponentLayoutComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n @if (smartComponentLayout?.type === type().CONTAINER) {\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [parentSmartComponent]=\"parentSmartComponent\"\r\n [parentLayoutComponent]=\"this\"\r\n [smartComponentLayout]=\"layout\"\r\n [gridRow]=\"gridRow\"\r\n ></smart-component-layout>\r\n }\r\n <smartform *ngIf=\"smartForm\" #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid\r\n *ngIf=\"smartGrid\"\r\n #grid\r\n [smartGrid]=\"smartGrid\"\r\n [uuid]=\"uuid!\"\r\n [parentLayoutComponent]=\"this\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-grid>\r\n <smart-map\r\n *ngIf=\"!!uuid && !!mapId\"\r\n #map\r\n [uuid]=\"uuid\"\r\n [identifier]=\"mapId\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-map>\r\n <smart-diagram\r\n *ngIf=\"!!uuid && !!smartDiagramId\"\r\n #diagram\r\n [uuid]=\"uuid\"\r\n [identifier]=\"smartDiagramId\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-diagram>\r\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n <smart-ui-action-toolbar\r\n *ngIf=\"!!toolbarId\"\r\n #toolbar\r\n [id]=\"toolbarId\"\r\n [toolbarPropertes]=\"toolbarPropertes\"\r\n ></smart-ui-action-toolbar>\r\n <ng-container *ngIf=\"embeddedSlotActive\" #embeddedSlot></ng-container>\r\n</ng-template>\r\n", styles: [":host(.horizontal){display:flex;flex-direction:row}:host(.vertical){display:flex;flex-direction:column}:host(.horizontal) smart-component-layout{display:flex}:host(.horizontal) smartform{flex:1;display:flex}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SmartGridComponent, selector: "smart-grid", inputs: ["smartGrid", "uuid", "parent", "parentLayoutComponent", "dev"] }, { kind: "component", type: ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { kind: "component", type: SmartTreeComponent, selector: "smart-tree", inputs: ["treeStyle", "treeService"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { kind: "component", type: SmartMapComponent, selector: "smart-map", inputs: ["uuid", "identifier", "parent"] }, { kind: "component", type: SmartDiagramComponent, selector: "smart-diagram", inputs: ["uuid", "identifier", "parent", "diagramModel", "options", "plugins"], outputs: ["elementSelect", "canvasClick", "dataClick"] }, { kind: "component", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: ["smartComponentLayout", "parentLayoutComponent", "parentSmartComponent", "gridRow"] }] }); }
22711
- }
22712
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutComponent, decorators: [{
22713
- type: Component,
22714
- args: [{ selector: 'smart-component-layout', template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n @if (smartComponentLayout?.type === type().CONTAINER) {\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [parentSmartComponent]=\"parentSmartComponent\"\r\n [parentLayoutComponent]=\"this\"\r\n [smartComponentLayout]=\"layout\"\r\n [gridRow]=\"gridRow\"\r\n ></smart-component-layout>\r\n }\r\n <smartform *ngIf=\"smartForm\" #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid\r\n *ngIf=\"smartGrid\"\r\n #grid\r\n [smartGrid]=\"smartGrid\"\r\n [uuid]=\"uuid!\"\r\n [parentLayoutComponent]=\"this\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-grid>\r\n <smart-map\r\n *ngIf=\"!!uuid && !!mapId\"\r\n #map\r\n [uuid]=\"uuid\"\r\n [identifier]=\"mapId\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-map>\r\n <smart-diagram\r\n *ngIf=\"!!uuid && !!smartDiagramId\"\r\n #diagram\r\n [uuid]=\"uuid\"\r\n [identifier]=\"smartDiagramId\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-diagram>\r\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n <smart-ui-action-toolbar\r\n *ngIf=\"!!toolbarId\"\r\n #toolbar\r\n [id]=\"toolbarId\"\r\n [toolbarPropertes]=\"toolbarPropertes\"\r\n ></smart-ui-action-toolbar>\r\n <ng-container *ngIf=\"embeddedSlotActive\" #embeddedSlot></ng-container>\r\n</ng-template>\r\n", styles: [":host(.horizontal){display:flex;flex-direction:row}:host(.vertical){display:flex;flex-direction:column}:host(.horizontal) smart-component-layout{display:flex}:host(.horizontal) smartform{flex:1;display:flex}\n"] }]
22715
- }], ctorParameters: () => [{ type: SmartformLayoutDefinitionService }, { type: SmartViewContextService }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { smartComponentLayout: [{
22716
- type: Input
22717
- }], parentLayoutComponent: [{
22718
- type: Input
22719
- }], parentSmartComponent: [{
22720
- type: Input
22721
- }], gridRow: [{
22722
- type: Input
22723
- }], testId: [{
22724
- type: HostBinding,
22725
- args: ['attr.data-testid']
22726
- }], isHorizontal: [{
22727
- type: HostBinding,
22728
- args: ['class.horizontal']
22729
- }], isVertical: [{
22730
- type: HostBinding,
22731
- args: ['class.vertical']
22732
- }], smartFormList: [{
22733
- type: ViewChildren,
22734
- args: ['form']
22735
- }], smartGridList: [{
22736
- type: ViewChildren,
22737
- args: ['grid']
22738
- }], smartMapList: [{
22739
- type: ViewChildren,
22740
- args: ['map']
22741
- }], smartDiagramList: [{
22742
- type: ViewChildren,
22743
- args: ['diagram']
22744
- }], smartFilterList: [{
22745
- type: ViewChildren,
22746
- args: ['filter']
22747
- }], toolbarList: [{
22748
- type: ViewChildren,
22749
- args: ['toolbar']
22750
- }], embeddedSlotVcRefSetter: [{
22751
- type: ViewChild,
22752
- args: ['embeddedSlot', { read: ViewContainerRef, static: false }]
22753
- }], expandableComponents: [{
22754
- type: ViewChildren,
22755
- args: [ExpandableSectionComponent]
22756
- }], components: [{
22757
- type: ViewChildren,
22758
- args: [SmartComponentLayoutComponent]
22759
- }] } });
22760
-
22761
- const DEFAULT_PROVIDERS = [
22762
- DefaultChartOptionsProvider,
22763
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: barChart, multi: true },
22764
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: scatterChart, multi: true },
22765
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: bubbleChart, multi: true },
22766
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: horizontalBarChart, multi: true },
22767
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: stackedBarChart, multi: true },
22768
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: horizontalStackedBarChart, multi: true },
22769
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: multiAxisLineChart, multi: true },
22770
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: polarAreaChart, multi: true },
22771
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: radarChart, multi: true },
22772
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: doughnutChart, multi: true },
22773
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: pieChart, multi: true },
22774
- ];
22775
- class SmartDiagramModule {
22776
- static forRoot(providers) {
22715
+ getModel() {
22716
+ return this.model;
22717
+ }
22718
+ async performUiActionRequest(uiActionRequest, widgetId, nodeId) {
22719
+ await this.peformWidgetAction(uiActionRequest);
22720
+ }
22721
+ async handleSpecificDemandsAsynchronously(uiAction, uiActionRequest) {
22777
22722
  return {
22778
- ngModule: SmartDiagramModule,
22779
- providers: [...DEFAULT_PROVIDERS, ...providers],
22723
+ shouldPerformAction: true,
22724
+ uiActionRequest: uiActionRequest,
22780
22725
  };
22781
22726
  }
22782
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
22783
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, declarations: [SmartDiagramComponent], imports: [BrowserModule, ChartModule], exports: [SmartDiagramComponent] }); }
22784
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, imports: [BrowserModule, ChartModule] }); }
22785
- }
22786
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, decorators: [{
22787
- type: NgModule,
22788
- args: [{
22789
- declarations: [SmartDiagramComponent],
22790
- imports: [BrowserModule, ChartModule],
22791
- exports: [SmartDiagramComponent],
22792
- }]
22793
- }] });
22794
-
22795
- class SmartComponentLayoutModule {
22796
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
22797
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, declarations: [SmartComponentLayoutComponent], imports: [BrowserModule,
22798
- MatCommonModule,
22799
- SmartGridModule,
22800
- SmartExpandableSectionModule,
22801
- SmarttreeModule,
22802
- SmartViewContextModule,
22803
- SmartMapModule,
22804
- SmartDiagramModule,
22805
- InputGroupModule,
22806
- InputGroupAddonModule], exports: [SmartComponentLayoutComponent] }); }
22807
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, imports: [BrowserModule,
22808
- MatCommonModule,
22809
- SmartGridModule,
22810
- SmartExpandableSectionModule,
22811
- SmarttreeModule,
22812
- SmartViewContextModule,
22813
- SmartMapModule,
22814
- SmartDiagramModule,
22815
- InputGroupModule,
22816
- InputGroupAddonModule] }); }
22727
+ getAdditionalParams(uiAction) {
22728
+ throw new Error('Method not implemented.');
22729
+ }
22730
+ async bulkUpdateFilterExpression(operationType, item) {
22731
+ if (!this.model?.readOnly) {
22732
+ if (item) {
22733
+ item.expressionData.boolOperator = operationType;
22734
+ }
22735
+ await this.peformWidgetAction({
22736
+ code: 'BULK_UPDATE_FILTER_EXPRESSION',
22737
+ params: {
22738
+ model: item,
22739
+ operator: operationType,
22740
+ },
22741
+ });
22742
+ }
22743
+ }
22744
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService, deps: [{ token: FilterService }, { token: SmartViewContextService }], target: i0.ɵɵFactoryTarget.Injectable }); }
22745
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService }); }
22817
22746
  }
22818
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, decorators: [{
22819
- type: NgModule,
22820
- args: [{
22821
- declarations: [SmartComponentLayoutComponent],
22822
- imports: [
22823
- BrowserModule,
22824
- MatCommonModule,
22825
- SmartGridModule,
22826
- SmartExpandableSectionModule,
22827
- SmarttreeModule,
22828
- SmartViewContextModule,
22829
- SmartMapModule,
22830
- SmartDiagramModule,
22831
- InputGroupModule,
22832
- InputGroupAddonModule,
22833
- ],
22834
- exports: [SmartComponentLayoutComponent],
22835
- providers: [],
22836
- }]
22837
- }] });
22747
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService, decorators: [{
22748
+ type: Injectable
22749
+ }], ctorParameters: () => [{ type: FilterService }, { type: SmartViewContextService }] });
22838
22750
 
22839
22751
  class SmartFilterParamComponent {
22840
22752
  constructor() { }
@@ -23468,397 +23380,516 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
23468
23380
  type: Optional
23469
23381
  }] }], propDecorators: { service: [{
23470
23382
  type: Input
23471
- }], vcRef: [{
23472
- type: ViewChild,
23473
- args: ['form', { read: ViewContainerRef }]
23474
- }], simpleFilterVcRef: [{
23383
+ }], vcRef: [{
23384
+ type: ViewChild,
23385
+ args: ['form', { read: ViewContainerRef }]
23386
+ }], simpleFilterVcRef: [{
23387
+ type: ViewChild,
23388
+ args: ['simpleFilterFromChild', { read: ViewContainerRef }]
23389
+ }] } });
23390
+
23391
+ /**
23392
+ * A filter builder placed in a component layout. The identifier is the builder's filterId in the
23393
+ * view: the widget loads the builder by it, and the client above the layout finds the widget by it
23394
+ * for push updates and toolbar collection. Each widget owns its own SmartFilterEditorService.
23395
+ */
23396
+ class SmartFilterWidgetComponent {
23397
+ // A template reference instead of the class token: a value import of the editor would pull
23398
+ // the library's module cycle into this file. The editor subscribes to modelChanged in its own
23399
+ // ngAfterViewInit, which runs before this setter fires, so the action refresh below always
23400
+ // follows the editor's toolbar rebuild.
23401
+ set contentComponentSetter(comp) {
23402
+ if (comp && !this.contentComponent) {
23403
+ this.service.modelChanged
23404
+ .pipe(takeUntil(this._destroy$))
23405
+ .subscribe(() => this.parent?.initActions());
23406
+ }
23407
+ this.contentComponent = comp;
23408
+ }
23409
+ constructor(service) {
23410
+ this.service = service;
23411
+ this._destroy$ = new Subject();
23412
+ }
23413
+ ngOnChanges() {
23414
+ this.service.config = { uuid: this.uuid, identifier: this.identifier };
23415
+ this.service.parentSmartComponent = this.parent;
23416
+ if (this.uuid) {
23417
+ this.service.load();
23418
+ }
23419
+ }
23420
+ ngOnDestroy() {
23421
+ this._destroy$.next();
23422
+ this._destroy$.complete();
23423
+ }
23424
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterWidgetComponent, deps: [{ token: SmartFilterEditorService }], target: i0.ɵɵFactoryTarget.Component }); }
23425
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartFilterWidgetComponent, selector: "smart-filter-widget", inputs: { uuid: "uuid", identifier: "identifier", parent: "parent" }, providers: [SmartFilterEditorService], viewQueries: [{ propertyName: "contentComponentSetter", first: true, predicate: ["editor"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"filter-widget-container\" *ngIf=\"service.model\">\r\n <smart-filter-group-params [service]=\"service\"></smart-filter-group-params>\r\n <smart-filter-expression-editor #editor [service]=\"service\"></smart-filter-expression-editor>\r\n</div>\r\n", styles: [".filter-widget-container{display:flex;flex-direction:row}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SmartFilterParamsComponent, selector: "smart-filter-group-params", inputs: ["service"] }, { kind: "component", type: SmartFilterEditorContentComponent, selector: "smart-filter-expression-editor", inputs: ["service"] }] }); }
23426
+ }
23427
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterWidgetComponent, decorators: [{
23428
+ type: Component,
23429
+ args: [{ selector: 'smart-filter-widget', providers: [SmartFilterEditorService], template: "<div class=\"filter-widget-container\" *ngIf=\"service.model\">\r\n <smart-filter-group-params [service]=\"service\"></smart-filter-group-params>\r\n <smart-filter-expression-editor #editor [service]=\"service\"></smart-filter-expression-editor>\r\n</div>\r\n", styles: [".filter-widget-container{display:flex;flex-direction:row}\n"] }]
23430
+ }], ctorParameters: () => [{ type: SmartFilterEditorService }], propDecorators: { uuid: [{
23431
+ type: Input
23432
+ }], identifier: [{
23433
+ type: Input
23434
+ }], parent: [{
23435
+ type: Input
23436
+ }], contentComponentSetter: [{
23475
23437
  type: ViewChild,
23476
- args: ['simpleFilterFromChild', { read: ViewContainerRef }]
23438
+ args: ['editor']
23477
23439
  }] } });
23478
23440
 
23479
- /**
23480
- * Custom HttpParameterCodec
23481
- * Workaround for https://github.com/angular/angular/issues/18261
23482
- */
23483
- class CustomHttpParameterCodec {
23484
- encodeKey(k) {
23485
- return encodeURIComponent(k);
23441
+ class SmartComponentLayoutComponent {
23442
+ get testId() {
23443
+ return this.smartComponentLayout?.identifier ?? null;
23486
23444
  }
23487
- encodeValue(v) {
23488
- return encodeURIComponent(v);
23445
+ get isHorizontal() {
23446
+ return (this.smartComponentLayout?.type === this.type().CONTAINER &&
23447
+ this.smartComponentLayout?.direction === 'horizontal');
23489
23448
  }
23490
- decodeKey(k) {
23491
- return decodeURIComponent(k);
23449
+ get isVertical() {
23450
+ return (this.smartComponentLayout?.type === this.type().CONTAINER &&
23451
+ (this.smartComponentLayout?.direction ?? 'vertical') === 'vertical');
23492
23452
  }
23493
- decodeValue(v) {
23494
- return decodeURIComponent(v);
23453
+ set embeddedSlotVcRefSetter(vcRef) {
23454
+ this._embeddedSlotVcRef = vcRef;
23455
+ if (vcRef) {
23456
+ this.tryRegisterEmbeddedSlot();
23457
+ }
23495
23458
  }
23496
- }
23497
-
23498
- const BASE_PATH = new InjectionToken('basePath');
23499
- const COLLECTION_FORMATS = {
23500
- 'csv': ',',
23501
- 'tsv': ' ',
23502
- 'ssv': ' ',
23503
- 'pipes': '|'
23504
- };
23505
-
23506
- class Configuration {
23507
- constructor(configurationParameters = {}) {
23508
- this.apiKeys = configurationParameters.apiKeys;
23509
- this.username = configurationParameters.username;
23510
- this.password = configurationParameters.password;
23511
- this.accessToken = configurationParameters.accessToken;
23512
- this.basePath = configurationParameters.basePath;
23513
- this.withCredentials = configurationParameters.withCredentials;
23514
- this.encoder = configurationParameters.encoder;
23515
- if (configurationParameters.encodeParam) {
23516
- this.encodeParam = configurationParameters.encodeParam;
23459
+ constructor(layoutService, viewContext, element, renderer) {
23460
+ this.layoutService = layoutService;
23461
+ this.viewContext = viewContext;
23462
+ this.element = element;
23463
+ this.renderer = renderer;
23464
+ this._destroy$ = new Subject();
23465
+ this.appRef = inject(ApplicationRef);
23466
+ this.formRef = viewChild(SmartformComponent);
23467
+ this.onFormChange = effect(() => {
23468
+ const form = this.formRef();
23469
+ if (this.smartForm && form && this.parentSmartComponent) {
23470
+ this.parentSmartComponent.handleDataChangeSubscriptions(form);
23471
+ this.parentSmartComponent.handleUploadCallback(form);
23472
+ form.markAllWidgetsForChangeDetection();
23473
+ }
23474
+ });
23475
+ this.pendingOrphanCleanup = false;
23476
+ this.embeddedSlotActive = false;
23477
+ }
23478
+ ngAfterViewInit() {
23479
+ if (this.smartFormList?.first) {
23480
+ this.setFormComponent(this.smartFormList?.first);
23517
23481
  }
23518
- else {
23519
- this.encodeParam = param => this.defaultEncodeParam(param);
23482
+ this.smartFormList.changes
23483
+ .pipe(takeUntil(this._destroy$))
23484
+ .subscribe((list) => {
23485
+ this.setFormComponent(list.first);
23486
+ });
23487
+ if (this.smartGridList?.first) {
23488
+ this.setGridComponent(this.smartGridList?.first);
23520
23489
  }
23521
- if (configurationParameters.credentials) {
23522
- this.credentials = configurationParameters.credentials;
23490
+ this.smartGridList.changes
23491
+ .pipe(takeUntil(this._destroy$))
23492
+ .subscribe((list) => {
23493
+ this.setGridComponent(list.first);
23494
+ });
23495
+ if (this.smartMapList?.first) {
23496
+ this.setMapComponent(this.smartMapList?.first);
23523
23497
  }
23524
- else {
23525
- this.credentials = {};
23498
+ this.smartMapList.changes.pipe(takeUntil(this._destroy$)).subscribe((maps) => {
23499
+ this.setMapComponent(maps.first);
23500
+ });
23501
+ if (this.smartDiagramList?.first) {
23502
+ this.setDiagramComponent(this.smartDiagramList?.first);
23526
23503
  }
23527
- }
23528
- /**
23529
- * Select the correct content-type to use for a request.
23530
- * Uses {@link Configuration#isJsonMime} to determine the correct content-type.
23531
- * If no content type is found return the first found type if the contentTypes is not empty
23532
- * @param contentTypes - the array of content types that are available for selection
23533
- * @returns the selected content-type or <code>undefined</code> if no selection could be made.
23534
- */
23535
- selectHeaderContentType(contentTypes) {
23536
- if (contentTypes.length === 0) {
23537
- return undefined;
23504
+ this.smartDiagramList.changes.pipe(takeUntil(this._destroy$)).subscribe((diagrams) => {
23505
+ this.setDiagramComponent(diagrams.first);
23506
+ });
23507
+ if (this.smartFilterList?.first) {
23508
+ this.setFilterComponent(this.smartFilterList?.first);
23538
23509
  }
23539
- const type = contentTypes.find((x) => this.isJsonMime(x));
23540
- if (type === undefined) {
23541
- return contentTypes[0];
23510
+ this.smartFilterList.changes.pipe(takeUntil(this._destroy$)).subscribe((filters) => {
23511
+ this.setFilterComponent(filters.first);
23512
+ });
23513
+ if (this.toolbarList?.first) {
23514
+ this.setToolbarComponent(this.toolbarList?.first);
23542
23515
  }
23543
- return type;
23516
+ this.toolbarList.changes
23517
+ .pipe(takeUntil(this._destroy$))
23518
+ .subscribe((list) => {
23519
+ this.setToolbarComponent(list.first);
23520
+ });
23521
+ this.setUp();
23544
23522
  }
23545
- /**
23546
- * Select the correct accept content-type to use for a request.
23547
- * Uses {@link Configuration#isJsonMime} to determine the correct accept content-type.
23548
- * If no content type is found return the first found type if the contentTypes is not empty
23549
- * @param accepts - the array of content types that are available for selection.
23550
- * @returns the selected content-type or <code>undefined</code> if no selection could be made.
23551
- */
23552
- selectHeaderAccept(accepts) {
23553
- if (accepts.length === 0) {
23554
- return undefined;
23555
- }
23556
- const type = accepts.find((x) => this.isJsonMime(x));
23557
- if (type === undefined) {
23558
- return accepts[0];
23523
+ ngAfterViewChecked() {
23524
+ if (this.pendingOrphanCleanup) {
23525
+ this.pendingOrphanCleanup = false;
23526
+ this.viewContext.cleanupOrphanedEmbeddedViews(this.uuid);
23559
23527
  }
23560
- return type;
23561
- }
23562
- /**
23563
- * Check if the given MIME is a JSON MIME.
23564
- * JSON MIME examples:
23565
- * application/json
23566
- * application/json; charset=UTF8
23567
- * APPLICATION/JSON
23568
- * application/vnd.company+json
23569
- * @param mime - MIME (Multipurpose Internet Mail Extensions)
23570
- * @return True if the given MIME is JSON, false otherwise.
23571
- */
23572
- isJsonMime(mime) {
23573
- const jsonMime = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
23574
- return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
23575
23528
  }
23576
- lookupCredential(key) {
23577
- const value = this.credentials[key];
23578
- return typeof value === 'function'
23579
- ? value()
23580
- : value;
23529
+ ngOnDestroy() {
23530
+ if (this.embeddedSlotContainerId && this.uuid) {
23531
+ this.viewContext.unregisterEmbeddedSlot(this.uuid, this.embeddedSlotContainerId);
23532
+ }
23533
+ this._destroy$.next();
23534
+ this._destroy$.complete();
23581
23535
  }
23582
- defaultEncodeParam(param) {
23583
- // This implementation exists as fallback for missing configuration
23584
- // and for backwards compatibility to older typescript-angular generator versions.
23585
- // It only works for the 'simple' parameter style.
23586
- // Date-handling only works for the 'date-time' format.
23587
- // All other styles and Date-formats are probably handled incorrectly.
23588
- //
23589
- // But: if that's all you need (i.e.: the most common use-case): no need for customization!
23590
- const value = param.dataFormat === 'date-time' && param.value instanceof Date
23591
- ? param.value.toISOString()
23592
- : param.value;
23593
- return encodeURIComponent(String(value));
23536
+ ngOnChanges(changes) {
23537
+ this.setUp();
23594
23538
  }
23595
- }
23596
-
23597
- /**
23598
- * Filter API 2
23599
- * Filter API 2
23600
- *
23601
- * The version of the OpenAPI document: 1.0.0
23602
- * Contact: info@it4all.hu
23603
- *
23604
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
23605
- * https://openapi-generator.tech
23606
- * Do not edit the class manually.
23607
- */
23608
- /* tslint:disable:no-unused-variable member-ordering */
23609
- class FilterService {
23610
- constructor(httpClient, basePath, configuration) {
23611
- this.httpClient = httpClient;
23612
- this.basePath = 'http://localhost';
23613
- this.defaultHeaders = new HttpHeaders();
23614
- this.configuration = new Configuration();
23615
- if (configuration) {
23616
- this.configuration = configuration;
23539
+ setUp() {
23540
+ if (!this.parentSmartComponent || !this.smartComponentLayout) {
23541
+ return;
23617
23542
  }
23618
- if (typeof this.configuration.basePath !== 'string') {
23619
- if (Array.isArray(basePath) && basePath.length > 0) {
23620
- basePath = basePath[0];
23621
- }
23622
- if (typeof basePath !== 'string') {
23623
- basePath = this.basePath;
23624
- }
23625
- this.configuration.basePath = basePath;
23543
+ if (deepEqual(this.smartComponentLayout, this.currentLayout)) {
23544
+ // no layout change, keep current state
23545
+ this.smartComponentLayout = this.currentLayout;
23546
+ return;
23626
23547
  }
23627
- this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
23628
- }
23629
- // @ts-ignore
23630
- addToHttpParams(httpParams, value, key) {
23631
- if (typeof value === "object" && value instanceof Date === false) {
23632
- httpParams = this.addToHttpParamsRecursive(httpParams, value);
23548
+ // layout changed, render, but save current
23549
+ // this.currentLayout = JSON.parse(JSON.stringify(this.smartComponentLayout));
23550
+ SmartComponentLayoutUtility.clearFormHandlers(this);
23551
+ this.currentLayout = this.smartComponentLayout;
23552
+ this.uuid = this.parentSmartComponent.uuid;
23553
+ this.treeService = this.parentSmartComponent.smartTreeService;
23554
+ // Top-level layout: detach embedded views before the tree is re-rendered,
23555
+ // so they survive *ngFor component destruction
23556
+ if (!this.parentLayoutComponent && this.uuid) {
23557
+ this.viewContext.detachAllEmbeddedViews(this.uuid);
23558
+ this.pendingOrphanCleanup = true;
23559
+ }
23560
+ this.smartComponentLayout?.direction;
23561
+ // the nature of the layout might have changed (e.g. from GRID to FORM), we null out every
23562
+ // template-related element, so no stale data is left on screen:
23563
+ this.expandableSection = undefined;
23564
+ this.smartForm = undefined;
23565
+ this.smartFormComponent = undefined;
23566
+ this.smartGrid = undefined;
23567
+ this.smartGridComponent = undefined;
23568
+ this.filterId = undefined;
23569
+ this.smartFilterComponent = undefined;
23570
+ this.smartGrid = undefined;
23571
+ this.toolbarId = undefined;
23572
+ this.toolbar = undefined;
23573
+ // null out toolbar?
23574
+ this.mapId = undefined;
23575
+ this.smartDiagramId = undefined;
23576
+ if (this.embeddedSlotContainerId && this.uuid) {
23577
+ this.viewContext.unregisterEmbeddedSlot(this.uuid, this.embeddedSlotContainerId);
23633
23578
  }
23634
- else {
23635
- httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
23579
+ this.embeddedSlotActive = false;
23580
+ this.embeddedSlotContainerId = undefined;
23581
+ if (this.smartComponentLayout?.expandable) {
23582
+ this.constructExpandableSection();
23636
23583
  }
23637
- return httpParams;
23638
- }
23639
- addToHttpParamsRecursive(httpParams, value, key) {
23640
- if (value == null) {
23641
- return httpParams;
23584
+ else if (this.smartComponentLayout?.type === ComponentType.FORM) {
23585
+ this.constructForm();
23642
23586
  }
23643
- if (typeof value === "object") {
23644
- if (Array.isArray(value)) {
23645
- value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
23587
+ else if (this.smartComponentLayout?.type === ComponentType.WIDGET) {
23588
+ if (this.smartComponentLayout.widget?.type === ComponentWidgetType.GRID) {
23589
+ this.constructGrid();
23646
23590
  }
23647
- else if (value instanceof Date) {
23648
- if (key != null) {
23649
- httpParams = httpParams.append(key, value.toISOString().substr(0, 10));
23650
- }
23651
- else {
23652
- throw Error("key may not be null if value is Date");
23653
- }
23591
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.FILTER) {
23592
+ this.constructFilter();
23654
23593
  }
23655
- else {
23656
- Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
23594
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.TREE) {
23595
+ this.constructTree();
23657
23596
  }
23658
- }
23659
- else if (key != null) {
23660
- httpParams = httpParams.append(key, value);
23661
- }
23662
- else {
23663
- throw Error("key may not be null if value is not object or array");
23664
- }
23665
- return httpParams;
23666
- }
23667
- load(uuid, filterIdentifier, observe = 'body', reportProgress = false, options) {
23668
- if (uuid === null || uuid === undefined) {
23669
- throw new Error('Required parameter uuid was null or undefined when calling load.');
23670
- }
23671
- if (filterIdentifier === null || filterIdentifier === undefined) {
23672
- throw new Error('Required parameter filterIdentifier was null or undefined when calling load.');
23673
- }
23674
- let localVarHeaders = this.defaultHeaders;
23675
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
23676
- if (localVarHttpHeaderAcceptSelected === undefined) {
23677
- // to determine the Accept header
23678
- const httpHeaderAccepts = [
23679
- 'application/json'
23680
- ];
23681
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
23682
- }
23683
- if (localVarHttpHeaderAcceptSelected !== undefined) {
23684
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
23685
- }
23686
- let localVarHttpContext = options && options.context;
23687
- if (localVarHttpContext === undefined) {
23688
- localVarHttpContext = new HttpContext();
23689
- }
23690
- let responseType_ = 'json';
23691
- if (localVarHttpHeaderAcceptSelected) {
23692
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
23693
- responseType_ = 'text';
23597
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.TOOLBAR) {
23598
+ this.constructToolbar();
23694
23599
  }
23695
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
23696
- responseType_ = 'json';
23600
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.MAP) {
23601
+ this.constructMap();
23697
23602
  }
23698
- else {
23699
- responseType_ = 'blob';
23603
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.DIAGRAM) {
23604
+ this.construcDiagram();
23605
+ }
23606
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.EMBEDDED_SLOT) {
23607
+ this.constructEmbeddedSlot();
23608
+ }
23609
+ if (!this.parentLayoutComponent) {
23610
+ // only top level component should call init actions
23611
+ this.parentSmartComponent.initActions();
23700
23612
  }
23701
23613
  }
23702
- let localVarPath = `/filter/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "filterIdentifier", value: filterIdentifier, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/load`;
23703
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
23704
- context: localVarHttpContext,
23705
- responseType: responseType_,
23706
- withCredentials: this.configuration.withCredentials,
23707
- headers: localVarHeaders,
23708
- observe: observe,
23709
- reportProgress: reportProgress
23710
- });
23614
+ SmartStyleUtility.applyStyle(this.smartComponentLayout.style, this.element, this.renderer);
23711
23615
  }
23712
- performWidgetAction(uuid, filterIdentifier, body, observe = 'body', reportProgress = false, options) {
23713
- if (uuid === null || uuid === undefined) {
23714
- throw new Error('Required parameter uuid was null or undefined when calling performWidgetAction.');
23715
- }
23716
- if (filterIdentifier === null || filterIdentifier === undefined) {
23717
- throw new Error('Required parameter filterIdentifier was null or undefined when calling performWidgetAction.');
23616
+ type() {
23617
+ return ComponentType;
23618
+ }
23619
+ constructExpandableSection() {
23620
+ let data = { ...this.smartComponentLayout };
23621
+ data.expandable = false;
23622
+ this.expandableSection = {
23623
+ title: this.smartComponentLayout?.expandableSectionLabel ?? '',
23624
+ inputs: new Map([
23625
+ ['smartComponentLayout', data],
23626
+ ['parentSmartComponent', this.parentSmartComponent],
23627
+ ['parentLayoutComponent', this.parentLayoutComponent],
23628
+ ]),
23629
+ headerToolbarId: this.smartComponentLayout?.expandableSectionHeaderToolbarId,
23630
+ customComponent: SmartComponentLayoutComponent,
23631
+ };
23632
+ }
23633
+ constructForm() {
23634
+ const widgets = this.layoutService.render({
23635
+ layoutDefinitions: this.smartComponentLayout?.form,
23636
+ });
23637
+ if (this.gridRow && !this.gridRow.valueSets && this.parentSmartComponent?.model) {
23638
+ this.gridRow.valueSets = this.parentSmartComponent.model.valueSets;
23718
23639
  }
23719
- if (body === null || body === undefined) {
23720
- throw new Error('Required parameter body was null or undefined when calling performWidgetAction.');
23640
+ this.smartForm = {
23641
+ direction: this.getFormLayout(),
23642
+ componentModel: this.gridRow ? this.gridRow : this.parentSmartComponent?.model,
23643
+ widgets,
23644
+ };
23645
+ this.bindForm();
23646
+ }
23647
+ getFormLayout() {
23648
+ if (this.smartComponentLayout?.direction) {
23649
+ return this.smartComponentLayout?.direction === LayoutDirection.HORIZONTAL
23650
+ ? SmartFormWidgetDirection.ROW
23651
+ : SmartFormWidgetDirection.COL;
23721
23652
  }
23722
- let localVarHeaders = this.defaultHeaders;
23723
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
23724
- if (localVarHttpHeaderAcceptSelected === undefined) {
23725
- // to determine the Accept header
23726
- const httpHeaderAccepts = [
23727
- 'application/json'
23728
- ];
23729
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
23653
+ return SmartFormWidgetDirection.COL;
23654
+ }
23655
+ setFormComponent(comp) {
23656
+ if (!this.smartFormComponent) {
23657
+ this.smartFormComponent = comp;
23658
+ this.bindForm();
23730
23659
  }
23731
- if (localVarHttpHeaderAcceptSelected !== undefined) {
23732
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
23660
+ }
23661
+ bindForm() {
23662
+ if (this.parentSmartComponent?.useQueryLists) {
23663
+ return;
23733
23664
  }
23734
- let localVarHttpContext = options && options.context;
23735
- if (localVarHttpContext === undefined) {
23736
- localVarHttpContext = new HttpContext();
23665
+ if (this.smartForm && this.smartFormComponent) {
23666
+ this.parentSmartComponent?.addForm(
23667
+ // unique identifier for the form
23668
+ `form_${this.makeid(5)}`, this.smartForm, this.smartFormComponent);
23737
23669
  }
23738
- // to determine the Content-Type header
23739
- const consumes = [
23740
- 'application/json'
23741
- ];
23742
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
23743
- if (httpContentTypeSelected !== undefined) {
23744
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
23670
+ }
23671
+ makeid(length) {
23672
+ let result = '';
23673
+ const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
23674
+ const charactersLength = characters.length;
23675
+ let counter = 0;
23676
+ while (counter < length) {
23677
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
23678
+ counter += 1;
23745
23679
  }
23746
- let responseType_ = 'json';
23747
- if (localVarHttpHeaderAcceptSelected) {
23748
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
23749
- responseType_ = 'text';
23750
- }
23751
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
23752
- responseType_ = 'json';
23753
- }
23754
- else {
23755
- responseType_ = 'blob';
23756
- }
23680
+ return result;
23681
+ }
23682
+ constructGrid() {
23683
+ this.smartGrid = {
23684
+ gridIdentifier: this.smartComponentLayout?.widget?.identifier,
23685
+ gridModel: {
23686
+ page: {},
23687
+ },
23688
+ options: {
23689
+ rowUiActionType: GridUiActionType.POPUP_MENU,
23690
+ },
23691
+ layoutDef: SmartLayoutDef.TABLE,
23692
+ paginator: false,
23693
+ layoutComponent: SmartComponentLayoutComponent,
23694
+ layoutUtility: SmartComponentLayoutUtility,
23695
+ };
23696
+ this.bindGrid();
23697
+ }
23698
+ setGridComponent(comp) {
23699
+ if (!this.smartGridComponent) {
23700
+ this.smartGridComponent = comp;
23701
+ this.bindGrid();
23757
23702
  }
23758
- let localVarPath = `/filter/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "filterIdentifier", value: filterIdentifier, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/performWidgetAction`;
23759
- return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
23760
- context: localVarHttpContext,
23761
- body: body,
23762
- responseType: responseType_,
23763
- withCredentials: this.configuration.withCredentials,
23764
- headers: localVarHeaders,
23765
- observe: observe,
23766
- reportProgress: reportProgress
23767
- });
23768
23703
  }
23769
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
23770
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, providedIn: 'root' }); }
23771
- }
23772
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, decorators: [{
23773
- type: Injectable,
23774
- args: [{
23775
- providedIn: 'root'
23776
- }]
23777
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
23778
- type: Optional
23779
- }, {
23780
- type: Inject,
23781
- args: [BASE_PATH]
23782
- }] }, { type: Configuration, decorators: [{
23783
- type: Optional
23784
- }] }] });
23785
-
23786
- class SmartFilterEditorService {
23787
- constructor(service, viewCtxService) {
23788
- this.service = service;
23789
- this.viewCtxService = viewCtxService;
23790
- this.modelChanged = new Subject();
23791
- this.submit = new Subject();
23792
- this.itemSelected = new Subject();
23793
- this.toolbars = [];
23704
+ bindGrid() {
23705
+ if (this.parentSmartComponent?.useQueryLists) {
23706
+ if (this.smartGrid && this.smartGridComponent && this.parentSmartComponent) {
23707
+ this.parentSmartComponent.setupGridServices(this.smartGridComponent);
23708
+ }
23709
+ return;
23710
+ }
23711
+ if (this.smartGrid && this.smartGridComponent) {
23712
+ this.smartGrid = this.parentSmartComponent?.addGrid(this.smartGrid, {
23713
+ rowUiActionType: GridUiActionType.POPUP_MENU,
23714
+ }, false, this.smartGridComponent);
23715
+ }
23794
23716
  }
23795
- submitForm(validate) {
23796
- // NOPE
23717
+ constructMap() {
23718
+ this.mapId = this.smartComponentLayout?.widget?.identifier;
23719
+ this.bindMap();
23797
23720
  }
23798
- getInvalidFields() {
23799
- return { invalidFieldKeys: [], invalidFieldNames: [] };
23721
+ construcDiagram() {
23722
+ this.smartDiagramId = this.smartComponentLayout?.widget?.identifier;
23723
+ this.bindDiagram();
23800
23724
  }
23801
- getComplexToolbars() {
23802
- return [...this.toolbars];
23725
+ setMapComponent(comp) {
23726
+ if (!this.smartMapComponent) {
23727
+ this.smartMapComponent = comp;
23728
+ this.bindMap();
23729
+ }
23803
23730
  }
23804
- setComplexToolbars(toolbars) {
23805
- this.toolbars = [...toolbars];
23806
- this.parentSmartComponent?.initActions();
23731
+ setDiagramComponent(comp) {
23732
+ if (!this.smartDiagramComponent) {
23733
+ this.smartDiagramComponent = comp;
23734
+ this.bindDiagram();
23735
+ }
23807
23736
  }
23808
- async load() {
23809
- if (this.config.uuid) {
23810
- this.model = await this.service.load(this.config.uuid, this.config.identifier).toPromise();
23811
- this.modelChanged.next();
23737
+ setFilterComponent(comp) {
23738
+ if (!this.smartFilterComponent) {
23739
+ this.smartFilterComponent = comp;
23740
+ this.bindFilter();
23812
23741
  }
23813
23742
  }
23814
- async peformWidgetAction(request) {
23815
- if (this.config.uuid) {
23816
- let filterView = this.viewCtxService
23817
- .getCurrentViewContext()
23818
- ?.views.find((view) => view.uuid == this.config.uuid);
23819
- if (filterView && filterView.state != ViewState.CLOSED) {
23820
- this.model = await this.service
23821
- .performWidgetAction(this.config.uuid, this.config.identifier, request)
23822
- .toPromise();
23823
- this.modelChanged.next();
23824
- }
23743
+ bindMap() {
23744
+ if (this.parentSmartComponent.useQueryLists) {
23745
+ return;
23825
23746
  }
23747
+ console.warn('Map components are only supported through QueryLists!');
23826
23748
  }
23827
- getModel() {
23828
- return this.model;
23749
+ bindDiagram() {
23750
+ if (this.parentSmartComponent.useQueryLists) {
23751
+ return;
23752
+ }
23753
+ console.warn('Diagram components are only supported through QueryLists!');
23829
23754
  }
23830
- async performUiActionRequest(uiActionRequest, widgetId, nodeId) {
23831
- await this.peformWidgetAction(uiActionRequest);
23755
+ setToolbarComponent(comp) {
23756
+ this.toolbar = comp;
23832
23757
  }
23833
- async handleSpecificDemandsAsynchronously(uiAction, uiActionRequest) {
23834
- return {
23835
- shouldPerformAction: true,
23836
- uiActionRequest: uiActionRequest,
23837
- };
23758
+ constructFilter() {
23759
+ this.filterId = this.smartComponentLayout?.widget?.identifier;
23760
+ this.bindFilter();
23838
23761
  }
23839
- getAdditionalParams(uiAction) {
23840
- throw new Error('Method not implemented.');
23762
+ bindFilter() {
23763
+ if (this.parentSmartComponent.useQueryLists) {
23764
+ return;
23765
+ }
23766
+ console.warn('Filter widgets are only supported through QueryLists!');
23841
23767
  }
23842
- async bulkUpdateFilterExpression(operationType, item) {
23843
- if (!this.model?.readOnly) {
23844
- if (item) {
23845
- item.expressionData.boolOperator = operationType;
23768
+ constructTree() {
23769
+ if (this.parentSmartComponent?.useQueryLists) {
23770
+ return;
23771
+ }
23772
+ this.parentSmartComponent.setUpDefaultTree(this.smartComponentLayout?.widget?.identifier);
23773
+ this.treeService?.initialize();
23774
+ }
23775
+ constructToolbar() {
23776
+ let toolbarId = this.smartComponentLayout?.widget?.identifier;
23777
+ if (this.toolbarId !== toolbarId) {
23778
+ this.toolbarId = toolbarId;
23779
+ }
23780
+ let properties = this.smartComponentLayout?.widget?.properties;
23781
+ if (properties && properties['toolbar_properties']) {
23782
+ this.toolbarPropertes = properties['toolbar_properties'];
23783
+ }
23784
+ }
23785
+ constructEmbeddedSlot() {
23786
+ this.embeddedSlotContainerId = this.smartComponentLayout?.widget?.identifier;
23787
+ this.embeddedSlotActive = true;
23788
+ this.tryRegisterEmbeddedSlot();
23789
+ }
23790
+ tryRegisterEmbeddedSlot() {
23791
+ if (this.embeddedSlotContainerId && this.uuid && this._embeddedSlotVcRef) {
23792
+ // An EMBEDDED_SLOT widget slot is LAYOUT-kind: it lives inside the re-rendering
23793
+ // layout *ngFor, so its child must be detached before a top-level re-render and
23794
+ // reattaches when this slot re-registers. (#28870)
23795
+ this.viewContext.registerEmbeddedSlot(this.uuid, this.embeddedSlotContainerId, this._embeddedSlotVcRef, 'layout');
23796
+ }
23797
+ }
23798
+ updateUuid(newUuid) {
23799
+ const oldUuid = this.uuid;
23800
+ this.uuid = newUuid;
23801
+ if (oldUuid !== newUuid && this.embeddedSlotContainerId) {
23802
+ if (oldUuid) {
23803
+ this.viewContext.unregisterEmbeddedSlot(oldUuid, this.embeddedSlotContainerId);
23846
23804
  }
23847
- await this.peformWidgetAction({
23848
- code: 'BULK_UPDATE_FILTER_EXPRESSION',
23849
- params: {
23850
- model: item,
23851
- operator: operationType,
23852
- },
23853
- });
23805
+ this.tryRegisterEmbeddedSlot();
23854
23806
  }
23855
23807
  }
23856
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService, deps: [{ token: FilterService }, { token: SmartViewContextService }], target: i0.ɵɵFactoryTarget.Injectable }); }
23857
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService }); }
23808
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutComponent, deps: [{ token: SmartformLayoutDefinitionService }, { token: SmartViewContextService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
23809
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: { smartComponentLayout: "smartComponentLayout", parentLayoutComponent: "parentLayoutComponent", parentSmartComponent: "parentSmartComponent", gridRow: "gridRow" }, host: { properties: { "attr.data-testid": "this.testId", "class.horizontal": "this.isHorizontal", "class.vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "formRef", first: true, predicate: SmartformComponent, descendants: true, isSignal: true }, { propertyName: "embeddedSlotVcRefSetter", first: true, predicate: ["embeddedSlot"], descendants: true, read: ViewContainerRef }, { propertyName: "smartFormList", predicate: ["form"], descendants: true }, { propertyName: "smartGridList", predicate: ["grid"], descendants: true }, { propertyName: "smartMapList", predicate: ["map"], descendants: true }, { propertyName: "smartDiagramList", predicate: ["diagram"], descendants: true }, { propertyName: "smartFilterList", predicate: ["filter"], descendants: true }, { propertyName: "toolbarList", predicate: ["toolbar"], descendants: true }, { propertyName: "expandableComponents", predicate: ExpandableSectionComponent, descendants: true }, { propertyName: "components", predicate: SmartComponentLayoutComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n @if (smartComponentLayout?.type === type().CONTAINER) {\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [parentSmartComponent]=\"parentSmartComponent\"\r\n [parentLayoutComponent]=\"this\"\r\n [smartComponentLayout]=\"layout\"\r\n [gridRow]=\"gridRow\"\r\n ></smart-component-layout>\r\n }\r\n <smartform *ngIf=\"smartForm\" #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid\r\n *ngIf=\"smartGrid\"\r\n #grid\r\n [smartGrid]=\"smartGrid\"\r\n [uuid]=\"uuid!\"\r\n [parentLayoutComponent]=\"this\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-grid>\r\n <smart-map\r\n *ngIf=\"!!uuid && !!mapId\"\r\n #map\r\n [uuid]=\"uuid\"\r\n [identifier]=\"mapId\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-map>\r\n <smart-diagram\r\n *ngIf=\"!!uuid && !!smartDiagramId\"\r\n #diagram\r\n [uuid]=\"uuid\"\r\n [identifier]=\"smartDiagramId\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-diagram>\r\n <smart-filter-widget\r\n *ngIf=\"!!uuid && !!filterId\"\r\n #filter\r\n [uuid]=\"uuid\"\r\n [identifier]=\"filterId\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-filter-widget>\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n <smart-ui-action-toolbar\r\n *ngIf=\"!!toolbarId\"\r\n #toolbar\r\n [id]=\"toolbarId\"\r\n [toolbarPropertes]=\"toolbarPropertes\"\r\n ></smart-ui-action-toolbar>\r\n <ng-container *ngIf=\"embeddedSlotActive\" #embeddedSlot></ng-container>\r\n</ng-template>\r\n", styles: [":host(.horizontal){display:flex;flex-direction:row}:host(.vertical){display:flex;flex-direction:column}:host(.horizontal) smart-component-layout{display:flex}:host(.horizontal) smartform{flex:1;display:flex}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SmartGridComponent, selector: "smart-grid", inputs: ["smartGrid", "uuid", "parent", "parentLayoutComponent", "dev"] }, { kind: "component", type: ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { kind: "component", type: SmartTreeComponent, selector: "smart-tree", inputs: ["treeStyle", "treeService"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { kind: "component", type: SmartMapComponent, selector: "smart-map", inputs: ["uuid", "identifier", "parent"] }, { kind: "component", type: SmartDiagramComponent, selector: "smart-diagram", inputs: ["uuid", "identifier", "parent", "diagramModel", "options", "plugins"], outputs: ["elementSelect", "canvasClick", "dataClick"] }, { kind: "component", type: SmartFilterWidgetComponent, selector: "smart-filter-widget", inputs: ["uuid", "identifier", "parent"] }, { kind: "component", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: ["smartComponentLayout", "parentLayoutComponent", "parentSmartComponent", "gridRow"] }] }); }
23858
23810
  }
23859
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService, decorators: [{
23860
- type: Injectable
23861
- }], ctorParameters: () => [{ type: FilterService }, { type: SmartViewContextService }] });
23811
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutComponent, decorators: [{
23812
+ type: Component,
23813
+ args: [{ selector: 'smart-component-layout', template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\r\n\r\n<ng-template #expandable>\r\n <smart-expandable-section\r\n *ngIf=\"expandableSection\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n</ng-template>\r\n\r\n<ng-template #normal>\r\n @if (smartComponentLayout?.type === type().CONTAINER) {\r\n <smart-component-layout\r\n *ngFor=\"let layout of smartComponentLayout?.components\"\r\n [parentSmartComponent]=\"parentSmartComponent\"\r\n [parentLayoutComponent]=\"this\"\r\n [smartComponentLayout]=\"layout\"\r\n [gridRow]=\"gridRow\"\r\n ></smart-component-layout>\r\n }\r\n <smartform *ngIf=\"smartForm\" #form [smartForm]=\"smartForm\"></smartform>\r\n <smart-grid\r\n *ngIf=\"smartGrid\"\r\n #grid\r\n [smartGrid]=\"smartGrid\"\r\n [uuid]=\"uuid!\"\r\n [parentLayoutComponent]=\"this\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-grid>\r\n <smart-map\r\n *ngIf=\"!!uuid && !!mapId\"\r\n #map\r\n [uuid]=\"uuid\"\r\n [identifier]=\"mapId\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-map>\r\n <smart-diagram\r\n *ngIf=\"!!uuid && !!smartDiagramId\"\r\n #diagram\r\n [uuid]=\"uuid\"\r\n [identifier]=\"smartDiagramId\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-diagram>\r\n <smart-filter-widget\r\n *ngIf=\"!!uuid && !!filterId\"\r\n #filter\r\n [uuid]=\"uuid\"\r\n [identifier]=\"filterId\"\r\n [parent]=\"parentSmartComponent\"\r\n ></smart-filter-widget>\r\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\r\n <smart-ui-action-toolbar\r\n *ngIf=\"!!toolbarId\"\r\n #toolbar\r\n [id]=\"toolbarId\"\r\n [toolbarPropertes]=\"toolbarPropertes\"\r\n ></smart-ui-action-toolbar>\r\n <ng-container *ngIf=\"embeddedSlotActive\" #embeddedSlot></ng-container>\r\n</ng-template>\r\n", styles: [":host(.horizontal){display:flex;flex-direction:row}:host(.vertical){display:flex;flex-direction:column}:host(.horizontal) smart-component-layout{display:flex}:host(.horizontal) smartform{flex:1;display:flex}\n"] }]
23814
+ }], ctorParameters: () => [{ type: SmartformLayoutDefinitionService }, { type: SmartViewContextService }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { smartComponentLayout: [{
23815
+ type: Input
23816
+ }], parentLayoutComponent: [{
23817
+ type: Input
23818
+ }], parentSmartComponent: [{
23819
+ type: Input
23820
+ }], gridRow: [{
23821
+ type: Input
23822
+ }], testId: [{
23823
+ type: HostBinding,
23824
+ args: ['attr.data-testid']
23825
+ }], isHorizontal: [{
23826
+ type: HostBinding,
23827
+ args: ['class.horizontal']
23828
+ }], isVertical: [{
23829
+ type: HostBinding,
23830
+ args: ['class.vertical']
23831
+ }], smartFormList: [{
23832
+ type: ViewChildren,
23833
+ args: ['form']
23834
+ }], smartGridList: [{
23835
+ type: ViewChildren,
23836
+ args: ['grid']
23837
+ }], smartMapList: [{
23838
+ type: ViewChildren,
23839
+ args: ['map']
23840
+ }], smartDiagramList: [{
23841
+ type: ViewChildren,
23842
+ args: ['diagram']
23843
+ }], smartFilterList: [{
23844
+ type: ViewChildren,
23845
+ args: ['filter']
23846
+ }], toolbarList: [{
23847
+ type: ViewChildren,
23848
+ args: ['toolbar']
23849
+ }], embeddedSlotVcRefSetter: [{
23850
+ type: ViewChild,
23851
+ args: ['embeddedSlot', { read: ViewContainerRef, static: false }]
23852
+ }], expandableComponents: [{
23853
+ type: ViewChildren,
23854
+ args: [ExpandableSectionComponent]
23855
+ }], components: [{
23856
+ type: ViewChildren,
23857
+ args: [SmartComponentLayoutComponent]
23858
+ }] } });
23859
+
23860
+ const DEFAULT_PROVIDERS = [
23861
+ DefaultChartOptionsProvider,
23862
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: barChart, multi: true },
23863
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: scatterChart, multi: true },
23864
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: bubbleChart, multi: true },
23865
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: horizontalBarChart, multi: true },
23866
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: stackedBarChart, multi: true },
23867
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: horizontalStackedBarChart, multi: true },
23868
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: multiAxisLineChart, multi: true },
23869
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: polarAreaChart, multi: true },
23870
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: radarChart, multi: true },
23871
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: doughnutChart, multi: true },
23872
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: pieChart, multi: true },
23873
+ ];
23874
+ class SmartDiagramModule {
23875
+ static forRoot(providers) {
23876
+ return {
23877
+ ngModule: SmartDiagramModule,
23878
+ providers: [...DEFAULT_PROVIDERS, ...providers],
23879
+ };
23880
+ }
23881
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23882
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, declarations: [SmartDiagramComponent], imports: [BrowserModule, ChartModule], exports: [SmartDiagramComponent] }); }
23883
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, imports: [BrowserModule, ChartModule] }); }
23884
+ }
23885
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, decorators: [{
23886
+ type: NgModule,
23887
+ args: [{
23888
+ declarations: [SmartDiagramComponent],
23889
+ imports: [BrowserModule, ChartModule],
23890
+ exports: [SmartDiagramComponent],
23891
+ }]
23892
+ }] });
23862
23893
 
23863
23894
  class SmartFilterEditorModule {
23864
23895
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -23869,7 +23900,8 @@ class SmartFilterEditorModule {
23869
23900
  SmartFilterExpressionItemComponent,
23870
23901
  AdvancedSmartFilterExpressionItemComponent,
23871
23902
  AdvancedRelationButtonComponent,
23872
- ExpressionEditorDialogComponent], imports: [CommonModule,
23903
+ ExpressionEditorDialogComponent,
23904
+ SmartFilterWidgetComponent], imports: [CommonModule,
23873
23905
  SmartIconModule,
23874
23906
  SmartExpandableSectionModule,
23875
23907
  SmartViewContextModule,
@@ -23882,7 +23914,8 @@ class SmartFilterEditorModule {
23882
23914
  SmartFilterExpressionItemComponent,
23883
23915
  AdvancedSmartFilterExpressionItemComponent,
23884
23916
  AdvancedRelationButtonComponent,
23885
- ExpressionEditorDialogComponent] }); }
23917
+ ExpressionEditorDialogComponent,
23918
+ SmartFilterWidgetComponent] }); }
23886
23919
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorModule, imports: [CommonModule,
23887
23920
  SmartIconModule,
23888
23921
  SmartExpandableSectionModule,
@@ -23903,6 +23936,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
23903
23936
  AdvancedSmartFilterExpressionItemComponent,
23904
23937
  AdvancedRelationButtonComponent,
23905
23938
  ExpressionEditorDialogComponent,
23939
+ SmartFilterWidgetComponent,
23906
23940
  ],
23907
23941
  imports: [
23908
23942
  CommonModule,
@@ -23922,7 +23956,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
23922
23956
  AdvancedSmartFilterExpressionItemComponent,
23923
23957
  AdvancedRelationButtonComponent,
23924
23958
  ExpressionEditorDialogComponent,
23959
+ SmartFilterWidgetComponent,
23960
+ ],
23961
+ providers: [],
23962
+ }]
23963
+ }] });
23964
+
23965
+ class SmartComponentLayoutModule {
23966
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23967
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, declarations: [SmartComponentLayoutComponent], imports: [BrowserModule,
23968
+ MatCommonModule,
23969
+ SmartGridModule,
23970
+ SmartExpandableSectionModule,
23971
+ SmarttreeModule,
23972
+ SmartViewContextModule,
23973
+ SmartMapModule,
23974
+ SmartDiagramModule,
23975
+ SmartFilterEditorModule,
23976
+ InputGroupModule,
23977
+ InputGroupAddonModule], exports: [SmartComponentLayoutComponent] }); }
23978
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, imports: [BrowserModule,
23979
+ MatCommonModule,
23980
+ SmartGridModule,
23981
+ SmartExpandableSectionModule,
23982
+ SmarttreeModule,
23983
+ SmartViewContextModule,
23984
+ SmartMapModule,
23985
+ SmartDiagramModule,
23986
+ SmartFilterEditorModule,
23987
+ InputGroupModule,
23988
+ InputGroupAddonModule] }); }
23989
+ }
23990
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, decorators: [{
23991
+ type: NgModule,
23992
+ args: [{
23993
+ declarations: [SmartComponentLayoutComponent],
23994
+ imports: [
23995
+ BrowserModule,
23996
+ MatCommonModule,
23997
+ SmartGridModule,
23998
+ SmartExpandableSectionModule,
23999
+ SmarttreeModule,
24000
+ SmartViewContextModule,
24001
+ SmartMapModule,
24002
+ SmartDiagramModule,
24003
+ SmartFilterEditorModule,
24004
+ InputGroupModule,
24005
+ InputGroupAddonModule,
23925
24006
  ],
24007
+ exports: [SmartComponentLayoutComponent],
23926
24008
  providers: [],
23927
24009
  }]
23928
24010
  }] });
@@ -24509,6 +24591,9 @@ class SmartComponentApiClient {
24509
24591
  }
24510
24592
  getAllSmartFilterEditorContentComponents() {
24511
24593
  let filters = this.getSmartFilterEditorContentComponentsQL()?.toArray() ?? [];
24594
+ this.getSmartComponentLayoutsQL()?.forEach((comp) => {
24595
+ filters.push(...SmartComponentLayoutUtility.getFilters(comp));
24596
+ });
24512
24597
  return filters;
24513
24598
  }
24514
24599
  getAllSmartUiActionToolbars() {
@@ -25970,5 +26055,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
25970
26055
  * Generated bundle index. Do not edit.
25971
26056
  */
25972
26057
 
25973
- export { APIS$5 as APIS, AbstractMap, AclEditingViewComponent, AdvancedRelationButtonComponent, AdvancedSmartFilterExpressionItemComponent, ApiModule$5 as ApiModule, ApiQueueService, BASE_PATH$7 as BASE_PATH, COLLECTION_FORMATS$7 as COLLECTION_FORMATS, COMPONENT_LIBRARY, CUSTOM_DIAGRAM_OPTIONS, ClickMenuComponent, CloseResult, ComparableDropdownDirective, ComparableMultiselectDirective, ComponentFactoryService, ComponentFactoryServiceModule, ComponentLibrary, ComponentType, ComponentWidgetType, Configuration$7 as Configuration, DIALOG_DISABLE_CLOSE, DataChangeKind, DefaultChartOptionsProvider, DefaultUiActionCode_CLOSE, DrawTime, EMPTY_PARAMS, ExpandableSectionButtonIconPosition, ExpandableSectionButtonType, ExpandableSectionComponent, ExpressionEditorDialogComponent, FilterExpressionBoolOperator$1 as FilterExpressionBoolOperator, FilterExpressionBuilderGroupBuilderGroupKindEnum, FilterExpressionDataType, FilterExpressionFieldWidgetType, FilterExpressionOperation, FilterExpressionOrderByOrderEnum, GenericPageComponent, GeoMapDataLoadingMode, GeoMapDataSourceType, GeoMapItemKind, GeoMapOperationMode, GeoMapSelectionMode, GeoMapTextType, GoogleMap, GridColumnContentType, GridDataAccessConfigKindEnum, GridSelectionMode, GridSelectionType, GridUiActionType, GridViewDescriptorKindEnum, HighlightPipe, HoverMenuComponent, IS_ASYNC_PARAM_NAME, IconPosition, ImageResourceKindEnum, InvalidSmartlinkComponent, LayoutDirection, LeafletMap, LinkTargetEnum, MAP_ENGINE, MapEngine, MenuOpenDirection, MenuTriggerType, MessageOptionType, MessageTextType, MessageType, NAMED_VALIDATOR, NamedValidatorOperationEnum, NamedValidatorService, NoPermissionPageComponent, PhotoCaptureWidgetComponent, REUSE_ROUTER_SLOT_COMPONENT, ROOT_CONTAINER_UUID, ROUTER_SLOT_ID, RecordingUploaderPropertiesOpenDirectionEnum, SMART_DEFAULT_VIEW_COMPONENTS, SearchPageComponent, SelectionDefinitionTypeEnum, SelectionDefinitionValueSetValueTypeEnum, ServerRequestType, SessionAPIS, SessionErrorBehaviour, SessionService, SharedModule, SmartActionType, SmartBackendBootstrapService, SmartComponent, SmartComponentApiClient, SmartComponentLayoutComponent, SmartComponentLayoutModule, SmartComponentLayoutUtility, SmartDatePipe, SmartDateTimePipe, SmartDefaultErrorUiService, SmartDiagramComponent, SmartDiagramModule, SmartDialog, SmartEmbeddedSlotDirective, SmartExpandableSectionModule, SmartExpandableSectionService, SmartFileEditorComponent, SmartFileUploaderComponent, SmartFilterComponent, SmartFilterEditorContentComponent, SmartFilterEditorModule, SmartFilterEditorService, SmartFilterExpressionItemComponent, SmartFilterExpressionItemsComponent, SmartFilterModule, SmartFilterParamComponent, SmartFilterParamsComponent, SmartFilterPosition, SmartFilterType, SmartFormInputMode, SmartFormTextFieldButtonIconPosition, SmartFormWidgetDirection, SmartFormWidgetType, SmartFormWidgetWidth, SmartGenericPagesModule, SmartGridButtonType, SmartGridComponent, SmartGridDataLayout, SmartGridModule, SmartGridService, SmartGridType, SmartIconComponent, SmartIconModule, SmartIconService, SmartLayoutDef, SmartLinkChannelVariableInPath, SmartLinkMigrationStatusStatusEnum, SmartLinkUuidVariableInPath, SmartMapComponent, SmartMapModule, SmartMultiFileEditorComponent, SmartNavbarComponent, SmartNavbarModule, SmartNavbarService, SmartNavigationModule, SmartNavigationService, SmartNgClientModule, SmartNgClientService, SmartService, SmartSessionModule, SmartSessionService, SmartSessionTimerComponent, SmartSubject, SmartTabGroupModule, SmartTable, SmartTableButtonType, SmartTableHeaderPropertyType, SmartTableInterfaceTypeEnum, SmartTableOptionButtonDirection, SmartTableOrder, SmartTableType, SmartTimePipe, SmartTooltipDirective, SmartTreeComponent, SmartTreeNodeButtonType, SmartUserSettinsIconPosition, SmartValidationModule, SmartValidatorName, SmartViewContextErrorDialogButtonLabel, SmartViewContextErrorDialogMessage, SmartViewContextErrorDialogTitle, SmartViewContextModule, SmartViewContextService, SmartViewRedirect, SmartVoiceRecorderComponent, SmartWidgetHintPosition, SmartWidgetHintPositionEnum, SmartWidgetSettings, SmartdialogModule, SmartdialogService, SmartfileuploaderComponent, SmartformComponent, SmartformLayoutDefinitionService, SmartformwidgetComponent, SmarttableComponent, SmarttableModule, SmarttableService, SmarttreeGenericService, SmarttreeModule, SmarttreeService, SubjectSelectorComponent, ThemeService, ToggleLabelPosition, ToolbarAlignment, ToolbarDirection, USE_ADVANCED_FILTER, UiActionButtonComponent, UiActionButtonType, UiActionConfirmDialogComponent, UiActionConfirmDialogService, UiActionDescriptorService, UiActionDialogButtonComponent, UiActionDialogType, UiActionFeedbackType, UiActionInputDialogComponent, UiActionInputDialogService, UiActionInputType, UiActionService, UiActionToolbarComponent, UiActionTooltipTooltipPositionEnum, UiBadgeComponent, UiBadgeDirective, UploadWidgetComponent, UploadWidgetType, ValidationResultPageComponent, ValueChangeMode, ViewContextRebuiltError, ViewEventHandlerViewEventTypeEnum, ViewService, ViewState, ViewType, VoiceRecordWidgetComponent, barChart, bubbleChart, createBasicOptions, doughnutChart, horizontalBarChart, horizontalStackedBarChart, multiAxisLineChart, pieChart, polarAreaChart, radarChart, resolveSlot, resolveViewHandler, scatterChart, stackedBarChart, transformDataToBarLikeDataSet, transformDataToBasicDataSets, transformDataToBubble, transformDataToScatter };
26058
+ export { APIS$5 as APIS, AbstractMap, AclEditingViewComponent, AdvancedRelationButtonComponent, AdvancedSmartFilterExpressionItemComponent, ApiModule$5 as ApiModule, ApiQueueService, BASE_PATH$7 as BASE_PATH, COLLECTION_FORMATS$7 as COLLECTION_FORMATS, COMPONENT_LIBRARY, CUSTOM_DIAGRAM_OPTIONS, ClickMenuComponent, CloseResult, ComparableDropdownDirective, ComparableMultiselectDirective, ComponentFactoryService, ComponentFactoryServiceModule, ComponentLibrary, ComponentType, ComponentWidgetType, Configuration$7 as Configuration, DIALOG_DISABLE_CLOSE, DataChangeKind, DefaultChartOptionsProvider, DefaultUiActionCode_CLOSE, DrawTime, EMPTY_PARAMS, ExpandableSectionButtonIconPosition, ExpandableSectionButtonType, ExpandableSectionComponent, ExpressionEditorDialogComponent, FilterExpressionBoolOperator$1 as FilterExpressionBoolOperator, FilterExpressionBuilderGroupBuilderGroupKindEnum, FilterExpressionDataType, FilterExpressionFieldWidgetType, FilterExpressionOperation, FilterExpressionOrderByOrderEnum, GenericPageComponent, GeoMapDataLoadingMode, GeoMapDataSourceType, GeoMapItemKind, GeoMapOperationMode, GeoMapSelectionMode, GeoMapTextType, GoogleMap, GridColumnContentType, GridDataAccessConfigKindEnum, GridSelectionMode, GridSelectionType, GridUiActionType, GridViewDescriptorKindEnum, HighlightPipe, HoverMenuComponent, IS_ASYNC_PARAM_NAME, IconPosition, ImageResourceKindEnum, InvalidSmartlinkComponent, LayoutDirection, LeafletMap, LinkTargetEnum, MAP_ENGINE, MapEngine, MenuOpenDirection, MenuTriggerType, MessageOptionType, MessageTextType, MessageType, NAMED_VALIDATOR, NamedValidatorOperationEnum, NamedValidatorService, NoPermissionPageComponent, PhotoCaptureWidgetComponent, REUSE_ROUTER_SLOT_COMPONENT, ROOT_CONTAINER_UUID, ROUTER_SLOT_ID, RecordingUploaderPropertiesOpenDirectionEnum, SMART_DEFAULT_VIEW_COMPONENTS, SearchPageComponent, SelectionDefinitionTypeEnum, SelectionDefinitionValueSetValueTypeEnum, ServerRequestType, SessionAPIS, SessionErrorBehaviour, SessionService, SharedModule, SmartActionType, SmartBackendBootstrapService, SmartComponent, SmartComponentApiClient, SmartComponentLayoutComponent, SmartComponentLayoutModule, SmartComponentLayoutUtility, SmartDatePipe, SmartDateTimePipe, SmartDefaultErrorUiService, SmartDiagramComponent, SmartDiagramModule, SmartDialog, SmartEmbeddedSlotDirective, SmartExpandableSectionModule, SmartExpandableSectionService, SmartFileEditorComponent, SmartFileUploaderComponent, SmartFilterComponent, SmartFilterEditorContentComponent, SmartFilterEditorModule, SmartFilterEditorService, SmartFilterExpressionItemComponent, SmartFilterExpressionItemsComponent, SmartFilterModule, SmartFilterParamComponent, SmartFilterParamsComponent, SmartFilterPosition, SmartFilterType, SmartFilterWidgetComponent, SmartFormInputMode, SmartFormTextFieldButtonIconPosition, SmartFormWidgetDirection, SmartFormWidgetType, SmartFormWidgetWidth, SmartGenericPagesModule, SmartGridButtonType, SmartGridComponent, SmartGridDataLayout, SmartGridModule, SmartGridService, SmartGridType, SmartIconComponent, SmartIconModule, SmartIconService, SmartLayoutDef, SmartLinkChannelVariableInPath, SmartLinkMigrationStatusStatusEnum, SmartLinkUuidVariableInPath, SmartMapComponent, SmartMapModule, SmartMultiFileEditorComponent, SmartNavbarComponent, SmartNavbarModule, SmartNavbarService, SmartNavigationModule, SmartNavigationService, SmartNgClientModule, SmartNgClientService, SmartService, SmartSessionModule, SmartSessionService, SmartSessionTimerComponent, SmartSubject, SmartTabGroupModule, SmartTable, SmartTableButtonType, SmartTableHeaderPropertyType, SmartTableInterfaceTypeEnum, SmartTableOptionButtonDirection, SmartTableOrder, SmartTableType, SmartTimePipe, SmartTooltipDirective, SmartTreeComponent, SmartTreeNodeButtonType, SmartUserSettinsIconPosition, SmartValidationModule, SmartValidatorName, SmartViewContextErrorDialogButtonLabel, SmartViewContextErrorDialogMessage, SmartViewContextErrorDialogTitle, SmartViewContextModule, SmartViewContextService, SmartViewRedirect, SmartVoiceRecorderComponent, SmartWidgetHintPosition, SmartWidgetHintPositionEnum, SmartWidgetSettings, SmartdialogModule, SmartdialogService, SmartfileuploaderComponent, SmartformComponent, SmartformLayoutDefinitionService, SmartformwidgetComponent, SmarttableComponent, SmarttableModule, SmarttableService, SmarttreeGenericService, SmarttreeModule, SmarttreeService, SubjectSelectorComponent, ThemeService, ToggleLabelPosition, ToolbarAlignment, ToolbarDirection, USE_ADVANCED_FILTER, UiActionButtonComponent, UiActionButtonType, UiActionConfirmDialogComponent, UiActionConfirmDialogService, UiActionDescriptorService, UiActionDialogButtonComponent, UiActionDialogType, UiActionFeedbackType, UiActionInputDialogComponent, UiActionInputDialogService, UiActionInputType, UiActionService, UiActionToolbarComponent, UiActionTooltipTooltipPositionEnum, UiBadgeComponent, UiBadgeDirective, UploadWidgetComponent, UploadWidgetType, ValidationResultPageComponent, ValueChangeMode, ViewContextRebuiltError, ViewEventHandlerViewEventTypeEnum, ViewService, ViewState, ViewType, VoiceRecordWidgetComponent, barChart, bubbleChart, createBasicOptions, doughnutChart, horizontalBarChart, horizontalStackedBarChart, multiAxisLineChart, pieChart, polarAreaChart, radarChart, resolveSlot, resolveViewHandler, scatterChart, stackedBarChart, transformDataToBarLikeDataSet, transformDataToBasicDataSets, transformDataToBubble, transformDataToScatter };
25974
26059
  //# sourceMappingURL=smartbit4all-ng-client.mjs.map