@smartbit4all/ng-client 4.3.11 → 4.3.13

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 (96) hide show
  1. package/esm2022/lib/session/api/api/session.service.mjs +1 -1
  2. package/esm2022/lib/session/api/configuration.mjs +1 -1
  3. package/esm2022/lib/session/api/encoder.mjs +1 -1
  4. package/esm2022/lib/session/api/model/accountInfo.mjs +1 -1
  5. package/esm2022/lib/session/api/model/apiError.mjs +1 -1
  6. package/esm2022/lib/session/api/model/authenticationProviderData.mjs +1 -1
  7. package/esm2022/lib/session/api/model/getAuthenticationProvidersResponse.mjs +1 -1
  8. package/esm2022/lib/session/api/model/refreshSessionRequest.mjs +1 -1
  9. package/esm2022/lib/session/api/model/userActivityLog.mjs +1 -1
  10. package/esm2022/lib/session/api/param.mjs +1 -1
  11. package/esm2022/lib/session/api/variables.mjs +1 -1
  12. package/esm2022/lib/smart-component-layout/api/api/api.mjs +1 -1
  13. package/esm2022/lib/smart-component-layout/api/api/default.service.mjs +1 -1
  14. package/esm2022/lib/smart-component-layout/api/api.module.mjs +1 -1
  15. package/esm2022/lib/smart-component-layout/api/configuration.mjs +1 -1
  16. package/esm2022/lib/smart-component-layout/api/encoder.mjs +1 -1
  17. package/esm2022/lib/smart-component-layout/api/index.mjs +1 -1
  18. package/esm2022/lib/smart-component-layout/api/model/componentType.mjs +1 -1
  19. package/esm2022/lib/smart-component-layout/api/model/layoutDefinitionDescriptor.mjs +1 -1
  20. package/esm2022/lib/smart-component-layout/api/model/layoutDirection.mjs +1 -1
  21. package/esm2022/lib/smart-component-layout/api/model/models.mjs +2 -1
  22. package/esm2022/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +1 -1
  23. package/esm2022/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +1 -1
  24. package/esm2022/lib/smart-component-layout/api/model/toolbarDirection.mjs +17 -0
  25. package/esm2022/lib/smart-component-layout/api/model/toolbarProperties.mjs +1 -12
  26. package/esm2022/lib/smart-component-layout/api/param.mjs +1 -1
  27. package/esm2022/lib/smart-component-layout/api/variables.mjs +1 -1
  28. package/esm2022/lib/smart-diagram/api/api/api.mjs +1 -1
  29. package/esm2022/lib/smart-diagram/api/api/diagramService.service.mjs +1 -1
  30. package/esm2022/lib/smart-diagram/api/api.module.mjs +1 -1
  31. package/esm2022/lib/smart-diagram/api/configuration.mjs +1 -1
  32. package/esm2022/lib/smart-diagram/api/encoder.mjs +1 -1
  33. package/esm2022/lib/smart-diagram/api/index.mjs +1 -1
  34. package/esm2022/lib/smart-diagram/api/model/diagramColor.mjs +1 -1
  35. package/esm2022/lib/smart-diagram/api/model/diagramDataContainer.mjs +1 -1
  36. package/esm2022/lib/smart-diagram/api/model/diagramDataItem.mjs +1 -1
  37. package/esm2022/lib/smart-diagram/api/model/diagramDataSet.mjs +1 -1
  38. package/esm2022/lib/smart-diagram/api/model/diagramDescriptor.mjs +1 -1
  39. package/esm2022/lib/smart-diagram/api/model/diagramModel.mjs +1 -1
  40. package/esm2022/lib/smart-diagram/api/model/diagramShape.mjs +1 -1
  41. package/esm2022/lib/smart-diagram/api/model/drawTime.mjs +1 -1
  42. package/esm2022/lib/smart-diagram/api/model/labelText.mjs +1 -1
  43. package/esm2022/lib/smart-diagram/api/model/models.mjs +1 -1
  44. package/esm2022/lib/smart-diagram/api/param.mjs +1 -1
  45. package/esm2022/lib/smart-diagram/api/variables.mjs +1 -1
  46. package/esm2022/lib/smart-form/api/model/dateFieldProperties.mjs +1 -1
  47. package/esm2022/lib/smart-form/api/model/models.mjs +1 -1
  48. package/esm2022/lib/smart-form/api/model/multiFileUploaderProperties.mjs +1 -1
  49. package/esm2022/lib/smart-form/api/model/selectionDefinition.mjs +1 -1
  50. package/esm2022/lib/smart-form/api/model/smartFormWidgetType.mjs +1 -1
  51. package/esm2022/lib/smart-form/api/model/smartWidgetDefinition.mjs +1 -1
  52. package/esm2022/lib/smart-form/api/model/textBoxProperties.mjs +1 -1
  53. package/esm2022/lib/smart-form/api/model/valueChangeMode.mjs +1 -1
  54. package/esm2022/lib/smart-form/widgets/components/smart-multi-file-editor/smart-multi-file-editor.component.mjs +3 -3
  55. package/esm2022/lib/smart-map/api/api/api.mjs +1 -1
  56. package/esm2022/lib/smart-map/api/api/geoMap.service.mjs +1 -1
  57. package/esm2022/lib/smart-map/api/api.module.mjs +1 -1
  58. package/esm2022/lib/smart-map/api/configuration.mjs +1 -1
  59. package/esm2022/lib/smart-map/api/encoder.mjs +1 -1
  60. package/esm2022/lib/smart-map/api/index.mjs +1 -1
  61. package/esm2022/lib/smart-map/api/model/gPSPosition.mjs +1 -1
  62. package/esm2022/lib/smart-map/api/model/gPSRoute.mjs +1 -1
  63. package/esm2022/lib/smart-map/api/model/geoMapChange.mjs +1 -1
  64. package/esm2022/lib/smart-map/api/model/geoMapDataLoadingMode.mjs +1 -1
  65. package/esm2022/lib/smart-map/api/model/geoMapDataSourceDescriptor.mjs +1 -1
  66. package/esm2022/lib/smart-map/api/model/geoMapDataSourceType.mjs +1 -1
  67. package/esm2022/lib/smart-map/api/model/geoMapEditingSession.mjs +1 -1
  68. package/esm2022/lib/smart-map/api/model/geoMapInteraction.mjs +1 -1
  69. package/esm2022/lib/smart-map/api/model/geoMapItem.mjs +1 -1
  70. package/esm2022/lib/smart-map/api/model/geoMapItemKind.mjs +1 -1
  71. package/esm2022/lib/smart-map/api/model/geoMapLayer.mjs +1 -1
  72. package/esm2022/lib/smart-map/api/model/geoMapLayerChange.mjs +1 -1
  73. package/esm2022/lib/smart-map/api/model/geoMapLayerDescriptor.mjs +1 -1
  74. package/esm2022/lib/smart-map/api/model/geoMapModel.mjs +1 -1
  75. package/esm2022/lib/smart-map/api/model/geoMapOperationMode.mjs +1 -1
  76. package/esm2022/lib/smart-map/api/model/geoMapSelectionMode.mjs +1 -1
  77. package/esm2022/lib/smart-map/api/model/geoMapServerModel.mjs +1 -1
  78. package/esm2022/lib/smart-map/api/model/geoMapTextType.mjs +1 -1
  79. package/esm2022/lib/smart-map/api/model/geoMapViewState.mjs +1 -1
  80. package/esm2022/lib/smart-map/api/model/geoMapViewport.mjs +1 -1
  81. package/esm2022/lib/smart-map/api/model/models.mjs +1 -1
  82. package/esm2022/lib/smart-map/api/param.mjs +1 -1
  83. package/esm2022/lib/smart-map/api/variables.mjs +1 -1
  84. package/esm2022/lib/view-context/api/model/uiActionInputType.mjs +1 -1
  85. package/esm2022/lib/view-context/api/model/uiActionUploadDescriptor.mjs +1 -1
  86. package/esm2022/lib/view-context/smart-ui-action/file-editor-toolbar/file-editor-toolbar.component.mjs +3 -3
  87. package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +7 -3
  88. package/fesm2022/smartbit4all-ng-client.mjs +1019 -1011
  89. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  90. package/lib/smart-component-layout/api/model/models.d.ts +1 -0
  91. package/lib/smart-component-layout/api/model/toolbarDirection.d.ts +15 -0
  92. package/lib/smart-component-layout/api/model/toolbarProperties.d.ts +2 -0
  93. package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +1 -0
  94. package/package.json +1 -1
  95. package/smartbit4all-ng-client-4.3.13.tgz +0 -0
  96. package/smartbit4all-ng-client-4.3.11.tgz +0 -0
@@ -5848,334 +5848,688 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
5848
5848
  }]
5849
5849
  }], ctorParameters: () => [{ type: SmartViewContextService }] });
5850
5850
 
5851
- class SuccessSnackBarComponent {
5852
- constructor(data, viewContext, manager) {
5853
- this.data = data;
5854
- this.viewContext = viewContext;
5855
- this.manager = manager;
5856
- this.manager.getActionDescriptor(data).then((descriptor) => {
5857
- if (descriptor.feedbackText) {
5858
- this.text = descriptor.feedbackText;
5859
- }
5860
- else {
5861
- this.text = this.viewContext.commonFeedbackText ?? "A mentés sikeres volt!";
5862
- }
5863
- });
5851
+ /**
5852
+ * Custom HttpParameterCodec
5853
+ * Workaround for https://github.com/angular/angular/issues/18261
5854
+ */
5855
+ let CustomHttpParameterCodec$5 = class CustomHttpParameterCodec {
5856
+ encodeKey(k) {
5857
+ return encodeURIComponent(k);
5864
5858
  }
5865
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SuccessSnackBarComponent, deps: [{ token: MAT_SNACK_BAR_DATA }, { token: SmartViewContextService }, { token: UiActionDescriptorService }], target: i0.ɵɵFactoryTarget.Component }); }
5866
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SuccessSnackBarComponent, selector: "app-success-snack-bar", ngImport: i0, template: "<span class=\"successSnakBarContainer\" matSnackBarLabel> {{ text }} </span>\r\n", styles: ["::ng-deep .mat-mdc-snack-bar-container{text-align:center;border-radius:2rem}.successSnakBarContainer{color:#fff}\n"] }); }
5867
- }
5868
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SuccessSnackBarComponent, decorators: [{
5869
- type: Component,
5870
- args: [{ selector: "app-success-snack-bar", template: "<span class=\"successSnakBarContainer\" matSnackBarLabel> {{ text }} </span>\r\n", styles: ["::ng-deep .mat-mdc-snack-bar-container{text-align:center;border-radius:2rem}.successSnakBarContainer{color:#fff}\n"] }]
5871
- }], ctorParameters: () => [{ type: undefined, decorators: [{
5872
- type: Inject,
5873
- args: [MAT_SNACK_BAR_DATA]
5874
- }] }, { type: SmartViewContextService }, { type: UiActionDescriptorService }] });
5875
-
5876
- class InvalidFieldsSnackBarComponent {
5877
- constructor(data) {
5878
- this.data = data;
5859
+ encodeValue(v) {
5860
+ return encodeURIComponent(v);
5879
5861
  }
5880
- ngOnInit() { }
5881
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: InvalidFieldsSnackBarComponent, deps: [{ token: MAT_SNACK_BAR_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
5882
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: InvalidFieldsSnackBarComponent, selector: "app-invalid-fields-snack-bar", ngImport: i0, template: "<div class=\"invalidFieldsSnackBar\">\r\n <!-- <div class=\"invalidFieldsSnackBarContainer\" *ngIf=\"data.message\">\r\n <span class=\"successSnakBarContainer\" matSnackBarLabel>\r\n {{ data.message }}\r\n </span>\r\n </div> -->\r\n <div class=\"invalidFieldsSnackBarContainer\">\r\n <span class=\"invalidFieldsMessage\" matSnackBarLabel> Hi\u00E1nyos vagy hib\u00E1s adatok! </span>\r\n </div>\r\n</div>\r\n", styles: [".invalidFieldsSnackBar ::ng-deep .mat-mdc-snack-bar-container{text-align:center;border-radius:2rem}.invalidFieldsMessage{color:#fff}\n"], dependencies: [{ kind: "directive", type: i1$4.MatSnackBarLabel, selector: "[matSnackBarLabel]" }] }); }
5883
- }
5884
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: InvalidFieldsSnackBarComponent, decorators: [{
5885
- type: Component,
5886
- args: [{ selector: 'app-invalid-fields-snack-bar', template: "<div class=\"invalidFieldsSnackBar\">\r\n <!-- <div class=\"invalidFieldsSnackBarContainer\" *ngIf=\"data.message\">\r\n <span class=\"successSnakBarContainer\" matSnackBarLabel>\r\n {{ data.message }}\r\n </span>\r\n </div> -->\r\n <div class=\"invalidFieldsSnackBarContainer\">\r\n <span class=\"invalidFieldsMessage\" matSnackBarLabel> Hi\u00E1nyos vagy hib\u00E1s adatok! </span>\r\n </div>\r\n</div>\r\n", styles: [".invalidFieldsSnackBar ::ng-deep .mat-mdc-snack-bar-container{text-align:center;border-radius:2rem}.invalidFieldsMessage{color:#fff}\n"] }]
5887
- }], ctorParameters: () => [{ type: undefined, decorators: [{
5888
- type: Inject,
5889
- args: [MAT_SNACK_BAR_DATA]
5890
- }] }] });
5891
-
5892
- class UiActionService {
5893
- constructor(confirmDialogService, textFieldDialogService, fileUploadDialogService, _snackBar) {
5894
- this.confirmDialogService = confirmDialogService;
5895
- this.textFieldDialogService = textFieldDialogService;
5896
- this.fileUploadDialogService = fileUploadDialogService;
5897
- this._snackBar = _snackBar;
5898
- this._destroy$ = new Subject();
5862
+ decodeKey(k) {
5863
+ return decodeURIComponent(k);
5899
5864
  }
5900
- ngOnDestroy() {
5901
- this._destroy$.next();
5902
- this._destroy$.complete();
5865
+ decodeValue(v) {
5866
+ return decodeURIComponent(v);
5903
5867
  }
5904
- async execute(uiAction, options) {
5905
- let uiActionRequest;
5906
- uiActionRequest = {
5907
- code: uiAction.code,
5908
- path: uiAction.path,
5909
- identifier: uiAction.identifier,
5910
- params: uiAction.params ?? {},
5911
- };
5912
- if (uiAction.submit || uiAction.model) {
5913
- // submit: with validation, model: without validation. both can be undefined
5914
- const validate = uiAction.submit || !uiAction.model;
5915
- if ('reSubscribeToChange' in this.uiActionModel.serviceToUse) {
5916
- if (!validate) {
5917
- console.error(`Validate = false, but UseUiAction doesn't support it`);
5918
- }
5919
- this.uiActionModel.serviceToUse.submit.next();
5920
- try {
5921
- await this.uiActionModel.serviceToUse.submit.toPromise();
5922
- this.uiActionModel.serviceToUse.submit = new SmartSubject(this._destroy$);
5923
- this.uiActionModel.serviceToUse.reSubscribeToChange.next();
5924
- }
5925
- catch (error) {
5926
- console.error(error);
5927
- this.uiActionModel.serviceToUse.submit = new SmartSubject(this._destroy$);
5928
- this.uiActionModel.serviceToUse.reSubscribeToChange.next();
5929
- return;
5930
- }
5931
- }
5932
- else {
5933
- this.uiActionModel.serviceToUse.submitForm(validate);
5934
- let invalidFields = this.uiActionModel.serviceToUse.getInvalidFields();
5935
- if (validate && invalidFields.invalidFieldKeys.length) {
5936
- this.showInvalidFieldsSnackbar(invalidFields);
5937
- return;
5938
- }
5939
- }
5940
- }
5941
- if (uiAction.confirm) {
5942
- this.confirmDialogService.action = uiAction;
5943
- this.confirmDialogService.openDialog();
5944
- await this.confirmDialogService.onAction.toPromise();
5945
- if (!this.confirmDialogService.shouldDoAction) {
5946
- return;
5947
- }
5948
- }
5949
- // InputType
5950
- if (uiAction.inputType && uiAction.inputType !== UiActionInputType.NONE) {
5951
- uiActionRequest = await this.handleInputType(uiAction.inputType, uiAction, uiActionRequest, 'inputDialog');
5952
- if (!uiActionRequest) {
5953
- return;
5954
- }
5955
- await new Promise((resolve) => setTimeout(resolve, 250));
5868
+ };
5869
+
5870
+ const BASE_PATH$5 = new InjectionToken('basePath');
5871
+ const COLLECTION_FORMATS$5 = {
5872
+ 'csv': ',',
5873
+ 'tsv': ' ',
5874
+ 'ssv': ' ',
5875
+ 'pipes': '|'
5876
+ };
5877
+
5878
+ let Configuration$5 = class Configuration {
5879
+ constructor(configurationParameters = {}) {
5880
+ this.apiKeys = configurationParameters.apiKeys;
5881
+ this.username = configurationParameters.username;
5882
+ this.password = configurationParameters.password;
5883
+ this.accessToken = configurationParameters.accessToken;
5884
+ this.basePath = configurationParameters.basePath;
5885
+ this.withCredentials = configurationParameters.withCredentials;
5886
+ this.encoder = configurationParameters.encoder;
5887
+ if (configurationParameters.encodeParam) {
5888
+ this.encodeParam = configurationParameters.encodeParam;
5956
5889
  }
5957
- // Input2Type
5958
- if (uiAction.input2Type && uiAction.input2Type !== UiActionInputType.NONE) {
5959
- uiActionRequest = await this.handleInputType(uiAction.input2Type, uiAction, uiActionRequest, 'input2Dialog');
5960
- if (!uiActionRequest) {
5961
- return;
5962
- }
5890
+ else {
5891
+ this.encodeParam = param => this.defaultEncodeParam(param);
5963
5892
  }
5964
- if (this.uiActionModel.exception) {
5965
- let response = await this.uiActionModel.serviceToUse.handleSpecificDemandsAsynchronously(uiAction, uiActionRequest);
5966
- if (!response.shouldPerformAction || !response.uiActionRequest) {
5967
- return;
5968
- }
5969
- uiActionRequest = response.uiActionRequest;
5893
+ if (configurationParameters.credentials) {
5894
+ this.credentials = configurationParameters.credentials;
5970
5895
  }
5971
- await this.performAction(uiAction, uiActionRequest, options);
5972
- }
5973
- async handleInputType(inputType, uiAction, uiActionRequest, inputTypeName) {
5974
- switch (inputType) {
5975
- case UiActionInputType.NONE:
5976
- return uiActionRequest;
5977
- case UiActionInputType.TEXTAREA:
5978
- case UiActionInputType.TEXTFIELD:
5979
- return await this.handleInputTypeTextField(inputTypeName, uiAction, uiActionRequest);
5980
- case UiActionInputType.USER_SELECT:
5981
- return await this.handleInputTypeUserSelect(inputTypeName, uiAction, uiActionRequest);
5982
- case UiActionInputType.FILE:
5983
- return await this.handleInputTypeUpload(inputTypeName, uiAction, uiActionRequest, false);
5984
- case UiActionInputType.MULTIPLE_FILES:
5985
- return await this.handleInputTypeUpload(inputTypeName, uiAction, uiActionRequest, true);
5986
- default:
5987
- return uiActionRequest;
5896
+ else {
5897
+ this.credentials = {};
5988
5898
  }
5989
5899
  }
5990
- async handleInputTypeTextField(inputTypeName, uiAction, uiActionRequest) {
5991
- let additionalParams = this.uiActionModel.serviceToUse.getAdditionalParams(uiAction);
5992
- let inputType = inputTypeName === 'inputDialog' ? 'inputType' : 'input2Type';
5993
- if (uiAction[inputType] === UiActionInputType.TEXTFIELD) {
5994
- this.textFieldDialogService.nodeName = additionalParams.forTextField;
5995
- }
5996
- else if (uiAction[inputType] === UiActionInputType.TEXTAREA) {
5997
- this.textFieldDialogService.nodeName = additionalParams.forTextArea;
5900
+ /**
5901
+ * Select the correct content-type to use for a request.
5902
+ * Uses {@link Configuration#isJsonMime} to determine the correct content-type.
5903
+ * If no content type is found return the first found type if the contentTypes is not empty
5904
+ * @param contentTypes - the array of content types that are available for selection
5905
+ * @returns the selected content-type or <code>undefined</code> if no selection could be made.
5906
+ */
5907
+ selectHeaderContentType(contentTypes) {
5908
+ if (contentTypes.length === 0) {
5909
+ return undefined;
5998
5910
  }
5999
- this.textFieldDialogService.inputTypeName = inputTypeName;
6000
- this.textFieldDialogService.action = uiAction;
6001
- this.textFieldDialogService.openDialog();
6002
- await this.textFieldDialogService.onAction.toPromise();
6003
- let params = this.textFieldDialogService.params;
6004
- if (!params) {
6005
- console.error('There was no response from InputDialog');
6006
- return;
5911
+ const type = contentTypes.find((x) => this.isJsonMime(x));
5912
+ if (type === undefined) {
5913
+ return contentTypes[0];
6007
5914
  }
6008
- uiActionRequest.params = {
6009
- ...uiActionRequest.params,
6010
- ...params,
6011
- };
6012
- return uiActionRequest;
5915
+ return type;
6013
5916
  }
6014
- async handleInputTypeUpload(inputTypeName, uiAction, uiActionRequest, isMultiple) {
6015
- this.fileUploadDialogService.inputTypeName = inputTypeName;
6016
- this.fileUploadDialogService.action = uiAction;
6017
- this.fileUploadDialogService.isMultiple = isMultiple;
6018
- this.fileUploadDialogService.openDialog();
6019
- await this.fileUploadDialogService.onAction.toPromise();
6020
- let files = this.fileUploadDialogService.files;
6021
- let uploadDescriptor = this.fileUploadDialogService.uploadDescriptor;
6022
- if (!files || !files.length) {
6023
- return;
5917
+ /**
5918
+ * Select the correct accept content-type to use for a request.
5919
+ * Uses {@link Configuration#isJsonMime} to determine the correct accept content-type.
5920
+ * If no content type is found return the first found type if the contentTypes is not empty
5921
+ * @param accepts - the array of content types that are available for selection.
5922
+ * @returns the selected content-type or <code>undefined</code> if no selection could be made.
5923
+ */
5924
+ selectHeaderAccept(accepts) {
5925
+ if (accepts.length === 0) {
5926
+ return undefined;
6024
5927
  }
6025
- uiActionRequest.params = {
6026
- ...uiActionRequest.params,
6027
- _files: files,
6028
- _uploadDescriptor: uploadDescriptor,
6029
- isMultiple,
6030
- param: uiAction.inputType === 'file' || uiAction.inputType === 'multiple_files'
6031
- ? 'input'
6032
- : 'input2',
6033
- };
6034
- return uiActionRequest;
6035
- }
6036
- async handleInputTypeUserSelect(inputTypeName, uiAction, uiActionRequest) {
6037
- let response = await this.uiActionModel.serviceToUse.handleSpecificDemandsAsynchronously(uiAction, uiActionRequest);
6038
- if (!response.shouldPerformAction || !response.uiActionRequest) {
6039
- return;
5928
+ const type = accepts.find((x) => this.isJsonMime(x));
5929
+ if (type === undefined) {
5930
+ return accepts[0];
6040
5931
  }
6041
- uiActionRequest = response.uiActionRequest;
6042
- return uiActionRequest;
5932
+ return type;
6043
5933
  }
6044
- async performAction(uiAction, uiActionRequest, options) {
6045
- if (!uiActionRequest.params ||
6046
- (uiActionRequest.params && !Object.keys(uiActionRequest.params).length)) {
6047
- uiActionRequest.params = {
6048
- model: this.uiActionModel.serviceToUse.getModel(),
6049
- };
6050
- }
6051
- else if (uiAction.submit || uiAction.model) {
6052
- uiActionRequest.params['model'] = this.uiActionModel.serviceToUse.getModel();
6053
- }
6054
- try {
6055
- await this.uiActionModel.serviceToUse.performUiActionRequest(uiActionRequest, options?.widgetId, options?.nodeId);
6056
- if (this.uiActionModel.descriptor?.feedbackType === UiActionFeedbackType.SNACKBAR) {
6057
- this.showSavedSnackbar(uiAction);
5934
+ /**
5935
+ * Check if the given MIME is a JSON MIME.
5936
+ * JSON MIME examples:
5937
+ * application/json
5938
+ * application/json; charset=UTF8
5939
+ * APPLICATION/JSON
5940
+ * application/vnd.company+json
5941
+ * @param mime - MIME (Multipurpose Internet Mail Extensions)
5942
+ * @return True if the given MIME is JSON, false otherwise.
5943
+ */
5944
+ isJsonMime(mime) {
5945
+ const jsonMime = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
5946
+ return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
5947
+ }
5948
+ lookupCredential(key) {
5949
+ const value = this.credentials[key];
5950
+ return typeof value === 'function'
5951
+ ? value()
5952
+ : value;
5953
+ }
5954
+ defaultEncodeParam(param) {
5955
+ // This implementation exists as fallback for missing configuration
5956
+ // and for backwards compatibility to older typescript-angular generator versions.
5957
+ // It only works for the 'simple' parameter style.
5958
+ // Date-handling only works for the 'date-time' format.
5959
+ // All other styles and Date-formats are probably handled incorrectly.
5960
+ //
5961
+ // But: if that's all you need (i.e.: the most common use-case): no need for customization!
5962
+ const value = param.dataFormat === 'date-time' && param.value instanceof Date
5963
+ ? param.value.toISOString()
5964
+ : param.value;
5965
+ return encodeURIComponent(String(value));
5966
+ }
5967
+ };
5968
+
5969
+ /**
5970
+ * Form layout definition
5971
+ * Contains form layout definition objects.
5972
+ *
5973
+ * The version of the OpenAPI document: 1.0.0
5974
+ * Contact: info@it4all.hu
5975
+ *
5976
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
5977
+ * https://openapi-generator.tech
5978
+ * Do not edit the class manually.
5979
+ */
5980
+ /* tslint:disable:no-unused-variable member-ordering */
5981
+ class DefaultService {
5982
+ constructor(httpClient, basePath, configuration) {
5983
+ this.httpClient = httpClient;
5984
+ this.basePath = 'http://localhost';
5985
+ this.defaultHeaders = new HttpHeaders();
5986
+ this.configuration = new Configuration$5();
5987
+ if (configuration) {
5988
+ this.configuration = configuration;
5989
+ }
5990
+ if (typeof this.configuration.basePath !== 'string') {
5991
+ if (Array.isArray(basePath) && basePath.length > 0) {
5992
+ basePath = basePath[0];
5993
+ }
5994
+ if (typeof basePath !== 'string') {
5995
+ basePath = this.basePath;
6058
5996
  }
5997
+ this.configuration.basePath = basePath;
6059
5998
  }
6060
- catch (error) {
6061
- console.error(error);
5999
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec$5();
6000
+ }
6001
+ // @ts-ignore
6002
+ addToHttpParams(httpParams, value, key) {
6003
+ if (typeof value === "object" && value instanceof Date === false) {
6004
+ httpParams = this.addToHttpParamsRecursive(httpParams, value);
6005
+ }
6006
+ else {
6007
+ httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
6062
6008
  }
6009
+ return httpParams;
6063
6010
  }
6064
- showSavedSnackbar(uiAction) {
6065
- this._snackBar.openFromComponent(SuccessSnackBarComponent, {
6066
- duration: 5 * 1000,
6067
- panelClass: ['backgroundColor-accent'],
6068
- data: uiAction,
6069
- });
6011
+ addToHttpParamsRecursive(httpParams, value, key) {
6012
+ if (value == null) {
6013
+ return httpParams;
6014
+ }
6015
+ if (typeof value === "object") {
6016
+ if (Array.isArray(value)) {
6017
+ value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
6018
+ }
6019
+ else if (value instanceof Date) {
6020
+ if (key != null) {
6021
+ httpParams = httpParams.append(key, value.toISOString().substr(0, 10));
6022
+ }
6023
+ else {
6024
+ throw Error("key may not be null if value is Date");
6025
+ }
6026
+ }
6027
+ else {
6028
+ Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
6029
+ }
6030
+ }
6031
+ else if (key != null) {
6032
+ httpParams = httpParams.append(key, value);
6033
+ }
6034
+ else {
6035
+ throw Error("key may not be null if value is not object or array");
6036
+ }
6037
+ return httpParams;
6070
6038
  }
6071
- showInvalidFieldsSnackbar(invalidFields) {
6072
- this._snackBar.openFromComponent(InvalidFieldsSnackBarComponent, {
6073
- duration: 5 * 1000,
6074
- panelClass: ['backgroundColor-warn'],
6075
- data: invalidFields,
6039
+ nopePost(observe = 'body', reportProgress = false, options) {
6040
+ let localVarHeaders = this.defaultHeaders;
6041
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
6042
+ if (localVarHttpHeaderAcceptSelected === undefined) {
6043
+ // to determine the Accept header
6044
+ const httpHeaderAccepts = [];
6045
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
6046
+ }
6047
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
6048
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
6049
+ }
6050
+ let localVarHttpContext = options && options.context;
6051
+ if (localVarHttpContext === undefined) {
6052
+ localVarHttpContext = new HttpContext();
6053
+ }
6054
+ let responseType_ = 'json';
6055
+ if (localVarHttpHeaderAcceptSelected) {
6056
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
6057
+ responseType_ = 'text';
6058
+ }
6059
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
6060
+ responseType_ = 'json';
6061
+ }
6062
+ else {
6063
+ responseType_ = 'blob';
6064
+ }
6065
+ }
6066
+ let localVarPath = `/nope`;
6067
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
6068
+ context: localVarHttpContext,
6069
+ responseType: responseType_,
6070
+ withCredentials: this.configuration.withCredentials,
6071
+ headers: localVarHeaders,
6072
+ observe: observe,
6073
+ reportProgress: reportProgress
6076
6074
  });
6077
6075
  }
6078
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionService, deps: [{ token: 'confirmDialogService' }, { token: 'textFieldDialogService' }, { token: 'fileUploadDialogService' }, { token: i1$4.MatSnackBar }], target: i0.ɵɵFactoryTarget.Injectable }); }
6079
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionService, providedIn: 'root' }); }
6076
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DefaultService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH$5, optional: true }, { token: Configuration$5, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
6077
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DefaultService, providedIn: 'root' }); }
6080
6078
  }
6081
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionService, decorators: [{
6079
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DefaultService, decorators: [{
6082
6080
  type: Injectable,
6083
6081
  args: [{
6084
- providedIn: 'root',
6082
+ providedIn: 'root'
6085
6083
  }]
6086
- }], ctorParameters: () => [{ type: undefined, decorators: [{
6087
- type: Inject,
6088
- args: ['confirmDialogService']
6089
- }] }, { type: undefined, decorators: [{
6090
- type: Inject,
6091
- args: ['textFieldDialogService']
6092
- }] }, { type: undefined, decorators: [{
6084
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
6085
+ type: Optional
6086
+ }, {
6093
6087
  type: Inject,
6094
- args: ['fileUploadDialogService']
6095
- }] }, { type: i1$4.MatSnackBar }] });
6088
+ args: [BASE_PATH$5]
6089
+ }] }, { type: Configuration$5, decorators: [{
6090
+ type: Optional
6091
+ }] }] });
6096
6092
 
6097
- const SUBMENU_POSITIONS = [
6098
- // Top-left of trigger → aligns top-left of overlay
6099
- // {
6100
- // originX: 'start',
6101
- // originY: 'top',
6102
- // overlayX: 'start',
6103
- // overlayY: 'top',
6104
- // },
6105
- // // Bottom-left of trigger → aligns bottom-left of overlay
6106
- // {
6107
- // originX: 'start',
6108
- // originY: 'bottom',
6109
- // overlayX: 'start',
6110
- // overlayY: 'bottom',
6111
- // },
6112
- // // Top-right of trigger → aligns top-right of overlay
6113
- // {
6114
- // originX: 'end',
6115
- // originY: 'top',
6116
- // overlayX: 'end',
6117
- // overlayY: 'top',
6118
- // },
6119
- // // Bottom-right of trigger → aligns bottom-right of overlay
6120
- // {
6121
- // originX: 'end',
6122
- // originY: 'bottom',
6123
- // overlayX: 'end',
6124
- // overlayY: 'bottom',
6125
- // },
6126
- {
6127
- originX: 'end',
6128
- originY: 'top',
6129
- overlayX: 'start',
6130
- overlayY: 'top',
6131
- },
6132
- {
6133
- originX: 'start',
6134
- originY: 'top',
6135
- overlayX: 'end',
6136
- overlayY: 'top',
6137
- },
6138
- ];
6139
- const ROOT_MENU_POSITIONS = [
6140
- // Below-right of trigger
6141
- {
6142
- originX: 'end',
6143
- originY: 'bottom',
6144
- overlayX: 'end',
6145
- overlayY: 'top',
6146
- }, // Below-left of trigger
6147
- {
6148
- originX: 'start',
6149
- originY: 'bottom',
6150
- overlayX: 'start',
6151
- overlayY: 'top',
6152
- },
6153
- // Above-left of trigger
6154
- {
6155
- originX: 'start',
6156
- originY: 'top',
6157
- overlayX: 'start',
6158
- overlayY: 'bottom',
6159
- },
6160
- // Above-right of trigger
6161
- {
6162
- originX: 'end',
6163
- originY: 'top',
6164
- overlayX: 'end',
6165
- overlayY: 'bottom',
6166
- },
6167
- ];
6093
+ const APIS$3 = [DefaultService];
6168
6094
 
6169
- class UiMenuService {
6170
- constructor() {
6171
- this.closeMenus$ = new Subject();
6172
- }
6173
- closeAllMenus() {
6174
- this.closeMenus$.next();
6175
- }
6176
- getCloseSignal() {
6177
- return this.closeMenus$.asObservable();
6178
- }
6095
+ /**
6096
+ * Form layout definition
6097
+ * Contains form layout definition objects.
6098
+ *
6099
+ * The version of the OpenAPI document: 1.0.0
6100
+ * Contact: info@it4all.hu
6101
+ *
6102
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
6103
+ * https://openapi-generator.tech
6104
+ * Do not edit the class manually.
6105
+ */
6106
+ var ComponentType;
6107
+ (function (ComponentType) {
6108
+ ComponentType["CONTAINER"] = "container";
6109
+ ComponentType["FORM"] = "form";
6110
+ ComponentType["WIDGET"] = "widget";
6111
+ })(ComponentType || (ComponentType = {}));
6112
+
6113
+ /**
6114
+ * Form layout definition
6115
+ * Contains form layout definition objects.
6116
+ *
6117
+ * The version of the OpenAPI document: 1.0.0
6118
+ * Contact: info@it4all.hu
6119
+ *
6120
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
6121
+ * https://openapi-generator.tech
6122
+ * Do not edit the class manually.
6123
+ */
6124
+ var ComponentWidgetType;
6125
+ (function (ComponentWidgetType) {
6126
+ ComponentWidgetType["GRID"] = "grid";
6127
+ ComponentWidgetType["FILTER"] = "filter";
6128
+ ComponentWidgetType["TREE"] = "tree";
6129
+ ComponentWidgetType["TOOLBAR"] = "toolbar";
6130
+ ComponentWidgetType["MAP"] = "map";
6131
+ ComponentWidgetType["DIAGRAM"] = "diagram";
6132
+ ComponentWidgetType["EMBEDDED_SLOT"] = "embedded_slot";
6133
+ })(ComponentWidgetType || (ComponentWidgetType = {}));
6134
+
6135
+ /**
6136
+ * Form layout definition
6137
+ * Contains form layout definition objects.
6138
+ *
6139
+ * The version of the OpenAPI document: 1.0.0
6140
+ * Contact: info@it4all.hu
6141
+ *
6142
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
6143
+ * https://openapi-generator.tech
6144
+ * Do not edit the class manually.
6145
+ */
6146
+ var LayoutDirection;
6147
+ (function (LayoutDirection) {
6148
+ LayoutDirection["HORIZONTAL"] = "horizontal";
6149
+ LayoutDirection["VERTICAL"] = "vertical";
6150
+ })(LayoutDirection || (LayoutDirection = {}));
6151
+
6152
+ /**
6153
+ * Form layout definition
6154
+ * Contains form layout definition objects.
6155
+ *
6156
+ * The version of the OpenAPI document: 1.0.0
6157
+ * Contact: info@it4all.hu
6158
+ *
6159
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
6160
+ * https://openapi-generator.tech
6161
+ * Do not edit the class manually.
6162
+ */
6163
+ var ToolbarDirection;
6164
+ (function (ToolbarDirection) {
6165
+ ToolbarDirection["HORIZONTAL"] = "HORIZONTAL";
6166
+ ToolbarDirection["VERTICAL"] = "VERTICAL";
6167
+ })(ToolbarDirection || (ToolbarDirection = {}));
6168
+
6169
+ let ApiModule$3 = class ApiModule {
6170
+ static forRoot(configurationFactory) {
6171
+ return {
6172
+ ngModule: ApiModule,
6173
+ providers: [{ provide: Configuration$5, useFactory: configurationFactory }]
6174
+ };
6175
+ }
6176
+ constructor(parentModule, http) {
6177
+ if (parentModule) {
6178
+ throw new Error('ApiModule is already loaded. Import in your base AppModule only.');
6179
+ }
6180
+ if (!http) {
6181
+ throw new Error('You need to import the HttpClientModule in your AppModule! \n' +
6182
+ 'See also https://github.com/angular/angular/issues/20575');
6183
+ }
6184
+ }
6185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule, deps: [{ token: ApiModule, optional: true, skipSelf: true }, { token: i1.HttpClient, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
6186
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ApiModule }); }
6187
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule }); }
6188
+ };
6189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule$3, decorators: [{
6190
+ type: NgModule,
6191
+ args: [{
6192
+ imports: [],
6193
+ declarations: [],
6194
+ exports: [],
6195
+ providers: []
6196
+ }]
6197
+ }], ctorParameters: () => [{ type: ApiModule$3, decorators: [{
6198
+ type: Optional
6199
+ }, {
6200
+ type: SkipSelf
6201
+ }] }, { type: i1.HttpClient, decorators: [{
6202
+ type: Optional
6203
+ }] }] });
6204
+
6205
+ class SuccessSnackBarComponent {
6206
+ constructor(data, viewContext, manager) {
6207
+ this.data = data;
6208
+ this.viewContext = viewContext;
6209
+ this.manager = manager;
6210
+ this.manager.getActionDescriptor(data).then((descriptor) => {
6211
+ if (descriptor.feedbackText) {
6212
+ this.text = descriptor.feedbackText;
6213
+ }
6214
+ else {
6215
+ this.text = this.viewContext.commonFeedbackText ?? "A mentés sikeres volt!";
6216
+ }
6217
+ });
6218
+ }
6219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SuccessSnackBarComponent, deps: [{ token: MAT_SNACK_BAR_DATA }, { token: SmartViewContextService }, { token: UiActionDescriptorService }], target: i0.ɵɵFactoryTarget.Component }); }
6220
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SuccessSnackBarComponent, selector: "app-success-snack-bar", ngImport: i0, template: "<span class=\"successSnakBarContainer\" matSnackBarLabel> {{ text }} </span>\r\n", styles: ["::ng-deep .mat-mdc-snack-bar-container{text-align:center;border-radius:2rem}.successSnakBarContainer{color:#fff}\n"] }); }
6221
+ }
6222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SuccessSnackBarComponent, decorators: [{
6223
+ type: Component,
6224
+ args: [{ selector: "app-success-snack-bar", template: "<span class=\"successSnakBarContainer\" matSnackBarLabel> {{ text }} </span>\r\n", styles: ["::ng-deep .mat-mdc-snack-bar-container{text-align:center;border-radius:2rem}.successSnakBarContainer{color:#fff}\n"] }]
6225
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
6226
+ type: Inject,
6227
+ args: [MAT_SNACK_BAR_DATA]
6228
+ }] }, { type: SmartViewContextService }, { type: UiActionDescriptorService }] });
6229
+
6230
+ class InvalidFieldsSnackBarComponent {
6231
+ constructor(data) {
6232
+ this.data = data;
6233
+ }
6234
+ ngOnInit() { }
6235
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: InvalidFieldsSnackBarComponent, deps: [{ token: MAT_SNACK_BAR_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
6236
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: InvalidFieldsSnackBarComponent, selector: "app-invalid-fields-snack-bar", ngImport: i0, template: "<div class=\"invalidFieldsSnackBar\">\r\n <!-- <div class=\"invalidFieldsSnackBarContainer\" *ngIf=\"data.message\">\r\n <span class=\"successSnakBarContainer\" matSnackBarLabel>\r\n {{ data.message }}\r\n </span>\r\n </div> -->\r\n <div class=\"invalidFieldsSnackBarContainer\">\r\n <span class=\"invalidFieldsMessage\" matSnackBarLabel> Hi\u00E1nyos vagy hib\u00E1s adatok! </span>\r\n </div>\r\n</div>\r\n", styles: [".invalidFieldsSnackBar ::ng-deep .mat-mdc-snack-bar-container{text-align:center;border-radius:2rem}.invalidFieldsMessage{color:#fff}\n"], dependencies: [{ kind: "directive", type: i1$4.MatSnackBarLabel, selector: "[matSnackBarLabel]" }] }); }
6237
+ }
6238
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: InvalidFieldsSnackBarComponent, decorators: [{
6239
+ type: Component,
6240
+ args: [{ selector: 'app-invalid-fields-snack-bar', template: "<div class=\"invalidFieldsSnackBar\">\r\n <!-- <div class=\"invalidFieldsSnackBarContainer\" *ngIf=\"data.message\">\r\n <span class=\"successSnakBarContainer\" matSnackBarLabel>\r\n {{ data.message }}\r\n </span>\r\n </div> -->\r\n <div class=\"invalidFieldsSnackBarContainer\">\r\n <span class=\"invalidFieldsMessage\" matSnackBarLabel> Hi\u00E1nyos vagy hib\u00E1s adatok! </span>\r\n </div>\r\n</div>\r\n", styles: [".invalidFieldsSnackBar ::ng-deep .mat-mdc-snack-bar-container{text-align:center;border-radius:2rem}.invalidFieldsMessage{color:#fff}\n"] }]
6241
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
6242
+ type: Inject,
6243
+ args: [MAT_SNACK_BAR_DATA]
6244
+ }] }] });
6245
+
6246
+ class UiActionService {
6247
+ constructor(confirmDialogService, textFieldDialogService, fileUploadDialogService, _snackBar) {
6248
+ this.confirmDialogService = confirmDialogService;
6249
+ this.textFieldDialogService = textFieldDialogService;
6250
+ this.fileUploadDialogService = fileUploadDialogService;
6251
+ this._snackBar = _snackBar;
6252
+ this._destroy$ = new Subject();
6253
+ }
6254
+ ngOnDestroy() {
6255
+ this._destroy$.next();
6256
+ this._destroy$.complete();
6257
+ }
6258
+ async execute(uiAction, options) {
6259
+ let uiActionRequest;
6260
+ uiActionRequest = {
6261
+ code: uiAction.code,
6262
+ path: uiAction.path,
6263
+ identifier: uiAction.identifier,
6264
+ params: uiAction.params ?? {},
6265
+ };
6266
+ if (uiAction.submit || uiAction.model) {
6267
+ // submit: with validation, model: without validation. both can be undefined
6268
+ const validate = uiAction.submit || !uiAction.model;
6269
+ if ('reSubscribeToChange' in this.uiActionModel.serviceToUse) {
6270
+ if (!validate) {
6271
+ console.error(`Validate = false, but UseUiAction doesn't support it`);
6272
+ }
6273
+ this.uiActionModel.serviceToUse.submit.next();
6274
+ try {
6275
+ await this.uiActionModel.serviceToUse.submit.toPromise();
6276
+ this.uiActionModel.serviceToUse.submit = new SmartSubject(this._destroy$);
6277
+ this.uiActionModel.serviceToUse.reSubscribeToChange.next();
6278
+ }
6279
+ catch (error) {
6280
+ console.error(error);
6281
+ this.uiActionModel.serviceToUse.submit = new SmartSubject(this._destroy$);
6282
+ this.uiActionModel.serviceToUse.reSubscribeToChange.next();
6283
+ return;
6284
+ }
6285
+ }
6286
+ else {
6287
+ this.uiActionModel.serviceToUse.submitForm(validate);
6288
+ let invalidFields = this.uiActionModel.serviceToUse.getInvalidFields();
6289
+ if (validate && invalidFields.invalidFieldKeys.length) {
6290
+ this.showInvalidFieldsSnackbar(invalidFields);
6291
+ return;
6292
+ }
6293
+ }
6294
+ }
6295
+ if (uiAction.confirm) {
6296
+ this.confirmDialogService.action = uiAction;
6297
+ this.confirmDialogService.openDialog();
6298
+ await this.confirmDialogService.onAction.toPromise();
6299
+ if (!this.confirmDialogService.shouldDoAction) {
6300
+ return;
6301
+ }
6302
+ }
6303
+ // InputType
6304
+ if (uiAction.inputType && uiAction.inputType !== UiActionInputType.NONE) {
6305
+ uiActionRequest = await this.handleInputType(uiAction.inputType, uiAction, uiActionRequest, 'inputDialog');
6306
+ if (!uiActionRequest) {
6307
+ return;
6308
+ }
6309
+ await new Promise((resolve) => setTimeout(resolve, 250));
6310
+ }
6311
+ // Input2Type
6312
+ if (uiAction.input2Type && uiAction.input2Type !== UiActionInputType.NONE) {
6313
+ uiActionRequest = await this.handleInputType(uiAction.input2Type, uiAction, uiActionRequest, 'input2Dialog');
6314
+ if (!uiActionRequest) {
6315
+ return;
6316
+ }
6317
+ }
6318
+ if (this.uiActionModel.exception) {
6319
+ let response = await this.uiActionModel.serviceToUse.handleSpecificDemandsAsynchronously(uiAction, uiActionRequest);
6320
+ if (!response.shouldPerformAction || !response.uiActionRequest) {
6321
+ return;
6322
+ }
6323
+ uiActionRequest = response.uiActionRequest;
6324
+ }
6325
+ await this.performAction(uiAction, uiActionRequest, options);
6326
+ }
6327
+ async handleInputType(inputType, uiAction, uiActionRequest, inputTypeName) {
6328
+ switch (inputType) {
6329
+ case UiActionInputType.NONE:
6330
+ return uiActionRequest;
6331
+ case UiActionInputType.TEXTAREA:
6332
+ case UiActionInputType.TEXTFIELD:
6333
+ return await this.handleInputTypeTextField(inputTypeName, uiAction, uiActionRequest);
6334
+ case UiActionInputType.USER_SELECT:
6335
+ return await this.handleInputTypeUserSelect(inputTypeName, uiAction, uiActionRequest);
6336
+ case UiActionInputType.FILE:
6337
+ return await this.handleInputTypeUpload(inputTypeName, uiAction, uiActionRequest, false);
6338
+ case UiActionInputType.MULTIPLE_FILES:
6339
+ return await this.handleInputTypeUpload(inputTypeName, uiAction, uiActionRequest, true);
6340
+ default:
6341
+ return uiActionRequest;
6342
+ }
6343
+ }
6344
+ async handleInputTypeTextField(inputTypeName, uiAction, uiActionRequest) {
6345
+ let additionalParams = this.uiActionModel.serviceToUse.getAdditionalParams(uiAction);
6346
+ let inputType = inputTypeName === 'inputDialog' ? 'inputType' : 'input2Type';
6347
+ if (uiAction[inputType] === UiActionInputType.TEXTFIELD) {
6348
+ this.textFieldDialogService.nodeName = additionalParams.forTextField;
6349
+ }
6350
+ else if (uiAction[inputType] === UiActionInputType.TEXTAREA) {
6351
+ this.textFieldDialogService.nodeName = additionalParams.forTextArea;
6352
+ }
6353
+ this.textFieldDialogService.inputTypeName = inputTypeName;
6354
+ this.textFieldDialogService.action = uiAction;
6355
+ this.textFieldDialogService.openDialog();
6356
+ await this.textFieldDialogService.onAction.toPromise();
6357
+ let params = this.textFieldDialogService.params;
6358
+ if (!params) {
6359
+ console.error('There was no response from InputDialog');
6360
+ return;
6361
+ }
6362
+ uiActionRequest.params = {
6363
+ ...uiActionRequest.params,
6364
+ ...params,
6365
+ };
6366
+ return uiActionRequest;
6367
+ }
6368
+ async handleInputTypeUpload(inputTypeName, uiAction, uiActionRequest, isMultiple) {
6369
+ this.fileUploadDialogService.inputTypeName = inputTypeName;
6370
+ this.fileUploadDialogService.action = uiAction;
6371
+ this.fileUploadDialogService.isMultiple = isMultiple;
6372
+ this.fileUploadDialogService.openDialog();
6373
+ await this.fileUploadDialogService.onAction.toPromise();
6374
+ let files = this.fileUploadDialogService.files;
6375
+ let uploadDescriptor = this.fileUploadDialogService.uploadDescriptor;
6376
+ if (!files || !files.length) {
6377
+ return;
6378
+ }
6379
+ uiActionRequest.params = {
6380
+ ...uiActionRequest.params,
6381
+ _files: files,
6382
+ _uploadDescriptor: uploadDescriptor,
6383
+ isMultiple,
6384
+ param: uiAction.inputType === 'file' || uiAction.inputType === 'multiple_files'
6385
+ ? 'input'
6386
+ : 'input2',
6387
+ };
6388
+ return uiActionRequest;
6389
+ }
6390
+ async handleInputTypeUserSelect(inputTypeName, uiAction, uiActionRequest) {
6391
+ let response = await this.uiActionModel.serviceToUse.handleSpecificDemandsAsynchronously(uiAction, uiActionRequest);
6392
+ if (!response.shouldPerformAction || !response.uiActionRequest) {
6393
+ return;
6394
+ }
6395
+ uiActionRequest = response.uiActionRequest;
6396
+ return uiActionRequest;
6397
+ }
6398
+ async performAction(uiAction, uiActionRequest, options) {
6399
+ if (!uiActionRequest.params ||
6400
+ (uiActionRequest.params && !Object.keys(uiActionRequest.params).length)) {
6401
+ uiActionRequest.params = {
6402
+ model: this.uiActionModel.serviceToUse.getModel(),
6403
+ };
6404
+ }
6405
+ else if (uiAction.submit || uiAction.model) {
6406
+ uiActionRequest.params['model'] = this.uiActionModel.serviceToUse.getModel();
6407
+ }
6408
+ try {
6409
+ await this.uiActionModel.serviceToUse.performUiActionRequest(uiActionRequest, options?.widgetId, options?.nodeId);
6410
+ if (this.uiActionModel.descriptor?.feedbackType === UiActionFeedbackType.SNACKBAR) {
6411
+ this.showSavedSnackbar(uiAction);
6412
+ }
6413
+ }
6414
+ catch (error) {
6415
+ console.error(error);
6416
+ }
6417
+ }
6418
+ showSavedSnackbar(uiAction) {
6419
+ this._snackBar.openFromComponent(SuccessSnackBarComponent, {
6420
+ duration: 5 * 1000,
6421
+ panelClass: ['backgroundColor-accent'],
6422
+ data: uiAction,
6423
+ });
6424
+ }
6425
+ showInvalidFieldsSnackbar(invalidFields) {
6426
+ this._snackBar.openFromComponent(InvalidFieldsSnackBarComponent, {
6427
+ duration: 5 * 1000,
6428
+ panelClass: ['backgroundColor-warn'],
6429
+ data: invalidFields,
6430
+ });
6431
+ }
6432
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionService, deps: [{ token: 'confirmDialogService' }, { token: 'textFieldDialogService' }, { token: 'fileUploadDialogService' }, { token: i1$4.MatSnackBar }], target: i0.ɵɵFactoryTarget.Injectable }); }
6433
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionService, providedIn: 'root' }); }
6434
+ }
6435
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionService, decorators: [{
6436
+ type: Injectable,
6437
+ args: [{
6438
+ providedIn: 'root',
6439
+ }]
6440
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
6441
+ type: Inject,
6442
+ args: ['confirmDialogService']
6443
+ }] }, { type: undefined, decorators: [{
6444
+ type: Inject,
6445
+ args: ['textFieldDialogService']
6446
+ }] }, { type: undefined, decorators: [{
6447
+ type: Inject,
6448
+ args: ['fileUploadDialogService']
6449
+ }] }, { type: i1$4.MatSnackBar }] });
6450
+
6451
+ const SUBMENU_POSITIONS = [
6452
+ // Top-left of trigger → aligns top-left of overlay
6453
+ // {
6454
+ // originX: 'start',
6455
+ // originY: 'top',
6456
+ // overlayX: 'start',
6457
+ // overlayY: 'top',
6458
+ // },
6459
+ // // Bottom-left of trigger → aligns bottom-left of overlay
6460
+ // {
6461
+ // originX: 'start',
6462
+ // originY: 'bottom',
6463
+ // overlayX: 'start',
6464
+ // overlayY: 'bottom',
6465
+ // },
6466
+ // // Top-right of trigger → aligns top-right of overlay
6467
+ // {
6468
+ // originX: 'end',
6469
+ // originY: 'top',
6470
+ // overlayX: 'end',
6471
+ // overlayY: 'top',
6472
+ // },
6473
+ // // Bottom-right of trigger → aligns bottom-right of overlay
6474
+ // {
6475
+ // originX: 'end',
6476
+ // originY: 'bottom',
6477
+ // overlayX: 'end',
6478
+ // overlayY: 'bottom',
6479
+ // },
6480
+ {
6481
+ originX: 'end',
6482
+ originY: 'top',
6483
+ overlayX: 'start',
6484
+ overlayY: 'top',
6485
+ },
6486
+ {
6487
+ originX: 'start',
6488
+ originY: 'top',
6489
+ overlayX: 'end',
6490
+ overlayY: 'top',
6491
+ },
6492
+ ];
6493
+ const ROOT_MENU_POSITIONS = [
6494
+ // Below-right of trigger
6495
+ {
6496
+ originX: 'end',
6497
+ originY: 'bottom',
6498
+ overlayX: 'end',
6499
+ overlayY: 'top',
6500
+ }, // Below-left of trigger
6501
+ {
6502
+ originX: 'start',
6503
+ originY: 'bottom',
6504
+ overlayX: 'start',
6505
+ overlayY: 'top',
6506
+ },
6507
+ // Above-left of trigger
6508
+ {
6509
+ originX: 'start',
6510
+ originY: 'top',
6511
+ overlayX: 'start',
6512
+ overlayY: 'bottom',
6513
+ },
6514
+ // Above-right of trigger
6515
+ {
6516
+ originX: 'end',
6517
+ originY: 'top',
6518
+ overlayX: 'end',
6519
+ overlayY: 'bottom',
6520
+ },
6521
+ ];
6522
+
6523
+ class UiMenuService {
6524
+ constructor() {
6525
+ this.closeMenus$ = new Subject();
6526
+ }
6527
+ closeAllMenus() {
6528
+ this.closeMenus$.next();
6529
+ }
6530
+ getCloseSignal() {
6531
+ return this.closeMenus$.asObservable();
6532
+ }
6179
6533
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6180
6534
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiMenuService, providedIn: 'root' }); }
6181
6535
  }
@@ -6599,12 +6953,15 @@ class UiActionToolbarComponent {
6599
6953
  this.scrollInterval = null;
6600
6954
  }
6601
6955
  }
6956
+ get isVertical() {
6957
+ return this.toolbarPropertes?.direction === ToolbarDirection.VERTICAL;
6958
+ }
6602
6959
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionToolbarComponent, deps: [{ token: UiActionService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: COMPONENT_LIBRARY }], target: i0.ɵɵFactoryTarget.Component }); }
6603
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: { uiActionModels: "uiActionModels", uiActionDescriptorService: "uiActionDescriptorService", id: "id", scrollOnWrap: "scrollOnWrap", toolbarPropertes: "toolbarPropertes" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div #container class=\"uiActionButtonsContainer\" [ngClass]=\"{ scrollableContent: scrollOnWrap }\">\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}\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: "component", type: UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: MenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu"], outputs: ["actionClick", "submenuOpened"] }] }); }
6960
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: { uiActionModels: "uiActionModels", uiActionDescriptorService: "uiActionDescriptorService", id: "id", scrollOnWrap: "scrollOnWrap", toolbarPropertes: "toolbarPropertes" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\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: "component", type: UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: MenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu"], outputs: ["actionClick", "submenuOpened"] }] }); }
6604
6961
  }
6605
6962
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionToolbarComponent, decorators: [{
6606
6963
  type: Component,
6607
- args: [{ selector: 'smart-ui-action-toolbar', template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div #container class=\"uiActionButtonsContainer\" [ngClass]=\"{ scrollableContent: scrollOnWrap }\">\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}\n"] }]
6964
+ args: [{ selector: 'smart-ui-action-toolbar', template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\n"] }]
6608
6965
  }], ctorParameters: () => [{ type: UiActionService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: ComponentLibrary, decorators: [{
6609
6966
  type: Inject,
6610
6967
  args: [COMPONENT_LIBRARY]
@@ -7568,11 +7925,11 @@ class FileEditorToolbarComponent extends UiActionToolbarComponent {
7568
7925
  await super.fireAction(uiActionModel);
7569
7926
  }
7570
7927
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FileEditorToolbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
7571
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: FileEditorToolbarComponent, selector: "file-editor-toolbar", inputs: { dataUri: "dataUri" }, outputs: { actionEvent: "actionEvent" }, usesInheritance: true, ngImport: i0, template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div #container class=\"uiActionButtonsContainer\" [ngClass]=\"{ scrollableContent: scrollOnWrap }\">\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}\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: "component", type: UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: MenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu"], outputs: ["actionClick", "submenuOpened"] }] }); }
7928
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: FileEditorToolbarComponent, selector: "file-editor-toolbar", inputs: { dataUri: "dataUri" }, outputs: { actionEvent: "actionEvent" }, usesInheritance: true, ngImport: i0, template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\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: "component", type: UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: MenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu"], outputs: ["actionClick", "submenuOpened"] }] }); }
7572
7929
  }
7573
7930
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FileEditorToolbarComponent, decorators: [{
7574
7931
  type: Component,
7575
- args: [{ selector: 'file-editor-toolbar', template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div #container class=\"uiActionButtonsContainer\" [ngClass]=\"{ scrollableContent: scrollOnWrap }\">\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}\n"] }]
7932
+ args: [{ selector: 'file-editor-toolbar', template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\n"] }]
7576
7933
  }], propDecorators: { dataUri: [{
7577
7934
  type: Input
7578
7935
  }], actionEvent: [{
@@ -7710,7 +8067,7 @@ class SmartMultiFileEditorComponent {
7710
8067
  useExisting: forwardRef(() => SmartMultiFileEditorComponent),
7711
8068
  multi: true,
7712
8069
  },
7713
- ], viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }], ngImport: i0, template: "@if (widgetInstance && widgetInstance.multiFileUploaderProperties) {\r\n <h4\r\n *ngIf=\"widgetInstance.showLabel\"\r\n class=\"labelContainer {{ widgetInstance.cssLabelClass ?? '' }}\"\r\n [ngClass]=\"getLabelNgClass()\"\r\n [ngStyle]=\"getLabelStyle()\"\r\n >\r\n {{ widgetInstance.label }}\r\n </h4>\r\n <smart-ui-action-toolbar\r\n [id]=\"widgetInstance.toolbarId\"\r\n #toolbar\r\n [style]=\"{ display: 'none' }\"\r\n ></smart-ui-action-toolbar>\r\n\r\n <div class=\"fileEditorComponent\">\r\n @if (widgetInstance.value && !isTypeSupported(widgetInstance.value)) {\r\n <div class=\"errorMessage\">\r\n <smart-icon [icon]=\"errorIcon\" [color]=\"'var(--warninig-color)'\"></smart-icon>\r\n <span> Unsupported widgetInstance.value type for this widget.</span>\r\n </div>\r\n } @else {\r\n <smart-upload-widget\r\n class=\"widgetContent {{ widgetInstance.cssClass ?? '' }}\"\r\n [ngClass]=\"getNgClass()\"\r\n [ngStyle]=\"getStyle()\"\r\n [uploadDescriptor]=\"widgetInstance.multiFileUploaderProperties.uploadDescriptor!\"\r\n [isMultiple]=\"true\"\r\n [isDisabled]=\"widgetInstance.isDisabled\"\r\n (uploadFilesEvent)=\"upload($event)\"\r\n />\r\n }\r\n\r\n <div\r\n [ngClass]=\"{ disabledWidget: widgetInstance.isDisabled }\"\r\n class=\"uploadedFileContainer\"\r\n [style.display]=\"\r\n widgetInstance.value && isTypeSupported(widgetInstance.value) ? 'block' : 'none'\r\n \"\r\n >\r\n <div class=\"scrollable\">\r\n <div class=\"uploadedFile\" *ngFor=\"let file of widgetInstance.value; let i = index\">\r\n <smart-icon class=\"uploadedFileIcon\" [icon]=\"fileIcon\"></smart-icon>\r\n\r\n <div class=\"fileData\">\r\n <div class=\"fileDataContainer\">\r\n <span class=\"fileName\">{{ file?.fileName }}</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 @if (toolbarComponent && toolbarComponent.uiActionModels) {\r\n <file-editor-toolbar\r\n [id]=\"widgetInstance.toolbarId\"\r\n [dataUri]=\"file.dataUri\"\r\n [uiActionModels]=\"toolbarComponent.uiActionModels\"\r\n ></file-editor-toolbar>\r\n }\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n (click)=\"downloadFile(file.dataUri)\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n [icon]=\"removeIcon\"\r\n (click)=\"!isDisabled && deleteFile(file.dataUri)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem;width:100%}.fileEditorComponent{border:2px dashed var(--border-color);border-radius:var(--def-border-radius);overflow:hidden}.fileEditorComponent ::ng-deep smartfileuploader ::ng-deep .container{border:unset;border-radius:unset}.uploadedFileContainer{display:flex;flex-direction:column;border-top:1px solid #e0e0e0}.uploadedFile{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:1rem;gap:1rem}.scrollable{max-height:30vh;overflow-y:auto}.scrollable>div:not(:last-child){border-bottom:1px solid #e0e0e0}.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}.fileActions{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileActions ::ng-deep button{border:unset}.fileActions ::ng-deep button:hover{border:unset}.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}smart-icon ::ng-deep mat-icon{font-size:3rem;width:unset;height:unset}.uploadedFileIcon{width:3rem;display:flex;justify-content:center}:host ::ng-deep .p-fileupload-content{border:unset;border-radius:var(--def-border-radius)}smart-icon ::ng-deep .pi{font-size:2rem!important}.fileEditorComponent:has(::ng-deep .errorMessage){border-color:var(--warninig-color)}.errorMessage{padding:1rem;font-size:1.5rem;color:var(--warninig-color);display:flex;flex-direction:row;align-items:center;gap:1rem}:host ::ng-deep .disabledWidget ::ng-deep .changeButton *,:host ::ng-deep .disabledWidget ::ng-deep .removeIcon *{opacity:.4!important;pointer-events:none!important}:host ::ng-deep .disabledWidget ::ng-deep .changeButton:hover,:host ::ng-deep .disabledWidget ::ng-deep .removeIcon:hover{cursor:not-allowed}:host ::ng-deep smartfileuploader ::ng-deep .uploadedFile,:host ::ng-deep .p-fileupload-file{background:repeating-linear-gradient(45deg,#fafafa,#fafafa 6px,#f1f1f1 6px 12px)}\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: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: FileEditorToolbarComponent, selector: "file-editor-toolbar", inputs: ["dataUri"], outputs: ["actionEvent"] }, { kind: "component", type: UploadWidgetComponent, selector: "smart-upload-widget", inputs: ["uploadDescriptor", "isMultiple", "isDisabled"], outputs: ["uploadFilesEvent"] }] }); }
8070
+ ], viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }], ngImport: i0, template: "@if (widgetInstance && widgetInstance.multiFileUploaderProperties) {\r\n <h4\r\n *ngIf=\"widgetInstance.showLabel\"\r\n class=\"labelContainer {{ widgetInstance.cssLabelClass ?? '' }}\"\r\n [ngClass]=\"getLabelNgClass()\"\r\n [ngStyle]=\"getLabelStyle()\"\r\n >\r\n {{ widgetInstance.label }}\r\n </h4>\r\n <smart-ui-action-toolbar\r\n [id]=\"widgetInstance.toolbarId\"\r\n #toolbar\r\n [style]=\"{ display: 'none' }\"\r\n ></smart-ui-action-toolbar>\r\n\r\n <div class=\"fileEditorComponent\">\r\n @if (widgetInstance.value && !isTypeSupported(widgetInstance.value)) {\r\n <div class=\"errorMessage\">\r\n <smart-icon [icon]=\"errorIcon\" [color]=\"'var(--warninig-color)'\"></smart-icon>\r\n <span> Unsupported widgetInstance.value type for this widget.</span>\r\n </div>\r\n } @else {\r\n <smart-upload-widget\r\n class=\"widgetContent {{ widgetInstance.cssClass ?? '' }}\"\r\n [ngClass]=\"getNgClass()\"\r\n [ngStyle]=\"getStyle()\"\r\n [uploadDescriptor]=\"widgetInstance.multiFileUploaderProperties.uploadDescriptor!\"\r\n [isMultiple]=\"true\"\r\n [isDisabled]=\"widgetInstance.isDisabled\"\r\n (uploadFilesEvent)=\"upload($event)\"\r\n />\r\n }\r\n\r\n <div\r\n [ngClass]=\"{ disabledWidget: widgetInstance.isDisabled }\"\r\n class=\"uploadedFileContainer\"\r\n [style.display]=\"\r\n widgetInstance.value && isTypeSupported(widgetInstance.value) ? 'block' : 'none'\r\n \"\r\n >\r\n <div class=\"scrollable\">\r\n <div class=\"uploadedFile\" *ngFor=\"let file of widgetInstance.value; let i = index\">\r\n <smart-icon class=\"uploadedFileIcon\" [icon]=\"fileIcon\"></smart-icon>\r\n\r\n <div class=\"fileData\">\r\n <div class=\"fileDataContainer\">\r\n <span class=\"fileName\">{{ file?.fileName }}</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 @if (toolbarComponent && toolbarComponent.uiActionModels) {\r\n <file-editor-toolbar\r\n [id]=\"widgetInstance.toolbarId\"\r\n [dataUri]=\"file.dataUri\"\r\n [uiActionModels]=\"toolbarComponent.uiActionModels\"\r\n ></file-editor-toolbar>\r\n }\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n (click)=\"downloadFile(file.dataUri)\"\r\n ></smart-icon>\r\n @if (!file.readOnly) {\r\n <smart-icon\r\n class=\"removeIcon\"\r\n [icon]=\"removeIcon\"\r\n (click)=\"!isDisabled && file.readOnly === false && deleteFile(file.dataUri)\"\r\n ></smart-icon>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem;width:100%}.fileEditorComponent{border:2px dashed var(--border-color);border-radius:var(--def-border-radius);overflow:hidden}.fileEditorComponent ::ng-deep smartfileuploader ::ng-deep .container{border:unset;border-radius:unset}.uploadedFileContainer{display:flex;flex-direction:column;border-top:1px solid #e0e0e0}.uploadedFile{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:1rem;gap:1rem}.scrollable{max-height:30vh;overflow-y:auto}.scrollable>div:not(:last-child){border-bottom:1px solid #e0e0e0}.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}.fileActions{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileActions ::ng-deep button{border:unset}.fileActions ::ng-deep button:hover{border:unset}.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}smart-icon ::ng-deep mat-icon{font-size:3rem;width:unset;height:unset}.uploadedFileIcon{width:3rem;display:flex;justify-content:center}:host ::ng-deep .p-fileupload-content{border:unset;border-radius:var(--def-border-radius)}smart-icon ::ng-deep .pi{font-size:2rem!important}.fileEditorComponent:has(::ng-deep .errorMessage){border-color:var(--warninig-color)}.errorMessage{padding:1rem;font-size:1.5rem;color:var(--warninig-color);display:flex;flex-direction:row;align-items:center;gap:1rem}:host ::ng-deep .disabledWidget ::ng-deep .changeButton *,:host ::ng-deep .disabledWidget ::ng-deep .removeIcon *{opacity:.4!important;pointer-events:none!important}:host ::ng-deep .disabledWidget ::ng-deep .changeButton:hover,:host ::ng-deep .disabledWidget ::ng-deep .removeIcon:hover{cursor:not-allowed}:host ::ng-deep smartfileuploader ::ng-deep .uploadedFile,:host ::ng-deep .p-fileupload-file{background:repeating-linear-gradient(45deg,#fafafa,#fafafa 6px,#f1f1f1 6px 12px)}\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: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: FileEditorToolbarComponent, selector: "file-editor-toolbar", inputs: ["dataUri"], outputs: ["actionEvent"] }, { kind: "component", type: UploadWidgetComponent, selector: "smart-upload-widget", inputs: ["uploadDescriptor", "isMultiple", "isDisabled"], outputs: ["uploadFilesEvent"] }] }); }
7714
8071
  }
7715
8072
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMultiFileEditorComponent, decorators: [{
7716
8073
  type: Component,
@@ -7720,7 +8077,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
7720
8077
  useExisting: forwardRef(() => SmartMultiFileEditorComponent),
7721
8078
  multi: true,
7722
8079
  },
7723
- ], template: "@if (widgetInstance && widgetInstance.multiFileUploaderProperties) {\r\n <h4\r\n *ngIf=\"widgetInstance.showLabel\"\r\n class=\"labelContainer {{ widgetInstance.cssLabelClass ?? '' }}\"\r\n [ngClass]=\"getLabelNgClass()\"\r\n [ngStyle]=\"getLabelStyle()\"\r\n >\r\n {{ widgetInstance.label }}\r\n </h4>\r\n <smart-ui-action-toolbar\r\n [id]=\"widgetInstance.toolbarId\"\r\n #toolbar\r\n [style]=\"{ display: 'none' }\"\r\n ></smart-ui-action-toolbar>\r\n\r\n <div class=\"fileEditorComponent\">\r\n @if (widgetInstance.value && !isTypeSupported(widgetInstance.value)) {\r\n <div class=\"errorMessage\">\r\n <smart-icon [icon]=\"errorIcon\" [color]=\"'var(--warninig-color)'\"></smart-icon>\r\n <span> Unsupported widgetInstance.value type for this widget.</span>\r\n </div>\r\n } @else {\r\n <smart-upload-widget\r\n class=\"widgetContent {{ widgetInstance.cssClass ?? '' }}\"\r\n [ngClass]=\"getNgClass()\"\r\n [ngStyle]=\"getStyle()\"\r\n [uploadDescriptor]=\"widgetInstance.multiFileUploaderProperties.uploadDescriptor!\"\r\n [isMultiple]=\"true\"\r\n [isDisabled]=\"widgetInstance.isDisabled\"\r\n (uploadFilesEvent)=\"upload($event)\"\r\n />\r\n }\r\n\r\n <div\r\n [ngClass]=\"{ disabledWidget: widgetInstance.isDisabled }\"\r\n class=\"uploadedFileContainer\"\r\n [style.display]=\"\r\n widgetInstance.value && isTypeSupported(widgetInstance.value) ? 'block' : 'none'\r\n \"\r\n >\r\n <div class=\"scrollable\">\r\n <div class=\"uploadedFile\" *ngFor=\"let file of widgetInstance.value; let i = index\">\r\n <smart-icon class=\"uploadedFileIcon\" [icon]=\"fileIcon\"></smart-icon>\r\n\r\n <div class=\"fileData\">\r\n <div class=\"fileDataContainer\">\r\n <span class=\"fileName\">{{ file?.fileName }}</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 @if (toolbarComponent && toolbarComponent.uiActionModels) {\r\n <file-editor-toolbar\r\n [id]=\"widgetInstance.toolbarId\"\r\n [dataUri]=\"file.dataUri\"\r\n [uiActionModels]=\"toolbarComponent.uiActionModels\"\r\n ></file-editor-toolbar>\r\n }\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n (click)=\"downloadFile(file.dataUri)\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n [icon]=\"removeIcon\"\r\n (click)=\"!isDisabled && deleteFile(file.dataUri)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem;width:100%}.fileEditorComponent{border:2px dashed var(--border-color);border-radius:var(--def-border-radius);overflow:hidden}.fileEditorComponent ::ng-deep smartfileuploader ::ng-deep .container{border:unset;border-radius:unset}.uploadedFileContainer{display:flex;flex-direction:column;border-top:1px solid #e0e0e0}.uploadedFile{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:1rem;gap:1rem}.scrollable{max-height:30vh;overflow-y:auto}.scrollable>div:not(:last-child){border-bottom:1px solid #e0e0e0}.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}.fileActions{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileActions ::ng-deep button{border:unset}.fileActions ::ng-deep button:hover{border:unset}.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}smart-icon ::ng-deep mat-icon{font-size:3rem;width:unset;height:unset}.uploadedFileIcon{width:3rem;display:flex;justify-content:center}:host ::ng-deep .p-fileupload-content{border:unset;border-radius:var(--def-border-radius)}smart-icon ::ng-deep .pi{font-size:2rem!important}.fileEditorComponent:has(::ng-deep .errorMessage){border-color:var(--warninig-color)}.errorMessage{padding:1rem;font-size:1.5rem;color:var(--warninig-color);display:flex;flex-direction:row;align-items:center;gap:1rem}:host ::ng-deep .disabledWidget ::ng-deep .changeButton *,:host ::ng-deep .disabledWidget ::ng-deep .removeIcon *{opacity:.4!important;pointer-events:none!important}:host ::ng-deep .disabledWidget ::ng-deep .changeButton:hover,:host ::ng-deep .disabledWidget ::ng-deep .removeIcon:hover{cursor:not-allowed}:host ::ng-deep smartfileuploader ::ng-deep .uploadedFile,:host ::ng-deep .p-fileupload-file{background:repeating-linear-gradient(45deg,#fafafa,#fafafa 6px,#f1f1f1 6px 12px)}\n"] }]
8080
+ ], template: "@if (widgetInstance && widgetInstance.multiFileUploaderProperties) {\r\n <h4\r\n *ngIf=\"widgetInstance.showLabel\"\r\n class=\"labelContainer {{ widgetInstance.cssLabelClass ?? '' }}\"\r\n [ngClass]=\"getLabelNgClass()\"\r\n [ngStyle]=\"getLabelStyle()\"\r\n >\r\n {{ widgetInstance.label }}\r\n </h4>\r\n <smart-ui-action-toolbar\r\n [id]=\"widgetInstance.toolbarId\"\r\n #toolbar\r\n [style]=\"{ display: 'none' }\"\r\n ></smart-ui-action-toolbar>\r\n\r\n <div class=\"fileEditorComponent\">\r\n @if (widgetInstance.value && !isTypeSupported(widgetInstance.value)) {\r\n <div class=\"errorMessage\">\r\n <smart-icon [icon]=\"errorIcon\" [color]=\"'var(--warninig-color)'\"></smart-icon>\r\n <span> Unsupported widgetInstance.value type for this widget.</span>\r\n </div>\r\n } @else {\r\n <smart-upload-widget\r\n class=\"widgetContent {{ widgetInstance.cssClass ?? '' }}\"\r\n [ngClass]=\"getNgClass()\"\r\n [ngStyle]=\"getStyle()\"\r\n [uploadDescriptor]=\"widgetInstance.multiFileUploaderProperties.uploadDescriptor!\"\r\n [isMultiple]=\"true\"\r\n [isDisabled]=\"widgetInstance.isDisabled\"\r\n (uploadFilesEvent)=\"upload($event)\"\r\n />\r\n }\r\n\r\n <div\r\n [ngClass]=\"{ disabledWidget: widgetInstance.isDisabled }\"\r\n class=\"uploadedFileContainer\"\r\n [style.display]=\"\r\n widgetInstance.value && isTypeSupported(widgetInstance.value) ? 'block' : 'none'\r\n \"\r\n >\r\n <div class=\"scrollable\">\r\n <div class=\"uploadedFile\" *ngFor=\"let file of widgetInstance.value; let i = index\">\r\n <smart-icon class=\"uploadedFileIcon\" [icon]=\"fileIcon\"></smart-icon>\r\n\r\n <div class=\"fileData\">\r\n <div class=\"fileDataContainer\">\r\n <span class=\"fileName\">{{ file?.fileName }}</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 @if (toolbarComponent && toolbarComponent.uiActionModels) {\r\n <file-editor-toolbar\r\n [id]=\"widgetInstance.toolbarId\"\r\n [dataUri]=\"file.dataUri\"\r\n [uiActionModels]=\"toolbarComponent.uiActionModels\"\r\n ></file-editor-toolbar>\r\n }\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n (click)=\"downloadFile(file.dataUri)\"\r\n ></smart-icon>\r\n @if (!file.readOnly) {\r\n <smart-icon\r\n class=\"removeIcon\"\r\n [icon]=\"removeIcon\"\r\n (click)=\"!isDisabled && file.readOnly === false && deleteFile(file.dataUri)\"\r\n ></smart-icon>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem;width:100%}.fileEditorComponent{border:2px dashed var(--border-color);border-radius:var(--def-border-radius);overflow:hidden}.fileEditorComponent ::ng-deep smartfileuploader ::ng-deep .container{border:unset;border-radius:unset}.uploadedFileContainer{display:flex;flex-direction:column;border-top:1px solid #e0e0e0}.uploadedFile{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;padding:1rem;gap:1rem}.scrollable{max-height:30vh;overflow-y:auto}.scrollable>div:not(:last-child){border-bottom:1px solid #e0e0e0}.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}.fileActions{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileActions ::ng-deep button{border:unset}.fileActions ::ng-deep button:hover{border:unset}.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}smart-icon ::ng-deep mat-icon{font-size:3rem;width:unset;height:unset}.uploadedFileIcon{width:3rem;display:flex;justify-content:center}:host ::ng-deep .p-fileupload-content{border:unset;border-radius:var(--def-border-radius)}smart-icon ::ng-deep .pi{font-size:2rem!important}.fileEditorComponent:has(::ng-deep .errorMessage){border-color:var(--warninig-color)}.errorMessage{padding:1rem;font-size:1.5rem;color:var(--warninig-color);display:flex;flex-direction:row;align-items:center;gap:1rem}:host ::ng-deep .disabledWidget ::ng-deep .changeButton *,:host ::ng-deep .disabledWidget ::ng-deep .removeIcon *{opacity:.4!important;pointer-events:none!important}:host ::ng-deep .disabledWidget ::ng-deep .changeButton:hover,:host ::ng-deep .disabledWidget ::ng-deep .removeIcon:hover{cursor:not-allowed}:host ::ng-deep smartfileuploader ::ng-deep .uploadedFile,:host ::ng-deep .p-fileupload-file{background:repeating-linear-gradient(45deg,#fafafa,#fafafa 6px,#f1f1f1 6px 12px)}\n"] }]
7724
8081
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: ComponentLibrary, decorators: [{
7725
8082
  type: Inject,
7726
8083
  args: [COMPONENT_LIBRARY]
@@ -12690,7 +13047,7 @@ var FilterExpressionOrderBy;
12690
13047
  * Custom HttpParameterCodec
12691
13048
  * Workaround for https://github.com/angular/angular/issues/18261
12692
13049
  */
12693
- let CustomHttpParameterCodec$5 = class CustomHttpParameterCodec {
13050
+ let CustomHttpParameterCodec$4 = class CustomHttpParameterCodec {
12694
13051
  encodeKey(k) {
12695
13052
  return encodeURIComponent(k);
12696
13053
  }
@@ -12705,15 +13062,15 @@ let CustomHttpParameterCodec$5 = class CustomHttpParameterCodec {
12705
13062
  }
12706
13063
  };
12707
13064
 
12708
- const BASE_PATH$5 = new InjectionToken('basePath');
12709
- const COLLECTION_FORMATS$5 = {
13065
+ const BASE_PATH$4 = new InjectionToken('basePath');
13066
+ const COLLECTION_FORMATS$4 = {
12710
13067
  'csv': ',',
12711
13068
  'tsv': ' ',
12712
13069
  'ssv': ' ',
12713
13070
  'pipes': '|'
12714
13071
  };
12715
13072
 
12716
- let Configuration$5 = class Configuration {
13073
+ let Configuration$4 = class Configuration {
12717
13074
  constructor(configurationParameters = {}) {
12718
13075
  this.apiKeys = configurationParameters.apiKeys;
12719
13076
  this.username = configurationParameters.username;
@@ -12821,7 +13178,7 @@ class GridService {
12821
13178
  this.httpClient = httpClient;
12822
13179
  this.basePath = 'http://localhost';
12823
13180
  this.defaultHeaders = new HttpHeaders();
12824
- this.configuration = new Configuration$5();
13181
+ this.configuration = new Configuration$4();
12825
13182
  if (configuration) {
12826
13183
  this.configuration = configuration;
12827
13184
  }
@@ -12834,7 +13191,7 @@ class GridService {
12834
13191
  }
12835
13192
  this.configuration.basePath = basePath;
12836
13193
  }
12837
- this.encoder = this.configuration.encoder || new CustomHttpParameterCodec$5();
13194
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec$4();
12838
13195
  }
12839
13196
  // @ts-ignore
12840
13197
  addToHttpParams(httpParams, value, key) {
@@ -13274,7 +13631,7 @@ class GridService {
13274
13631
  reportProgress: reportProgress
13275
13632
  });
13276
13633
  }
13277
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GridService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH$5, optional: true }, { token: Configuration$5, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
13634
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GridService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH$4, optional: true }, { token: Configuration$4, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
13278
13635
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GridService, providedIn: 'root' }); }
13279
13636
  }
13280
13637
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GridService, decorators: [{
@@ -13286,12 +13643,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
13286
13643
  type: Optional
13287
13644
  }, {
13288
13645
  type: Inject,
13289
- args: [BASE_PATH$5]
13290
- }] }, { type: Configuration$5, decorators: [{
13646
+ args: [BASE_PATH$4]
13647
+ }] }, { type: Configuration$4, decorators: [{
13291
13648
  type: Optional
13292
13649
  }] }] });
13293
13650
 
13294
- const APIS$3 = [GridService];
13651
+ const APIS$2 = [GridService];
13295
13652
 
13296
13653
  /**
13297
13654
  * Grid api
@@ -13385,11 +13742,11 @@ var GridViewDescriptorKindEnum;
13385
13742
  })(GridViewDescriptorKindEnum || (GridViewDescriptorKindEnum = {}));
13386
13743
  ;
13387
13744
 
13388
- let ApiModule$3 = class ApiModule {
13745
+ let ApiModule$2 = class ApiModule {
13389
13746
  static forRoot(configurationFactory) {
13390
13747
  return {
13391
13748
  ngModule: ApiModule,
13392
- providers: [{ provide: Configuration$5, useFactory: configurationFactory }]
13749
+ providers: [{ provide: Configuration$4, useFactory: configurationFactory }]
13393
13750
  };
13394
13751
  }
13395
13752
  constructor(parentModule, http) {
@@ -13405,7 +13762,7 @@ let ApiModule$3 = class ApiModule {
13405
13762
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ApiModule }); }
13406
13763
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule }); }
13407
13764
  };
13408
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule$3, decorators: [{
13765
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule$2, decorators: [{
13409
13766
  type: NgModule,
13410
13767
  args: [{
13411
13768
  imports: [],
@@ -13413,7 +13770,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
13413
13770
  exports: [],
13414
13771
  providers: []
13415
13772
  }]
13416
- }], ctorParameters: () => [{ type: ApiModule$3, decorators: [{
13773
+ }], ctorParameters: () => [{ type: ApiModule$2, decorators: [{
13417
13774
  type: Optional
13418
13775
  }, {
13419
13776
  type: SkipSelf
@@ -15415,7 +15772,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
15415
15772
  * Custom HttpParameterCodec
15416
15773
  * Workaround for https://github.com/angular/angular/issues/18261
15417
15774
  */
15418
- let CustomHttpParameterCodec$4 = class CustomHttpParameterCodec {
15775
+ let CustomHttpParameterCodec$3 = class CustomHttpParameterCodec {
15419
15776
  encodeKey(k) {
15420
15777
  return encodeURIComponent(k);
15421
15778
  }
@@ -15430,15 +15787,15 @@ let CustomHttpParameterCodec$4 = class CustomHttpParameterCodec {
15430
15787
  }
15431
15788
  };
15432
15789
 
15433
- const BASE_PATH$4 = new InjectionToken('basePath');
15434
- const COLLECTION_FORMATS$4 = {
15790
+ const BASE_PATH$3 = new InjectionToken('basePath');
15791
+ const COLLECTION_FORMATS$3 = {
15435
15792
  'csv': ',',
15436
15793
  'tsv': ' ',
15437
15794
  'ssv': ' ',
15438
15795
  'pipes': '|'
15439
15796
  };
15440
15797
 
15441
- let Configuration$4 = class Configuration {
15798
+ let Configuration$3 = class Configuration {
15442
15799
  constructor(configurationParameters = {}) {
15443
15800
  this.apiKeys = configurationParameters.apiKeys;
15444
15801
  this.username = configurationParameters.username;
@@ -15546,7 +15903,7 @@ class TreeService {
15546
15903
  this.httpClient = httpClient;
15547
15904
  this.basePath = 'http://localhost';
15548
15905
  this.defaultHeaders = new HttpHeaders();
15549
- this.configuration = new Configuration$4();
15906
+ this.configuration = new Configuration$3();
15550
15907
  if (configuration) {
15551
15908
  this.configuration = configuration;
15552
15909
  }
@@ -15559,7 +15916,7 @@ class TreeService {
15559
15916
  }
15560
15917
  this.configuration.basePath = basePath;
15561
15918
  }
15562
- this.encoder = this.configuration.encoder || new CustomHttpParameterCodec$4();
15919
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec$3();
15563
15920
  }
15564
15921
  // @ts-ignore
15565
15922
  addToHttpParams(httpParams, value, key) {
@@ -16693,7 +17050,7 @@ class TreeService {
16693
17050
  reportProgress: reportProgress,
16694
17051
  });
16695
17052
  }
16696
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TreeService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH$4, optional: true }, { token: Configuration$4, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
17053
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TreeService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH$3, optional: true }, { token: Configuration$3, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
16697
17054
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TreeService, providedIn: 'root' }); }
16698
17055
  }
16699
17056
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: TreeService, decorators: [{
@@ -16705,8 +17062,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
16705
17062
  type: Optional
16706
17063
  }, {
16707
17064
  type: Inject,
16708
- args: [BASE_PATH$4]
16709
- }] }, { type: Configuration$4, decorators: [{
17065
+ args: [BASE_PATH$3]
17066
+ }] }, { type: Configuration$3, decorators: [{
16710
17067
  type: Optional
16711
17068
  }] }] });
16712
17069
 
@@ -17259,7 +17616,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
17259
17616
  * Custom HttpParameterCodec
17260
17617
  * Workaround for https://github.com/angular/angular/issues/18261
17261
17618
  */
17262
- let CustomHttpParameterCodec$3 = class CustomHttpParameterCodec {
17619
+ let CustomHttpParameterCodec$2 = class CustomHttpParameterCodec {
17263
17620
  encodeKey(k) {
17264
17621
  return encodeURIComponent(k);
17265
17622
  }
@@ -17274,15 +17631,15 @@ let CustomHttpParameterCodec$3 = class CustomHttpParameterCodec {
17274
17631
  }
17275
17632
  };
17276
17633
 
17277
- const BASE_PATH$3 = new InjectionToken('basePath');
17278
- const COLLECTION_FORMATS$3 = {
17634
+ const BASE_PATH$2 = new InjectionToken('basePath');
17635
+ const COLLECTION_FORMATS$2 = {
17279
17636
  'csv': ',',
17280
17637
  'tsv': ' ',
17281
17638
  'ssv': ' ',
17282
17639
  'pipes': '|'
17283
17640
  };
17284
17641
 
17285
- let Configuration$3 = class Configuration {
17642
+ let Configuration$2 = class Configuration {
17286
17643
  constructor(configurationParameters = {}) {
17287
17644
  this.apiKeys = configurationParameters.apiKeys;
17288
17645
  this.username = configurationParameters.username;
@@ -17390,7 +17747,7 @@ class GeoMapService {
17390
17747
  this.httpClient = httpClient;
17391
17748
  this.basePath = 'http://localhost';
17392
17749
  this.defaultHeaders = new HttpHeaders();
17393
- this.configuration = new Configuration$3();
17750
+ this.configuration = new Configuration$2();
17394
17751
  if (configuration) {
17395
17752
  this.configuration = configuration;
17396
17753
  }
@@ -17403,7 +17760,7 @@ class GeoMapService {
17403
17760
  }
17404
17761
  this.configuration.basePath = basePath;
17405
17762
  }
17406
- this.encoder = this.configuration.encoder || new CustomHttpParameterCodec$3();
17763
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec$2();
17407
17764
  }
17408
17765
  // @ts-ignore
17409
17766
  addToHttpParams(httpParams, value, key) {
@@ -17659,7 +18016,7 @@ class GeoMapService {
17659
18016
  reportProgress: reportProgress
17660
18017
  });
17661
18018
  }
17662
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GeoMapService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH$3, optional: true }, { token: Configuration$3, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
18019
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GeoMapService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH$2, optional: true }, { token: Configuration$2, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
17663
18020
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GeoMapService, providedIn: 'root' }); }
17664
18021
  }
17665
18022
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: GeoMapService, decorators: [{
@@ -17671,12 +18028,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
17671
18028
  type: Optional
17672
18029
  }, {
17673
18030
  type: Inject,
17674
- args: [BASE_PATH$3]
17675
- }] }, { type: Configuration$3, decorators: [{
18031
+ args: [BASE_PATH$2]
18032
+ }] }, { type: Configuration$2, decorators: [{
17676
18033
  type: Optional
17677
18034
  }] }] });
17678
18035
 
17679
- const APIS$2 = [GeoMapService];
18036
+ const APIS$1 = [GeoMapService];
17680
18037
 
17681
18038
  /**
17682
18039
  * GeoMap api
@@ -17796,11 +18153,11 @@ var GeoMapTextType;
17796
18153
  GeoMapTextType["HTML"] = "HTML";
17797
18154
  })(GeoMapTextType || (GeoMapTextType = {}));
17798
18155
 
17799
- let ApiModule$2 = class ApiModule {
18156
+ let ApiModule$1 = class ApiModule {
17800
18157
  static forRoot(configurationFactory) {
17801
18158
  return {
17802
18159
  ngModule: ApiModule,
17803
- providers: [{ provide: Configuration$3, useFactory: configurationFactory }]
18160
+ providers: [{ provide: Configuration$2, useFactory: configurationFactory }]
17804
18161
  };
17805
18162
  }
17806
18163
  constructor(parentModule, http) {
@@ -17816,7 +18173,7 @@ let ApiModule$2 = class ApiModule {
17816
18173
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ApiModule }); }
17817
18174
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule }); }
17818
18175
  };
17819
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule$2, decorators: [{
18176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule$1, decorators: [{
17820
18177
  type: NgModule,
17821
18178
  args: [{
17822
18179
  imports: [],
@@ -17824,7 +18181,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
17824
18181
  exports: [],
17825
18182
  providers: []
17826
18183
  }]
17827
- }], ctorParameters: () => [{ type: ApiModule$2, decorators: [{
18184
+ }], ctorParameters: () => [{ type: ApiModule$1, decorators: [{
17828
18185
  type: Optional
17829
18186
  }, {
17830
18187
  type: SkipSelf
@@ -18444,718 +18801,369 @@ class LeafletMap extends AbstractMap {
18444
18801
  x: event.latlng.lng,
18445
18802
  y: event.latlng.lat,
18446
18803
  },
18447
- });
18448
- });
18449
- });
18450
- }
18451
- it.record.addTo(this.map);
18452
- this.editingOverlays.set(it.id, it.record);
18453
- });
18454
- }
18455
- findDatasetBounds() {
18456
- const items = this.items()
18457
- .flatMap((it) => (it.position ? [it.position] : it.route ? it.route.points : []))
18458
- .map((it) => {
18459
- return { x: it.latitude, y: it.longitude };
18460
- });
18461
- if (!items || items.length === 0) {
18462
- return null;
18463
- }
18464
- let southwest = { x: items[0].x, y: items[0].y };
18465
- let northeast = { x: items[0].x, y: items[0].y };
18466
- items.forEach((it) => {
18467
- if (it.x < southwest.x)
18468
- southwest.x = it.x;
18469
- if (it.y < southwest.y)
18470
- southwest.y = it.y;
18471
- if (it.x > northeast.x)
18472
- northeast.x = it.x;
18473
- if (it.y > northeast.y)
18474
- northeast.y = it.y;
18475
- });
18476
- return { a: southwest, b: northeast };
18477
- }
18478
- toBase64() {
18479
- return new Promise((resolve, reject) => {
18480
- setTimeout(() => {
18481
- leafletImage(this.map, (err, canvas) => {
18482
- if (err) {
18483
- console.error('Leaflet image capture error', err);
18484
- reject(err);
18485
- return;
18486
- }
18487
- const ctx = canvas.getContext('2d');
18488
- if (!ctx) {
18489
- reject('No context');
18490
- return;
18491
- }
18492
- this.markers.forEach((marker) => {
18493
- const tooltip = marker.getTooltip();
18494
- if (!tooltip) {
18495
- return;
18496
- }
18497
- const latLng = marker.getLatLng();
18498
- const point = this.map.latLngToContainerPoint(latLng);
18499
- const text = tooltip.getContent();
18500
- // Tooltip szöveg megjelenítése
18501
- ctx.font = 'bold 30px sans-serif';
18502
- ctx.fillStyle = 'black';
18503
- ctx.strokeStyle = 'white';
18504
- ctx.lineWidth = 4;
18505
- ctx.textAlign = 'center';
18506
- ctx.textBaseline = 'bottom';
18507
- ctx.strokeText(text, point.x, point.y + 10); // fehér kontúr
18508
- ctx.fillText(text, point.x, point.y + 10); // fekete szöveg
18509
- });
18510
- resolve(canvas.toDataURL('image/png'));
18511
- });
18512
- }, 300);
18513
- });
18514
- }
18515
- createLabel(group) {
18516
- let label = '';
18517
- group.forEach((item) => {
18518
- label += item._tooltip._content + ', ';
18519
- item._tooltip.permanent = false;
18520
- });
18521
- return label;
18522
- }
18523
- createNumberedIcon(number) {
18524
- const size = 35;
18525
- const scaleFactor = 15;
18526
- const scaledSize = size * scaleFactor;
18527
- const canvas = document.createElement('canvas');
18528
- canvas.width = scaledSize;
18529
- canvas.height = scaledSize;
18530
- canvas.style.width = canvas.style.height = '35px';
18531
- const ctx = canvas.getContext('2d');
18532
- ctx.scale(scaleFactor, scaleFactor);
18533
- ctx.beginPath();
18534
- ctx.arc(size / 2, size / 2, size / 2 - 2, 0, 2 * Math.PI, false);
18535
- ctx.fillStyle = '#0078d4';
18536
- ctx.fill();
18537
- ctx.lineWidth = 2;
18538
- ctx.strokeStyle = '#ffffff';
18539
- ctx.stroke();
18540
- ctx.fillStyle = '#ffffff';
18541
- ctx.font = 'bold 16px sans-serif';
18542
- ctx.textAlign = 'center';
18543
- ctx.textBaseline = 'middle';
18544
- ctx.fillText(number.toString(), size / 2, size / 2);
18545
- return L.icon({
18546
- iconUrl: canvas.toDataURL(),
18547
- iconSize: [size, size],
18548
- iconAnchor: [size / 2, size / 2],
18549
- popupAnchor: [0, -size / 2],
18550
- });
18551
- }
18552
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LeafletMap, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
18553
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: LeafletMap, selector: "leaflet-map", usesInheritance: true, ngImport: i0, template: ` <div id="leaflet"></div>`, isInline: true, styles: ["#leaflet{height:720px}::ng-deep .marker-count{background-color:#0078d4;color:#fff;font-weight:700;border-radius:50%;width:30px;height:30px;line-height:30px;text-align:center;border:2px solid white;box-shadow:0 0 4px #0006}::ng-deep .custom-cluster-icon{pointer-events:auto!important}\n"] }); }
18554
- }
18555
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LeafletMap, decorators: [{
18556
- type: Component,
18557
- args: [{ selector: 'leaflet-map', template: ` <div id="leaflet"></div>`, styles: ["#leaflet{height:720px}::ng-deep .marker-count{background-color:#0078d4;color:#fff;font-weight:700;border-radius:50%;width:30px;height:30px;line-height:30px;text-align:center;border:2px solid white;box-shadow:0 0 4px #0006}::ng-deep .custom-cluster-icon{pointer-events:auto!important}\n"] }]
18558
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }] });
18559
- function getIcon(color) {
18560
- const size = 12;
18561
- const scaleFactor = 12;
18562
- const scaledSize = size * scaleFactor;
18563
- const canvas = document.createElement('canvas');
18564
- canvas.width = scaledSize;
18565
- canvas.height = scaledSize;
18566
- canvas.style.width = canvas.style.height = `${size}px`;
18567
- const ctx = canvas.getContext('2d');
18568
- ctx.scale(scaleFactor, scaleFactor);
18569
- ctx.beginPath();
18570
- ctx.arc(size / 2, size / 2, size / 2, 0, 2 * Math.PI, false);
18571
- ctx.fillStyle = color;
18572
- ctx.fill();
18573
- return L.icon({
18574
- iconUrl: canvas.toDataURL(),
18575
- iconSize: [size, size],
18576
- iconAnchor: [size / 2, size / 2],
18577
- popupAnchor: [0, -size / 2],
18578
- });
18579
- }
18580
-
18581
- var MapEngine;
18582
- (function (MapEngine) {
18583
- MapEngine["GOOGLE"] = "GOOGLE";
18584
- MapEngine["LEAFLET"] = "LEAFLET";
18585
- })(MapEngine || (MapEngine = {}));
18586
- const MAP_ENGINE = new InjectionToken('MAP_ENGINE');
18587
- const itemEq = (a, b) => {
18588
- const positions = new Set(a.map((it) => it.position));
18589
- b.forEach((it) => positions.delete(it.position));
18590
- return a.length === b.length && positions.size === 0;
18591
- };
18592
- class SmartMapComponent {
18593
- constructor(mapEngine, api) {
18594
- this.mapEngine = mapEngine;
18595
- this.api = api;
18596
- this.MapEngine = MapEngine;
18597
- this.model = signal(undefined);
18598
- this.items = computed(() => {
18599
- const model = this.model();
18600
- return model?.layers.flatMap((l) => l.items ?? []) ?? [];
18601
- });
18602
- this.editingSession = computed(() => this.model()?.viewState?.editingSession);
18603
- this.selection = computed(() => new Set(this.items()
18604
- .filter((it) => !!it.selected)
18605
- .map((it) => it.id)
18606
- .values()));
18607
- }
18608
- ngOnInit() { }
18609
- ngAfterViewInit() {
18610
- this.load();
18611
- }
18612
- async load() {
18613
- const model = await lastValueFrom(this.api.load(this.uuid, this.identifier));
18614
- if (!model.viewport) {
18615
- throw new Error('GeoMapModel contains no viewport!');
18616
- }
18617
- this.model.update(() => model);
18618
- }
18619
- async move(viewport) {
18620
- this.model.update((it) => {
18621
- console.log('model update is running!');
18622
- if (it) {
18623
- it.viewport = viewport;
18624
- }
18625
- return it;
18626
- });
18627
- const change = await lastValueFrom(this.api.move(this.uuid, this.identifier, viewport));
18628
- this.handleChange(change);
18629
- }
18630
- async update(mapState) {
18631
- this.model.update((it) => {
18632
- if (it) {
18633
- it.viewState = mapState;
18634
- }
18635
- return it;
18636
- });
18637
- const change = await lastValueFrom(this.api.update(this.uuid, this.identifier, mapState));
18638
- this.handleChange(change);
18639
- }
18640
- handleChange(change) {
18641
- if (!change.items) {
18642
- return;
18643
- }
18644
- this.model.update((it) => {
18645
- const layersById = new Map();
18646
- if (!it) {
18647
- return it;
18648
- }
18649
- it.layers.forEach((layer) => layersById.set(layer.code, layer));
18650
- for (const layerChange of change.items) {
18651
- const layerId = layerChange.code;
18652
- const toAdd = layerChange.toAdd;
18653
- layersById.set(layerId, {
18654
- code: layerId,
18655
- items: toAdd,
18656
- });
18657
- }
18658
- it.viewState.editingSession = change.editingSession;
18659
- return {
18660
- ...it,
18661
- layers: [...layersById.values()],
18662
- viewState: it.viewState,
18663
- };
18804
+ });
18805
+ });
18806
+ });
18807
+ }
18808
+ it.record.addTo(this.map);
18809
+ this.editingOverlays.set(it.id, it.record);
18664
18810
  });
18665
18811
  }
18666
- handleMapClick(position) {
18667
- let viewState = this.model()?.viewState;
18668
- const operationMode = this.model()?.viewState?.operationMode ?? GeoMapOperationMode.ACTION;
18669
- switch (operationMode) {
18670
- case GeoMapOperationMode.ACTION:
18671
- // TODO: Fire action for layer, if applicable (maybe only on double click).
18672
- break;
18673
- case GeoMapOperationMode.SELECTION:
18674
- // no-op, can't select empty space.
18675
- break;
18676
- }
18677
- if (viewState.editingSession &&
18678
- Object.keys(viewState.editingSession?.pendingItems).length > 0) {
18679
- const pendingItems = viewState.editingSession.pendingItems;
18680
- const firstKey = Object.keys(pendingItems)[0];
18681
- const pendingItem = pendingItems[firstKey];
18682
- if (pendingItem && pendingItem.length > 0) {
18683
- const editingItem = pendingItem[0];
18684
- if (editingItem.kind === GeoMapItemKind.MARKER) {
18685
- editingItem.position = position;
18686
- }
18687
- else {
18688
- editingItem.route.points.push(position);
18689
- }
18690
- }
18691
- this.update(viewState);
18812
+ findDatasetBounds() {
18813
+ const items = this.items()
18814
+ .flatMap((it) => (it.position ? [it.position] : it.route ? it.route.points : []))
18815
+ .map((it) => {
18816
+ return { x: it.latitude, y: it.longitude };
18817
+ });
18818
+ if (!items || items.length === 0) {
18819
+ return null;
18692
18820
  }
18821
+ let southwest = { x: items[0].x, y: items[0].y };
18822
+ let northeast = { x: items[0].x, y: items[0].y };
18823
+ items.forEach((it) => {
18824
+ if (it.x < southwest.x)
18825
+ southwest.x = it.x;
18826
+ if (it.y < southwest.y)
18827
+ southwest.y = it.y;
18828
+ if (it.x > northeast.x)
18829
+ northeast.x = it.x;
18830
+ if (it.y > northeast.y)
18831
+ northeast.y = it.y;
18832
+ });
18833
+ return { a: southwest, b: northeast };
18693
18834
  }
18694
- handleItemClick(id) {
18695
- const operationMode = this.model()?.viewState?.operationMode ?? GeoMapOperationMode.ACTION;
18696
- let targetItem = this.items().find((it) => id === it.id);
18697
- if (!targetItem) {
18698
- console.warn('Selection item is seemingly missing from known items: ', id);
18699
- return;
18700
- }
18701
- switch (operationMode) {
18702
- case GeoMapOperationMode.ACTION:
18703
- // TODO: fire action!
18704
- break;
18705
- case GeoMapOperationMode.SELECTION:
18706
- lastValueFrom(this.api.interact(this.uuid, this.identifier, {
18707
- operationMode,
18708
- targetItem,
18709
- targetLayer: '',
18710
- inverse: this.selection().has(id),
18711
- })).then((change) => {
18712
- if (!this.viewContextService) {
18713
- console.warn('Smart Map has no ViewContext Service set up!');
18714
- return null;
18835
+ toBase64() {
18836
+ return new Promise((resolve, reject) => {
18837
+ setTimeout(() => {
18838
+ leafletImage(this.map, (err, canvas) => {
18839
+ if (err) {
18840
+ console.error('Leaflet image capture error', err);
18841
+ reject(err);
18842
+ return;
18715
18843
  }
18716
- else {
18717
- return this.viewContextService.handlePerformActionResponse(change);
18844
+ const ctx = canvas.getContext('2d');
18845
+ if (!ctx) {
18846
+ reject('No context');
18847
+ return;
18718
18848
  }
18719
- }, (err) => {
18720
- console.warn('Could not submit selection change! ', err);
18849
+ this.markers.forEach((marker) => {
18850
+ const tooltip = marker.getTooltip();
18851
+ if (!tooltip) {
18852
+ return;
18853
+ }
18854
+ const latLng = marker.getLatLng();
18855
+ const point = this.map.latLngToContainerPoint(latLng);
18856
+ const text = tooltip.getContent();
18857
+ // Tooltip szöveg megjelenítése
18858
+ ctx.font = 'bold 30px sans-serif';
18859
+ ctx.fillStyle = 'black';
18860
+ ctx.strokeStyle = 'white';
18861
+ ctx.lineWidth = 4;
18862
+ ctx.textAlign = 'center';
18863
+ ctx.textBaseline = 'bottom';
18864
+ ctx.strokeText(text, point.x, point.y + 10); // fehér kontúr
18865
+ ctx.fillText(text, point.x, point.y + 10); // fekete szöveg
18866
+ });
18867
+ resolve(canvas.toDataURL('image/png'));
18721
18868
  });
18722
- break;
18723
- }
18724
- }
18725
- handleEditingItemClick(id, event) {
18726
- let viewState = this.model()?.viewState;
18727
- const pendingValues = viewState?.editingSession?.pendingItems;
18728
- const firstKey = Object.keys(pendingValues)[0];
18729
- const pendingItems = pendingValues[firstKey];
18730
- let targetItem = pendingItems[0];
18731
- if (!targetItem) {
18732
- console.warn('Selection item is seemingly missing from known items: ', id);
18733
- return;
18734
- }
18735
- if (targetItem.kind === GeoMapItemKind.MARKER) {
18736
- targetItem.position = undefined;
18737
- this.update(viewState);
18738
- }
18739
- else {
18740
- const points = targetItem.route.points;
18741
- const index = points.findIndex((point) => point.latitude === event.coord.y && point.longitude === event.coord.x);
18742
- if (index !== -1) {
18743
- points.splice(index, 1);
18744
- }
18745
- }
18746
- this.update(viewState);
18869
+ }, 300);
18870
+ });
18747
18871
  }
18748
- handleEditingItemDrag(id, event) {
18749
- let viewState = this.model()?.viewState;
18750
- const pendingValues = viewState?.editingSession?.pendingItems;
18751
- const firstKey = Object.keys(pendingValues)[0];
18752
- const pendingItems = pendingValues[firstKey];
18753
- let targetItem = pendingItems[0];
18754
- if (!targetItem) {
18755
- console.warn('Selection item is seemingly missing from known items: ', id);
18756
- return;
18757
- }
18758
- if (targetItem.kind === GeoMapItemKind.MARKER) {
18759
- targetItem.position.latitude = event.dragTo.y;
18760
- targetItem.position.longitude = event.dragTo.x;
18761
- }
18762
- else {
18763
- const points = targetItem.route.points;
18764
- const index = points.findIndex((point) => point.latitude === event.startPosition.y && point.longitude === event.startPosition.x);
18765
- if (index !== -1) {
18766
- points[index].latitude = event.dragTo.y;
18767
- points[index].longitude = event.dragTo.x;
18768
- }
18769
- targetItem.route.points = points;
18770
- }
18771
- this.update(viewState);
18872
+ createLabel(group) {
18873
+ let label = '';
18874
+ group.forEach((item) => {
18875
+ label += item._tooltip._content + ', ';
18876
+ item._tooltip.permanent = false;
18877
+ });
18878
+ return label;
18772
18879
  }
18773
- toBase64() {
18774
- return this.mapComponent.toBase64();
18880
+ createNumberedIcon(number) {
18881
+ const size = 35;
18882
+ const scaleFactor = 15;
18883
+ const scaledSize = size * scaleFactor;
18884
+ const canvas = document.createElement('canvas');
18885
+ canvas.width = scaledSize;
18886
+ canvas.height = scaledSize;
18887
+ canvas.style.width = canvas.style.height = '35px';
18888
+ const ctx = canvas.getContext('2d');
18889
+ ctx.scale(scaleFactor, scaleFactor);
18890
+ ctx.beginPath();
18891
+ ctx.arc(size / 2, size / 2, size / 2 - 2, 0, 2 * Math.PI, false);
18892
+ ctx.fillStyle = '#0078d4';
18893
+ ctx.fill();
18894
+ ctx.lineWidth = 2;
18895
+ ctx.strokeStyle = '#ffffff';
18896
+ ctx.stroke();
18897
+ ctx.fillStyle = '#ffffff';
18898
+ ctx.font = 'bold 16px sans-serif';
18899
+ ctx.textAlign = 'center';
18900
+ ctx.textBaseline = 'middle';
18901
+ ctx.fillText(number.toString(), size / 2, size / 2);
18902
+ return L.icon({
18903
+ iconUrl: canvas.toDataURL(),
18904
+ iconSize: [size, size],
18905
+ iconAnchor: [size / 2, size / 2],
18906
+ popupAnchor: [0, -size / 2],
18907
+ });
18775
18908
  }
18776
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapComponent, deps: [{ token: MAP_ENGINE }, { token: GeoMapService }], target: i0.ɵɵFactoryTarget.Component }); }
18777
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartMapComponent, selector: "smart-map", inputs: { uuid: "uuid", identifier: "identifier", parent: "parent" }, viewQueries: [{ propertyName: "mapComponent", first: true, predicate: ["mapComponent"], descendants: true }], ngImport: i0, template: "@if (model()) { @if (mapEngine === MapEngine.GOOGLE) {\r\n<google-map\r\n #mapComponent\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [style]=\"{ width: '100%', height: '320px' }\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n>\r\n</google-map>\r\n} @else if (mapEngine === MapEngine.LEAFLET) {\r\n<leaflet-map\r\n #mapComponent\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [editingSession]=\"editingSession()\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n (onEditingOverlayDrag)=\"handleEditingItemDrag($event.itemId, $event)\"\r\n>\r\n</leaflet-map>\r\n} @else {\r\n<p>\r\n <strong>Not recognised map engine: [ {{ mapEngine }} ]</strong>\r\n</p>\r\n<p>Please provide a valid choice of map engine!</p>\r\n} }\r\n", styles: [""], dependencies: [{ kind: "component", type: GoogleMap, selector: "google-map", inputs: ["style", "styleClass"], outputs: ["onOverlayDblClick", "onOverlayDragStart", "onOverlayDrag", "onOverlayDragEnd", "onMapReady"] }, { kind: "component", type: LeafletMap, selector: "leaflet-map" }] }); }
18909
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LeafletMap, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
18910
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: LeafletMap, selector: "leaflet-map", usesInheritance: true, ngImport: i0, template: ` <div id="leaflet"></div>`, isInline: true, styles: ["#leaflet{height:720px}::ng-deep .marker-count{background-color:#0078d4;color:#fff;font-weight:700;border-radius:50%;width:30px;height:30px;line-height:30px;text-align:center;border:2px solid white;box-shadow:0 0 4px #0006}::ng-deep .custom-cluster-icon{pointer-events:auto!important}\n"] }); }
18778
18911
  }
18779
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapComponent, decorators: [{
18912
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LeafletMap, decorators: [{
18780
18913
  type: Component,
18781
- args: [{ selector: 'smart-map', template: "@if (model()) { @if (mapEngine === MapEngine.GOOGLE) {\r\n<google-map\r\n #mapComponent\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [style]=\"{ width: '100%', height: '320px' }\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n>\r\n</google-map>\r\n} @else if (mapEngine === MapEngine.LEAFLET) {\r\n<leaflet-map\r\n #mapComponent\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [editingSession]=\"editingSession()\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n (onEditingOverlayDrag)=\"handleEditingItemDrag($event.itemId, $event)\"\r\n>\r\n</leaflet-map>\r\n} @else {\r\n<p>\r\n <strong>Not recognised map engine: [ {{ mapEngine }} ]</strong>\r\n</p>\r\n<p>Please provide a valid choice of map engine!</p>\r\n} }\r\n" }]
18782
- }], ctorParameters: () => [{ type: MapEngine, decorators: [{
18783
- type: Inject,
18784
- args: [MAP_ENGINE]
18785
- }] }, { type: GeoMapService }], propDecorators: { uuid: [{
18786
- type: Input
18787
- }], identifier: [{
18788
- type: Input
18789
- }], parent: [{
18790
- type: Input
18791
- }], mapComponent: [{
18792
- type: ViewChild,
18793
- args: ['mapComponent']
18794
- }] } });
18795
-
18796
- class SmartMapModule {
18797
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
18798
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, declarations: [SmartMapComponent, GoogleMap, LeafletMap], imports: [CommonModule, BrowserModule], exports: [SmartMapComponent, GoogleMap, LeafletMap] }); }
18799
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, providers: [{ provide: MAP_ENGINE, useValue: MapEngine.GOOGLE }], imports: [CommonModule, BrowserModule] }); }
18800
- }
18801
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, decorators: [{
18802
- type: NgModule,
18803
- args: [{
18804
- declarations: [SmartMapComponent, GoogleMap, LeafletMap],
18805
- imports: [CommonModule, BrowserModule],
18806
- providers: [{ provide: MAP_ENGINE, useValue: MapEngine.GOOGLE }],
18807
- exports: [SmartMapComponent, GoogleMap, LeafletMap],
18808
- }]
18809
- }] });
18810
-
18811
- /**
18812
- * Custom HttpParameterCodec
18813
- * Workaround for https://github.com/angular/angular/issues/18261
18814
- */
18815
- let CustomHttpParameterCodec$2 = class CustomHttpParameterCodec {
18816
- encodeKey(k) {
18817
- return encodeURIComponent(k);
18818
- }
18819
- encodeValue(v) {
18820
- return encodeURIComponent(v);
18821
- }
18822
- decodeKey(k) {
18823
- return decodeURIComponent(k);
18824
- }
18825
- decodeValue(v) {
18826
- return decodeURIComponent(v);
18827
- }
18828
- };
18914
+ args: [{ selector: 'leaflet-map', template: ` <div id="leaflet"></div>`, styles: ["#leaflet{height:720px}::ng-deep .marker-count{background-color:#0078d4;color:#fff;font-weight:700;border-radius:50%;width:30px;height:30px;line-height:30px;text-align:center;border:2px solid white;box-shadow:0 0 4px #0006}::ng-deep .custom-cluster-icon{pointer-events:auto!important}\n"] }]
18915
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }] });
18916
+ function getIcon(color) {
18917
+ const size = 12;
18918
+ const scaleFactor = 12;
18919
+ const scaledSize = size * scaleFactor;
18920
+ const canvas = document.createElement('canvas');
18921
+ canvas.width = scaledSize;
18922
+ canvas.height = scaledSize;
18923
+ canvas.style.width = canvas.style.height = `${size}px`;
18924
+ const ctx = canvas.getContext('2d');
18925
+ ctx.scale(scaleFactor, scaleFactor);
18926
+ ctx.beginPath();
18927
+ ctx.arc(size / 2, size / 2, size / 2, 0, 2 * Math.PI, false);
18928
+ ctx.fillStyle = color;
18929
+ ctx.fill();
18930
+ return L.icon({
18931
+ iconUrl: canvas.toDataURL(),
18932
+ iconSize: [size, size],
18933
+ iconAnchor: [size / 2, size / 2],
18934
+ popupAnchor: [0, -size / 2],
18935
+ });
18936
+ }
18829
18937
 
18830
- const BASE_PATH$2 = new InjectionToken('basePath');
18831
- const COLLECTION_FORMATS$2 = {
18832
- 'csv': ',',
18833
- 'tsv': ' ',
18834
- 'ssv': ' ',
18835
- 'pipes': '|'
18938
+ var MapEngine;
18939
+ (function (MapEngine) {
18940
+ MapEngine["GOOGLE"] = "GOOGLE";
18941
+ MapEngine["LEAFLET"] = "LEAFLET";
18942
+ })(MapEngine || (MapEngine = {}));
18943
+ const MAP_ENGINE = new InjectionToken('MAP_ENGINE');
18944
+ const itemEq = (a, b) => {
18945
+ const positions = new Set(a.map((it) => it.position));
18946
+ b.forEach((it) => positions.delete(it.position));
18947
+ return a.length === b.length && positions.size === 0;
18836
18948
  };
18837
-
18838
- let Configuration$2 = class Configuration {
18839
- constructor(configurationParameters = {}) {
18840
- this.apiKeys = configurationParameters.apiKeys;
18841
- this.username = configurationParameters.username;
18842
- this.password = configurationParameters.password;
18843
- this.accessToken = configurationParameters.accessToken;
18844
- this.basePath = configurationParameters.basePath;
18845
- this.withCredentials = configurationParameters.withCredentials;
18846
- this.encoder = configurationParameters.encoder;
18847
- if (configurationParameters.encodeParam) {
18848
- this.encodeParam = configurationParameters.encodeParam;
18849
- }
18850
- else {
18851
- this.encodeParam = param => this.defaultEncodeParam(param);
18852
- }
18853
- if (configurationParameters.credentials) {
18854
- this.credentials = configurationParameters.credentials;
18855
- }
18856
- else {
18857
- this.credentials = {};
18858
- }
18949
+ class SmartMapComponent {
18950
+ constructor(mapEngine, api) {
18951
+ this.mapEngine = mapEngine;
18952
+ this.api = api;
18953
+ this.MapEngine = MapEngine;
18954
+ this.model = signal(undefined);
18955
+ this.items = computed(() => {
18956
+ const model = this.model();
18957
+ return model?.layers.flatMap((l) => l.items ?? []) ?? [];
18958
+ });
18959
+ this.editingSession = computed(() => this.model()?.viewState?.editingSession);
18960
+ this.selection = computed(() => new Set(this.items()
18961
+ .filter((it) => !!it.selected)
18962
+ .map((it) => it.id)
18963
+ .values()));
18859
18964
  }
18860
- /**
18861
- * Select the correct content-type to use for a request.
18862
- * Uses {@link Configuration#isJsonMime} to determine the correct content-type.
18863
- * If no content type is found return the first found type if the contentTypes is not empty
18864
- * @param contentTypes - the array of content types that are available for selection
18865
- * @returns the selected content-type or <code>undefined</code> if no selection could be made.
18866
- */
18867
- selectHeaderContentType(contentTypes) {
18868
- if (contentTypes.length === 0) {
18869
- return undefined;
18870
- }
18871
- const type = contentTypes.find((x) => this.isJsonMime(x));
18872
- if (type === undefined) {
18873
- return contentTypes[0];
18874
- }
18875
- return type;
18965
+ ngOnInit() { }
18966
+ ngAfterViewInit() {
18967
+ this.load();
18876
18968
  }
18877
- /**
18878
- * Select the correct accept content-type to use for a request.
18879
- * Uses {@link Configuration#isJsonMime} to determine the correct accept content-type.
18880
- * If no content type is found return the first found type if the contentTypes is not empty
18881
- * @param accepts - the array of content types that are available for selection.
18882
- * @returns the selected content-type or <code>undefined</code> if no selection could be made.
18883
- */
18884
- selectHeaderAccept(accepts) {
18885
- if (accepts.length === 0) {
18886
- return undefined;
18887
- }
18888
- const type = accepts.find((x) => this.isJsonMime(x));
18889
- if (type === undefined) {
18890
- return accepts[0];
18969
+ async load() {
18970
+ const model = await lastValueFrom(this.api.load(this.uuid, this.identifier));
18971
+ if (!model.viewport) {
18972
+ throw new Error('GeoMapModel contains no viewport!');
18891
18973
  }
18892
- return type;
18893
- }
18894
- /**
18895
- * Check if the given MIME is a JSON MIME.
18896
- * JSON MIME examples:
18897
- * application/json
18898
- * application/json; charset=UTF8
18899
- * APPLICATION/JSON
18900
- * application/vnd.company+json
18901
- * @param mime - MIME (Multipurpose Internet Mail Extensions)
18902
- * @return True if the given MIME is JSON, false otherwise.
18903
- */
18904
- isJsonMime(mime) {
18905
- const jsonMime = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
18906
- return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
18974
+ this.model.update(() => model);
18907
18975
  }
18908
- lookupCredential(key) {
18909
- const value = this.credentials[key];
18910
- return typeof value === 'function'
18911
- ? value()
18912
- : value;
18976
+ async move(viewport) {
18977
+ this.model.update((it) => {
18978
+ console.log('model update is running!');
18979
+ if (it) {
18980
+ it.viewport = viewport;
18981
+ }
18982
+ return it;
18983
+ });
18984
+ const change = await lastValueFrom(this.api.move(this.uuid, this.identifier, viewport));
18985
+ this.handleChange(change);
18913
18986
  }
18914
- defaultEncodeParam(param) {
18915
- // This implementation exists as fallback for missing configuration
18916
- // and for backwards compatibility to older typescript-angular generator versions.
18917
- // It only works for the 'simple' parameter style.
18918
- // Date-handling only works for the 'date-time' format.
18919
- // All other styles and Date-formats are probably handled incorrectly.
18920
- //
18921
- // But: if that's all you need (i.e.: the most common use-case): no need for customization!
18922
- const value = param.dataFormat === 'date-time' && param.value instanceof Date
18923
- ? param.value.toISOString()
18924
- : param.value;
18925
- return encodeURIComponent(String(value));
18987
+ async update(mapState) {
18988
+ this.model.update((it) => {
18989
+ if (it) {
18990
+ it.viewState = mapState;
18991
+ }
18992
+ return it;
18993
+ });
18994
+ const change = await lastValueFrom(this.api.update(this.uuid, this.identifier, mapState));
18995
+ this.handleChange(change);
18926
18996
  }
18927
- };
18928
-
18929
- /**
18930
- * Form layout definition
18931
- * Contains form layout definition objects.
18932
- *
18933
- * The version of the OpenAPI document: 1.0.0
18934
- * Contact: info@it4all.hu
18935
- *
18936
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
18937
- * https://openapi-generator.tech
18938
- * Do not edit the class manually.
18939
- */
18940
- /* tslint:disable:no-unused-variable member-ordering */
18941
- class DefaultService {
18942
- constructor(httpClient, basePath, configuration) {
18943
- this.httpClient = httpClient;
18944
- this.basePath = 'http://localhost';
18945
- this.defaultHeaders = new HttpHeaders();
18946
- this.configuration = new Configuration$2();
18947
- if (configuration) {
18948
- this.configuration = configuration;
18997
+ handleChange(change) {
18998
+ if (!change.items) {
18999
+ return;
18949
19000
  }
18950
- if (typeof this.configuration.basePath !== 'string') {
18951
- if (Array.isArray(basePath) && basePath.length > 0) {
18952
- basePath = basePath[0];
19001
+ this.model.update((it) => {
19002
+ const layersById = new Map();
19003
+ if (!it) {
19004
+ return it;
18953
19005
  }
18954
- if (typeof basePath !== 'string') {
18955
- basePath = this.basePath;
19006
+ it.layers.forEach((layer) => layersById.set(layer.code, layer));
19007
+ for (const layerChange of change.items) {
19008
+ const layerId = layerChange.code;
19009
+ const toAdd = layerChange.toAdd;
19010
+ layersById.set(layerId, {
19011
+ code: layerId,
19012
+ items: toAdd,
19013
+ });
18956
19014
  }
18957
- this.configuration.basePath = basePath;
19015
+ it.viewState.editingSession = change.editingSession;
19016
+ return {
19017
+ ...it,
19018
+ layers: [...layersById.values()],
19019
+ viewState: it.viewState,
19020
+ };
19021
+ });
19022
+ }
19023
+ handleMapClick(position) {
19024
+ let viewState = this.model()?.viewState;
19025
+ const operationMode = this.model()?.viewState?.operationMode ?? GeoMapOperationMode.ACTION;
19026
+ switch (operationMode) {
19027
+ case GeoMapOperationMode.ACTION:
19028
+ // TODO: Fire action for layer, if applicable (maybe only on double click).
19029
+ break;
19030
+ case GeoMapOperationMode.SELECTION:
19031
+ // no-op, can't select empty space.
19032
+ break;
19033
+ }
19034
+ if (viewState.editingSession &&
19035
+ Object.keys(viewState.editingSession?.pendingItems).length > 0) {
19036
+ const pendingItems = viewState.editingSession.pendingItems;
19037
+ const firstKey = Object.keys(pendingItems)[0];
19038
+ const pendingItem = pendingItems[firstKey];
19039
+ if (pendingItem && pendingItem.length > 0) {
19040
+ const editingItem = pendingItem[0];
19041
+ if (editingItem.kind === GeoMapItemKind.MARKER) {
19042
+ editingItem.position = position;
19043
+ }
19044
+ else {
19045
+ editingItem.route.points.push(position);
19046
+ }
19047
+ }
19048
+ this.update(viewState);
18958
19049
  }
18959
- this.encoder = this.configuration.encoder || new CustomHttpParameterCodec$2();
18960
19050
  }
18961
- // @ts-ignore
18962
- addToHttpParams(httpParams, value, key) {
18963
- if (typeof value === "object" && value instanceof Date === false) {
18964
- httpParams = this.addToHttpParamsRecursive(httpParams, value);
19051
+ handleItemClick(id) {
19052
+ const operationMode = this.model()?.viewState?.operationMode ?? GeoMapOperationMode.ACTION;
19053
+ let targetItem = this.items().find((it) => id === it.id);
19054
+ if (!targetItem) {
19055
+ console.warn('Selection item is seemingly missing from known items: ', id);
19056
+ return;
18965
19057
  }
18966
- else {
18967
- httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
19058
+ switch (operationMode) {
19059
+ case GeoMapOperationMode.ACTION:
19060
+ // TODO: fire action!
19061
+ break;
19062
+ case GeoMapOperationMode.SELECTION:
19063
+ lastValueFrom(this.api.interact(this.uuid, this.identifier, {
19064
+ operationMode,
19065
+ targetItem,
19066
+ targetLayer: '',
19067
+ inverse: this.selection().has(id),
19068
+ })).then((change) => {
19069
+ if (!this.viewContextService) {
19070
+ console.warn('Smart Map has no ViewContext Service set up!');
19071
+ return null;
19072
+ }
19073
+ else {
19074
+ return this.viewContextService.handlePerformActionResponse(change);
19075
+ }
19076
+ }, (err) => {
19077
+ console.warn('Could not submit selection change! ', err);
19078
+ });
19079
+ break;
18968
19080
  }
18969
- return httpParams;
18970
19081
  }
18971
- addToHttpParamsRecursive(httpParams, value, key) {
18972
- if (value == null) {
18973
- return httpParams;
18974
- }
18975
- if (typeof value === "object") {
18976
- if (Array.isArray(value)) {
18977
- value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
18978
- }
18979
- else if (value instanceof Date) {
18980
- if (key != null) {
18981
- httpParams = httpParams.append(key, value.toISOString().substr(0, 10));
18982
- }
18983
- else {
18984
- throw Error("key may not be null if value is Date");
18985
- }
18986
- }
18987
- else {
18988
- Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
18989
- }
19082
+ handleEditingItemClick(id, event) {
19083
+ let viewState = this.model()?.viewState;
19084
+ const pendingValues = viewState?.editingSession?.pendingItems;
19085
+ const firstKey = Object.keys(pendingValues)[0];
19086
+ const pendingItems = pendingValues[firstKey];
19087
+ let targetItem = pendingItems[0];
19088
+ if (!targetItem) {
19089
+ console.warn('Selection item is seemingly missing from known items: ', id);
19090
+ return;
18990
19091
  }
18991
- else if (key != null) {
18992
- httpParams = httpParams.append(key, value);
19092
+ if (targetItem.kind === GeoMapItemKind.MARKER) {
19093
+ targetItem.position = undefined;
19094
+ this.update(viewState);
18993
19095
  }
18994
19096
  else {
18995
- throw Error("key may not be null if value is not object or array");
19097
+ const points = targetItem.route.points;
19098
+ const index = points.findIndex((point) => point.latitude === event.coord.y && point.longitude === event.coord.x);
19099
+ if (index !== -1) {
19100
+ points.splice(index, 1);
19101
+ }
18996
19102
  }
18997
- return httpParams;
19103
+ this.update(viewState);
18998
19104
  }
18999
- nopePost(observe = 'body', reportProgress = false, options) {
19000
- let localVarHeaders = this.defaultHeaders;
19001
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
19002
- if (localVarHttpHeaderAcceptSelected === undefined) {
19003
- // to determine the Accept header
19004
- const httpHeaderAccepts = [];
19005
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
19006
- }
19007
- if (localVarHttpHeaderAcceptSelected !== undefined) {
19008
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
19105
+ handleEditingItemDrag(id, event) {
19106
+ let viewState = this.model()?.viewState;
19107
+ const pendingValues = viewState?.editingSession?.pendingItems;
19108
+ const firstKey = Object.keys(pendingValues)[0];
19109
+ const pendingItems = pendingValues[firstKey];
19110
+ let targetItem = pendingItems[0];
19111
+ if (!targetItem) {
19112
+ console.warn('Selection item is seemingly missing from known items: ', id);
19113
+ return;
19009
19114
  }
19010
- let localVarHttpContext = options && options.context;
19011
- if (localVarHttpContext === undefined) {
19012
- localVarHttpContext = new HttpContext();
19115
+ if (targetItem.kind === GeoMapItemKind.MARKER) {
19116
+ targetItem.position.latitude = event.dragTo.y;
19117
+ targetItem.position.longitude = event.dragTo.x;
19013
19118
  }
19014
- let responseType_ = 'json';
19015
- if (localVarHttpHeaderAcceptSelected) {
19016
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
19017
- responseType_ = 'text';
19018
- }
19019
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
19020
- responseType_ = 'json';
19021
- }
19022
- else {
19023
- responseType_ = 'blob';
19119
+ else {
19120
+ const points = targetItem.route.points;
19121
+ const index = points.findIndex((point) => point.latitude === event.startPosition.y && point.longitude === event.startPosition.x);
19122
+ if (index !== -1) {
19123
+ points[index].latitude = event.dragTo.y;
19124
+ points[index].longitude = event.dragTo.x;
19024
19125
  }
19126
+ targetItem.route.points = points;
19025
19127
  }
19026
- let localVarPath = `/nope`;
19027
- return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
19028
- context: localVarHttpContext,
19029
- responseType: responseType_,
19030
- withCredentials: this.configuration.withCredentials,
19031
- headers: localVarHeaders,
19032
- observe: observe,
19033
- reportProgress: reportProgress
19034
- });
19128
+ this.update(viewState);
19035
19129
  }
19036
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DefaultService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH$2, optional: true }, { token: Configuration$2, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
19037
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DefaultService, providedIn: 'root' }); }
19130
+ toBase64() {
19131
+ return this.mapComponent.toBase64();
19132
+ }
19133
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapComponent, deps: [{ token: MAP_ENGINE }, { token: GeoMapService }], target: i0.ɵɵFactoryTarget.Component }); }
19134
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartMapComponent, selector: "smart-map", inputs: { uuid: "uuid", identifier: "identifier", parent: "parent" }, viewQueries: [{ propertyName: "mapComponent", first: true, predicate: ["mapComponent"], descendants: true }], ngImport: i0, template: "@if (model()) { @if (mapEngine === MapEngine.GOOGLE) {\r\n<google-map\r\n #mapComponent\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [style]=\"{ width: '100%', height: '320px' }\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n>\r\n</google-map>\r\n} @else if (mapEngine === MapEngine.LEAFLET) {\r\n<leaflet-map\r\n #mapComponent\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [editingSession]=\"editingSession()\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n (onEditingOverlayDrag)=\"handleEditingItemDrag($event.itemId, $event)\"\r\n>\r\n</leaflet-map>\r\n} @else {\r\n<p>\r\n <strong>Not recognised map engine: [ {{ mapEngine }} ]</strong>\r\n</p>\r\n<p>Please provide a valid choice of map engine!</p>\r\n} }\r\n", styles: [""], dependencies: [{ kind: "component", type: GoogleMap, selector: "google-map", inputs: ["style", "styleClass"], outputs: ["onOverlayDblClick", "onOverlayDragStart", "onOverlayDrag", "onOverlayDragEnd", "onMapReady"] }, { kind: "component", type: LeafletMap, selector: "leaflet-map" }] }); }
19038
19135
  }
19039
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: DefaultService, decorators: [{
19040
- type: Injectable,
19041
- args: [{
19042
- providedIn: 'root'
19043
- }]
19044
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
19045
- type: Optional
19046
- }, {
19136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapComponent, decorators: [{
19137
+ type: Component,
19138
+ args: [{ selector: 'smart-map', template: "@if (model()) { @if (mapEngine === MapEngine.GOOGLE) {\r\n<google-map\r\n #mapComponent\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [style]=\"{ width: '100%', height: '320px' }\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n>\r\n</google-map>\r\n} @else if (mapEngine === MapEngine.LEAFLET) {\r\n<leaflet-map\r\n #mapComponent\r\n [model]=\"model()!\"\r\n [items]=\"items()\"\r\n [editingSession]=\"editingSession()\"\r\n (onMapDragEnd)=\"move($event.viewport)\"\r\n (onZoomChanged)=\"move($event.viewport)\"\r\n (onMapClick)=\"handleMapClick($event.coordinates)\"\r\n (onOverlayClick)=\"handleItemClick($event.itemId)\"\r\n (onEditingOverlayClick)=\"handleEditingItemClick($event.itemId, $event)\"\r\n (onEditingOverlayDrag)=\"handleEditingItemDrag($event.itemId, $event)\"\r\n>\r\n</leaflet-map>\r\n} @else {\r\n<p>\r\n <strong>Not recognised map engine: [ {{ mapEngine }} ]</strong>\r\n</p>\r\n<p>Please provide a valid choice of map engine!</p>\r\n} }\r\n" }]
19139
+ }], ctorParameters: () => [{ type: MapEngine, decorators: [{
19047
19140
  type: Inject,
19048
- args: [BASE_PATH$2]
19049
- }] }, { type: Configuration$2, decorators: [{
19050
- type: Optional
19051
- }] }] });
19052
-
19053
- const APIS$1 = [DefaultService];
19054
-
19055
- /**
19056
- * Form layout definition
19057
- * Contains form layout definition objects.
19058
- *
19059
- * The version of the OpenAPI document: 1.0.0
19060
- * Contact: info@it4all.hu
19061
- *
19062
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
19063
- * https://openapi-generator.tech
19064
- * Do not edit the class manually.
19065
- */
19066
- var ComponentType;
19067
- (function (ComponentType) {
19068
- ComponentType["CONTAINER"] = "container";
19069
- ComponentType["FORM"] = "form";
19070
- ComponentType["WIDGET"] = "widget";
19071
- })(ComponentType || (ComponentType = {}));
19072
-
19073
- /**
19074
- * Form layout definition
19075
- * Contains form layout definition objects.
19076
- *
19077
- * The version of the OpenAPI document: 1.0.0
19078
- * Contact: info@it4all.hu
19079
- *
19080
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
19081
- * https://openapi-generator.tech
19082
- * Do not edit the class manually.
19083
- */
19084
- var ComponentWidgetType;
19085
- (function (ComponentWidgetType) {
19086
- ComponentWidgetType["GRID"] = "grid";
19087
- ComponentWidgetType["FILTER"] = "filter";
19088
- ComponentWidgetType["TREE"] = "tree";
19089
- ComponentWidgetType["TOOLBAR"] = "toolbar";
19090
- ComponentWidgetType["MAP"] = "map";
19091
- ComponentWidgetType["DIAGRAM"] = "diagram";
19092
- ComponentWidgetType["EMBEDDED_SLOT"] = "embedded_slot";
19093
- })(ComponentWidgetType || (ComponentWidgetType = {}));
19094
-
19095
- /**
19096
- * Form layout definition
19097
- * Contains form layout definition objects.
19098
- *
19099
- * The version of the OpenAPI document: 1.0.0
19100
- * Contact: info@it4all.hu
19101
- *
19102
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
19103
- * https://openapi-generator.tech
19104
- * Do not edit the class manually.
19105
- */
19106
- var LayoutDirection;
19107
- (function (LayoutDirection) {
19108
- LayoutDirection["HORIZONTAL"] = "horizontal";
19109
- LayoutDirection["VERTICAL"] = "vertical";
19110
- })(LayoutDirection || (LayoutDirection = {}));
19111
-
19112
- /**
19113
- * Form layout definition
19114
- * Contains form layout definition objects.
19115
- *
19116
- * The version of the OpenAPI document: 1.0.0
19117
- * Contact: info@it4all.hu
19118
- *
19119
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
19120
- * https://openapi-generator.tech
19121
- * Do not edit the class manually.
19122
- */
19141
+ args: [MAP_ENGINE]
19142
+ }] }, { type: GeoMapService }], propDecorators: { uuid: [{
19143
+ type: Input
19144
+ }], identifier: [{
19145
+ type: Input
19146
+ }], parent: [{
19147
+ type: Input
19148
+ }], mapComponent: [{
19149
+ type: ViewChild,
19150
+ args: ['mapComponent']
19151
+ }] } });
19123
19152
 
19124
- let ApiModule$1 = class ApiModule {
19125
- static forRoot(configurationFactory) {
19126
- return {
19127
- ngModule: ApiModule,
19128
- providers: [{ provide: Configuration$2, useFactory: configurationFactory }]
19129
- };
19130
- }
19131
- constructor(parentModule, http) {
19132
- if (parentModule) {
19133
- throw new Error('ApiModule is already loaded. Import in your base AppModule only.');
19134
- }
19135
- if (!http) {
19136
- throw new Error('You need to import the HttpClientModule in your AppModule! \n' +
19137
- 'See also https://github.com/angular/angular/issues/20575');
19138
- }
19139
- }
19140
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule, deps: [{ token: ApiModule, optional: true, skipSelf: true }, { token: i1.HttpClient, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
19141
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: ApiModule }); }
19142
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule }); }
19143
- };
19144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ApiModule$1, decorators: [{
19153
+ class SmartMapModule {
19154
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
19155
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, declarations: [SmartMapComponent, GoogleMap, LeafletMap], imports: [CommonModule, BrowserModule], exports: [SmartMapComponent, GoogleMap, LeafletMap] }); }
19156
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, providers: [{ provide: MAP_ENGINE, useValue: MapEngine.GOOGLE }], imports: [CommonModule, BrowserModule] }); }
19157
+ }
19158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartMapModule, decorators: [{
19145
19159
  type: NgModule,
19146
19160
  args: [{
19147
- imports: [],
19148
- declarations: [],
19149
- exports: [],
19150
- providers: []
19161
+ declarations: [SmartMapComponent, GoogleMap, LeafletMap],
19162
+ imports: [CommonModule, BrowserModule],
19163
+ providers: [{ provide: MAP_ENGINE, useValue: MapEngine.GOOGLE }],
19164
+ exports: [SmartMapComponent, GoogleMap, LeafletMap],
19151
19165
  }]
19152
- }], ctorParameters: () => [{ type: ApiModule$1, decorators: [{
19153
- type: Optional
19154
- }, {
19155
- type: SkipSelf
19156
- }] }, { type: i1.HttpClient, decorators: [{
19157
- type: Optional
19158
- }] }] });
19166
+ }] });
19159
19167
 
19160
19168
  /*
19161
19169
  * Public API Surface of smart-grid
@@ -23128,5 +23136,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
23128
23136
  * Generated bundle index. Do not edit.
23129
23137
  */
23130
23138
 
23131
- export { APIS$5 as APIS, AbstractMap, ApiModule$5 as ApiModule, ApiQueueService, BASE_PATH$7 as BASE_PATH, COLLECTION_FORMATS$7 as COLLECTION_FORMATS, COMPONENT_LIBRARY, CUSTOM_DIAGRAM_OPTIONS, 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, FilterExpressionBoolOperator$1 as FilterExpressionBoolOperator, FilterExpressionBuilderGroupBuilderGroupKindEnum, FilterExpressionDataType, FilterExpressionFieldWidgetType, FilterExpressionOperation, FilterExpressionOrderByOrderEnum, GeoMapDataLoadingMode, GeoMapDataSourceType, GeoMapItemKind, GeoMapOperationMode, GeoMapSelectionMode, GeoMapTextType, GoogleMap, GridColumnContentType, GridDataAccessConfigKindEnum, GridSelectionMode, GridSelectionType, GridUiActionType, GridViewDescriptorKindEnum, HighlightPipe, IS_ASYNC_PARAM_NAME, IconPosition, ImageResourceKindEnum, LayoutDirection, LeafletMap, LinkTargetEnum, MAP_ENGINE, MapEngine, MenuComponent, MessageOptionType, MessageTextType, MessageType, NAMED_VALIDATOR, NamedValidatorOperationEnum, NamedValidatorService, PhotoCaptureWidgetComponent, SelectionDefinitionTypeEnum, SelectionDefinitionValueSetValueTypeEnum, ServerRequestType, SessionAPIS, SessionErrorBehaviour, SessionService, SharedModule, SimplifiedTabGroupComponent, SmartActionType, SmartAuthService, SmartComponent, SmartComponentApiClient, SmartComponentLayoutComponent, SmartComponentLayoutModule, SmartComponentLayoutUtility, SmartDatePipe, SmartDateTimePipe, SmartDiagramComponent, SmartDiagramModule, SmartDialog, SmartEmbeddedSlotDirective, SmartExpandableSectionModule, SmartExpandableSectionService, SmartFileEditorComponent, SmartFileUploaderComponent, SmartFilterComponent, SmartFilterEditorContentComponent, SmartFilterEditorModule, SmartFilterEditorService, SmartFilterExpressionItemComponent, SmartFilterExpressionItemsComponent, SmartFilterModule, SmartFilterParamComponent, SmartFilterParamsComponent, SmartFilterPosition, SmartFilterType, SmartFormInputMode, SmartFormTextFieldButtonIconPosition, SmartFormWidgetDirection, SmartFormWidgetType, SmartFormWidgetWidth, 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, SmartSessionTimerService, SmartSubject, SmartTabGroupModule, SmartTabGroupService, SmartTable, SmartTableButtonType, SmartTableHeaderPropertyType, SmartTableInterfaceTypeEnum, SmartTableOptionButtonDirection, SmartTableOrder, SmartTableType, SmartTimePipe, SmartTooltipDirective, SmartTreeComponent, SmartTreeNodeButtonType, SmartUserSettinsIconPosition, SmartValidationModule, SmartValidatorName, SmartViewContextErrorDialogButtonLabel, SmartViewContextErrorDialogMessage, SmartViewContextErrorDialogTitle, SmartViewContextModule, SmartViewContextService, SmartViewRedirect, SmartWidgetHintPosition, SmartWidgetHintPositionEnum, SmartWidgetSettings, SmartdialogModule, SmartdialogService, SmartfileuploaderComponent, SmartformComponent, SmartformLayoutDefinitionService, SmartformwidgetComponent, SmarttableComponent, SmarttableModule, SmarttableService, SmarttreeGenericService, SmarttreeModule, SmarttreeService, TabGroupComponent, ToggleLabelPosition, UiActionButtonComponent, UiActionButtonType, UiActionConfirmDialogComponent, UiActionConfirmDialogService, UiActionDescriptorService, UiActionDialogButtonComponent, UiActionDialogType, UiActionFeedbackType, UiActionInputDialogComponent, UiActionInputDialogService, UiActionInputType, UiActionService, UiActionToolbarComponent, UiActionTooltipTooltipPositionEnum, UiBadgeComponent, UiBadgeDirective, UploadWidgetComponent, UploadWidgetType, ValueChangeMode, ViewEventHandlerViewEventTypeEnum, ViewService, ViewState, ViewType, VoiceRecordWidgetComponent, barChart, bubbleChart, createBasicOptions, doughnutChart, horizontalBarChart, horizontalStackedBarChart, multiAxisLineChart, pieChart, polarAreaChart, radarChart, scatterChart, stackedBarChart, transformDataToBarLikeDataSet, transformDataToBasicDataSets, transformDataToBubble, transformDataToScatter };
23139
+ export { APIS$5 as APIS, AbstractMap, ApiModule$5 as ApiModule, ApiQueueService, BASE_PATH$7 as BASE_PATH, COLLECTION_FORMATS$7 as COLLECTION_FORMATS, COMPONENT_LIBRARY, CUSTOM_DIAGRAM_OPTIONS, 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, FilterExpressionBoolOperator$1 as FilterExpressionBoolOperator, FilterExpressionBuilderGroupBuilderGroupKindEnum, FilterExpressionDataType, FilterExpressionFieldWidgetType, FilterExpressionOperation, FilterExpressionOrderByOrderEnum, GeoMapDataLoadingMode, GeoMapDataSourceType, GeoMapItemKind, GeoMapOperationMode, GeoMapSelectionMode, GeoMapTextType, GoogleMap, GridColumnContentType, GridDataAccessConfigKindEnum, GridSelectionMode, GridSelectionType, GridUiActionType, GridViewDescriptorKindEnum, HighlightPipe, IS_ASYNC_PARAM_NAME, IconPosition, ImageResourceKindEnum, LayoutDirection, LeafletMap, LinkTargetEnum, MAP_ENGINE, MapEngine, MenuComponent, MessageOptionType, MessageTextType, MessageType, NAMED_VALIDATOR, NamedValidatorOperationEnum, NamedValidatorService, PhotoCaptureWidgetComponent, SelectionDefinitionTypeEnum, SelectionDefinitionValueSetValueTypeEnum, ServerRequestType, SessionAPIS, SessionErrorBehaviour, SessionService, SharedModule, SimplifiedTabGroupComponent, SmartActionType, SmartAuthService, SmartComponent, SmartComponentApiClient, SmartComponentLayoutComponent, SmartComponentLayoutModule, SmartComponentLayoutUtility, SmartDatePipe, SmartDateTimePipe, SmartDiagramComponent, SmartDiagramModule, SmartDialog, SmartEmbeddedSlotDirective, SmartExpandableSectionModule, SmartExpandableSectionService, SmartFileEditorComponent, SmartFileUploaderComponent, SmartFilterComponent, SmartFilterEditorContentComponent, SmartFilterEditorModule, SmartFilterEditorService, SmartFilterExpressionItemComponent, SmartFilterExpressionItemsComponent, SmartFilterModule, SmartFilterParamComponent, SmartFilterParamsComponent, SmartFilterPosition, SmartFilterType, SmartFormInputMode, SmartFormTextFieldButtonIconPosition, SmartFormWidgetDirection, SmartFormWidgetType, SmartFormWidgetWidth, 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, SmartSessionTimerService, SmartSubject, SmartTabGroupModule, SmartTabGroupService, SmartTable, SmartTableButtonType, SmartTableHeaderPropertyType, SmartTableInterfaceTypeEnum, SmartTableOptionButtonDirection, SmartTableOrder, SmartTableType, SmartTimePipe, SmartTooltipDirective, SmartTreeComponent, SmartTreeNodeButtonType, SmartUserSettinsIconPosition, SmartValidationModule, SmartValidatorName, SmartViewContextErrorDialogButtonLabel, SmartViewContextErrorDialogMessage, SmartViewContextErrorDialogTitle, SmartViewContextModule, SmartViewContextService, SmartViewRedirect, SmartWidgetHintPosition, SmartWidgetHintPositionEnum, SmartWidgetSettings, SmartdialogModule, SmartdialogService, SmartfileuploaderComponent, SmartformComponent, SmartformLayoutDefinitionService, SmartformwidgetComponent, SmarttableComponent, SmarttableModule, SmarttableService, SmarttreeGenericService, SmarttreeModule, SmarttreeService, TabGroupComponent, ToggleLabelPosition, ToolbarDirection, UiActionButtonComponent, UiActionButtonType, UiActionConfirmDialogComponent, UiActionConfirmDialogService, UiActionDescriptorService, UiActionDialogButtonComponent, UiActionDialogType, UiActionFeedbackType, UiActionInputDialogComponent, UiActionInputDialogService, UiActionInputType, UiActionService, UiActionToolbarComponent, UiActionTooltipTooltipPositionEnum, UiBadgeComponent, UiBadgeDirective, UploadWidgetComponent, UploadWidgetType, ValueChangeMode, ViewEventHandlerViewEventTypeEnum, ViewService, ViewState, ViewType, VoiceRecordWidgetComponent, barChart, bubbleChart, createBasicOptions, doughnutChart, horizontalBarChart, horizontalStackedBarChart, multiAxisLineChart, pieChart, polarAreaChart, radarChart, scatterChart, stackedBarChart, transformDataToBarLikeDataSet, transformDataToBasicDataSets, transformDataToBubble, transformDataToScatter };
23132
23140
  //# sourceMappingURL=smartbit4all-ng-client.mjs.map