@smartbit4all/ng-client 6.0.48 → 6.0.51

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 (191) hide show
  1. package/esm2022/lib/smart-component-layout/api/api/api.mjs +1 -1
  2. package/esm2022/lib/smart-component-layout/api/api/default.service.mjs +1 -1
  3. package/esm2022/lib/smart-component-layout/api/api.module.mjs +1 -1
  4. package/esm2022/lib/smart-component-layout/api/configuration.mjs +1 -1
  5. package/esm2022/lib/smart-component-layout/api/encoder.mjs +1 -1
  6. package/esm2022/lib/smart-component-layout/api/index.mjs +1 -1
  7. package/esm2022/lib/smart-component-layout/api/model/componentType.mjs +1 -1
  8. package/esm2022/lib/smart-component-layout/api/model/componentWidgetType.mjs +1 -1
  9. package/esm2022/lib/smart-component-layout/api/model/layoutDefinitionDescriptor.mjs +1 -1
  10. package/esm2022/lib/smart-component-layout/api/model/layoutDirection.mjs +1 -1
  11. package/esm2022/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +1 -1
  12. package/esm2022/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +1 -1
  13. package/esm2022/lib/smart-component-layout/api/model/toolbarDirection.mjs +1 -1
  14. package/esm2022/lib/smart-component-layout/api/param.mjs +1 -1
  15. package/esm2022/lib/smart-component-layout/api/variables.mjs +1 -1
  16. package/esm2022/lib/smart-diagram/api/api/api.mjs +1 -1
  17. package/esm2022/lib/smart-diagram/api/api/diagramService.service.mjs +1 -1
  18. package/esm2022/lib/smart-diagram/api/api.module.mjs +1 -1
  19. package/esm2022/lib/smart-diagram/api/configuration.mjs +1 -1
  20. package/esm2022/lib/smart-diagram/api/encoder.mjs +1 -1
  21. package/esm2022/lib/smart-diagram/api/index.mjs +1 -1
  22. package/esm2022/lib/smart-diagram/api/model/diagramColor.mjs +1 -1
  23. package/esm2022/lib/smart-diagram/api/model/diagramDataContainer.mjs +1 -1
  24. package/esm2022/lib/smart-diagram/api/model/diagramDataItem.mjs +1 -1
  25. package/esm2022/lib/smart-diagram/api/model/diagramDataSet.mjs +1 -1
  26. package/esm2022/lib/smart-diagram/api/model/diagramDescriptor.mjs +1 -1
  27. package/esm2022/lib/smart-diagram/api/model/diagramModel.mjs +1 -1
  28. package/esm2022/lib/smart-diagram/api/model/diagramShape.mjs +1 -1
  29. package/esm2022/lib/smart-diagram/api/model/drawTime.mjs +1 -1
  30. package/esm2022/lib/smart-diagram/api/model/labelText.mjs +1 -1
  31. package/esm2022/lib/smart-diagram/api/model/models.mjs +1 -1
  32. package/esm2022/lib/smart-diagram/api/param.mjs +1 -1
  33. package/esm2022/lib/smart-diagram/api/variables.mjs +1 -1
  34. package/esm2022/lib/smart-form/api/api/api.mjs +1 -1
  35. package/esm2022/lib/smart-form/api/api/default.service.mjs +1 -1
  36. package/esm2022/lib/smart-form/api/api.module.mjs +1 -1
  37. package/esm2022/lib/smart-form/api/configuration.mjs +1 -1
  38. package/esm2022/lib/smart-form/api/encoder.mjs +1 -1
  39. package/esm2022/lib/smart-form/api/index.mjs +1 -1
  40. package/esm2022/lib/smart-form/api/model/dateFieldProperties.mjs +1 -1
  41. package/esm2022/lib/smart-form/api/model/fileUploaderProperties.mjs +1 -1
  42. package/esm2022/lib/smart-form/api/model/imageProperties.mjs +1 -1
  43. package/esm2022/lib/smart-form/api/model/multiFileUploaderProperties.mjs +1 -1
  44. package/esm2022/lib/smart-form/api/model/propertyMapping.mjs +1 -1
  45. package/esm2022/lib/smart-form/api/model/recordingUploaderProperties.mjs +1 -1
  46. package/esm2022/lib/smart-form/api/model/selectionDefinition.mjs +1 -1
  47. package/esm2022/lib/smart-form/api/model/smartFormInputMode.mjs +1 -1
  48. package/esm2022/lib/smart-form/api/model/smartFormWidgetDirection.mjs +1 -1
  49. package/esm2022/lib/smart-form/api/model/smartFormWidgetType.mjs +1 -1
  50. package/esm2022/lib/smart-form/api/model/smartLayoutDefinition.mjs +1 -1
  51. package/esm2022/lib/smart-form/api/model/smartMatrixModel.mjs +1 -1
  52. package/esm2022/lib/smart-form/api/model/smartWidgetDefinition.mjs +1 -1
  53. package/esm2022/lib/smart-form/api/model/smartWidgetHint.mjs +1 -1
  54. package/esm2022/lib/smart-form/api/model/sortDefinition.mjs +1 -1
  55. package/esm2022/lib/smart-form/api/model/textBoxProperties.mjs +1 -1
  56. package/esm2022/lib/smart-form/api/model/textFieldProperties.mjs +1 -1
  57. package/esm2022/lib/smart-form/api/model/valueChangeMode.mjs +1 -1
  58. package/esm2022/lib/smart-form/api/param.mjs +1 -1
  59. package/esm2022/lib/smart-form/api/variables.mjs +1 -1
  60. package/esm2022/lib/smart-form/services/smartform.service.mjs +4 -1
  61. package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +1 -1
  62. package/esm2022/lib/smart-form/widgets/components/smart-file-editor/smart-file-editor.component.mjs +1 -1
  63. package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +3 -3
  64. package/esm2022/lib/smart-grid/api/grid-api/model/gridModel.mjs +1 -1
  65. package/esm2022/lib/smart-map/api/api/api.mjs +1 -1
  66. package/esm2022/lib/smart-map/api/api/geoMap.service.mjs +1 -1
  67. package/esm2022/lib/smart-map/api/api.module.mjs +1 -1
  68. package/esm2022/lib/smart-map/api/configuration.mjs +1 -1
  69. package/esm2022/lib/smart-map/api/encoder.mjs +1 -1
  70. package/esm2022/lib/smart-map/api/index.mjs +1 -1
  71. package/esm2022/lib/smart-map/api/model/gPSPosition.mjs +1 -1
  72. package/esm2022/lib/smart-map/api/model/gPSRoute.mjs +1 -1
  73. package/esm2022/lib/smart-map/api/model/geoMapChange.mjs +1 -1
  74. package/esm2022/lib/smart-map/api/model/geoMapDataLoadingMode.mjs +1 -1
  75. package/esm2022/lib/smart-map/api/model/geoMapDataSourceDescriptor.mjs +1 -1
  76. package/esm2022/lib/smart-map/api/model/geoMapDataSourceType.mjs +1 -1
  77. package/esm2022/lib/smart-map/api/model/geoMapEditingSession.mjs +1 -1
  78. package/esm2022/lib/smart-map/api/model/geoMapInteraction.mjs +1 -1
  79. package/esm2022/lib/smart-map/api/model/geoMapItem.mjs +1 -1
  80. package/esm2022/lib/smart-map/api/model/geoMapItemKind.mjs +1 -1
  81. package/esm2022/lib/smart-map/api/model/geoMapLayer.mjs +1 -1
  82. package/esm2022/lib/smart-map/api/model/geoMapLayerChange.mjs +1 -1
  83. package/esm2022/lib/smart-map/api/model/geoMapLayerDescriptor.mjs +1 -1
  84. package/esm2022/lib/smart-map/api/model/geoMapModel.mjs +1 -1
  85. package/esm2022/lib/smart-map/api/model/geoMapOperationMode.mjs +1 -1
  86. package/esm2022/lib/smart-map/api/model/geoMapSelectionMode.mjs +1 -1
  87. package/esm2022/lib/smart-map/api/model/geoMapServerModel.mjs +1 -1
  88. package/esm2022/lib/smart-map/api/model/geoMapTextType.mjs +1 -1
  89. package/esm2022/lib/smart-map/api/model/geoMapViewState.mjs +1 -1
  90. package/esm2022/lib/smart-map/api/model/geoMapViewport.mjs +1 -1
  91. package/esm2022/lib/smart-map/api/model/models.mjs +1 -1
  92. package/esm2022/lib/smart-map/api/param.mjs +1 -1
  93. package/esm2022/lib/smart-map/api/variables.mjs +1 -1
  94. package/esm2022/lib/view-context/api/api/api.mjs +1 -1
  95. package/esm2022/lib/view-context/api/api/view.service.mjs +1 -1
  96. package/esm2022/lib/view-context/api/api.module.mjs +1 -1
  97. package/esm2022/lib/view-context/api/configuration.mjs +1 -1
  98. package/esm2022/lib/view-context/api/encoder.mjs +1 -1
  99. package/esm2022/lib/view-context/api/index.mjs +1 -1
  100. package/esm2022/lib/view-context/api/model/backgroundProcessInfo.mjs +1 -1
  101. package/esm2022/lib/view-context/api/model/badgeDescriptor.mjs +1 -1
  102. package/esm2022/lib/view-context/api/model/clipboardData.mjs +1 -1
  103. package/esm2022/lib/view-context/api/model/closeResult.mjs +1 -1
  104. package/esm2022/lib/view-context/api/model/componentConstraint.mjs +1 -1
  105. package/esm2022/lib/view-context/api/model/componentModel.mjs +1 -1
  106. package/esm2022/lib/view-context/api/model/componentModelChange.mjs +1 -1
  107. package/esm2022/lib/view-context/api/model/dataChange.mjs +1 -1
  108. package/esm2022/lib/view-context/api/model/dataChangeEvent.mjs +1 -1
  109. package/esm2022/lib/view-context/api/model/dataChangeKind.mjs +1 -1
  110. package/esm2022/lib/view-context/api/model/deviceInfo.mjs +1 -1
  111. package/esm2022/lib/view-context/api/model/downloadedFile.mjs +1 -1
  112. package/esm2022/lib/view-context/api/model/iconPosition.mjs +1 -1
  113. package/esm2022/lib/view-context/api/model/imageResource.mjs +1 -1
  114. package/esm2022/lib/view-context/api/model/link.mjs +1 -1
  115. package/esm2022/lib/view-context/api/model/menuDescriptor.mjs +1 -1
  116. package/esm2022/lib/view-context/api/model/menuOpenDirection.mjs +1 -1
  117. package/esm2022/lib/view-context/api/model/menuTriggerType.mjs +1 -1
  118. package/esm2022/lib/view-context/api/model/messageData.mjs +1 -1
  119. package/esm2022/lib/view-context/api/model/messageOption.mjs +1 -1
  120. package/esm2022/lib/view-context/api/model/messageOptionType.mjs +1 -1
  121. package/esm2022/lib/view-context/api/model/messageResult.mjs +1 -1
  122. package/esm2022/lib/view-context/api/model/messageTextType.mjs +1 -1
  123. package/esm2022/lib/view-context/api/model/messageType.mjs +1 -1
  124. package/esm2022/lib/view-context/api/model/models.mjs +1 -1
  125. package/esm2022/lib/view-context/api/model/multiComboBoxElement.mjs +1 -1
  126. package/esm2022/lib/view-context/api/model/multiComboBoxModel.mjs +1 -1
  127. package/esm2022/lib/view-context/api/model/namedValidator.mjs +1 -1
  128. package/esm2022/lib/view-context/api/model/openPendingData.mjs +1 -1
  129. package/esm2022/lib/view-context/api/model/publishedViewData.mjs +1 -1
  130. package/esm2022/lib/view-context/api/model/serverRequestExecutionStat.mjs +1 -1
  131. package/esm2022/lib/view-context/api/model/serverRequestTrack.mjs +1 -1
  132. package/esm2022/lib/view-context/api/model/serverRequestType.mjs +1 -1
  133. package/esm2022/lib/view-context/api/model/shellProperty.mjs +1 -1
  134. package/esm2022/lib/view-context/api/model/smartLinkData.mjs +1 -1
  135. package/esm2022/lib/view-context/api/model/smartLinkMigrationStatus.mjs +1 -1
  136. package/esm2022/lib/view-context/api/model/statisticRecord.mjs +1 -1
  137. package/esm2022/lib/view-context/api/model/style.mjs +1 -1
  138. package/esm2022/lib/view-context/api/model/themeDefinition.mjs +1 -1
  139. package/esm2022/lib/view-context/api/model/themeDescriptor.mjs +1 -1
  140. package/esm2022/lib/view-context/api/model/themeShellDescriptor.mjs +1 -1
  141. package/esm2022/lib/view-context/api/model/uiAction.mjs +1 -1
  142. package/esm2022/lib/view-context/api/model/uiActionButtonDescriptor.mjs +1 -1
  143. package/esm2022/lib/view-context/api/model/uiActionButtonType.mjs +1 -1
  144. package/esm2022/lib/view-context/api/model/uiActionConstraint.mjs +1 -1
  145. package/esm2022/lib/view-context/api/model/uiActionDefinition.mjs +1 -1
  146. package/esm2022/lib/view-context/api/model/uiActionDefinitionEntry.mjs +1 -1
  147. package/esm2022/lib/view-context/api/model/uiActionDescriptor.mjs +1 -1
  148. package/esm2022/lib/view-context/api/model/uiActionDialogDescriptor.mjs +1 -1
  149. package/esm2022/lib/view-context/api/model/uiActionFeedbackType.mjs +1 -1
  150. package/esm2022/lib/view-context/api/model/uiActionInputType.mjs +1 -1
  151. package/esm2022/lib/view-context/api/model/uiActionRequest.mjs +1 -1
  152. package/esm2022/lib/view-context/api/model/uiActionSchedule.mjs +1 -1
  153. package/esm2022/lib/view-context/api/model/uiActionTooltip.mjs +1 -1
  154. package/esm2022/lib/view-context/api/model/uiActionUploadDescriptor.mjs +1 -1
  155. package/esm2022/lib/view-context/api/model/uploadWidgetType.mjs +1 -1
  156. package/esm2022/lib/view-context/api/model/uploadedFile.mjs +1 -1
  157. package/esm2022/lib/view-context/api/model/valueSet.mjs +1 -1
  158. package/esm2022/lib/view-context/api/model/view.mjs +1 -1
  159. package/esm2022/lib/view-context/api/model/viewApiError.mjs +1 -1
  160. package/esm2022/lib/view-context/api/model/viewConstraint.mjs +1 -1
  161. package/esm2022/lib/view-context/api/model/viewContext.mjs +1 -1
  162. package/esm2022/lib/view-context/api/model/viewContextChange.mjs +1 -1
  163. package/esm2022/lib/view-context/api/model/viewContextData.mjs +1 -1
  164. package/esm2022/lib/view-context/api/model/viewContextUpdate.mjs +1 -1
  165. package/esm2022/lib/view-context/api/model/viewData.mjs +1 -1
  166. package/esm2022/lib/view-context/api/model/viewEventHandler.mjs +1 -1
  167. package/esm2022/lib/view-context/api/model/viewPlaceholder.mjs +1 -1
  168. package/esm2022/lib/view-context/api/model/viewState.mjs +1 -1
  169. package/esm2022/lib/view-context/api/model/viewStateUpdate.mjs +1 -1
  170. package/esm2022/lib/view-context/api/model/viewType.mjs +1 -1
  171. package/esm2022/lib/view-context/api/param.mjs +1 -1
  172. package/esm2022/lib/view-context/api/variables.mjs +1 -1
  173. package/esm2022/lib/view-context/message-dialog/message-dialog.component.mjs +1 -1
  174. package/esm2022/lib/view-context/smart-ui-action/components/menu/click/menu.component.mjs +3 -3
  175. package/esm2022/lib/view-context/smart-ui-action/components/menu/hover/hover-menu.component.mjs +3 -3
  176. package/esm2022/lib/view-context/smart-ui-action/components/theme-selector/theme-selector.component.mjs +1 -1
  177. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/photo-capture-widget/photo-capture-widget.component.mjs +1 -1
  178. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/prime-file-uploader/prime-file-uploader.component.mjs +3 -3
  179. package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/voice-record-widget/voice-record-widget.component.mjs +1 -1
  180. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +1 -1
  181. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +1 -1
  182. package/esm2022/lib/view-context/smart-ui-action/file-editor-toolbar/file-editor-toolbar.component.mjs +3 -3
  183. package/esm2022/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.mjs +13 -3
  184. package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +3 -3
  185. package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +1 -1
  186. package/fesm2022/smartbit4all-ng-client.mjs +36 -23
  187. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  188. package/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.d.ts +3 -1
  189. package/package.json +1 -1
  190. package/smartbit4all-ng-client-6.0.51.tgz +0 -0
  191. package/smartbit4all-ng-client-6.0.48.tgz +0 -0
@@ -67,11 +67,11 @@ export class PrimeFileUploaderComponent {
67
67
  };
68
68
  }
69
69
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PrimeFileUploaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
70
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: PrimeFileUploaderComponent, selector: "prime-file-uploader", inputs: { isMultiple: "isMultiple", autoUpload: "autoUpload", maxSizeMb: "maxSizeMb", fileFormats: "fileFormats", title: "title", subTitle: "subTitle", isDisabled: "isDisabled" }, outputs: { uploadFilesEvent: "uploadFilesEvent" }, viewQueries: [{ propertyName: "fileUploadPrime", first: true, predicate: ["fileUploadPrimeNg"], descendants: true }], ngImport: i0, template: "@if (isMultiple) {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [disabled]=\"isDisabled\"\r\n [ngClass]=\"{ disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n} @else {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [disabled]=\"isDisabled\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [ngClass]=\"{ singlePrimeNg: true, autoUpload: autoUpload, disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n}\r\n\r\n<ng-template #uploader let-file let-i=\"index\">\r\n <div class=\"uploadField\" (click)=\"fileUploadPrime.choose()\">\r\n <div class=\"uploadData\"\r\n ><smart-icon class=\"uploadIcon\" [icon]=\"'upload'\"></smart-icon>\r\n <div class=\"dataField\">\r\n <span class=\"title message\">{{ title }}</span>\r\n <span class=\"message\">{{ subTitle }}</span>\r\n <span class=\"message\">{{ fileFormatsString }}</span>\r\n <span class=\"message\"> max {{ maxSizeMb }} Mb</span>\r\n </div>\r\n </div>\r\n @if (autoUpload == false && files && files.length > 0) {\r\n <ui-action-button\r\n [code]=\"'default-upload'\"\r\n [descriptor]=\"uploadButton\"\r\n (actionClick)=\"fileUploadPrime.upload()\"\r\n />\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #fileContainer let-file let-i=\"index\">\r\n <div class=\"p-fileupload-file\">\r\n @if (file.objectURL) {\r\n <img role=\"presentation\" [alt]=\"file.name\" [src]=\"file.objectURL\" width=\"50\" height=\"50\" />\r\n } @else {\r\n <i class=\"pi pi-file\" style=\"font-size: 2rem\"></i>\r\n }\r\n\r\n <div class=\"fileData\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n <div class=\"fileButtons\">\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n [attr.data-testid]=\"'default_download'\"\r\n (click)=\"downloadFile(file.dataUri)\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n icon=\"trash\"\r\n [attr.data-testid]=\"'default_remove'\"\r\n (click)=\"fileUploadPrime.remove($event, i)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}:host ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex!important;flex-direction:row;justify-content:center;flex-wrap:wrap;gap:1rem}:host ::ng-deep .p-fileupload .p-fileupload-row>div{width:fit-content}:host ::ng-deep .p-fileupload .p-fileupload-content{padding:unset;align-content:center;text-align:center}.message{font-size:smaller;text-align:center;color:#6b7280}.title{font-size:unset;color:var(--primary-color)}.uploadField{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:1rem;padding:.5rem 1rem;cursor:pointer}.uploadField:hover{background-color:rgb(from var(--border-color) r g b / .1)}.disabledWidget ::ng-deep .uploadField:hover{background-color:unset;cursor:unset}:host ::ng-deep .p-fileupload-row{border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}:host ::ng-deep .p-fileupload-choose,:host ::ng-deep .p-fileupload-row ::ng-deep button,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button{background-color:var(--primary-color);border-color:var(--primary-color)}:host ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.8)}.disabledWidget ::ng-deep *{opacity:.85}:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:unset;cursor:unset}.p-fileupload-file{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:1rem;padding:1rem;border:1px solid #dee2e6}.p-file-data{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.fileSize{display:flex;justify-content:flex-start}.fileData{flex:1;display:flex;flex-direction:column;justify-content:flex-end;padding-right:1rem}.uploadData{flex:1;display:flex;flex-direction:row;justify-content:flex-start;gap:1rem}.fileName{text-align:start}.singlePrimeNg ::ng-deep .uploadField{padding:1rem}.uploadIcon{align-content:center}:host ::ng-deep .uploadIcon i{font-size:2rem}:host ::ng-deep .p-fileupload-file i,:host ::ng-deep .uploadIcon i,:host ::ng-deep img{display:flex;justify-content:center;width:3rem}.dataField{display:flex;flex-direction:column;justify-content:flex-start;align-items:baseline}:host ::ng-deep .p-fileupload-content p-progressbar,:host ::ng-deep .p-fileupload ::ng-deep .p-fileupload-buttonbar{display:none!important}:host ::ng-deep .p-fileupload-content{display:flex;flex-direction:column-reverse}:host ::ng-deep .p-fileupload-file{border:unset;border-top:1px solid var(--border-color)}:host ::ng-deep .p-fileupload.p-fileupload-advanced .p-message{margin:unset}.fileButtons{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileButtons ::ng-deep .pi{width:unset!important}.removeIcon ::ng-deep i,.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}.removeIcon ::ng-deep .pi,.downloadIcon ::ng-deep .pi{font-size:1.5rem!important}.removeIcon ::ng-deep mat-icon,.downloadIcon ::ng-deep mat-icon{font-size:2rem}.removeIcon:hover,.downloadIcon:hover{cursor:pointer}smart-icon{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i3.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i4.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i5.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
70
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: PrimeFileUploaderComponent, selector: "prime-file-uploader", inputs: { isMultiple: "isMultiple", autoUpload: "autoUpload", maxSizeMb: "maxSizeMb", fileFormats: "fileFormats", title: "title", subTitle: "subTitle", isDisabled: "isDisabled" }, outputs: { uploadFilesEvent: "uploadFilesEvent" }, viewQueries: [{ propertyName: "fileUploadPrime", first: true, predicate: ["fileUploadPrimeNg"], descendants: true }], ngImport: i0, template: "@if (isMultiple) {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [disabled]=\"isDisabled\"\r\n [ngClass]=\"{ disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n} @else {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [disabled]=\"isDisabled\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [ngClass]=\"{ singlePrimeNg: true, autoUpload: autoUpload, disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n}\r\n\r\n<ng-template #uploader let-file let-i=\"index\">\r\n <div class=\"uploadField\" (click)=\"fileUploadPrime.choose()\">\r\n <div class=\"uploadData\"\r\n ><smart-icon class=\"uploadIcon\" [icon]=\"'upload'\"></smart-icon>\r\n <div class=\"dataField\">\r\n <span class=\"title message\">{{ title }}</span>\r\n <span class=\"message\">{{ subTitle }}</span>\r\n <span class=\"message\">{{ fileFormatsString }}</span>\r\n <span class=\"message\"> max {{ maxSizeMb }} Mb</span>\r\n </div>\r\n </div>\r\n @if (autoUpload == false && files && files.length > 0) {\r\n <ui-action-button\r\n [code]=\"'default-upload'\"\r\n [descriptor]=\"uploadButton\"\r\n (actionClick)=\"fileUploadPrime.upload()\"\r\n />\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #fileContainer let-file let-i=\"index\">\r\n <div class=\"p-fileupload-file\">\r\n @if (file.objectURL) {\r\n <img role=\"presentation\" [alt]=\"file.name\" [src]=\"file.objectURL\" width=\"50\" height=\"50\" />\r\n } @else {\r\n <i class=\"pi pi-file\" style=\"font-size: 2rem\"></i>\r\n }\r\n\r\n <div class=\"fileData\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n <div class=\"fileButtons\">\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n [attr.data-testid]=\"'default_download'\"\r\n (click)=\"downloadFile(file)\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n icon=\"trash\"\r\n [attr.data-testid]=\"'default_remove'\"\r\n (click)=\"fileUploadPrime.remove($event, i)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}:host ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex!important;flex-direction:row;justify-content:center;flex-wrap:wrap;gap:1rem}:host ::ng-deep .p-fileupload .p-fileupload-row>div{width:fit-content}:host ::ng-deep .p-fileupload .p-fileupload-content{padding:unset;align-content:center;text-align:center}.message{font-size:smaller;text-align:center;color:#6b7280}.title{font-size:unset;color:var(--primary-color)}.uploadField{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:1rem;padding:.5rem 1rem;cursor:pointer}.uploadField:hover{background-color:rgb(from var(--border-color) r g b / .1)}.disabledWidget ::ng-deep .uploadField:hover{background-color:unset;cursor:unset}:host ::ng-deep .p-fileupload-row{border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}:host ::ng-deep .p-fileupload-choose,:host ::ng-deep .p-fileupload-row ::ng-deep button,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button{background-color:var(--primary-color);border-color:var(--primary-color)}:host ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.8)}.disabledWidget ::ng-deep *{opacity:.85}:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:unset;cursor:unset}.p-fileupload-file{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:1rem;padding:1rem;border:1px solid #dee2e6}.p-file-data{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.fileSize{display:flex;justify-content:flex-start}.fileData{flex:1;display:flex;flex-direction:column;justify-content:flex-end;padding-right:1rem}.uploadData{flex:1;display:flex;flex-direction:row;justify-content:flex-start;gap:1rem}.fileName{text-align:start}.singlePrimeNg ::ng-deep .uploadField{padding:1rem}.uploadIcon{align-content:center}:host ::ng-deep .uploadIcon i{font-size:2rem}:host ::ng-deep .p-fileupload-file i,:host ::ng-deep .uploadIcon i,:host ::ng-deep img{display:flex;justify-content:center;width:3rem}.dataField{display:flex;flex-direction:column;justify-content:flex-start;align-items:baseline}:host ::ng-deep .p-fileupload-content p-progressbar,:host ::ng-deep .p-fileupload ::ng-deep .p-fileupload-buttonbar{display:none!important}:host ::ng-deep .p-fileupload-content{display:flex;flex-direction:column-reverse}:host ::ng-deep .p-fileupload-file{border:unset;border-top:1px solid var(--border-color)}:host ::ng-deep .p-fileupload.p-fileupload-advanced .p-message{margin:unset}.fileButtons{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileButtons ::ng-deep .pi{width:unset!important}.removeIcon ::ng-deep i,.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}.removeIcon ::ng-deep .pi,.downloadIcon ::ng-deep .pi{font-size:1.5rem!important}.removeIcon ::ng-deep mat-icon,.downloadIcon ::ng-deep mat-icon{font-size:2rem}.removeIcon:hover,.downloadIcon:hover{cursor:pointer}smart-icon{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i3.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i4.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i5.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "identifier", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
71
71
  }
72
72
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PrimeFileUploaderComponent, decorators: [{
73
73
  type: Component,
74
- args: [{ selector: 'prime-file-uploader', template: "@if (isMultiple) {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [disabled]=\"isDisabled\"\r\n [ngClass]=\"{ disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n} @else {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [disabled]=\"isDisabled\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [ngClass]=\"{ singlePrimeNg: true, autoUpload: autoUpload, disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n}\r\n\r\n<ng-template #uploader let-file let-i=\"index\">\r\n <div class=\"uploadField\" (click)=\"fileUploadPrime.choose()\">\r\n <div class=\"uploadData\"\r\n ><smart-icon class=\"uploadIcon\" [icon]=\"'upload'\"></smart-icon>\r\n <div class=\"dataField\">\r\n <span class=\"title message\">{{ title }}</span>\r\n <span class=\"message\">{{ subTitle }}</span>\r\n <span class=\"message\">{{ fileFormatsString }}</span>\r\n <span class=\"message\"> max {{ maxSizeMb }} Mb</span>\r\n </div>\r\n </div>\r\n @if (autoUpload == false && files && files.length > 0) {\r\n <ui-action-button\r\n [code]=\"'default-upload'\"\r\n [descriptor]=\"uploadButton\"\r\n (actionClick)=\"fileUploadPrime.upload()\"\r\n />\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #fileContainer let-file let-i=\"index\">\r\n <div class=\"p-fileupload-file\">\r\n @if (file.objectURL) {\r\n <img role=\"presentation\" [alt]=\"file.name\" [src]=\"file.objectURL\" width=\"50\" height=\"50\" />\r\n } @else {\r\n <i class=\"pi pi-file\" style=\"font-size: 2rem\"></i>\r\n }\r\n\r\n <div class=\"fileData\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n <div class=\"fileButtons\">\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n [attr.data-testid]=\"'default_download'\"\r\n (click)=\"downloadFile(file.dataUri)\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n icon=\"trash\"\r\n [attr.data-testid]=\"'default_remove'\"\r\n (click)=\"fileUploadPrime.remove($event, i)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}:host ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex!important;flex-direction:row;justify-content:center;flex-wrap:wrap;gap:1rem}:host ::ng-deep .p-fileupload .p-fileupload-row>div{width:fit-content}:host ::ng-deep .p-fileupload .p-fileupload-content{padding:unset;align-content:center;text-align:center}.message{font-size:smaller;text-align:center;color:#6b7280}.title{font-size:unset;color:var(--primary-color)}.uploadField{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:1rem;padding:.5rem 1rem;cursor:pointer}.uploadField:hover{background-color:rgb(from var(--border-color) r g b / .1)}.disabledWidget ::ng-deep .uploadField:hover{background-color:unset;cursor:unset}:host ::ng-deep .p-fileupload-row{border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}:host ::ng-deep .p-fileupload-choose,:host ::ng-deep .p-fileupload-row ::ng-deep button,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button{background-color:var(--primary-color);border-color:var(--primary-color)}:host ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.8)}.disabledWidget ::ng-deep *{opacity:.85}:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:unset;cursor:unset}.p-fileupload-file{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:1rem;padding:1rem;border:1px solid #dee2e6}.p-file-data{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.fileSize{display:flex;justify-content:flex-start}.fileData{flex:1;display:flex;flex-direction:column;justify-content:flex-end;padding-right:1rem}.uploadData{flex:1;display:flex;flex-direction:row;justify-content:flex-start;gap:1rem}.fileName{text-align:start}.singlePrimeNg ::ng-deep .uploadField{padding:1rem}.uploadIcon{align-content:center}:host ::ng-deep .uploadIcon i{font-size:2rem}:host ::ng-deep .p-fileupload-file i,:host ::ng-deep .uploadIcon i,:host ::ng-deep img{display:flex;justify-content:center;width:3rem}.dataField{display:flex;flex-direction:column;justify-content:flex-start;align-items:baseline}:host ::ng-deep .p-fileupload-content p-progressbar,:host ::ng-deep .p-fileupload ::ng-deep .p-fileupload-buttonbar{display:none!important}:host ::ng-deep .p-fileupload-content{display:flex;flex-direction:column-reverse}:host ::ng-deep .p-fileupload-file{border:unset;border-top:1px solid var(--border-color)}:host ::ng-deep .p-fileupload.p-fileupload-advanced .p-message{margin:unset}.fileButtons{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileButtons ::ng-deep .pi{width:unset!important}.removeIcon ::ng-deep i,.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}.removeIcon ::ng-deep .pi,.downloadIcon ::ng-deep .pi{font-size:1.5rem!important}.removeIcon ::ng-deep mat-icon,.downloadIcon ::ng-deep mat-icon{font-size:2rem}.removeIcon:hover,.downloadIcon:hover{cursor:pointer}smart-icon{display:flex;align-items:center}\n"] }]
74
+ args: [{ selector: 'prime-file-uploader', template: "@if (isMultiple) {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [disabled]=\"isDisabled\"\r\n [ngClass]=\"{ disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n} @else {\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSelect)=\"select($event)\"\r\n (onSend)=\"uploadFiles($event)\"\r\n [disabled]=\"isDisabled\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"fileFormatsString\"\r\n [maxFileSize]=\"maxSizeBytes\"\r\n [ngClass]=\"{ singlePrimeNg: true, autoUpload: autoUpload, disabledWidget: isDisabled }\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\">\r\n <ng-container *ngTemplateOutlet=\"uploader\" />\r\n </ng-template>\r\n <ng-template pTemplate=\"file\" let-file let-i=\"index\">\r\n <ng-container *ngTemplateOutlet=\"fileContainer; context: { $implicit: file, i: i }\" />\r\n </ng-template>\r\n </p-fileUpload>\r\n}\r\n\r\n<ng-template #uploader let-file let-i=\"index\">\r\n <div class=\"uploadField\" (click)=\"fileUploadPrime.choose()\">\r\n <div class=\"uploadData\"\r\n ><smart-icon class=\"uploadIcon\" [icon]=\"'upload'\"></smart-icon>\r\n <div class=\"dataField\">\r\n <span class=\"title message\">{{ title }}</span>\r\n <span class=\"message\">{{ subTitle }}</span>\r\n <span class=\"message\">{{ fileFormatsString }}</span>\r\n <span class=\"message\"> max {{ maxSizeMb }} Mb</span>\r\n </div>\r\n </div>\r\n @if (autoUpload == false && files && files.length > 0) {\r\n <ui-action-button\r\n [code]=\"'default-upload'\"\r\n [descriptor]=\"uploadButton\"\r\n (actionClick)=\"fileUploadPrime.upload()\"\r\n />\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #fileContainer let-file let-i=\"index\">\r\n <div class=\"p-fileupload-file\">\r\n @if (file.objectURL) {\r\n <img role=\"presentation\" [alt]=\"file.name\" [src]=\"file.objectURL\" width=\"50\" height=\"50\" />\r\n } @else {\r\n <i class=\"pi pi-file\" style=\"font-size: 2rem\"></i>\r\n }\r\n\r\n <div class=\"fileData\">\r\n <span class=\"fileName\">{{ file.name }}</span>\r\n <span class=\"fileSize\">{{ formatSize(file.size) }}</span>\r\n </div>\r\n <div class=\"fileButtons\">\r\n <smart-icon\r\n class=\"downloadIcon\"\r\n icon=\"download\"\r\n [attr.data-testid]=\"'default_download'\"\r\n (click)=\"downloadFile(file)\"\r\n ></smart-icon>\r\n <smart-icon\r\n class=\"removeIcon\"\r\n icon=\"trash\"\r\n [attr.data-testid]=\"'default_remove'\"\r\n (click)=\"fileUploadPrime.remove($event, i)\"\r\n ></smart-icon>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{--border-color: #a6aabd60;--warninig-color: #be2d2e;--def-border-radius: .5rem}:host ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex!important;flex-direction:row;justify-content:center;flex-wrap:wrap;gap:1rem}:host ::ng-deep .p-fileupload .p-fileupload-row>div{width:fit-content}:host ::ng-deep .p-fileupload .p-fileupload-content{padding:unset;align-content:center;text-align:center}.message{font-size:smaller;text-align:center;color:#6b7280}.title{font-size:unset;color:var(--primary-color)}.uploadField{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:1rem;padding:.5rem 1rem;cursor:pointer}.uploadField:hover{background-color:rgb(from var(--border-color) r g b / .1)}.disabledWidget ::ng-deep .uploadField:hover{background-color:unset;cursor:unset}:host ::ng-deep .p-fileupload-row{border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}:host ::ng-deep .p-fileupload-choose,:host ::ng-deep .p-fileupload-row ::ng-deep button,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button{background-color:var(--primary-color);border-color:var(--primary-color)}:host ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.8)}.disabledWidget ::ng-deep *{opacity:.85}:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-choose:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-row ::ng-deep button:hover,:host ::ng-deep .disabledWidget ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover{background-color:unset;cursor:unset}.p-fileupload-file{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:1rem;padding:1rem;border:1px solid #dee2e6}.p-file-data{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.fileSize{display:flex;justify-content:flex-start}.fileData{flex:1;display:flex;flex-direction:column;justify-content:flex-end;padding-right:1rem}.uploadData{flex:1;display:flex;flex-direction:row;justify-content:flex-start;gap:1rem}.fileName{text-align:start}.singlePrimeNg ::ng-deep .uploadField{padding:1rem}.uploadIcon{align-content:center}:host ::ng-deep .uploadIcon i{font-size:2rem}:host ::ng-deep .p-fileupload-file i,:host ::ng-deep .uploadIcon i,:host ::ng-deep img{display:flex;justify-content:center;width:3rem}.dataField{display:flex;flex-direction:column;justify-content:flex-start;align-items:baseline}:host ::ng-deep .p-fileupload-content p-progressbar,:host ::ng-deep .p-fileupload ::ng-deep .p-fileupload-buttonbar{display:none!important}:host ::ng-deep .p-fileupload-content{display:flex;flex-direction:column-reverse}:host ::ng-deep .p-fileupload-file{border:unset;border-top:1px solid var(--border-color)}:host ::ng-deep .p-fileupload.p-fileupload-advanced .p-message{margin:unset}.fileButtons{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.fileButtons ::ng-deep .pi{width:unset!important}.removeIcon ::ng-deep i,.removeIcon ::ng-deep mat-icon{color:var(--warninig-color)}.removeIcon ::ng-deep .pi,.downloadIcon ::ng-deep .pi{font-size:1.5rem!important}.removeIcon ::ng-deep mat-icon,.downloadIcon ::ng-deep mat-icon{font-size:2rem}.removeIcon:hover,.downloadIcon:hover{cursor:pointer}smart-icon{display:flex;align-items:center}\n"] }]
75
75
  }], propDecorators: { fileUploadPrime: [{
76
76
  type: ViewChild,
77
77
  args: ['fileUploadPrimeNg']
@@ -92,4 +92,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
92
92
  }], uploadFilesEvent: [{
93
93
  type: Output
94
94
  }] } });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWUtZmlsZS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvdXBsb2FkLXdpZGdldC9wcmltZS1maWxlLXVwbG9hZGVyL3ByaW1lLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi9jb21wb25lbnRzL3VwbG9hZC13aWRnZXQvcHJpbWUtZmlsZS11cGxvYWRlci9wcmltZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFDTCxZQUFZLEVBQ1osa0JBQWtCLEdBRW5CLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7QUFPdEQsTUFBTSxPQUFPLDBCQUEwQjtJQUx2QztRQVNXLGVBQVUsR0FBYSxLQUFLLENBQUM7UUFDN0IsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUl2QixlQUFVLEdBQWEsS0FBSyxDQUFDO1FBYTVCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUV6QyxDQUFDO0tBeUROO0lBbkVDLFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksdUJBQXVCLENBQUM7UUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLHVC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dHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdwcmltZW5nL2ZpbGV1cGxvYWQnO1xyXG5pbXBvcnQgeyBVcGxvYWRXaWRnZXRVdGlscyB9IGZyb20gJy4uL3VwbG9hZC13aWRnZXQudXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIEljb25Qb3NpdGlvbixcclxuICBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncHJpbWUtZmlsZS11cGxvYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ByaW1lLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9wcmltZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJpbWVGaWxlVXBsb2FkZXJDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWRQcmltZU5nJykgZmlsZVVwbG9hZFByaW1lITogRmlsZVVwbG9hZDtcclxuXHJcbiAgQElucHV0KCkgaXNNdWx0aXBsZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgYXV0b1VwbG9hZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtYXhTaXplTWI6IG51bWJlciA9IDI1O1xyXG4gIEBJbnB1dCgpIGZpbGVGb3JtYXRzPzogc3RyaW5nW107XHJcbiAgQElucHV0KCkgdGl0bGU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3ViVGl0bGU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNEaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbWF4U2l6ZUJ5dGVzPzogbnVtYmVyO1xyXG4gIGZpbGVGb3JtYXRzU3RyaW5nPzogc3RyaW5nO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlID8/ICdEb2t1bWVudHVtIGhvenrDoWFkw6FzYSc7XHJcbiAgICB0aGlzLnN1YlRpdGxlID0gdGhpcy5zdWJUaXRsZSA/PyAndGFsbMOzesOhcyB2YWd5IGJlaMO6esOhcyc7XHJcbiAgICB0aGlzLm1heFNpemVCeXRlcyA9IHRoaXMubWF4U2l6ZU1iICogMTAyNCAqIDEwMjQ7XHJcblxyXG4gICAgdGhpcy5maWxlRm9ybWF0c1N0cmluZyA9IHRoaXMuZmlsZUZvcm1hdHM/LmpvaW4oJywgJykgPz8gJyc7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgdXBsb2FkRmlsZXNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgZmlsZXM6IGFueVtdO1xyXG4gIH0+KCk7XHJcblxyXG4gIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIC9pUGhvbmV8aVBhZHxpUG9kfEFuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVVcGxvYWRQcmltZS5jbGVhcigpO1xyXG4gIH1cclxuICBvbkZpbGVTZWxlY3QoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlVXBsb2FkUHJpbWUub25GaWxlU2VsZWN0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdXRvVXBsb2FkICYmIGV2ZW50LmN1cnJlbnRGaWxlcy5sZW5ndGggPT0gZXZlbnQuZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZXMoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZXMoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRGaWxlc0V2ZW50LmVtaXQoe1xyXG4gICAgICBmaWxlczogdGhpcy5maWxlVXBsb2FkUHJpbWUuZmlsZXMsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpbGVVcGxvYWRQcmltZS5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRGaWxlKGZpbGU6IEZpbGUpIHtcclxuICAgIGxldCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgYS5ocmVmID0gdXJsO1xyXG4gICAgYS5kb3dubG9hZCA9IGZpbGUubmFtZTtcclxuICAgIGEuY2xpY2soKTtcclxuICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFVwbG9hZFdpZGdldFV0aWxzLmZvcm1hdFNpemUoYnl0ZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbGVzKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVVcGxvYWRQcmltZT8uZmlsZXM7XHJcbiAgfVxyXG5cclxuICBzZXQgZmlsZXMoZmlsZXM6IGFueVtdKSB7XHJcbiAgICB0aGlzLmZpbGVVcGxvYWRQcmltZS5maWxlcyA9IGZpbGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHVwbG9hZEJ1dHRvbigpOiBVaUFjdGlvbkRlc2NyaXB0b3Ige1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGl0bGU6ICdGZWx0w7ZsdMOpcycsXHJcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5SQUlTRUQsXHJcbiAgICAgIGljb246ICd1cGxvYWQnLFxyXG4gICAgICBpY29uUG9zaXRpb246IEljb25Qb3NpdGlvbi5QUkUsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGlzTXVsdGlwbGUpIHtcclxuICA8cC1maWxlVXBsb2FkXHJcbiAgICAjZmlsZVVwbG9hZFByaW1lTmdcclxuICAgIG5hbWU9XCJmaWxlc1tdXCJcclxuICAgIHVybD1cIlwiXHJcbiAgICAob25TZWxlY3QpPVwic2VsZWN0KCRldmVudClcIlxyXG4gICAgKG9uU2VuZCk9XCJ1cGxvYWRGaWxlcygkZXZlbnQpXCJcclxuICAgIFttdWx0aXBsZV09XCJpc011bHRpcGxlXCJcclxuICAgIFthY2NlcHRdPVwiZmlsZUZvcm1hdHNTdHJpbmdcIlxyXG4gICAgW21heEZpbGVTaXplXT1cIm1heFNpemVCeXRlc1wiXHJcbiAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkV2lkZ2V0OiBpc0Rpc2FibGVkIH1cIlxyXG4gICAgdXBsb2FkTGFiZWw9XCJGZWx0w7ZsdMOpc1wiXHJcbiAgICBjYW5jZWxMYWJlbD1cIk3DqWdzZW1cIlxyXG4gICAgY2hvb3NlTGFiZWw9XCJWw6FsYXN6dMOhc1wiXHJcbiAgPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVwbG9hZGVyXCIgLz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsZVwiIGxldC1maWxlIGxldC1pPVwiaW5kZXhcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbGVDb250YWluZXI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmaWxlLCBpOiBpIH1cIiAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtZmlsZVVwbG9hZD5cclxufSBAZWxzZSB7XHJcbiAgPHAtZmlsZVVwbG9hZFxyXG4gICAgI2ZpbGVVcGxvYWRQcmltZU5nXHJcbiAgICBuYW1lPVwiZmlsZXNbXVwiXHJcbiAgICB1cmw9XCJcIlxyXG4gICAgKG9uU2VsZWN0KT1cInNlbGVjdCgkZXZlbnQpXCJcclxuICAgIChvblNlbmQpPVwidXBsb2FkRmlsZXMoJGV2ZW50KVwiXHJcbiAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZVwiXHJcbiAgICBbYWNjZXB0XT1cImZpbGVGb3JtYXRzU3RyaW5nXCJcclxuICAgIFttYXhGaWxlU2l6ZV09XCJtYXhTaXplQnl0ZXNcIlxyXG4gICAgW25nQ2xhc3NdPVwieyBzaW5nbGVQcmltZU5nOiB0cnVlLCBhdXRvVXBsb2FkOiBhdXRvVXBsb2FkLCBkaXNhYmxlZFdpZGdldDogaXNEaXNhYmxlZCB9XCJcclxuICAgIHVwbG9hZExhYmVsPVwiRmVsdMO2bHTDqXNcIlxyXG4gICAgY2FuY2VsTGFiZWw9XCJNw6lnc2VtXCJcclxuICAgIGNob29zZUxhYmVsPVwiVsOhbGFzenTDoXNcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1cGxvYWRlclwiIC8+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbGVcIiBsZXQtZmlsZSBsZXQtaT1cImluZGV4XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWxlQ29udGFpbmVyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmlsZSwgaTogaSB9XCIgLz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLWZpbGVVcGxvYWQ+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdXBsb2FkZXIgbGV0LWZpbGUgbGV0LWk9XCJpbmRleFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ1cGxvYWRGaWVsZFwiIChjbGljayk9XCJmaWxlVXBsb2FkUHJpbWUuY2hvb3NlKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWREYXRhXCJcclxuICAgICAgPjxzbWFydC1pY29uIGNsYXNzPVwidXBsb2FkSWNvblwiIFtpY29uXT1cIid1cGxvYWQnXCI+PC9zbWFydC1pY29uPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0YUZpZWxkXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZSBtZXNzYWdlXCI+e3sgdGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXNzYWdlXCI+e3sgc3ViVGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXNzYWdlXCI+e3sgZmlsZUZvcm1hdHNTdHJpbmcgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXNzYWdlXCI+IG1heCB7eyBtYXhTaXplTWIgfX0gTWI8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKGF1dG9VcGxvYWQgPT0gZmFsc2UgJiYgZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgIFtjb2RlXT1cIidkZWZhdWx0LXVwbG9hZCdcIlxyXG4gICAgICAgIFtkZXNjcmlwdG9yXT1cInVwbG9hZEJ1dHRvblwiXHJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cImZpbGVVcGxvYWRQcmltZS51cGxvYWQoKVwiXHJcbiAgICAgIC8+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2ZpbGVDb250YWluZXIgbGV0LWZpbGUgbGV0LWk9XCJpbmRleFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJwLWZpbGV1cGxvYWQtZmlsZVwiPlxyXG4gICAgQGlmIChmaWxlLm9iamVjdFVSTCkge1xyXG4gICAgICA8aW1nIHJvbGU9XCJwcmVzZW50YXRpb25cIiBbYWx0XT1cImZpbGUubmFtZVwiIFtzcmNdPVwiZmlsZS5vYmplY3RVUkxcIiB3aWR0aD1cIjUwXCIgaGVpZ2h0PVwiNTBcIiAvPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICAgIDxpIGNsYXNzPVwicGkgcGktZmlsZVwiIHN0eWxlPVwiZm9udC1zaXplOiAycmVtXCI+PC9pPlxyXG4gICAgfVxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWxlRGF0YVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImZpbGVOYW1lXCI+e3sgZmlsZS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImZpbGVTaXplXCI+e3sgZm9ybWF0U2l6ZShmaWxlLnNpemUpIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZUJ1dHRvbnNcIj5cclxuICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICBjbGFzcz1cImRvd25sb2FkSWNvblwiXHJcbiAgICAgICAgaWNvbj1cImRvd25sb2FkXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGVmYXVsdF9kb3dubG9hZCdcIlxyXG4gICAgICAgIChjbGljayk9XCJkb3dubG9hZEZpbGUoZmlsZS5kYXRhVXJpKVwiXHJcbiAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgY2xhc3M9XCJyZW1vdmVJY29uXCJcclxuICAgICAgICBpY29uPVwidHJhc2hcIlxyXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidkZWZhdWx0X3JlbW92ZSdcIlxyXG4gICAgICAgIChjbGljayk9XCJmaWxlVXBsb2FkUHJpbWUucmVtb3ZlKCRldmVudCwgaSlcIlxyXG4gICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWUtZmlsZS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvdXBsb2FkLXdpZGdldC9wcmltZS1maWxlLXVwbG9hZGVyL3ByaW1lLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi9jb21wb25lbnRzL3VwbG9hZC13aWRnZXQvcHJpbWUtZmlsZS11cGxvYWRlci9wcmltZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFDTCxZQUFZLEVBQ1osa0JBQWtCLEdBRW5CLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7QUFPdEQsTUFBTSxPQUFPLDBCQUEwQjtJQUx2QztRQVNXLGVBQVUsR0FBYSxLQUFLLENBQUM7UUFDN0IsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUl2QixlQUFVLEdBQWEsS0FBSyxDQUFDO1FBYTVCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUV6QyxDQUFDO0tBeUROO0lBbkVDLFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksdUJBQXVCLENBQUM7UUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLHVC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dHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdwcmltZW5nL2ZpbGV1cGxvYWQnO1xyXG5pbXBvcnQgeyBVcGxvYWRXaWRnZXRVdGlscyB9IGZyb20gJy4uL3VwbG9hZC13aWRnZXQudXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIEljb25Qb3NpdGlvbixcclxuICBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uL3ZpZXctY29udGV4dC9hcGkvbW9kZWwvbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncHJpbWUtZmlsZS11cGxvYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ByaW1lLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9wcmltZS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJpbWVGaWxlVXBsb2FkZXJDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWRQcmltZU5nJykgZmlsZVVwbG9hZFByaW1lITogRmlsZVVwbG9hZDtcclxuXHJcbiAgQElucHV0KCkgaXNNdWx0aXBsZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgYXV0b1VwbG9hZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtYXhTaXplTWI6IG51bWJlciA9IDI1O1xyXG4gIEBJbnB1dCgpIGZpbGVGb3JtYXRzPzogc3RyaW5nW107XHJcbiAgQElucHV0KCkgdGl0bGU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3ViVGl0bGU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNEaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbWF4U2l6ZUJ5dGVzPzogbnVtYmVyO1xyXG4gIGZpbGVGb3JtYXRzU3RyaW5nPzogc3RyaW5nO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlID8/ICdEb2t1bWVudHVtIGhvenrDoWFkw6FzYSc7XHJcbiAgICB0aGlzLnN1YlRpdGxlID0gdGhpcy5zdWJUaXRsZSA/PyAndGFsbMOzesOhcyB2YWd5IGJlaMO6esOhcyc7XHJcbiAgICB0aGlzLm1heFNpemVCeXRlcyA9IHRoaXMubWF4U2l6ZU1iICogMTAyNCAqIDEwMjQ7XHJcblxyXG4gICAgdGhpcy5maWxlRm9ybWF0c1N0cmluZyA9IHRoaXMuZmlsZUZvcm1hdHM/LmpvaW4oJywgJykgPz8gJyc7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgdXBsb2FkRmlsZXNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgZmlsZXM6IGFueVtdO1xyXG4gIH0+KCk7XHJcblxyXG4gIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIC9pUGhvbmV8aVBhZHxpUG9kfEFuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVVcGxvYWRQcmltZS5jbGVhcigpO1xyXG4gIH1cclxuICBvbkZpbGVTZWxlY3QoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlVXBsb2FkUHJpbWUub25GaWxlU2VsZWN0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdXRvVXBsb2FkICYmIGV2ZW50LmN1cnJlbnRGaWxlcy5sZW5ndGggPT0gZXZlbnQuZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZXMoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZXMoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRGaWxlc0V2ZW50LmVtaXQoe1xyXG4gICAgICBmaWxlczogdGhpcy5maWxlVXBsb2FkUHJpbWUuZmlsZXMsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpbGVVcGxvYWRQcmltZS5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRGaWxlKGZpbGU6IEZpbGUpIHtcclxuICAgIGxldCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgYS5ocmVmID0gdXJsO1xyXG4gICAgYS5kb3dubG9hZCA9IGZpbGUubmFtZTtcclxuICAgIGEuY2xpY2soKTtcclxuICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFVwbG9hZFdpZGdldFV0aWxzLmZvcm1hdFNpemUoYnl0ZXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbGVzKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVVcGxvYWRQcmltZT8uZmlsZXM7XHJcbiAgfVxyXG5cclxuICBzZXQgZmlsZXMoZmlsZXM6IGFueVtdKSB7XHJcbiAgICB0aGlzLmZpbGVVcGxvYWRQcmltZS5maWxlcyA9IGZpbGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHVwbG9hZEJ1dHRvbigpOiBVaUFjdGlvbkRlc2NyaXB0b3Ige1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGl0bGU6ICdGZWx0w7ZsdMOpcycsXHJcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5SQUlTRUQsXHJcbiAgICAgIGljb246ICd1cGxvYWQnLFxyXG4gICAgICBpY29uUG9zaXRpb246IEljb25Qb3NpdGlvbi5QUkUsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGlzTXVsdGlwbGUpIHtcclxuICA8cC1maWxlVXBsb2FkXHJcbiAgICAjZmlsZVVwbG9hZFByaW1lTmdcclxuICAgIG5hbWU9XCJmaWxlc1tdXCJcclxuICAgIHVybD1cIlwiXHJcbiAgICAob25TZWxlY3QpPVwic2VsZWN0KCRldmVudClcIlxyXG4gICAgKG9uU2VuZCk9XCJ1cGxvYWRGaWxlcygkZXZlbnQpXCJcclxuICAgIFttdWx0aXBsZV09XCJpc011bHRpcGxlXCJcclxuICAgIFthY2NlcHRdPVwiZmlsZUZvcm1hdHNTdHJpbmdcIlxyXG4gICAgW21heEZpbGVTaXplXT1cIm1heFNpemVCeXRlc1wiXHJcbiAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkV2lkZ2V0OiBpc0Rpc2FibGVkIH1cIlxyXG4gICAgdXBsb2FkTGFiZWw9XCJGZWx0w7ZsdMOpc1wiXHJcbiAgICBjYW5jZWxMYWJlbD1cIk3DqWdzZW1cIlxyXG4gICAgY2hvb3NlTGFiZWw9XCJWw6FsYXN6dMOhc1wiXHJcbiAgPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVwbG9hZGVyXCIgLz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsZVwiIGxldC1maWxlIGxldC1pPVwiaW5kZXhcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbGVDb250YWluZXI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmaWxlLCBpOiBpIH1cIiAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtZmlsZVVwbG9hZD5cclxufSBAZWxzZSB7XHJcbiAgPHAtZmlsZVVwbG9hZFxyXG4gICAgI2ZpbGVVcGxvYWRQcmltZU5nXHJcbiAgICBuYW1lPVwiZmlsZXNbXVwiXHJcbiAgICB1cmw9XCJcIlxyXG4gICAgKG9uU2VsZWN0KT1cInNlbGVjdCgkZXZlbnQpXCJcclxuICAgIChvblNlbmQpPVwidXBsb2FkRmlsZXMoJGV2ZW50KVwiXHJcbiAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXHJcbiAgICBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZVwiXHJcbiAgICBbYWNjZXB0XT1cImZpbGVGb3JtYXRzU3RyaW5nXCJcclxuICAgIFttYXhGaWxlU2l6ZV09XCJtYXhTaXplQnl0ZXNcIlxyXG4gICAgW25nQ2xhc3NdPVwieyBzaW5nbGVQcmltZU5nOiB0cnVlLCBhdXRvVXBsb2FkOiBhdXRvVXBsb2FkLCBkaXNhYmxlZFdpZGdldDogaXNEaXNhYmxlZCB9XCJcclxuICAgIHVwbG9hZExhYmVsPVwiRmVsdMO2bHTDqXNcIlxyXG4gICAgY2FuY2VsTGFiZWw9XCJNw6lnc2VtXCJcclxuICAgIGNob29zZUxhYmVsPVwiVsOhbGFzenTDoXNcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1cGxvYWRlclwiIC8+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbGVcIiBsZXQtZmlsZSBsZXQtaT1cImluZGV4XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWxlQ29udGFpbmVyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZmlsZSwgaTogaSB9XCIgLz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLWZpbGVVcGxvYWQ+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdXBsb2FkZXIgbGV0LWZpbGUgbGV0LWk9XCJpbmRleFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ1cGxvYWRGaWVsZFwiIChjbGljayk9XCJmaWxlVXBsb2FkUHJpbWUuY2hvb3NlKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWREYXRhXCJcclxuICAgICAgPjxzbWFydC1pY29uIGNsYXNzPVwidXBsb2FkSWNvblwiIFtpY29uXT1cIid1cGxvYWQnXCI+PC9zbWFydC1pY29uPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0YUZpZWxkXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZSBtZXNzYWdlXCI+e3sgdGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXNzYWdlXCI+e3sgc3ViVGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXNzYWdlXCI+e3sgZmlsZUZvcm1hdHNTdHJpbmcgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXNzYWdlXCI+IG1heCB7eyBtYXhTaXplTWIgfX0gTWI8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKGF1dG9VcGxvYWQgPT0gZmFsc2UgJiYgZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgIFtjb2RlXT1cIidkZWZhdWx0LXVwbG9hZCdcIlxyXG4gICAgICAgIFtkZXNjcmlwdG9yXT1cInVwbG9hZEJ1dHRvblwiXHJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cImZpbGVVcGxvYWRQcmltZS51cGxvYWQoKVwiXHJcbiAgICAgIC8+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2ZpbGVDb250YWluZXIgbGV0LWZpbGUgbGV0LWk9XCJpbmRleFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJwLWZpbGV1cGxvYWQtZmlsZVwiPlxyXG4gICAgQGlmIChmaWxlLm9iamVjdFVSTCkge1xyXG4gICAgICA8aW1nIHJvbGU9XCJwcmVzZW50YXRpb25cIiBbYWx0XT1cImZpbGUubmFtZVwiIFtzcmNdPVwiZmlsZS5vYmplY3RVUkxcIiB3aWR0aD1cIjUwXCIgaGVpZ2h0PVwiNTBcIiAvPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICAgIDxpIGNsYXNzPVwicGkgcGktZmlsZVwiIHN0eWxlPVwiZm9udC1zaXplOiAycmVtXCI+PC9pPlxyXG4gICAgfVxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWxlRGF0YVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImZpbGVOYW1lXCI+e3sgZmlsZS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImZpbGVTaXplXCI+e3sgZm9ybWF0U2l6ZShmaWxlLnNpemUpIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsZUJ1dHRvbnNcIj5cclxuICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICBjbGFzcz1cImRvd25sb2FkSWNvblwiXHJcbiAgICAgICAgaWNvbj1cImRvd25sb2FkXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGVmYXVsdF9kb3dubG9hZCdcIlxyXG4gICAgICAgIChjbGljayk9XCJkb3dubG9hZEZpbGUoZmlsZSlcIlxyXG4gICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgIGNsYXNzPVwicmVtb3ZlSWNvblwiXHJcbiAgICAgICAgaWNvbj1cInRyYXNoXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGVmYXVsdF9yZW1vdmUnXCJcclxuICAgICAgICAoY2xpY2spPVwiZmlsZVVwbG9hZFByaW1lLnJlbW92ZSgkZXZlbnQsIGkpXCJcclxuICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -232,7 +232,7 @@ export class VoiceRecordWidgetComponent {
232
232
  });
233
233
  }
234
234
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: VoiceRecordWidgetComponent, deps: [{ token: COMPONENT_LIBRARY, optional: true }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
235
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: VoiceRecordWidgetComponent, selector: "voice-record-widget", inputs: { openDirection: "openDirection" }, outputs: { recordingSaved: "recordingSaved" }, viewQueries: [{ propertyName: "waveformRef", first: true, predicate: ["waveform"], descendants: true }, { propertyName: "mainButton", first: true, predicate: ["mainButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\r\n class=\"recorderContainer\"\r\n [class.direction-left]=\"isLeftDirection\"\r\n [class.direction-right]=\"!isLeftDirection\"\r\n [class.active]=\"isWaveformOpen || isRecording || !!recordedBlob\"\r\n [class.isRecording]=\"isRecording\"\r\n [class.hasRecording]=\"recordedBlob\"\r\n>\r\n <div class=\"recorderMain\">\r\n <div class=\"recorderToolbar\">\r\n <!-- Start Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n #mainButton\r\n *ngIf=\"!isRecording\"\r\n [descriptor]=\"micButton\"\r\n (actionClick)=\"startRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Stop Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n #mainButton\r\n *ngIf=\"isRecording\"\r\n [descriptor]=\"stopButton\"\r\n (actionClick)=\"stopRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Save Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob\"\r\n [descriptor]=\"saveButton\"\r\n (actionClick)=\"saveRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Start Play -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob && !isPlaying\"\r\n [descriptor]=\"playButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n\r\n <!-- Stop Play -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob && isPlaying\"\r\n [descriptor]=\"stopPlaybackButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n\r\n @if (isRecording) {\r\n <div class=\"progress\">{{ time }}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"waveformBand\" [class.open]=\"isWaveformOpen || isRecording || !!recordedBlob\">\r\n <div class=\"waveformGrid\"></div>\r\n <div class=\"waveform\" #waveform></div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}:host ::ng-deep .waveform{height:unset!important}.recorderContainer{display:flex;flex-direction:row;justify-content:space-between;width:100%;min-width:0;align-items:center;gap:.5rem}.active ::ng-deep .recorderToolbar{border:1px solid #e5e7eb;border-radius:.5rem}.isRecording ::ng-deep .recorderToolbar{padding-right:1rem}.recorderToolbar ::ng-deep .sb4-red,.recorderToolbar ::ng-deep .sb4-primary{border:1px solid #e5e7eb;box-shadow:unset}.active ::ng-deep .recorderToolbar ::ng-deep .sb4-red,.active ::ng-deep .recorderToolbar ::ng-deep .sb4-primary{border:unset}.mainButton ::ng-deep .sb4-red,.mainButton ::ng-deep .sb4-primary{padding:.5rem .75rem}.recorderMain{display:flex;align-items:center;min-width:0;flex:1}.direction-right .recorderMain{flex-direction:row}.direction-left .recorderMain{flex-direction:row-reverse}.waveform{width:100%;height:45px}.waveformBand{position:relative;display:grid;align-items:center;width:0;max-width:0;min-width:0;opacity:0;overflow:hidden;border-radius:5px;flex:1 1 0;transform:scaleX(.96);will-change:opacity,transform,margin;transition:max-width .22s ease,opacity .18s ease,margin .22s ease,transform .22s ease}.waveformBand.open{min-width:35px;max-width:100%;opacity:1;transform:scaleX(1)}.direction-right .waveformBand{margin-left:0}.direction-left .waveformBand{margin-right:0}.direction-right .waveformBand.open{margin-left:.45rem}.direction-left .waveformBand.open{margin-right:.45rem}.waveformGrid{position:absolute;inset:0;border:1px solid #e5e7eb;border-radius:.5rem;background:repeating-linear-gradient(to right,rgba(148,163,184,.35) 0,rgba(148,163,184,.35) 2px,transparent 2px,transparent 8px),linear-gradient(to bottom,#94a3b814,#94a3b805);pointer-events:none}.recorderToolbar{background-color:transparent;display:flex;flex-direction:row;align-items:center}.progress{align-content:center;font-size:1rem;height:100%;color:#6b7280}.hasRecording ::ng-deep .recorderToolbar ui-action-button{border-right:1px solid #e5e7eb}.hasRecording ::ng-deep .recorderToolbar ui-action-button:last-child{border-right:unset}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
235
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: VoiceRecordWidgetComponent, selector: "voice-record-widget", inputs: { openDirection: "openDirection" }, outputs: { recordingSaved: "recordingSaved" }, viewQueries: [{ propertyName: "waveformRef", first: true, predicate: ["waveform"], descendants: true }, { propertyName: "mainButton", first: true, predicate: ["mainButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\r\n class=\"recorderContainer\"\r\n [class.direction-left]=\"isLeftDirection\"\r\n [class.direction-right]=\"!isLeftDirection\"\r\n [class.active]=\"isWaveformOpen || isRecording || !!recordedBlob\"\r\n [class.isRecording]=\"isRecording\"\r\n [class.hasRecording]=\"recordedBlob\"\r\n>\r\n <div class=\"recorderMain\">\r\n <div class=\"recorderToolbar\">\r\n <!-- Start Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n #mainButton\r\n *ngIf=\"!isRecording\"\r\n [descriptor]=\"micButton\"\r\n (actionClick)=\"startRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Stop Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n #mainButton\r\n *ngIf=\"isRecording\"\r\n [descriptor]=\"stopButton\"\r\n (actionClick)=\"stopRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Save Recording -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob\"\r\n [descriptor]=\"saveButton\"\r\n (actionClick)=\"saveRecording()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- Start Play -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob && !isPlaying\"\r\n [descriptor]=\"playButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n\r\n <!-- Stop Play -->\r\n <ui-action-button\r\n class=\"mainButton\"\r\n *ngIf=\"recordedBlob && isPlaying\"\r\n [descriptor]=\"stopPlaybackButton\"\r\n (actionClick)=\"replayRecording()\"\r\n ></ui-action-button>\r\n\r\n @if (isRecording) {\r\n <div class=\"progress\">{{ time }}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"waveformBand\" [class.open]=\"isWaveformOpen || isRecording || !!recordedBlob\">\r\n <div class=\"waveformGrid\"></div>\r\n <div class=\"waveform\" #waveform></div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}:host ::ng-deep .waveform{height:unset!important}.recorderContainer{display:flex;flex-direction:row;justify-content:space-between;width:100%;min-width:0;align-items:center;gap:.5rem}.active ::ng-deep .recorderToolbar{border:1px solid #e5e7eb;border-radius:.5rem}.isRecording ::ng-deep .recorderToolbar{padding-right:1rem}.recorderToolbar ::ng-deep .sb4-red,.recorderToolbar ::ng-deep .sb4-primary{border:1px solid #e5e7eb;box-shadow:unset}.active ::ng-deep .recorderToolbar ::ng-deep .sb4-red,.active ::ng-deep .recorderToolbar ::ng-deep .sb4-primary{border:unset}.mainButton ::ng-deep .sb4-red,.mainButton ::ng-deep .sb4-primary{padding:.5rem .75rem}.recorderMain{display:flex;align-items:center;min-width:0;flex:1}.direction-right .recorderMain{flex-direction:row}.direction-left .recorderMain{flex-direction:row-reverse}.waveform{width:100%;height:45px}.waveformBand{position:relative;display:grid;align-items:center;width:0;max-width:0;min-width:0;opacity:0;overflow:hidden;border-radius:5px;flex:1 1 0;transform:scaleX(.96);will-change:opacity,transform,margin;transition:max-width .22s ease,opacity .18s ease,margin .22s ease,transform .22s ease}.waveformBand.open{min-width:35px;max-width:100%;opacity:1;transform:scaleX(1)}.direction-right .waveformBand{margin-left:0}.direction-left .waveformBand{margin-right:0}.direction-right .waveformBand.open{margin-left:.45rem}.direction-left .waveformBand.open{margin-right:.45rem}.waveformGrid{position:absolute;inset:0;border:1px solid #e5e7eb;border-radius:.5rem;background:repeating-linear-gradient(to right,rgba(148,163,184,.35) 0,rgba(148,163,184,.35) 2px,transparent 2px,transparent 8px),linear-gradient(to bottom,#94a3b814,#94a3b805);pointer-events:none}.recorderToolbar{background-color:transparent;display:flex;flex-direction:row;align-items:center}.progress{align-content:center;font-size:1rem;height:100%;color:#6b7280}.hasRecording ::ng-deep .recorderToolbar ui-action-button{border-right:1px solid #e5e7eb}.hasRecording ::ng-deep .recorderToolbar ui-action-button:last-child{border-right:unset}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "identifier", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
236
236
  }
237
237
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: VoiceRecordWidgetComponent, decorators: [{
238
238
  type: Component,
@@ -62,7 +62,7 @@ export class UiActionConfirmDialogComponent {
62
62
  this.service.cancel();
63
63
  }
64
64
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionConfirmDialogComponent, deps: [{ token: 'confirmDialogService' }, { token: COMPONENT_LIBRARY }, { token: i1.UiActionDescriptorService }], target: i0.ɵɵFactoryTarget.Component }); }
65
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionConfirmDialogComponent, selector: "app-ui-action-confirm-dialog", ngImport: i0, template: "@if(descriptor){\r\n<div class=\"folderNameDialogContainer\">\r\n <div class=\"headerContainer\">\r\n <h3 class=\"color-accent-700\">\r\n {{ getTitle() }}\r\n </h3>\r\n @if(compLib === componentLibrary.MATERIAL) {\r\n <button mat-icon-button (click)=\"cancel()\">\r\n <smart-icon [color]=\"'primary'\" [icon]=\"'X'\"></smart-icon>\r\n </button>\r\n }@else {\r\n <p-button icon=\"pi pi-times\" [rounded]=\"true\" [text]=\"true\" (click)=\"cancel()\" />\r\n }\r\n </div>\r\n <p>\r\n {{ getText() }}\r\n </p>\r\n <div class=\"folderNameDialogButtonsContainer\">\r\n <ui-action-button\r\n [descriptor]=\"getCancelButton()\"\r\n [addedCssClass]=\"getCancelCssClass()\"\r\n [code]=\"'confirm-cancel'\"\r\n (actionClick)=\"cancel()\"\r\n ></ui-action-button>\r\n <ui-action-button\r\n [descriptor]=\"getActionButton()\"\r\n [addedCssClass]=\"getActionCssClass()\"\r\n [code]=\"'confirm-action'\"\r\n (actionClick)=\"doAction()\"\r\n >\r\n </ui-action-button>\r\n </div>\r\n</div>\r\n}\r\n", styles: [".folderNameDialogContainer{width:25rem;display:flex;flex-direction:column;gap:1rem;padding:.5rem}.headerContainer{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-top:1rem}.headerContainer h3{margin:0}.folderNameDialogButtonsContainer{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}\n"], dependencies: [{ kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i4.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i5.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
65
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionConfirmDialogComponent, selector: "app-ui-action-confirm-dialog", ngImport: i0, template: "@if(descriptor){\r\n<div class=\"folderNameDialogContainer\">\r\n <div class=\"headerContainer\">\r\n <h3 class=\"color-accent-700\">\r\n {{ getTitle() }}\r\n </h3>\r\n @if(compLib === componentLibrary.MATERIAL) {\r\n <button mat-icon-button (click)=\"cancel()\">\r\n <smart-icon [color]=\"'primary'\" [icon]=\"'X'\"></smart-icon>\r\n </button>\r\n }@else {\r\n <p-button icon=\"pi pi-times\" [rounded]=\"true\" [text]=\"true\" (click)=\"cancel()\" />\r\n }\r\n </div>\r\n <p>\r\n {{ getText() }}\r\n </p>\r\n <div class=\"folderNameDialogButtonsContainer\">\r\n <ui-action-button\r\n [descriptor]=\"getCancelButton()\"\r\n [addedCssClass]=\"getCancelCssClass()\"\r\n [code]=\"'confirm-cancel'\"\r\n (actionClick)=\"cancel()\"\r\n ></ui-action-button>\r\n <ui-action-button\r\n [descriptor]=\"getActionButton()\"\r\n [addedCssClass]=\"getActionCssClass()\"\r\n [code]=\"'confirm-action'\"\r\n (actionClick)=\"doAction()\"\r\n >\r\n </ui-action-button>\r\n </div>\r\n</div>\r\n}\r\n", styles: [".folderNameDialogContainer{width:25rem;display:flex;flex-direction:column;gap:1rem;padding:.5rem}.headerContainer{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-top:1rem}.headerContainer h3{margin:0}.folderNameDialogButtonsContainer{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}\n"], dependencies: [{ kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i4.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i5.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "identifier", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
66
66
  }
67
67
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionConfirmDialogComponent, decorators: [{
68
68
  type: Component,
@@ -85,7 +85,7 @@ export class UiActionFileUploadDialogComponent {
85
85
  this.service.cancel();
86
86
  }
87
87
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionFileUploadDialogComponent, deps: [{ token: 'fileUploadDialogService' }, { token: COMPONENT_LIBRARY }, { token: i1.UiActionDescriptorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
88
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionFileUploadDialogComponent, selector: "lib-ui-action-file-upload-dialog", viewQueries: [{ propertyName: "fileUploadPrime", first: true, predicate: ["fileUploadPrimeNg"], descendants: true }, { propertyName: "fileUploadMaterial", first: true, predicate: ["fileUploadMaterial"], descendants: true }], ngImport: i0, template: "<div class=\"folderNameDialogContainer\">\r\n <div class=\"headerContainer\">\r\n <h3 class=\"color-accent-700\">\r\n {{ getTitle() }}\r\n </h3>\r\n </div>\r\n\r\n @if(getText()){\r\n <p>\r\n {{ getText() }}\r\n </p>\r\n } @if(descriptor){\r\n <smart-upload-widget\r\n [uploadDescriptor]=\"descriptor.upload\"\r\n [isMultiple]=\"isMultiple ?? true\"\r\n (uploadFilesEvent)=\"upload($event)\"\r\n />\r\n }\r\n\r\n <div class=\"folderNameDialogButtonsContainer\">\r\n <ui-action-button [descriptor]=\"cancelButton\" (actionClick)=\"cancel()\"></ui-action-button>\r\n </div>\r\n</div>\r\n", styles: [".folderNameDialogContainer{display:flex;flex-direction:column;justify-content:center;gap:1rem;min-width:30vw}photo-capture-widget{width:100%;max-width:100%;overflow:hidden;display:flex;flex-direction:column;align-items:center}.headerContainer{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-top:.5rem}.headerContainer ::ng-deep button{color:var(--primary-color);border:unset}.headerContainer h3{margin:0;font-size:1.5rem}.folderNameDialogButtonsContainer{display:flex;flex-direction:row;justify-content:flex-start;gap:.5rem}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap;gap:1rem}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-row>div{width:fit-content}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-content{padding:unset;align-content:center;text-align:center}.message{text-align:center;color:#6b7280}.uploadField{display:flex;flex-direction:row;justify-content:center;align-items:center;gap:1rem;padding:1rem}.folderNameDialogContainer ::ng-deep .p-fileupload-row{border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.folderNameDialogContainer ::ng-deep .p-fileupload-choose,.folderNameDialogContainer ::ng-deep .p-fileupload-row ::ng-deep button,.folderNameDialogContainer ::ng-deep .p-fileupload-buttonbar ::ng-deep button{background-color:var(--primary-color);border-color:var(--primary-color)}.folderNameDialogContainer ::ng-deep .p-fileupload-choose:hover,.folderNameDialogContainer ::ng-deep .p-fileupload-row ::ng-deep button:hover,.folderNameDialogContainer ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover,.folderNameDialogButtonsContainer ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.8)}.headerContainer ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.1)}@media (max-width: 900px){.folderNameDialogContainer{width:100%}}.p-fileupload-file{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:1rem;padding:1rem;border:1px solid #dee2e6}.p-file-data{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.fileSize{padding-left:1rem;display:flex;justify-content:flex-end}.fileData{display:flex;flex-direction:column;justify-content:flex-end;padding-right:1rem}\n"], dependencies: [{ kind: "component", type: i2.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: i3.UploadWidgetComponent, selector: "smart-upload-widget", inputs: ["uploadDescriptor", "isMultiple", "isDisabled"], outputs: ["uploadFilesEvent"] }] }); }
88
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionFileUploadDialogComponent, selector: "lib-ui-action-file-upload-dialog", viewQueries: [{ propertyName: "fileUploadPrime", first: true, predicate: ["fileUploadPrimeNg"], descendants: true }, { propertyName: "fileUploadMaterial", first: true, predicate: ["fileUploadMaterial"], descendants: true }], ngImport: i0, template: "<div class=\"folderNameDialogContainer\">\r\n <div class=\"headerContainer\">\r\n <h3 class=\"color-accent-700\">\r\n {{ getTitle() }}\r\n </h3>\r\n </div>\r\n\r\n @if(getText()){\r\n <p>\r\n {{ getText() }}\r\n </p>\r\n } @if(descriptor){\r\n <smart-upload-widget\r\n [uploadDescriptor]=\"descriptor.upload\"\r\n [isMultiple]=\"isMultiple ?? true\"\r\n (uploadFilesEvent)=\"upload($event)\"\r\n />\r\n }\r\n\r\n <div class=\"folderNameDialogButtonsContainer\">\r\n <ui-action-button [descriptor]=\"cancelButton\" (actionClick)=\"cancel()\"></ui-action-button>\r\n </div>\r\n</div>\r\n", styles: [".folderNameDialogContainer{display:flex;flex-direction:column;justify-content:center;gap:1rem;min-width:30vw}photo-capture-widget{width:100%;max-width:100%;overflow:hidden;display:flex;flex-direction:column;align-items:center}.headerContainer{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-top:.5rem}.headerContainer ::ng-deep button{color:var(--primary-color);border:unset}.headerContainer h3{margin:0;font-size:1.5rem}.folderNameDialogButtonsContainer{display:flex;flex-direction:row;justify-content:flex-start;gap:.5rem}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap;gap:1rem}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-row>div{width:fit-content}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-content{padding:unset;align-content:center;text-align:center}.message{text-align:center;color:#6b7280}.uploadField{display:flex;flex-direction:row;justify-content:center;align-items:center;gap:1rem;padding:1rem}.folderNameDialogContainer ::ng-deep .p-fileupload-row{border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.folderNameDialogContainer ::ng-deep .p-fileupload-choose,.folderNameDialogContainer ::ng-deep .p-fileupload-row ::ng-deep button,.folderNameDialogContainer ::ng-deep .p-fileupload-buttonbar ::ng-deep button{background-color:var(--primary-color);border-color:var(--primary-color)}.folderNameDialogContainer ::ng-deep .p-fileupload-choose:hover,.folderNameDialogContainer ::ng-deep .p-fileupload-row ::ng-deep button:hover,.folderNameDialogContainer ::ng-deep .p-fileupload-buttonbar ::ng-deep button:hover,.folderNameDialogButtonsContainer ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.8)}.headerContainer ::ng-deep button:hover{background-color:rgba(from var(--primary-color) r g b/.1)}@media (max-width: 900px){.folderNameDialogContainer{width:100%}}.p-fileupload-file{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:1rem;padding:1rem;border:1px solid #dee2e6}.p-file-data{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.fileSize{padding-left:1rem;display:flex;justify-content:flex-end}.fileData{display:flex;flex-direction:column;justify-content:flex-end;padding-right:1rem}\n"], dependencies: [{ kind: "component", type: i2.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "identifier", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: i3.UploadWidgetComponent, selector: "smart-upload-widget", inputs: ["uploadDescriptor", "isMultiple", "isDisabled"], outputs: ["uploadFilesEvent"] }] }); }
89
89
  }
90
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionFileUploadDialogComponent, decorators: [{
91
91
  type: Component,
@@ -22,14 +22,14 @@ export class FileEditorToolbarComponent extends UiActionToolbarComponent {
22
22
  await super.fireAction(uiActionModel);
23
23
  }
24
24
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FileEditorToolbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
25
- 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 (click)=\"$event.stopPropagation()\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n horizontalToolbar: isHorizontal,\r\n alignedStart: isAlignedStart,\r\n alignedEnd: isAlignedEnd,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.code === 'themeSelector') {\r\n <theme-selector [model]=\"uiActionModel\"></theme-selector>\r\n } @else if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ng-container\r\n *ngTemplateOutlet=\"menuTypes; context: { uiActionModel: uiActionModel }\"\r\n ></ng-container>\r\n } @else {\r\n <ui-action-button\r\n (mouseenter)=\"onHover()\"\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n [viewActivated]=\"uiActionModel.uiAction.viewActivated\"\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\r\n<ng-template #menuTypes let-uiActionModel=\"uiActionModel\">\r\n @switch (uiActionModel?.uiAction?.descriptor?.menu?.triggerType) {\r\n @case (triggerType.HOVER) {\r\n <ui-hover-menu\r\n #menu\r\n [toolbarId]=\"id\"\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-hover-menu>\r\n }\r\n @case (triggerType.CLICK) {\r\n <ui-tiered-menu\r\n #menu\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n }\r\n @default {\r\n <ui-tiered-menu\r\n #menu\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n }\r\n }\r\n</ng-template>\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}:host:has(.verticalToolbar){height:100%}:host:has(.horizontalToolbar.alignedEnd){width:100%}.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;height:100%}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%}.alignedStart{justify-content:flex-start}.alignedEnd{justify-content:flex-end}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: i3.ClickMenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection"], outputs: ["actionClick", "submenuOpened"] }, { kind: "component", type: i4.HoverMenuComponent, selector: "ui-hover-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection", "toolbarId"], outputs: ["actionClick", "submenuOpened"] }, { kind: "component", type: i5.ThemeSelectorComponent, selector: "theme-selector", inputs: ["model"] }] }); }
25
+ 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 (click)=\"$event.stopPropagation()\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n horizontalToolbar: isHorizontal,\r\n alignedStart: isAlignedStart,\r\n alignedEnd: isAlignedEnd,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.code === 'themeSelector') {\r\n <theme-selector [model]=\"uiActionModel\"></theme-selector>\r\n } @else if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ng-container\r\n *ngTemplateOutlet=\"menuTypes; context: { uiActionModel: uiActionModel }\"\r\n ></ng-container>\r\n } @else {\r\n <ui-action-button\r\n (mouseenter)=\"onHover()\"\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [identifier]=\"uiActionModel.uiAction.identifier\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n [viewActivated]=\"uiActionModel.uiAction.viewActivated\"\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\r\n<ng-template #menuTypes let-uiActionModel=\"uiActionModel\">\r\n @switch (uiActionModel?.uiAction?.descriptor?.menu?.triggerType) {\r\n @case (triggerType.HOVER) {\r\n <ui-hover-menu\r\n #menu\r\n [toolbarId]=\"id\"\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-hover-menu>\r\n }\r\n @case (triggerType.CLICK) {\r\n <ui-tiered-menu\r\n #menu\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n }\r\n @default {\r\n <ui-tiered-menu\r\n #menu\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n }\r\n }\r\n</ng-template>\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}:host:has(.verticalToolbar){height:100%}:host:has(.horizontalToolbar.alignedEnd){width:100%}.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;height:100%}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%}.alignedStart{justify-content:flex-start}.alignedEnd{justify-content:flex-end}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "identifier", "viewActivated", "addedCssClass", "addBasicClasses", "iconPlaceholder"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: i3.ClickMenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection"], outputs: ["actionClick", "submenuOpened"] }, { kind: "component", type: i4.HoverMenuComponent, selector: "ui-hover-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection", "toolbarId"], outputs: ["actionClick", "submenuOpened"] }, { kind: "component", type: i5.ThemeSelectorComponent, selector: "theme-selector", inputs: ["model"] }] }); }
26
26
  }
27
27
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FileEditorToolbarComponent, decorators: [{
28
28
  type: Component,
29
- 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 (click)=\"$event.stopPropagation()\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n horizontalToolbar: isHorizontal,\r\n alignedStart: isAlignedStart,\r\n alignedEnd: isAlignedEnd,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.code === 'themeSelector') {\r\n <theme-selector [model]=\"uiActionModel\"></theme-selector>\r\n } @else if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ng-container\r\n *ngTemplateOutlet=\"menuTypes; context: { uiActionModel: uiActionModel }\"\r\n ></ng-container>\r\n } @else {\r\n <ui-action-button\r\n (mouseenter)=\"onHover()\"\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n [viewActivated]=\"uiActionModel.uiAction.viewActivated\"\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\r\n<ng-template #menuTypes let-uiActionModel=\"uiActionModel\">\r\n @switch (uiActionModel?.uiAction?.descriptor?.menu?.triggerType) {\r\n @case (triggerType.HOVER) {\r\n <ui-hover-menu\r\n #menu\r\n [toolbarId]=\"id\"\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-hover-menu>\r\n }\r\n @case (triggerType.CLICK) {\r\n <ui-tiered-menu\r\n #menu\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n }\r\n @default {\r\n <ui-tiered-menu\r\n #menu\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n }\r\n }\r\n</ng-template>\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}:host:has(.verticalToolbar){height:100%}:host:has(.horizontalToolbar.alignedEnd){width:100%}.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;height:100%}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%}.alignedStart{justify-content:flex-start}.alignedEnd{justify-content:flex-end}\n"] }]
29
+ 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 (click)=\"$event.stopPropagation()\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n horizontalToolbar: isHorizontal,\r\n alignedStart: isAlignedStart,\r\n alignedEnd: isAlignedEnd,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.code === 'themeSelector') {\r\n <theme-selector [model]=\"uiActionModel\"></theme-selector>\r\n } @else if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ng-container\r\n *ngTemplateOutlet=\"menuTypes; context: { uiActionModel: uiActionModel }\"\r\n ></ng-container>\r\n } @else {\r\n <ui-action-button\r\n (mouseenter)=\"onHover()\"\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [identifier]=\"uiActionModel.uiAction.identifier\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n [viewActivated]=\"uiActionModel.uiAction.viewActivated\"\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\r\n<ng-template #menuTypes let-uiActionModel=\"uiActionModel\">\r\n @switch (uiActionModel?.uiAction?.descriptor?.menu?.triggerType) {\r\n @case (triggerType.HOVER) {\r\n <ui-hover-menu\r\n #menu\r\n [toolbarId]=\"id\"\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-hover-menu>\r\n }\r\n @case (triggerType.CLICK) {\r\n <ui-tiered-menu\r\n #menu\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n }\r\n @default {\r\n <ui-tiered-menu\r\n #menu\r\n (mouseenter)=\"onHover()\"\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n }\r\n }\r\n</ng-template>\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}:host:has(.verticalToolbar){height:100%}:host:has(.horizontalToolbar.alignedEnd){width:100%}.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;height:100%}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%}.alignedStart{justify-content:flex-start}.alignedEnd{justify-content:flex-end}\n"] }]
30
30
  }], propDecorators: { dataUri: [{
31
31
  type: Input
32
32
  }], actionEvent: [{
33
33
  type: Output
34
34
  }] } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2ZpbGUtZWRpdG9yLXRvb2xiYXIvZmlsZS1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7QUFRMUUsTUFBTSxPQUFPLDBCQUEyQixTQUFRLHdCQUF3QjtJQUx4RTs7UUFRWSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUVwQyxDQUFDO0tBWU47SUFWVSxLQUFLLENBQUMsVUFBVSxDQUFDLGFBQTRCO1FBQ3BELGFBQWEsQ0FBQyxRQUFRLEdBQUc7WUFDdkIsR0FBRyxhQUFhLENBQUMsUUFBUTtZQUN6QixNQUFNLEVBQUU7Z0JBQ04sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU07Z0JBQ2hDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTzthQUN2QjtTQUNGLENBQUM7UUFDRixNQUFNLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEMsQ0FBQzsrR0FoQlUsMEJBQTBCO21HQUExQiwwQkFBMEIsMkpDVHZDLHd4R0E2RkE7OzRGRHBGYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UscUJBQXFCOzhCQUt0QixPQUFPO3NCQUFmLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4uL3VpLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVpQWN0aW9uTW9kZWwgfSBmcm9tICcuLi91aS1hY3Rpb24ubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmaWxlLWVkaXRvci10b29sYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4uL3VpLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4uL3VpLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZUVkaXRvclRvb2xiYXJDb21wb25lbnQgZXh0ZW5kcyBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGRhdGFVcmkhOiBzdHJpbmc7XHJcblxyXG4gIEBPdXRwdXQoKSBhY3Rpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgdWlBY3Rpb25Nb2RlbDogVWlBY3Rpb25Nb2RlbDtcclxuICB9PigpO1xyXG5cclxuICBvdmVycmlkZSBhc3luYyBmaXJlQWN0aW9uKHVpQWN0aW9uTW9kZWw6IFVpQWN0aW9uTW9kZWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHVpQWN0aW9uTW9kZWwudWlBY3Rpb24gPSB7XHJcbiAgICAgIC4uLnVpQWN0aW9uTW9kZWwudWlBY3Rpb24sXHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIC4uLnVpQWN0aW9uTW9kZWwudWlBY3Rpb24ucGFyYW1zLFxyXG4gICAgICAgIF9kYXRhVXJpOiB0aGlzLmRhdGFVcmksXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgYXdhaXQgc3VwZXIuZmlyZUFjdGlvbih1aUFjdGlvbk1vZGVsKTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChpc1Njcm9sbGFibGUgJiYgc2Nyb2xsT25XcmFwKSB7XHJcbiAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgIFtkaXNhYmxlZF09XCIhaXNTY3JvbGxhYmxlXCJcclxuICAgIFtkZXNjcmlwdG9yXT1cImJ1dHRvbkxlZnRcIlxyXG4gICAgKGFjdGlvbkNsaWNrKT1cInNjcm9sbExlZnQoKVwiXHJcbiAgICAobW91c2Vkb3duKT1cInNjcm9sbFN0YXJ0KCdsZWZ0JylcIlxyXG4gICAgKG1vdXNldXApPVwic3RvcFNjcm9sbCgpXCJcclxuICAgIChtb3VzZWxlYXZlKT1cInN0b3BTY3JvbGwoKVwiXHJcbiAgICAodG91Y2hzdGFydCk9XCJzY3JvbGxTdGFydCgnbGVmdCcpXCJcclxuICAgICh0b3VjaGVuZCk9XCJzdG9wU2Nyb2xsKClcIlxyXG4gIC8+XHJcbn1cclxuXHJcbjxkaXZcclxuICAjY29udGFpbmVyXHJcbiAgY2xhc3M9XCJ1aUFjdGlvbkJ1dHRvbnNDb250YWluZXJcIlxyXG4gIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gIFtuZ0NsYXNzXT1cIntcclxuICAgIHNjcm9sbGFibGVDb250ZW50OiBzY3JvbGxPbldyYXAsXHJcbiAgICB2ZXJ0aWNhbFRvb2xiYXI6IGlzVmVydGljYWwsXHJcbiAgICBob3Jpem9udGFsVG9vbGJhcjogaXNIb3Jpem9udGFsLFxyXG4gICAgYWxpZ25lZFN0YXJ0OiBpc0FsaWduZWRTdGFydCxcclxuICAgIGFsaWduZWRFbmQ6IGlzQWxpZ25lZEVuZCxcclxuICB9XCJcclxuPlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHVpQWN0aW9uTW9kZWwgb2YgdWlBY3Rpb25Nb2RlbHNXaXRoRGVzY3JpcHRpb25zOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cclxuICAgIEBpZiAodWlBY3Rpb25Nb2RlbC51aUFjdGlvbi5jb2RlID09PSAndGhlbWVTZWxlY3RvcicpIHtcclxuICAgICAgPHRoZW1lLXNlbGVjdG9yIFttb2RlbF09XCJ1aUFjdGlvbk1vZGVsXCI+PC90aGVtZS1zZWxlY3Rvcj5cclxuICAgIH0gQGVsc2UgaWYgKHVpQWN0aW9uTW9kZWwudWlBY3Rpb24uc3ViQWN0aW9ucyAmJiB1aUFjdGlvbk1vZGVsLnVpQWN0aW9uLnN1YkFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51VHlwZXM7IGNvbnRleHQ6IHsgdWlBY3Rpb25Nb2RlbDogdWlBY3Rpb25Nb2RlbCB9XCJcclxuICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICAgIDx1aS1hY3Rpb24tYnV0dG9uXHJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Ib3ZlcigpXCJcclxuICAgICAgICBbZGVzY3JpcHRvcl09XCJ1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3IhXCJcclxuICAgICAgICBbY29kZV09XCJ1aUFjdGlvbk1vZGVsLnVpQWN0aW9uLmNvZGVcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIXVpQWN0aW9uTW9kZWwudWlBY3Rpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgIFthZGRlZENzc0NsYXNzXT1cInVpQWN0aW9uTW9kZWwuY3NzQ2xhc3NcIlxyXG4gICAgICAgIFt2aWV3QWN0aXZhdGVkXT1cInVpQWN0aW9uTW9kZWwudWlBY3Rpb24udmlld0FjdGl2YXRlZFwiXHJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tlZCgkZXZlbnQsIHVpQWN0aW9uTW9kZWwpXCJcclxuICAgICAgICAoYWN0aW9uRG91YmxlQ2xpY2spPVwib25BY3Rpb25Eb3VibGVDbGlja2VkKCRldmVudCwgdWlBY3Rpb25Nb2RlbClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvdWktYWN0aW9uLWJ1dHRvbj5cclxuICAgIH1cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcblxyXG5AaWYgKGlzU2Nyb2xsYWJsZSAmJiBzY3JvbGxPbldyYXApIHtcclxuICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgW2Rpc2FibGVkXT1cIiFpc1Njcm9sbGFibGVcIlxyXG4gICAgW2Rlc2NyaXB0b3JdPVwiYnV0dG9uUmlnaHRcIlxyXG4gICAgKGFjdGlvbkNsaWNrKT1cInNjcm9sbFJpZ2h0KClcIlxyXG4gICAgKG1vdXNlZG93bik9XCJzY3JvbGxTdGFydCgncmlnaHQnKVwiXHJcbiAgICAobW91c2V1cCk9XCJzdG9wU2Nyb2xsKClcIlxyXG4gICAgKG1vdXNlbGVhdmUpPVwic3RvcFNjcm9sbCgpXCJcclxuICAgICh0b3VjaHN0YXJ0KT1cInNjcm9sbFN0YXJ0KCdyaWdodCcpXCJcclxuICAgICh0b3VjaGVuZCk9XCJzdG9wU2Nyb2xsKClcIlxyXG4gIC8+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbWVudVR5cGVzIGxldC11aUFjdGlvbk1vZGVsPVwidWlBY3Rpb25Nb2RlbFwiPlxyXG4gIEBzd2l0Y2ggKHVpQWN0aW9uTW9kZWw/LnVpQWN0aW9uPy5kZXNjcmlwdG9yPy5tZW51Py50cmlnZ2VyVHlwZSkge1xyXG4gICAgQGNhc2UgKHRyaWdnZXJUeXBlLkhPVkVSKSB7XHJcbiAgICAgIDx1aS1ob3Zlci1tZW51XHJcbiAgICAgICAgI21lbnVcclxuICAgICAgICBbdG9vbGJhcklkXT1cImlkXCJcclxuICAgICAgICAobW91c2VlbnRlcik9XCJvbkhvdmVyKClcIlxyXG4gICAgICAgIFt0cmlnZ2VyQWN0aW9uXT1cInVpQWN0aW9uTW9kZWwudWlBY3Rpb25cIlxyXG4gICAgICAgIFtzdWJBY3Rpb25zXT1cInVpQWN0aW9uTW9kZWwudWlBY3Rpb24uc3ViQWN0aW9ucyFcIlxyXG4gICAgICAgIChhY3Rpb25DbGljayk9XCJvbkFjdGlvbkNsaWNrZWQoJGV2ZW50LCB1aUFjdGlvbk1vZGVsKVwiXHJcbiAgICAgID48L3VpLWhvdmVyLW1lbnU+XHJcbiAgICB9XHJcbiAgICBAY2FzZSAodHJpZ2dlclR5cGUuQ0xJQ0spIHtcclxuICAgICAgPHVpLXRpZXJlZC1tZW51XHJcbiAgICAgICAgI21lbnVcclxuICAgICAgICAobW91c2VlbnRlcik9XCJvbkhvdmVyKClcIlxyXG4gICAgICAgIFt0cmlnZ2VyQWN0aW9uXT1cInVpQWN0aW9uTW9kZWwudWlBY3Rpb25cIlxyXG4gICAgICAgIFtzdWJBY3Rpb25zXT1cInVpQWN0aW9uTW9kZWwudWlBY3Rpb24uc3ViQWN0aW9ucyFcIlxyXG4gICAgICAgIChhY3Rpb25DbGljayk9XCJvbkFjdGlvbkNsaWNrZWQoJGV2ZW50LCB1aUFjdGlvbk1vZGVsKVwiXHJcbiAgICAgID48L3VpLXRpZXJlZC1tZW51PlxyXG4gICAgfVxyXG4gICAgQGRlZmF1bHQge1xyXG4gICAgICA8dWktdGllcmVkLW1lbnVcclxuICAgICAgICAjbWVudVxyXG4gICAgICAgIChtb3VzZWVudGVyKT1cIm9uSG92ZXIoKVwiXHJcbiAgICAgICAgW3RyaWdnZXJBY3Rpb25dPVwidWlBY3Rpb25Nb2RlbC51aUFjdGlvblwiXHJcbiAgICAgICAgW3N1YkFjdGlvbnNdPVwidWlBY3Rpb25Nb2RlbC51aUFjdGlvbi5zdWJBY3Rpb25zIVwiXHJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tlZCgkZXZlbnQsIHVpQWN0aW9uTW9kZWwpXCJcclxuICAgICAgPjwvdWktdGllcmVkLW1lbnU+XHJcbiAgICB9XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2ZpbGUtZWRpdG9yLXRvb2xiYXIvZmlsZS1lZGl0b3ItdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7QUFRMUUsTUFBTSxPQUFPLDBCQUEyQixTQUFRLHdCQUF3QjtJQUx4RTs7UUFRWSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUVwQyxDQUFDO0tBWU47SUFWVSxLQUFLLENBQUMsVUFBVSxDQUFDLGFBQTRCO1FBQ3BELGFBQWEsQ0FBQyxRQUFRLEdBQUc7WUFDdkIsR0FBRyxhQUFhLENBQUMsUUFBUTtZQUN6QixNQUFNLEVBQUU7Z0JBQ04sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU07Z0JBQ2hDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTzthQUN2QjtTQUNGLENBQUM7UUFDRixNQUFNLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEMsQ0FBQzsrR0FoQlUsMEJBQTBCO21HQUExQiwwQkFBMEIsMkpDVHZDLHMxR0E4RkE7OzRGRHJGYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UscUJBQXFCOzhCQUt0QixPQUFPO3NCQUFmLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4uL3VpLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVpQWN0aW9uTW9kZWwgfSBmcm9tICcuLi91aS1hY3Rpb24ubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmaWxlLWVkaXRvci10b29sYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4uL3VpLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4uL3VpLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZUVkaXRvclRvb2xiYXJDb21wb25lbnQgZXh0ZW5kcyBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGRhdGFVcmkhOiBzdHJpbmc7XHJcblxyXG4gIEBPdXRwdXQoKSBhY3Rpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgdWlBY3Rpb25Nb2RlbDogVWlBY3Rpb25Nb2RlbDtcclxuICB9PigpO1xyXG5cclxuICBvdmVycmlkZSBhc3luYyBmaXJlQWN0aW9uKHVpQWN0aW9uTW9kZWw6IFVpQWN0aW9uTW9kZWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHVpQWN0aW9uTW9kZWwudWlBY3Rpb24gPSB7XHJcbiAgICAgIC4uLnVpQWN0aW9uTW9kZWwudWlBY3Rpb24sXHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIC4uLnVpQWN0aW9uTW9kZWwudWlBY3Rpb24ucGFyYW1zLFxyXG4gICAgICAgIF9kYXRhVXJpOiB0aGlzLmRhdGFVcmksXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgYXdhaXQgc3VwZXIuZmlyZUFjdGlvbih1aUFjdGlvbk1vZGVsKTtcclxuICB9XHJcbn1cclxuIiwiQGlmIChpc1Njcm9sbGFibGUgJiYgc2Nyb2xsT25XcmFwKSB7XHJcbiAgPHVpLWFjdGlvbi1idXR0b25cclxuICAgIFtkaXNhYmxlZF09XCIhaXNTY3JvbGxhYmxlXCJcclxuICAgIFtkZXNjcmlwdG9yXT1cImJ1dHRvbkxlZnRcIlxyXG4gICAgKGFjdGlvbkNsaWNrKT1cInNjcm9sbExlZnQoKVwiXHJcbiAgICAobW91c2Vkb3duKT1cInNjcm9sbFN0YXJ0KCdsZWZ0JylcIlxyXG4gICAgKG1vdXNldXApPVwic3RvcFNjcm9sbCgpXCJcclxuICAgIChtb3VzZWxlYXZlKT1cInN0b3BTY3JvbGwoKVwiXHJcbiAgICAodG91Y2hzdGFydCk9XCJzY3JvbGxTdGFydCgnbGVmdCcpXCJcclxuICAgICh0b3VjaGVuZCk9XCJzdG9wU2Nyb2xsKClcIlxyXG4gIC8+XHJcbn1cclxuXHJcbjxkaXZcclxuICAjY29udGFpbmVyXHJcbiAgY2xhc3M9XCJ1aUFjdGlvbkJ1dHRvbnNDb250YWluZXJcIlxyXG4gIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gIFtuZ0NsYXNzXT1cIntcclxuICAgIHNjcm9sbGFibGVDb250ZW50OiBzY3JvbGxPbldyYXAsXHJcbiAgICB2ZXJ0aWNhbFRvb2xiYXI6IGlzVmVydGljYWwsXHJcbiAgICBob3Jpem9udGFsVG9vbGJhcjogaXNIb3Jpem9udGFsLFxyXG4gICAgYWxpZ25lZFN0YXJ0OiBpc0FsaWduZWRTdGFydCxcclxuICAgIGFsaWduZWRFbmQ6IGlzQWxpZ25lZEVuZCxcclxuICB9XCJcclxuPlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHVpQWN0aW9uTW9kZWwgb2YgdWlBY3Rpb25Nb2RlbHNXaXRoRGVzY3JpcHRpb25zOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cclxuICAgIEBpZiAodWlBY3Rpb25Nb2RlbC51aUFjdGlvbi5jb2RlID09PSAndGhlbWVTZWxlY3RvcicpIHtcclxuICAgICAgPHRoZW1lLXNlbGVjdG9yIFttb2RlbF09XCJ1aUFjdGlvbk1vZGVsXCI+PC90aGVtZS1zZWxlY3Rvcj5cclxuICAgIH0gQGVsc2UgaWYgKHVpQWN0aW9uTW9kZWwudWlBY3Rpb24uc3ViQWN0aW9ucyAmJiB1aUFjdGlvbk1vZGVsLnVpQWN0aW9uLnN1YkFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51VHlwZXM7IGNvbnRleHQ6IHsgdWlBY3Rpb25Nb2RlbDogdWlBY3Rpb25Nb2RlbCB9XCJcclxuICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgfSBAZWxzZSB7XHJcbiAgICAgIDx1aS1hY3Rpb24tYnV0dG9uXHJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Ib3ZlcigpXCJcclxuICAgICAgICBbZGVzY3JpcHRvcl09XCJ1aUFjdGlvbk1vZGVsLmRlc2NyaXB0b3IhXCJcclxuICAgICAgICBbY29kZV09XCJ1aUFjdGlvbk1vZGVsLnVpQWN0aW9uLmNvZGVcIlxyXG4gICAgICAgIFtpZGVudGlmaWVyXT1cInVpQWN0aW9uTW9kZWwudWlBY3Rpb24uaWRlbnRpZmllclwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiEhdWlBY3Rpb25Nb2RlbC51aUFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgW2FkZGVkQ3NzQ2xhc3NdPVwidWlBY3Rpb25Nb2RlbC5jc3NDbGFzc1wiXHJcbiAgICAgICAgW3ZpZXdBY3RpdmF0ZWRdPVwidWlBY3Rpb25Nb2RlbC51aUFjdGlvbi52aWV3QWN0aXZhdGVkXCJcclxuICAgICAgICAoYWN0aW9uQ2xpY2spPVwib25BY3Rpb25DbGlja2VkKCRldmVudCwgdWlBY3Rpb25Nb2RlbClcIlxyXG4gICAgICAgIChhY3Rpb25Eb3VibGVDbGljayk9XCJvbkFjdGlvbkRvdWJsZUNsaWNrZWQoJGV2ZW50LCB1aUFjdGlvbk1vZGVsKVwiXHJcbiAgICAgID5cclxuICAgICAgPC91aS1hY3Rpb24tYnV0dG9uPlxyXG4gICAgfVxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuXHJcbkBpZiAoaXNTY3JvbGxhYmxlICYmIHNjcm9sbE9uV3JhcCkge1xyXG4gIDx1aS1hY3Rpb24tYnV0dG9uXHJcbiAgICBbZGlzYWJsZWRdPVwiIWlzU2Nyb2xsYWJsZVwiXHJcbiAgICBbZGVzY3JpcHRvcl09XCJidXR0b25SaWdodFwiXHJcbiAgICAoYWN0aW9uQ2xpY2spPVwic2Nyb2xsUmlnaHQoKVwiXHJcbiAgICAobW91c2Vkb3duKT1cInNjcm9sbFN0YXJ0KCdyaWdodCcpXCJcclxuICAgIChtb3VzZXVwKT1cInN0b3BTY3JvbGwoKVwiXHJcbiAgICAobW91c2VsZWF2ZSk9XCJzdG9wU2Nyb2xsKClcIlxyXG4gICAgKHRvdWNoc3RhcnQpPVwic2Nyb2xsU3RhcnQoJ3JpZ2h0JylcIlxyXG4gICAgKHRvdWNoZW5kKT1cInN0b3BTY3JvbGwoKVwiXHJcbiAgLz5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICNtZW51VHlwZXMgbGV0LXVpQWN0aW9uTW9kZWw9XCJ1aUFjdGlvbk1vZGVsXCI+XHJcbiAgQHN3aXRjaCAodWlBY3Rpb25Nb2RlbD8udWlBY3Rpb24/LmRlc2NyaXB0b3I/Lm1lbnU/LnRyaWdnZXJUeXBlKSB7XHJcbiAgICBAY2FzZSAodHJpZ2dlclR5cGUuSE9WRVIpIHtcclxuICAgICAgPHVpLWhvdmVyLW1lbnVcclxuICAgICAgICAjbWVudVxyXG4gICAgICAgIFt0b29sYmFySWRdPVwiaWRcIlxyXG4gICAgICAgIChtb3VzZWVudGVyKT1cIm9uSG92ZXIoKVwiXHJcbiAgICAgICAgW3RyaWdnZXJBY3Rpb25dPVwidWlBY3Rpb25Nb2RlbC51aUFjdGlvblwiXHJcbiAgICAgICAgW3N1YkFjdGlvbnNdPVwidWlBY3Rpb25Nb2RlbC51aUFjdGlvbi5zdWJBY3Rpb25zIVwiXHJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tlZCgkZXZlbnQsIHVpQWN0aW9uTW9kZWwpXCJcclxuICAgICAgPjwvdWktaG92ZXItbWVudT5cclxuICAgIH1cclxuICAgIEBjYXNlICh0cmlnZ2VyVHlwZS5DTElDSykge1xyXG4gICAgICA8dWktdGllcmVkLW1lbnVcclxuICAgICAgICAjbWVudVxyXG4gICAgICAgIChtb3VzZWVudGVyKT1cIm9uSG92ZXIoKVwiXHJcbiAgICAgICAgW3RyaWdnZXJBY3Rpb25dPVwidWlBY3Rpb25Nb2RlbC51aUFjdGlvblwiXHJcbiAgICAgICAgW3N1YkFjdGlvbnNdPVwidWlBY3Rpb25Nb2RlbC51aUFjdGlvbi5zdWJBY3Rpb25zIVwiXHJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tlZCgkZXZlbnQsIHVpQWN0aW9uTW9kZWwpXCJcclxuICAgICAgPjwvdWktdGllcmVkLW1lbnU+XHJcbiAgICB9XHJcbiAgICBAZGVmYXVsdCB7XHJcbiAgICAgIDx1aS10aWVyZWQtbWVudVxyXG4gICAgICAgICNtZW51XHJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Ib3ZlcigpXCJcclxuICAgICAgICBbdHJpZ2dlckFjdGlvbl09XCJ1aUFjdGlvbk1vZGVsLnVpQWN0aW9uXCJcclxuICAgICAgICBbc3ViQWN0aW9uc109XCJ1aUFjdGlvbk1vZGVsLnVpQWN0aW9uLnN1YkFjdGlvbnMhXCJcclxuICAgICAgICAoYWN0aW9uQ2xpY2spPVwib25BY3Rpb25DbGlja2VkKCRldmVudCwgdWlBY3Rpb25Nb2RlbClcIlxyXG4gICAgICA+PC91aS10aWVyZWQtbWVudT5cclxuICAgIH1cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -20,6 +20,7 @@ export class UiActionButtonComponent {
20
20
  this.disabled = input();
21
21
  this.descriptor = input.required();
22
22
  this.code = input();
23
+ this.identifier = input();
23
24
  this.viewActivated = input();
24
25
  this.addedCssClass = input();
25
26
  this.addBasicClasses = input(true);
@@ -239,12 +240,21 @@ export class UiActionButtonComponent {
239
240
  getSeparatorColor() {
240
241
  return 'rgb(from var(--' + this.getColor() + '-color) r g b / 0.8)';
241
242
  }
243
+ getDataTestId() {
244
+ if (this.code()) {
245
+ if (this.identifier()) {
246
+ return this.code() + '_' + this.identifier();
247
+ }
248
+ return this.code();
249
+ }
250
+ return null;
251
+ }
242
252
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionButtonComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
243
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionButtonComponent, selector: "ui-action-button", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, descriptor: { classPropertyName: "descriptor", publicName: "descriptor", isSignal: true, isRequired: true, transformFunction: null }, code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: false, transformFunction: null }, viewActivated: { classPropertyName: "viewActivated", publicName: "viewActivated", isSignal: true, isRequired: false, transformFunction: null }, addedCssClass: { classPropertyName: "addedCssClass", publicName: "addedCssClass", isSignal: true, isRequired: false, transformFunction: null }, addBasicClasses: { classPropertyName: "addBasicClasses", publicName: "addBasicClasses", isSignal: true, isRequired: false, transformFunction: null }, iconPlaceholder: { classPropertyName: "iconPlaceholder", publicName: "iconPlaceholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actionClick: "actionClick", actionDoubleClick: "actionDoubleClick" }, ngImport: i0, template: "@if (effectiveDescriptor().type === 'SEPARATOR') {\r\n <div class=\"separator\">\r\n @if (effectiveDescriptor().title) {\r\n <span class=\"separator-label\" [style.color]=\"getSeparatorColor()\">\r\n {{ effectiveDescriptor().title }}\r\n </span>\r\n }\r\n <hr class=\"separator-line\" [style.border-top-color]=\"getSeparatorColor()\" />\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"buttonWithBadge\"></ng-container>\r\n}\r\n\r\n<ng-template #buttonWithBadge>\r\n @if (effectiveDescriptor() && effectiveDescriptor().badge) {\r\n <ui-badge [descriptor]=\"effectiveDescriptor().badge\">\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n </ui-badge>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonTemplate>\r\n @if (compLib === componentLibrary.PRIMENG) {\r\n <button\r\n pButton\r\n pRipple\r\n [smartTooltip]=\"effectiveDescriptor().tooltip\"\r\n [disabled]=\"!!disabled()\"\r\n (click)=\"onActionClicked($event, mainActionModel())\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [autofocus]=\"false\"\r\n [ngStyle]=\"calcStyle(effectiveDescriptor().style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass() }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code() ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n } @else {\r\n <button\r\n mat-button\r\n [smartTooltip]=\"effectiveDescriptor().tooltip\"\r\n [color]=\"effectiveDescriptor().color\"\r\n [disabled]=\"!!disabled()\"\r\n (click)=\"onActionClicked($event, mainActionModel())\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [ngStyle]=\"calcStyle(effectiveDescriptor().style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass() }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code() ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #text>\r\n @if (renderPre() || renderPlaceholderPre()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n {{ effectiveDescriptor().title }}\r\n @if (renderPost() || renderPlaceholderPost()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonIcon>\r\n @if (renderPlaceholderPre() || renderPlaceholderPost()) {\r\n <smart-icon></smart-icon>\r\n } @else if (effectiveDescriptor().iconResource) {\r\n <smart-icon\r\n [imageResource]=\"effectiveDescriptor().iconResource\"\r\n [color]=\"effectiveDescriptor().iconColor || effectiveDescriptor().color\"\r\n ></smart-icon>\r\n } @else {\r\n <smart-icon\r\n [icon]=\"effectiveDescriptor().icon\"\r\n [color]=\"effectiveDescriptor().iconColor || effectiveDescriptor().color\"\r\n ></smart-icon>\r\n }\r\n</ng-template>\r\n", styles: [":host{--text-color: black}:host ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center;line-height:1;padding:.75rem 1rem}:host{height:fit-content;width:fit-content;padding:unset;margin:unset}:host ::ng-deep .mdc-button__label{display:flex;flex-direction:row;gap:1rem;align-items:center;justify-content:center}:host ::ng-deep .mdc-button{height:fit-content;min-height:var(--mdc-text-button-container-height)}:host ::ng-deep .mat-mdc-icon-button ::ng-deep img{width:unset;height:unset}.separator{display:flex;flex-direction:column;padding:0 .5rem;width:100%}.separator-label{font-size:.7rem;color:#888;padding-bottom:.15rem}.separator-line{border:none;border-top:1px solid #e2e5e9;margin:0}:host ::ng-deep button.sb4-view-activated{background:var(--sb4-view-activated-bg, var(--primary-color, #1976d2));border-color:var(--sb4-view-activated-border-color, transparent);font-weight:var(--sb4-view-activated-font-weight, 600)}:host ::ng-deep button.sb4-view-activated,:host ::ng-deep button.sb4-view-activated *{color:var(--sb4-view-activated-color, var(--primary-color-text, #ffffff))!important}:host ::ng-deep button.sb4-view-activated:hover{background:var(--sb4-view-activated-bg, var(--primary-color, #1976d2))!important;box-shadow:var( --sb4-view-activated-hover-shadow, 0 2px 4px -1px rgba(0, 0, 0, .2), 0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12) )}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i4.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i5.UiBadgeComponent, selector: "ui-badge", inputs: ["descriptor", "inputValue"] }, { kind: "directive", type: i6.SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }] }); }
253
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionButtonComponent, selector: "ui-action-button", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, descriptor: { classPropertyName: "descriptor", publicName: "descriptor", isSignal: true, isRequired: true, transformFunction: null }, code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: false, transformFunction: null }, identifier: { classPropertyName: "identifier", publicName: "identifier", isSignal: true, isRequired: false, transformFunction: null }, viewActivated: { classPropertyName: "viewActivated", publicName: "viewActivated", isSignal: true, isRequired: false, transformFunction: null }, addedCssClass: { classPropertyName: "addedCssClass", publicName: "addedCssClass", isSignal: true, isRequired: false, transformFunction: null }, addBasicClasses: { classPropertyName: "addBasicClasses", publicName: "addBasicClasses", isSignal: true, isRequired: false, transformFunction: null }, iconPlaceholder: { classPropertyName: "iconPlaceholder", publicName: "iconPlaceholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { actionClick: "actionClick", actionDoubleClick: "actionDoubleClick" }, ngImport: i0, template: "@if (effectiveDescriptor().type === 'SEPARATOR') {\r\n <div class=\"separator\">\r\n @if (effectiveDescriptor().title) {\r\n <span class=\"separator-label\" [style.color]=\"getSeparatorColor()\">\r\n {{ effectiveDescriptor().title }}\r\n </span>\r\n }\r\n <hr class=\"separator-line\" [style.border-top-color]=\"getSeparatorColor()\" />\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"buttonWithBadge\"></ng-container>\r\n}\r\n\r\n<ng-template #buttonWithBadge>\r\n @if (effectiveDescriptor() && effectiveDescriptor().badge) {\r\n <ui-badge [descriptor]=\"effectiveDescriptor().badge\">\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n </ui-badge>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonTemplate>\r\n @if (compLib === componentLibrary.PRIMENG) {\r\n <button\r\n pButton\r\n pRipple\r\n [smartTooltip]=\"effectiveDescriptor().tooltip\"\r\n [disabled]=\"!!disabled()\"\r\n (click)=\"onActionClicked($event, mainActionModel())\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [autofocus]=\"false\"\r\n [ngStyle]=\"calcStyle(effectiveDescriptor().style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass() }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"getDataTestId()\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n } @else {\r\n <button\r\n mat-button\r\n [smartTooltip]=\"effectiveDescriptor().tooltip\"\r\n [color]=\"effectiveDescriptor().color\"\r\n [disabled]=\"!!disabled()\"\r\n (click)=\"onActionClicked($event, mainActionModel())\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [ngStyle]=\"calcStyle(effectiveDescriptor().style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass() }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"getDataTestId()\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #text>\r\n @if (renderPre() || renderPlaceholderPre()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n {{ effectiveDescriptor().title }}\r\n @if (renderPost() || renderPlaceholderPost()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonIcon>\r\n @if (renderPlaceholderPre() || renderPlaceholderPost()) {\r\n <smart-icon></smart-icon>\r\n } @else if (effectiveDescriptor().iconResource) {\r\n <smart-icon\r\n [imageResource]=\"effectiveDescriptor().iconResource\"\r\n [color]=\"effectiveDescriptor().iconColor || effectiveDescriptor().color\"\r\n ></smart-icon>\r\n } @else {\r\n <smart-icon\r\n [icon]=\"effectiveDescriptor().icon\"\r\n [color]=\"effectiveDescriptor().iconColor || effectiveDescriptor().color\"\r\n ></smart-icon>\r\n }\r\n</ng-template>\r\n", styles: [":host{--text-color: black}:host ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center;line-height:1;padding:.75rem 1rem}:host{height:fit-content;width:fit-content;padding:unset;margin:unset}:host ::ng-deep .mdc-button__label{display:flex;flex-direction:row;gap:1rem;align-items:center;justify-content:center}:host ::ng-deep .mdc-button{height:fit-content;min-height:var(--mdc-text-button-container-height)}:host ::ng-deep .mat-mdc-icon-button ::ng-deep img{width:unset;height:unset}.separator{display:flex;flex-direction:column;padding:0 .5rem;width:100%}.separator-label{font-size:.7rem;color:#888;padding-bottom:.15rem}.separator-line{border:none;border-top:1px solid #e2e5e9;margin:0}:host ::ng-deep button.sb4-view-activated{background:var(--sb4-view-activated-bg, var(--primary-color, #1976d2));border-color:var(--sb4-view-activated-border-color, transparent);font-weight:var(--sb4-view-activated-font-weight, 600)}:host ::ng-deep button.sb4-view-activated,:host ::ng-deep button.sb4-view-activated *{color:var(--sb4-view-activated-color, var(--primary-color-text, #ffffff))!important}:host ::ng-deep button.sb4-view-activated:hover{background:var(--sb4-view-activated-bg, var(--primary-color, #1976d2))!important;box-shadow:var( --sb4-view-activated-hover-shadow, 0 2px 4px -1px rgba(0, 0, 0, .2), 0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12) )}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i3.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i4.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i5.UiBadgeComponent, selector: "ui-badge", inputs: ["descriptor", "inputValue"] }, { kind: "directive", type: i6.SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }] }); }
244
254
  }
245
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionButtonComponent, decorators: [{
246
256
  type: Component,
247
- args: [{ selector: 'ui-action-button', template: "@if (effectiveDescriptor().type === 'SEPARATOR') {\r\n <div class=\"separator\">\r\n @if (effectiveDescriptor().title) {\r\n <span class=\"separator-label\" [style.color]=\"getSeparatorColor()\">\r\n {{ effectiveDescriptor().title }}\r\n </span>\r\n }\r\n <hr class=\"separator-line\" [style.border-top-color]=\"getSeparatorColor()\" />\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"buttonWithBadge\"></ng-container>\r\n}\r\n\r\n<ng-template #buttonWithBadge>\r\n @if (effectiveDescriptor() && effectiveDescriptor().badge) {\r\n <ui-badge [descriptor]=\"effectiveDescriptor().badge\">\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n </ui-badge>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonTemplate>\r\n @if (compLib === componentLibrary.PRIMENG) {\r\n <button\r\n pButton\r\n pRipple\r\n [smartTooltip]=\"effectiveDescriptor().tooltip\"\r\n [disabled]=\"!!disabled()\"\r\n (click)=\"onActionClicked($event, mainActionModel())\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [autofocus]=\"false\"\r\n [ngStyle]=\"calcStyle(effectiveDescriptor().style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass() }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code() ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n } @else {\r\n <button\r\n mat-button\r\n [smartTooltip]=\"effectiveDescriptor().tooltip\"\r\n [color]=\"effectiveDescriptor().color\"\r\n [disabled]=\"!!disabled()\"\r\n (click)=\"onActionClicked($event, mainActionModel())\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [ngStyle]=\"calcStyle(effectiveDescriptor().style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass() }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"code() ?? null\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #text>\r\n @if (renderPre() || renderPlaceholderPre()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n {{ effectiveDescriptor().title }}\r\n @if (renderPost() || renderPlaceholderPost()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonIcon>\r\n @if (renderPlaceholderPre() || renderPlaceholderPost()) {\r\n <smart-icon></smart-icon>\r\n } @else if (effectiveDescriptor().iconResource) {\r\n <smart-icon\r\n [imageResource]=\"effectiveDescriptor().iconResource\"\r\n [color]=\"effectiveDescriptor().iconColor || effectiveDescriptor().color\"\r\n ></smart-icon>\r\n } @else {\r\n <smart-icon\r\n [icon]=\"effectiveDescriptor().icon\"\r\n [color]=\"effectiveDescriptor().iconColor || effectiveDescriptor().color\"\r\n ></smart-icon>\r\n }\r\n</ng-template>\r\n", styles: [":host{--text-color: black}:host ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center;line-height:1;padding:.75rem 1rem}:host{height:fit-content;width:fit-content;padding:unset;margin:unset}:host ::ng-deep .mdc-button__label{display:flex;flex-direction:row;gap:1rem;align-items:center;justify-content:center}:host ::ng-deep .mdc-button{height:fit-content;min-height:var(--mdc-text-button-container-height)}:host ::ng-deep .mat-mdc-icon-button ::ng-deep img{width:unset;height:unset}.separator{display:flex;flex-direction:column;padding:0 .5rem;width:100%}.separator-label{font-size:.7rem;color:#888;padding-bottom:.15rem}.separator-line{border:none;border-top:1px solid #e2e5e9;margin:0}:host ::ng-deep button.sb4-view-activated{background:var(--sb4-view-activated-bg, var(--primary-color, #1976d2));border-color:var(--sb4-view-activated-border-color, transparent);font-weight:var(--sb4-view-activated-font-weight, 600)}:host ::ng-deep button.sb4-view-activated,:host ::ng-deep button.sb4-view-activated *{color:var(--sb4-view-activated-color, var(--primary-color-text, #ffffff))!important}:host ::ng-deep button.sb4-view-activated:hover{background:var(--sb4-view-activated-bg, var(--primary-color, #1976d2))!important;box-shadow:var( --sb4-view-activated-hover-shadow, 0 2px 4px -1px rgba(0, 0, 0, .2), 0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12) )}\n"] }]
257
+ args: [{ selector: 'ui-action-button', template: "@if (effectiveDescriptor().type === 'SEPARATOR') {\r\n <div class=\"separator\">\r\n @if (effectiveDescriptor().title) {\r\n <span class=\"separator-label\" [style.color]=\"getSeparatorColor()\">\r\n {{ effectiveDescriptor().title }}\r\n </span>\r\n }\r\n <hr class=\"separator-line\" [style.border-top-color]=\"getSeparatorColor()\" />\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"buttonWithBadge\"></ng-container>\r\n}\r\n\r\n<ng-template #buttonWithBadge>\r\n @if (effectiveDescriptor() && effectiveDescriptor().badge) {\r\n <ui-badge [descriptor]=\"effectiveDescriptor().badge\">\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n </ui-badge>\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonTemplate>\r\n @if (compLib === componentLibrary.PRIMENG) {\r\n <button\r\n pButton\r\n pRipple\r\n [smartTooltip]=\"effectiveDescriptor().tooltip\"\r\n [disabled]=\"!!disabled()\"\r\n (click)=\"onActionClicked($event, mainActionModel())\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [autofocus]=\"false\"\r\n [ngStyle]=\"calcStyle(effectiveDescriptor().style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass() }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"getDataTestId()\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n } @else {\r\n <button\r\n mat-button\r\n [smartTooltip]=\"effectiveDescriptor().tooltip\"\r\n [color]=\"effectiveDescriptor().color\"\r\n [disabled]=\"!!disabled()\"\r\n (click)=\"onActionClicked($event, mainActionModel())\"\r\n (dblclick)=\"onActionDoubleClicked($event)\"\r\n [ngStyle]=\"calcStyle(effectiveDescriptor().style)\"\r\n [ngClass]=\"getCombinedClasses()\"\r\n [style.justify-content]=\"getJustifyContent()\"\r\n class=\"{{ getbtnClass() }} {{ addedCssClass() }}\"\r\n type=\"button\"\r\n [attr.data-testid]=\"getDataTestId()\"\r\n >\r\n <div *ngIf=\"isOnlyIcon(); then buttonIcon; else text\"></div>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #text>\r\n @if (renderPre() || renderPlaceholderPre()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n {{ effectiveDescriptor().title }}\r\n @if (renderPost() || renderPlaceholderPost()) {\r\n <ng-container *ngTemplateOutlet=\"buttonIcon\" />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #buttonIcon>\r\n @if (renderPlaceholderPre() || renderPlaceholderPost()) {\r\n <smart-icon></smart-icon>\r\n } @else if (effectiveDescriptor().iconResource) {\r\n <smart-icon\r\n [imageResource]=\"effectiveDescriptor().iconResource\"\r\n [color]=\"effectiveDescriptor().iconColor || effectiveDescriptor().color\"\r\n ></smart-icon>\r\n } @else {\r\n <smart-icon\r\n [icon]=\"effectiveDescriptor().icon\"\r\n [color]=\"effectiveDescriptor().iconColor || effectiveDescriptor().color\"\r\n ></smart-icon>\r\n }\r\n</ng-template>\r\n", styles: [":host{--text-color: black}:host ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center;line-height:1;padding:.75rem 1rem}:host{height:fit-content;width:fit-content;padding:unset;margin:unset}:host ::ng-deep .mdc-button__label{display:flex;flex-direction:row;gap:1rem;align-items:center;justify-content:center}:host ::ng-deep .mdc-button{height:fit-content;min-height:var(--mdc-text-button-container-height)}:host ::ng-deep .mat-mdc-icon-button ::ng-deep img{width:unset;height:unset}.separator{display:flex;flex-direction:column;padding:0 .5rem;width:100%}.separator-label{font-size:.7rem;color:#888;padding-bottom:.15rem}.separator-line{border:none;border-top:1px solid #e2e5e9;margin:0}:host ::ng-deep button.sb4-view-activated{background:var(--sb4-view-activated-bg, var(--primary-color, #1976d2));border-color:var(--sb4-view-activated-border-color, transparent);font-weight:var(--sb4-view-activated-font-weight, 600)}:host ::ng-deep button.sb4-view-activated,:host ::ng-deep button.sb4-view-activated *{color:var(--sb4-view-activated-color, var(--primary-color-text, #ffffff))!important}:host ::ng-deep button.sb4-view-activated:hover{background:var(--sb4-view-activated-bg, var(--primary-color, #1976d2))!important;box-shadow:var( --sb4-view-activated-hover-shadow, 0 2px 4px -1px rgba(0, 0, 0, .2), 0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12) )}\n"] }]
248
258
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i7.ComponentLibrary, decorators: [{
249
259
  type: Inject,
250
260
  args: [COMPONENT_LIBRARY]
@@ -255,4 +265,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
255
265
  }], actionDoubleClick: [{
256
266
  type: Output
257
267
  }] } });
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi1idXR0b24vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi1idXR0b24vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBRU4sUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7QUFPbEUsTUFBTSxPQUFPLHVCQUF1QjtJQTREbEMsWUFDUyxjQUFpQyxFQUNELE9BQTBCO1FBRDFELG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQTVEbEMsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWpELGFBQVEsR0FBRyxLQUFLLEVBQVcsQ0FB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QUNuQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDL0MsT0FBTyxDQUNMLGVBQWUsS0FBSyxxQkFBcUIsQ0FBQyxJQUFJO1lBQzlDLGVBQWUsS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLENBQy9DLENBQUM7SUFDSixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLGVBQWUsS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxlQUFlLEtBQUsscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbEQsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksZUFBZSxLQUFLLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25ELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQztJQUN0RSxDQUFDOytHQXhSVSx1QkFBdUIsbURBOER4QixpQkFBaUI7bUdBOURoQix1QkFBdUIsNmxDQ3pCcEMsc3JHQXVGQTs7NEZEOURhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxrQkFBa0I7OzBCQWtFekIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUFHLFFBQVE7eUNBbkQ1QixXQUFXO3NCQUFwQixNQUFNO2dCQU1HLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBjb21wdXRlZCxcclxuICBpbnB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVWlBY3Rpb25Nb2RlbCB9IGZyb20gJy4uL3VpLWFjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuLi8uLi91dGlsaXR5L2NvbXBvbmVudExpYnJhcnknO1xyXG5pbXBvcnQgeyBVaUFjdGlvbkJ1dHRvblR5cGUgfSBmcm9tICcuLi8uLi9hcGkvbW9kZWwvdWlBY3Rpb25CdXR0b25UeXBlJztcclxuaW1wb3J0IHsgSWNvblBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vYXBpL21vZGVsL2ljb25Qb3NpdGlvbic7XHJcbmltcG9ydCB7IFN0eWxlLCBVaUFjdGlvbiwgVWlBY3Rpb25EZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vYXBpJztcclxuaW1wb3J0IHsgU21hcnRTdHlsZVV0aWxpdHkgfSBmcm9tICcuLi8uLi91dGlsaXR5L3NtYXJ0LXN0eWxlLXV0aWxpdHknO1xyXG5pbXBvcnQgeyBCdXR0b25JY29uUGxhY2Vob2xkZXIgfSBmcm9tICcuL2J1dHRvbi1pY29uLXBsYWNlaG9sZGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktYWN0aW9uLWJ1dHRvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VpLWFjdGlvbi1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91aS1hY3Rpb24tYnV0dG9uLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlBY3Rpb25CdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPigpO1xyXG4gIGRlc2NyaXB0b3IgPSBpbnB1dC5yZXF1aXJlZDxVaUFjdGlvbkRlc2NyaXB0b3I+KCk7XHJcbiAgY29kZSA9IGlucHV0PHN0cmluZz4oKTtcclxuICB2aWV3QWN0aXZhdGVkID0gaW5wdXQ8Ym9vbGVhbiB8IG51bGw+KCk7XHJcbiAgYWRkZWRDc3NDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcclxuICBhZGRCYXNpY0NsYXNzZXMgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICBpY29uUGxhY2Vob2xkZXIgPSBpbnB1dDxCdXR0b25JY29uUGxhY2Vob2xkZXI+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQ7XHJcbiAgICBkZXNjcmlwdG9yPzogVWlBY3Rpb25EZXNjcmlwdG9yO1xyXG4gICAgY29kZT86IHN0cmluZztcclxuICAgIHVpQWN0aW9uPzogVWlBY3Rpb247XHJcbiAgfT4oKTtcclxuICBAT3V0cHV0KCkgYWN0aW9uRG91YmxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGV2ZW50OiBhbnk7XHJcbiAgICBkZXNjcmlwdG9yPzogVWlBY3Rpb25EZXNjcmlwdG9yO1xyXG4gICAgY29kZT86IHN0cmluZztcclxuICB9PigpO1xyXG5cclxuICBjb21wb25lbnRMaWJyYXJ5ID0gQ29tcG9uZW50TGlicmFyeTtcclxuICBjb21wTGliOiBDb21wb25lbnRMaWJyYXJ5O1xyXG5cclxuICBwcmVzc2VkQnV0dG9uQWN0aXZlOiBib29sZWFuID0gdHJ1ZTtcclxuICBtZW51T3BlbmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGVmZmVjdGl2ZURlc2NyaXB0b3IgPSBjb21wdXRlZDxVaUFjdGlvbkRlc2NyaXB0b3I+KCgpID0+IHtcclxuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLmRlc2NyaXB0b3IoKTtcclxuICAgIGNvbnN0IGNvZGUgPSB0aGlzLmNvZGUoKTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0czogUGFydGlhbDxVaUFjdGlvbkRlc2NyaXB0b3I+ID0ge1xyXG4gICAgICB0aXRsZTogJycsXHJcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLmRlZmF1bHRzLFxyXG4gICAgICAuLi5kZXNjcmlwdG9yLFxyXG4gICAgICB0aXRsZTogZGVzY3JpcHRvcj8udGl0bGUgPz8gZGVmYXVsdHMudGl0bGUsXHJcbiAgICAgIGNvbG9yOiBkZXNjcmlwdG9yPy5jb2xvciA/PyBkZWZhdWx0cy5jb2xvcixcclxuICAgICAgdHlwZTogZGVzY3JpcHRvcj8udHlwZSA/PyBkZWZhdWx0cy50eXBlLFxyXG4gICAgfSBhcyBVaUFjdGlvbkRlc2NyaXB0b3I7XHJcbiAgfSk7XHJcblxyXG4gIG1haW5BY3Rpb25Nb2RlbCA9IGNvbXB1dGVkPFVpQWN0aW9uTW9kZWw+KFxyXG4gICAgKCkgPT5cclxuICAgICAgKHtcclxuICAgICAgICBkZXNjcmlwdG9yOiB0aGlzLmVmZmVjdGl2ZURlc2NyaXB0b3IoKSxcclxuICAgICAgICB1aUFjdGlvbjoge1xyXG4gICAgICAgICAgZGVzY3JpcHRvcjogdGhpcy5lZmZlY3RpdmVEZXNjcmlwdG9yKCksXHJcbiAgICAgICAgICBjb2RlOiB0aGlzLmNvZGUoKSxcclxuICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkKCkgPz8gZmFsc2UsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSkgYXMgVWlBY3Rpb25Nb2RlbFxyXG4gICk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoQ09NUE9ORU5UX0xJQlJBUlkpIEBPcHRpb25hbCgpIGNvbXBMaWI/OiBDb21wb25lbnRMaWJyYXJ5XHJcbiAgKSB7XHJcbiAgICB0aGlzLmNvbXBMaWIgPSBjb21wTGliID8/IENvbXBvbmVudExpYnJhcnkuUFJJTUVORztcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQWN0aW9uQ2xpY2tlZChldmVudDogTW91c2VFdmVudCwgbW9kZWw6IFVpQWN0aW9uTW9kZWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50LFxyXG4gICAgICBjb2RlOiBtb2RlbC51aUFjdGlvbi5jb2RlLFxyXG4gICAgICBkZXNjcmlwdG9yOiBtb2RlbC5kZXNjcmlwdG9yISxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25BY3Rpb25Eb3VibGVDbGlja2VkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aW9uRG91YmxlQ2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50LFxyXG4gICAgICBjb2RlOiB0aGlzLmNvZGUoKSxcclxuICAgICAgZGVzY3JpcHRvcjogdGhpcy5lZmZlY3RpdmVEZXNjcmlwdG9yKCksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGljb25Qb3NpdGlvbigpOiB0eXBlb2YgSWNvblBvc2l0aW9uIHtcclxuICAgIHJldHVybiBJY29uUG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBpc09ubHlJY29uKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZWZmZWN0aXZlRGVzY3JpcHRvcigpPy50eXBlO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdHlwZSA9PT0gVWlBY3Rpb25CdXR0b25UeXBlLklDT04gfHxcclxuICAgICAgdHlwZSA9PT0gVWlBY3Rpb25CdXR0b25UeXBlLk1JTklfRkFCIHx8XHJcbiAgICAgIHR5cGUgPT09IFVpQWN0aW9uQnV0dG9uVHlwZS5GQUJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRidG5DbGFzcygpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmFkZEJhc2ljQ2xhc3NlcygpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuZWZmZWN0aXZlRGVzY3JpcHRvcigpLmNvbG9yO1xyXG4gICAgaWYgKGNvbG9yKSB7XHJcbiAgICAgIHJldHVybiAncC1idXR0b24tJyArIGNvbG9yICsgJyBzYjQtJyArIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0VHlwZSgpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLmFkZEJhc2ljQ2xhc3NlcygpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb21wTGliID09PSBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLmVmZmVjdGl2ZURlc2NyaXB0b3IoKS50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMOlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3NiNC1ub3JtYWwnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tdGV4dCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuRkxBVDpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtZmxhdCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLlJBSVNFRDpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtcmFpc2VkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJhaXNlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuU1RST0tFRDpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtc3Ryb2tlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1vdXRsaW5lZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuTUlOSV9GQUI6XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnc2I0LW1pbmlmYWInOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi10ZXh0JzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJhaXNlZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLkZBQjpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtZmFiJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tdGV4dCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5JQ09OOlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3NiNC1pY29uJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tdGV4dCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3NiNC1iYXNpYyc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi10ZXh0JzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJhaXNlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLW91dGxpbmVkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5lZmZlY3RpdmVEZXNjcmlwdG9yKCkudHlwZSkge1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTDpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1idXR0b24gc2I0LW5vcm1hbCc7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuRkxBVDpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1mbGF0LWJ1dHRvbiBzYjQtZmxhdCc7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuUkFJU0VEOlxyXG4gICAgICAgICAgcmV0dXJuICdtYXQtbWRjLXJhaXNlZC1idXR0b24gc2I0LXJhaXNlZCc7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuU1RST0tFRDpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1zdHJva2VkLWJ1dHRvbiBzYjQtc3Ryb2tlZCc7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuSUNPTjpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1pY29uLWJ1dHRvbiBzYjQtaWNvbic7XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuTUlOSV9GQUI6XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtbWluaS1mYWIgc2I0LW1pbmlmYWInO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLkZBQjpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1mYWIgc2I0LWZhYic7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiBgbWF0LWJ1dHRvbiBzYjQtYmFzaWNgO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxjU3R5bGUoc3R5bGU/OiBTdHlsZSk6IGFueSB7XHJcbiAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdTdHlsZXMoc3R5bGUpO1xyXG4gIH1cclxuICBjYWxjQ2xhc3NlcyhzdHlsZT86IFN0eWxlKTogYW55IHtcclxuICAgIHJldHVybiBTbWFydFN0eWxlVXRpbGl0eS5nZXROZ0NsYXNzZXMoc3R5bGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tYmluZWRDbGFzc2VzKCk6IGFueSB7XHJcbiAgICBjb25zdCB0eXBlQ2xhc3NlcyA9IHRoaXMuZ2V0VHlwZSgpO1xyXG4gICAgY29uc3Qgc3R5bGVDbGFzc2VzID0gdGhpcy5jYWxjQ2xhc3Nlcyh0aGlzLmVmZmVjdGl2ZURlc2NyaXB0b3IoKS5zdHlsZSk7XHJcblxyXG4gICAgLy8gTm9ybWFsaXplIHR5cGVDbGFzc2VzIHRvIG9iamVjdFxyXG4gICAgY29uc3QgdHlwZU9iaiA9XHJcbiAgICAgIHR5cGVvZiB0eXBlQ2xhc3NlcyA9PT0gJ3N0cmluZydcclxuICAgICAgICA/IHR5cGVDbGFzc2VzLnNwbGl0KCcgJykucmVkdWNlKChhY2MsIGNscykgPT4gKHsgLi4uYWNjLCBbY2xzXTogdHJ1ZSB9KSwge30pXHJcbiAgICAgICAgOiB0eXBlQ2xhc3NlcztcclxuXHJcbiAgICAvLyBWaWV3LWFjdGl2YXRpb24gY2xhc3Nlcywgb3J0aG9nb25hbCB0byB0aGUgZGVzY3JpcHRvci50eXBlIGxvb2sgY2xhc3NlcyBhYm92ZS5cclxuICAgIGNvbnN0IHZpZXdBY3RpdmF0ZWQgPSB0aGlzLnZpZXdBY3RpdmF0ZWQoKTtcclxuICAgIGNvbnN0IGlzT3BlbmVyID0gdmlld0FjdGl2YXRlZCAhPT0gbnVsbCAmJiB2aWV3QWN0aXZhdGVkICE9PSB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBhY3RpdmF0aW9uQ2xhc3NlcyA9IHtcclxuICAgICAgJ3NiNC12aWV3LW9wZW5lcic6IGlzT3BlbmVyLFxyXG4gICAgICAnc2I0LXZpZXctYWN0aXZhdGVkJzogdmlld0FjdGl2YXRlZCA9PT0gdHJ1ZSxcclxuICAgICAgJ3NiNC12aWV3LW5vdC1hY3RpdmF0ZWQnOiB2aWV3QWN0aXZhdGVkID09PSBmYWxzZSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHsgLi4udHlwZU9iaiwgLi4uc3R5bGVDbGFzc2VzLCAuLi5hY3RpdmF0aW9uQ2xhc3NlcyB9O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyUHJlKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuZWZmZWN0aXZlRGVzY3JpcHRvcigpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZGVzY3JpcHRvci5pY29uUG9zaXRpb24gPT09IEljb25Qb3NpdGlvbi5QUkUgJiZcclxuICAgICAgKGRlc2NyaXB0b3IuaWNvbiAhPSBudWxsIHx8IGRlc2NyaXB0b3IuaWNvblJlc291cmNlICE9IG51bGwpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyUG9zdCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLmVmZmVjdGl2ZURlc2NyaXB0b3IoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGRlc2NyaXB0b3IuaWNvblBvc2l0aW9uID09PSBJY29uUG9zaXRpb24uUE9TVCAmJlxyXG4gICAgICAoZGVzY3JpcHRvci5pY29uICE9IG51bGwgfHwgZGVzY3JpcHRvci5pY29uUmVzb3VyY2UgIT0gbnVsbClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xvcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZWZmZWN0aXZlRGVzY3JpcHRvcigpPy5jb2xvciB8fCAndGV4dCc7XHJcbiAgfVxyXG5cclxuICByZW5kZXJQbGFjZWhvbGRlclByZSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGljb25QbGFjZWhvbGRlciA9IHRoaXMuaWNvblBsYWNlaG9sZGVyKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBpY29uUGxhY2Vob2xkZXIgPT09IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QUkUgfHxcclxuICAgICAgaWNvblBsYWNlaG9sZGVyID09PSBCdXR0b25JY29uUGxhY2Vob2xkZXIuQk9USFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlclBsYWNlaG9sZGVyUG9zdCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGljb25QbGFjZWhvbGRlciA9IHRoaXMuaWNvblBsYWNlaG9sZGVyKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBpY29uUGxhY2Vob2xkZXIgPT09IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QT1NUIHx8XHJcbiAgICAgIGljb25QbGFjZWhvbGRlciA9PT0gQnV0dG9uSWNvblBsYWNlaG9sZGVyLkJPVEhcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRKdXN0aWZ5Q29udGVudCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IGljb25QbGFjZWhvbGRlciA9IHRoaXMuaWNvblBsYWNlaG9sZGVyKCk7XHJcbiAgICBpZiAoIWljb25QbGFjZWhvbGRlcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChpY29uUGxhY2Vob2xkZXIgPT09IEJ1dHRvbkljb25QbGFjZWhvbGRlci5CT1RIKSB7XHJcbiAgICAgIHJldHVybiAnY2VudGVyJztcclxuICAgIH1cclxuICAgIGlmIChpY29uUGxhY2Vob2xkZXIgPT09IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QUkUpIHtcclxuICAgICAgcmV0dXJuICdmbGV4LXN0YXJ0JztcclxuICAgIH1cclxuICAgIGlmIChpY29uUGxhY2Vob2xkZXIgPT09IEJ1dHRvbkljb25QbGFjZWhvbGRlci5QT1NUKSB7XHJcbiAgICAgIHJldHVybiAnZmxleC1lbmQnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRTZXBhcmF0b3JDb2xvcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICdyZ2IoZnJvbSB2YXIoLS0nICsgdGhpcy5nZXRDb2xvcigpICsgJy1jb2xvcikgciBnIGIgLyAwLjgpJztcclxuICB9XHJcbn1cclxuIiwiQGlmIChlZmZlY3RpdmVEZXNjcmlwdG9yKCkudHlwZSA9PT0gJ1NFUEFSQVRPUicpIHtcclxuICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+XHJcbiAgICBAaWYgKGVmZmVjdGl2ZURlc2NyaXB0b3IoKS50aXRsZSkge1xyXG4gICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvci1sYWJlbFwiIFtzdHlsZS5jb2xvcl09XCJnZXRTZXBhcmF0b3JDb2xvcigpXCI+XHJcbiAgICAgICAge3sgZWZmZWN0aXZlRGVzY3JpcHRvcigpLnRpdGxlIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIH1cclxuICAgIDxociBjbGFzcz1cInNlcGFyYXRvci1saW5lXCIgW3N0eWxlLmJvcmRlci10b3AtY29sb3JdPVwiZ2V0U2VwYXJhdG9yQ29sb3IoKVwiIC8+XHJcbiAgPC9kaXY+XHJcbn0gQGVsc2Uge1xyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25XaXRoQmFkZ2VcIj48L25nLWNvbnRhaW5lcj5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlICNidXR0b25XaXRoQmFkZ2U+XHJcbiAgQGlmIChlZmZlY3RpdmVEZXNjcmlwdG9yKCkgJiYgZWZmZWN0aXZlRGVzY3JpcHRvcigpLmJhZGdlKSB7XHJcbiAgICA8dWktYmFkZ2UgW2Rlc2NyaXB0b3JdPVwiZWZmZWN0aXZlRGVzY3JpcHRvcigpLmJhZGdlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC91aS1iYWRnZT5cclxuICB9IEBlbHNlIHtcclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uVGVtcGxhdGU+XHJcbiAgQGlmIChjb21wTGliID09PSBjb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuICAgIDxidXR0b25cclxuICAgICAgcEJ1dHRvblxyXG4gICAgICBwUmlwcGxlXHJcbiAgICAgIFtzbWFydFRvb2x0aXBdPVwiZWZmZWN0aXZlRGVzY3JpcHRvcigpLnRvb2x0aXBcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiISFkaXNhYmxlZCgpXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2tlZCgkZXZlbnQsIG1haW5BY3Rpb25Nb2RlbCgpKVwiXHJcbiAgICAgIChkYmxjbGljayk9XCJvbkFjdGlvbkRvdWJsZUNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgIFthdXRvZm9jdXNdPVwiZmFsc2VcIlxyXG4gICAgICBbbmdTdHlsZV09XCJjYWxjU3R5bGUoZWZmZWN0aXZlRGVzY3JpcHRvcigpLnN0eWxlKVwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cImdldENvbWJpbmVkQ2xhc3NlcygpXCJcclxuICAgICAgW3N0eWxlLmp1c3RpZnktY29udGVudF09XCJnZXRKdXN0aWZ5Q29udGVudCgpXCJcclxuICAgICAgY2xhc3M9XCJ7eyBnZXRidG5DbGFzcygpIH19IHt7IGFkZGVkQ3NzQ2xhc3MoKSB9fVwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJjb2RlKCkgPz8gbnVsbFwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpc09ubHlJY29uKCk7IHRoZW4gYnV0dG9uSWNvbjsgZWxzZSB0ZXh0XCI+PC9kaXY+XHJcbiAgICA8L2J1dHRvbj5cclxuICB9IEBlbHNlIHtcclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICBbc21hcnRUb29sdGlwXT1cImVmZmVjdGl2ZURlc2NyaXB0b3IoKS50b29sdGlwXCJcclxuICAgICAgW2NvbG9yXT1cImVmZmVjdGl2ZURlc2NyaXB0b3IoKS5jb2xvclwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhIWRpc2FibGVkKClcIlxyXG4gICAgICAoY2xpY2spPVwib25BY3Rpb25DbGlja2VkKCRldmVudCwgbWFpbkFjdGlvbk1vZGVsKCkpXCJcclxuICAgICAgKGRibGNsaWNrKT1cIm9uQWN0aW9uRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgICAgW25nU3R5bGVdPVwiY2FsY1N0eWxlKGVmZmVjdGl2ZURlc2NyaXB0b3IoKS5zdHlsZSlcIlxyXG4gICAgICBbbmdDbGFzc109XCJnZXRDb21iaW5lZENsYXNzZXMoKVwiXHJcbiAgICAgIFtzdHlsZS5qdXN0aWZ5LWNvbnRlbnRdPVwiZ2V0SnVzdGlmeUNvbnRlbnQoKVwiXHJcbiAgICAgIGNsYXNzPVwie3sgZ2V0YnRuQ2xhc3MoKSB9fSB7eyBhZGRlZENzc0NsYXNzKCkgfX1cIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiY29kZSgpID8/IG51bGxcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNPbmx5SWNvbigpOyB0aGVuIGJ1dHRvbkljb247IGVsc2UgdGV4dFwiPjwvZGl2PlxyXG4gICAgPC9idXR0b24+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0ZXh0PlxyXG4gIEBpZiAocmVuZGVyUHJlKCkgfHwgcmVuZGVyUGxhY2Vob2xkZXJQcmUoKSkge1xyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkljb25cIiAvPlxyXG4gIH1cclxuICB7eyBlZmZlY3RpdmVEZXNjcmlwdG9yKCkudGl0bGUgfX1cclxuICBAaWYgKHJlbmRlclBvc3QoKSB8fCByZW5kZXJQbGFjZWhvbGRlclBvc3QoKSkge1xyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkljb25cIiAvPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uSWNvbj5cclxuICBAaWYgKHJlbmRlclBsYWNlaG9sZGVyUHJlKCkgfHwgcmVuZGVyUGxhY2Vob2xkZXJQb3N0KCkpIHtcclxuICAgIDxzbWFydC1pY29uPjwvc21hcnQtaWNvbj5cclxuICB9IEBlbHNlIGlmIChlZmZlY3RpdmVEZXNjcmlwdG9yKCkuaWNvblJlc291cmNlKSB7XHJcbiAgICA8c21hcnQtaWNvblxyXG4gICAgICBbaW1hZ2VSZXNvdXJjZV09XCJlZmZlY3RpdmVEZXNjcmlwdG9yKCkuaWNvblJlc291cmNlXCJcclxuICAgICAgW2NvbG9yXT1cImVmZmVjdGl2ZURlc2NyaXB0b3IoKS5pY29uQ29sb3IgfHwgZWZmZWN0aXZlRGVzY3JpcHRvcigpLmNvbG9yXCJcclxuICAgID48L3NtYXJ0LWljb24+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8c21hcnQtaWNvblxyXG4gICAgICBbaWNvbl09XCJlZmZlY3RpdmVEZXNjcmlwdG9yKCkuaWNvblwiXHJcbiAgICAgIFtjb2xvcl09XCJlZmZlY3RpdmVEZXNjcmlwdG9yKCkuaWNvbkNvbG9yIHx8IGVmZmVjdGl2ZURlc2NyaXB0b3IoKS5jb2xvclwiXHJcbiAgICA+PC9zbWFydC1pY29uPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi1idXR0b24vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi1idXR0b24vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBRU4sUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7QUFPbEUsTUFBTSxPQUFPLHVCQUF1QjtJQTZEbEMsWUFDUyxjQUFpQyxFQUNELE9BQTBCO1FBRDFELG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQTdEbEMsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWpELGFBQVEsR0FBRyxLQUFLLEVBQVcsQ0FB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QUF1QixtREErRHhCLGlCQUFpQjttR0EvRGhCLHVCQUF1QixvdUNDekJwQyx3ckdBdUZBOzs0RkQ5RGEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGtCQUFrQjs7MEJBbUV6QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQUcsUUFBUTt5Q0FuRDVCLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUcsaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIGNvbXB1dGVkLFxyXG4gIGlucHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vdWktYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uL3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7IFVpQWN0aW9uQnV0dG9uVHlwZSB9IGZyb20gJy4uLy4uL2FwaS9tb2RlbC91aUFjdGlvbkJ1dHRvblR5cGUnO1xyXG5pbXBvcnQgeyBJY29uUG9zaXRpb24gfSBmcm9tICcuLi8uLi9hcGkvbW9kZWwvaWNvblBvc2l0aW9uJztcclxuaW1wb3J0IHsgU3R5bGUsIFVpQWN0aW9uLCBVaUFjdGlvbkRlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi9hcGknO1xyXG5pbXBvcnQgeyBTbWFydFN0eWxlVXRpbGl0eSB9IGZyb20gJy4uLy4uL3V0aWxpdHkvc21hcnQtc3R5bGUtdXRpbGl0eSc7XHJcbmltcG9ydCB7IEJ1dHRvbkljb25QbGFjZWhvbGRlciB9IGZyb20gJy4vYnV0dG9uLWljb24tcGxhY2Vob2xkZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1hY3Rpb24tYnV0dG9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdWktYWN0aW9uLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VpLWFjdGlvbi1idXR0b24uY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaUFjdGlvbkJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4+KCk7XHJcbiAgZGVzY3JpcHRvciA9IGlucHV0LnJlcXVpcmVkPFVpQWN0aW9uRGVzY3JpcHRvcj4oKTtcclxuICBjb2RlID0gaW5wdXQ8c3RyaW5nPigpO1xyXG4gIGlkZW50aWZpZXIgPSBpbnB1dDxzdHJpbmc+KCk7XHJcbiAgdmlld0FjdGl2YXRlZCA9IGlucHV0PGJvb2xlYW4gfCBudWxsPigpO1xyXG4gIGFkZGVkQ3NzQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XHJcbiAgYWRkQmFzaWNDbGFzc2VzID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgaWNvblBsYWNlaG9sZGVyID0gaW5wdXQ8QnV0dG9uSWNvblBsYWNlaG9sZGVyPigpO1xyXG5cclxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGV2ZW50OiBNb3VzZUV2ZW50O1xyXG4gICAgZGVzY3JpcHRvcj86IFVpQWN0aW9uRGVzY3JpcHRvcjtcclxuICAgIGNvZGU/OiBzdHJpbmc7XHJcbiAgICB1aUFjdGlvbj86IFVpQWN0aW9uO1xyXG4gIH0+KCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkRvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBldmVudDogYW55O1xyXG4gICAgZGVzY3JpcHRvcj86IFVpQWN0aW9uRGVzY3JpcHRvcjtcclxuICAgIGNvZGU/OiBzdHJpbmc7XHJcbiAgfT4oKTtcclxuXHJcbiAgY29tcG9uZW50TGlicmFyeSA9IENvbXBvbmVudExpYnJhcnk7XHJcbiAgY29tcExpYjogQ29tcG9uZW50TGlicmFyeTtcclxuXHJcbiAgcHJlc3NlZEJ1dHRvbkFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgbWVudU9wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBlZmZlY3RpdmVEZXNjcmlwdG9yID0gY29tcHV0ZWQ8VWlBY3Rpb25EZXNjcmlwdG9yPigoKSA9PiB7XHJcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5kZXNjcmlwdG9yKCk7XHJcbiAgICBjb25zdCBjb2RlID0gdGhpcy5jb2RlKCk7XHJcblxyXG4gICAgY29uc3QgZGVmYXVsdHM6IFBhcnRpYWw8VWlBY3Rpb25EZXNjcmlwdG9yPiA9IHtcclxuICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5kZWZhdWx0cyxcclxuICAgICAgLi4uZGVzY3JpcHRvcixcclxuICAgICAgdGl0bGU6IGRlc2NyaXB0b3I/LnRpdGxlID8/IGRlZmF1bHRzLnRpdGxlLFxyXG4gICAgICBjb2xvcjogZGVzY3JpcHRvcj8uY29sb3IgPz8gZGVmYXVsdHMuY29sb3IsXHJcbiAgICAgIHR5cGU6IGRlc2NyaXB0b3I/LnR5cGUgPz8gZGVmYXVsdHMudHlwZSxcclxuICAgIH0gYXMgVWlBY3Rpb25EZXNjcmlwdG9yO1xyXG4gIH0pO1xyXG5cclxuICBtYWluQWN0aW9uTW9kZWwgPSBjb21wdXRlZDxVaUFjdGlvbk1vZGVsPihcclxuICAgICgpID0+XHJcbiAgICAgICh7XHJcbiAgICAgICAgZGVzY3JpcHRvcjogdGhpcy5lZmZlY3RpdmVEZXNjcmlwdG9yKCksXHJcbiAgICAgICAgdWlBY3Rpb246IHtcclxuICAgICAgICAgIGRlc2NyaXB0b3I6IHRoaXMuZWZmZWN0aXZlRGVzY3JpcHRvcigpLFxyXG4gICAgICAgICAgY29kZTogdGhpcy5jb2RlKCksXHJcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCgpID8/IGZhbHNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pIGFzIFVpQWN0aW9uTW9kZWxcclxuICApO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBjb21wTGliPzogQ29tcG9uZW50TGlicmFyeVxyXG4gICkge1xyXG4gICAgdGhpcy5jb21wTGliID0gY29tcExpYiA/PyBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkc7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkFjdGlvbkNsaWNrZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIG1vZGVsOiBVaUFjdGlvbk1vZGVsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoe1xyXG4gICAgICBldmVudCxcclxuICAgICAgY29kZTogbW9kZWwudWlBY3Rpb24uY29kZSxcclxuICAgICAgZGVzY3JpcHRvcjogbW9kZWwuZGVzY3JpcHRvciEsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQWN0aW9uRG91YmxlQ2xpY2tlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGlvbkRvdWJsZUNsaWNrLmVtaXQoe1xyXG4gICAgICBldmVudCxcclxuICAgICAgY29kZTogdGhpcy5jb2RlKCksXHJcbiAgICAgIGRlc2NyaXB0b3I6IHRoaXMuZWZmZWN0aXZlRGVzY3JpcHRvcigpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpY29uUG9zaXRpb24oKTogdHlwZW9mIEljb25Qb3NpdGlvbiB7XHJcbiAgICByZXR1cm4gSWNvblBvc2l0aW9uO1xyXG4gIH1cclxuXHJcbiAgaXNPbmx5SWNvbigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmVmZmVjdGl2ZURlc2NyaXB0b3IoKT8udHlwZTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHR5cGUgPT09IFVpQWN0aW9uQnV0dG9uVHlwZS5JQ09OIHx8XHJcbiAgICAgIHR5cGUgPT09IFVpQWN0aW9uQnV0dG9uVHlwZS5NSU5JX0ZBQiB8fFxyXG4gICAgICB0eXBlID09PSBVaUFjdGlvbkJ1dHRvblR5cGUuRkFCXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0YnRuQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5hZGRCYXNpY0NsYXNzZXMoKSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmVmZmVjdGl2ZURlc2NyaXB0b3IoKS5jb2xvcjtcclxuICAgIGlmIChjb2xvcikge1xyXG4gICAgICByZXR1cm4gJ3AtYnV0dG9uLScgKyBjb2xvciArICcgc2I0LScgKyBjb2xvcjtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldFR5cGUoKTogYW55IHtcclxuICAgIGlmICghdGhpcy5hZGRCYXNpY0NsYXNzZXMoKSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5lZmZlY3RpdmVEZXNjcmlwdG9yKCkudHlwZSkge1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLk5PUk1BTDpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtbm9ybWFsJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXRleHQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLkZMQVQ6XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnc2I0LWZsYXQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcmFpc2VkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5SQUlTRUQ6XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnc2I0LXJhaXNlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLlNUUk9LRUQ6XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnc2I0LXN0cm9rZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tb3V0bGluZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLk1JTklfRkFCOlxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgJ3NiNC1taW5pZmFiJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXJvdW5kZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tdGV4dCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5GQUI6XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnc2I0LWZhYic6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXRleHQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcmFpc2VkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgY2FzZSBVaUFjdGlvbkJ1dHRvblR5cGUuSUNPTjpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtaWNvbic6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yb3VuZGVkJzogdHJ1ZSxcclxuICAgICAgICAgICAgJ3AtYnV0dG9uLXRleHQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcmFpc2VkJzogdHJ1ZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdzYjQtYmFzaWMnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tdGV4dCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1yYWlzZWQnOiB0cnVlLFxyXG4gICAgICAgICAgICAncC1idXR0b24tcm91bmRlZCc6IHRydWUsXHJcbiAgICAgICAgICAgICdwLWJ1dHRvbi1vdXRsaW5lZCc6IHRydWUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZWZmZWN0aXZlRGVzY3JpcHRvcigpLnR5cGUpIHtcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5OT1JNQUw6XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtYnV0dG9uIHNiNC1ub3JtYWwnO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLkZMQVQ6XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtZmxhdC1idXR0b24gc2I0LWZsYXQnO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLlJBSVNFRDpcclxuICAgICAgICAgIHJldHVybiAnbWF0LW1kYy1yYWlzZWQtYnV0dG9uIHNiNC1yYWlzZWQnO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLlNUUk9LRUQ6XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtc3Ryb2tlZC1idXR0b24gc2I0LXN0cm9rZWQnO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLklDT046XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtaWNvbi1idXR0b24gc2I0LWljb24nO1xyXG4gICAgICAgIGNhc2UgVWlBY3Rpb25CdXR0b25UeXBlLk1JTklfRkFCOlxyXG4gICAgICAgICAgcmV0dXJuICdtYXQtbWRjLW1pbmktZmFiIHNiNC1taW5pZmFiJztcclxuICAgICAgICBjYXNlIFVpQWN0aW9uQnV0dG9uVHlwZS5GQUI6XHJcbiAgICAgICAgICByZXR1cm4gJ21hdC1tZGMtZmFiIHNiNC1mYWInO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4gYG1hdC1idXR0b24gc2I0LWJhc2ljYDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsY1N0eWxlKHN0eWxlPzogU3R5bGUpOiBhbnkge1xyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nU3R5bGVzKHN0eWxlKTtcclxuICB9XHJcbiAgY2FsY0NsYXNzZXMoc3R5bGU/OiBTdHlsZSk6IGFueSB7XHJcbiAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdDbGFzc2VzKHN0eWxlKTtcclxuICB9XHJcblxyXG4gIGdldENvbWJpbmVkQ2xhc3NlcygpOiBhbnkge1xyXG4gICAgY29uc3QgdHlwZUNsYXNzZXMgPSB0aGlzLmdldFR5cGUoKTtcclxuICAgIGNvbnN0IHN0eWxlQ2xhc3NlcyA9IHRoaXMuY2FsY0NsYXNzZXModGhpcy5lZmZlY3RpdmVEZXNjcmlwdG9yKCkuc3R5bGUpO1xyXG5cclxuICAgIC8vIE5vcm1hbGl6ZSB0eXBlQ2xhc3NlcyB0byBvYmplY3RcclxuICAgIGNvbnN0IHR5cGVPYmogPVxyXG4gICAgICB0eXBlb2YgdHlwZUNsYXNzZXMgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgPyB0eXBlQ2xhc3Nlcy5zcGxpdCgnICcpLnJlZHVjZSgoYWNjLCBjbHMpID0+ICh7IC4uLmFjYywgW2Nsc106IHRydWUgfSksIHt9KVxyXG4gICAgICAgIDogdHlwZUNsYXNzZXM7XHJcblxyXG4gICAgLy8gVmlldy1hY3RpdmF0aW9uIGNsYXNzZXMsIG9ydGhvZ29uYWwgdG8gdGhlIGRlc2NyaXB0b3IudHlwZSBsb29rIGNsYXNzZXMgYWJvdmUuXHJcbiAgICBjb25zdCB2aWV3QWN0aXZhdGVkID0gdGhpcy52aWV3QWN0aXZhdGVkKCk7XHJcbiAgICBjb25zdCBpc09wZW5lciA9IHZpZXdBY3RpdmF0ZWQgIT09IG51bGwgJiYgdmlld0FjdGl2YXRlZCAhPT0gdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgYWN0aXZhdGlvbkNsYXNzZXMgPSB7XHJcbiAgICAgICdzYjQtdmlldy1vcGVuZXInOiBpc09wZW5lcixcclxuICAgICAgJ3NiNC12aWV3LWFjdGl2YXRlZCc6IHZpZXdBY3RpdmF0ZWQgPT09IHRydWUsXHJcbiAgICAgICdzYjQtdmlldy1ub3QtYWN0aXZhdGVkJzogdmlld0FjdGl2YXRlZCA9PT0gZmFsc2UsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB7IC4uLnR5cGVPYmosIC4uLnN0eWxlQ2xhc3NlcywgLi4uYWN0aXZhdGlvbkNsYXNzZXMgfTtcclxuICB9XHJcblxyXG4gIHJlbmRlclByZSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLmVmZmVjdGl2ZURlc2NyaXB0b3IoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGRlc2NyaXB0b3IuaWNvblBvc2l0aW9uID09PSBJY29uUG9zaXRpb24uUFJFICYmXHJcbiAgICAgIChkZXNjcmlwdG9yLmljb24gIT0gbnVsbCB8fCBkZXNjcmlwdG9yLmljb25SZXNvdXJjZSAhPSBudWxsKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlclBvc3QoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5lZmZlY3RpdmVEZXNjcmlwdG9yKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBkZXNjcmlwdG9yLmljb25Qb3NpdGlvbiA9PT0gSWNvblBvc2l0aW9uLlBPU1QgJiZcclxuICAgICAgKGRlc2NyaXB0b3IuaWNvbiAhPSBudWxsIHx8IGRlc2NyaXB0b3IuaWNvblJlc291cmNlICE9IG51bGwpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmVmZmVjdGl2ZURlc2NyaXB0b3IoKT8uY29sb3IgfHwgJ3RleHQnO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyUGxhY2Vob2xkZXJQcmUoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpY29uUGxhY2Vob2xkZXIgPSB0aGlzLmljb25QbGFjZWhvbGRlcigpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgaWNvblBsYWNlaG9sZGVyID09PSBCdXR0b25JY29uUGxhY2Vob2xkZXIuUFJFIHx8XHJcbiAgICAgIGljb25QbGFjZWhvbGRlciA9PT0gQnV0dG9uSWNvblBsYWNlaG9sZGVyLkJPVEhcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJQbGFjZWhvbGRlclBvc3QoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpY29uUGxhY2Vob2xkZXIgPSB0aGlzLmljb25QbGFjZWhvbGRlcigpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgaWNvblBsYWNlaG9sZGVyID09PSBCdXR0b25JY29uUGxhY2Vob2xkZXIuUE9TVCB8fFxyXG4gICAgICBpY29uUGxhY2Vob2xkZXIgPT09IEJ1dHRvbkljb25QbGFjZWhvbGRlci5CT1RIXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0SnVzdGlmeUNvbnRlbnQoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCBpY29uUGxhY2Vob2xkZXIgPSB0aGlzLmljb25QbGFjZWhvbGRlcigpO1xyXG4gICAgaWYgKCFpY29uUGxhY2Vob2xkZXIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoaWNvblBsYWNlaG9sZGVyID09PSBCdXR0b25JY29uUGxhY2Vob2xkZXIuQk9USCkge1xyXG4gICAgICByZXR1cm4gJ2NlbnRlcic7XHJcbiAgICB9XHJcbiAgICBpZiAoaWNvblBsYWNlaG9sZGVyID09PSBCdXR0b25JY29uUGxhY2Vob2xkZXIuUFJFKSB7XHJcbiAgICAgIHJldHVybiAnZmxleC1zdGFydCc7XHJcbiAgICB9XHJcbiAgICBpZiAoaWNvblBsYWNlaG9sZGVyID09PSBCdXR0b25JY29uUGxhY2Vob2xkZXIuUE9TVCkge1xyXG4gICAgICByZXR1cm4gJ2ZsZXgtZW5kJztcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VwYXJhdG9yQ29sb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAncmdiKGZyb20gdmFyKC0tJyArIHRoaXMuZ2V0Q29sb3IoKSArICctY29sb3IpIHIgZyBiIC8gMC44KSc7XHJcbiAgfVxyXG5cclxuICBnZXREYXRhVGVzdElkKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuY29kZSgpKSB7XHJcbiAgICAgIGlmICh0aGlzLmlkZW50aWZpZXIoKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvZGUoKSEgKyAnXycgKyB0aGlzLmlkZW50aWZpZXIoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5jb2RlKCkhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoZWZmZWN0aXZlRGVzY3JpcHRvcigpLnR5cGUgPT09ICdTRVBBUkFUT1InKSB7XHJcbiAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPlxyXG4gICAgQGlmIChlZmZlY3RpdmVEZXNjcmlwdG9yKCkudGl0bGUpIHtcclxuICAgICAgPHNwYW4gY2xhc3M9XCJzZXBhcmF0b3ItbGFiZWxcIiBbc3R5bGUuY29sb3JdPVwiZ2V0U2VwYXJhdG9yQ29sb3IoKVwiPlxyXG4gICAgICAgIHt7IGVmZmVjdGl2ZURlc2NyaXB0b3IoKS50aXRsZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICB9XHJcbiAgICA8aHIgY2xhc3M9XCJzZXBhcmF0b3ItbGluZVwiIFtzdHlsZS5ib3JkZXItdG9wLWNvbG9yXT1cImdldFNlcGFyYXRvckNvbG9yKClcIiAvPlxyXG4gIDwvZGl2PlxyXG59IEBlbHNlIHtcclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uV2l0aEJhZGdlXCI+PC9uZy1jb250YWluZXI+XHJcbn1cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uV2l0aEJhZGdlPlxyXG4gIEBpZiAoZWZmZWN0aXZlRGVzY3JpcHRvcigpICYmIGVmZmVjdGl2ZURlc2NyaXB0b3IoKS5iYWRnZSkge1xyXG4gICAgPHVpLWJhZGdlIFtkZXNjcmlwdG9yXT1cImVmZmVjdGl2ZURlc2NyaXB0b3IoKS5iYWRnZVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdWktYmFkZ2U+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2J1dHRvblRlbXBsYXRlPlxyXG4gIEBpZiAoY29tcExpYiA9PT0gY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHBCdXR0b25cclxuICAgICAgcFJpcHBsZVxyXG4gICAgICBbc21hcnRUb29sdGlwXT1cImVmZmVjdGl2ZURlc2NyaXB0b3IoKS50b29sdGlwXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiEhZGlzYWJsZWQoKVwiXHJcbiAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrZWQoJGV2ZW50LCBtYWluQWN0aW9uTW9kZWwoKSlcIlxyXG4gICAgICAoZGJsY2xpY2spPVwib25BY3Rpb25Eb3VibGVDbGlja2VkKCRldmVudClcIlxyXG4gICAgICBbYXV0b2ZvY3VzXT1cImZhbHNlXCJcclxuICAgICAgW25nU3R5bGVdPVwiY2FsY1N0eWxlKGVmZmVjdGl2ZURlc2NyaXB0b3IoKS5zdHlsZSlcIlxyXG4gICAgICBbbmdDbGFzc109XCJnZXRDb21iaW5lZENsYXNzZXMoKVwiXHJcbiAgICAgIFtzdHlsZS5qdXN0aWZ5LWNvbnRlbnRdPVwiZ2V0SnVzdGlmeUNvbnRlbnQoKVwiXHJcbiAgICAgIGNsYXNzPVwie3sgZ2V0YnRuQ2xhc3MoKSB9fSB7eyBhZGRlZENzc0NsYXNzKCkgfX1cIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiZ2V0RGF0YVRlc3RJZCgpXCJcclxuICAgID5cclxuICAgICAgPGRpdiAqbmdJZj1cImlzT25seUljb24oKTsgdGhlbiBidXR0b25JY29uOyBlbHNlIHRleHRcIj48L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIH0gQGVsc2Uge1xyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtYnV0dG9uXHJcbiAgICAgIFtzbWFydFRvb2x0aXBdPVwiZWZmZWN0aXZlRGVzY3JpcHRvcigpLnRvb2x0aXBcIlxyXG4gICAgICBbY29sb3JdPVwiZWZmZWN0aXZlRGVzY3JpcHRvcigpLmNvbG9yXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIiEhZGlzYWJsZWQoKVwiXHJcbiAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrZWQoJGV2ZW50LCBtYWluQWN0aW9uTW9kZWwoKSlcIlxyXG4gICAgICAoZGJsY2xpY2spPVwib25BY3Rpb25Eb3VibGVDbGlja2VkKCRldmVudClcIlxyXG4gICAgICBbbmdTdHlsZV09XCJjYWxjU3R5bGUoZWZmZWN0aXZlRGVzY3JpcHRvcigpLnN0eWxlKVwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cImdldENvbWJpbmVkQ2xhc3NlcygpXCJcclxuICAgICAgW3N0eWxlLmp1c3RpZnktY29udGVudF09XCJnZXRKdXN0aWZ5Q29udGVudCgpXCJcclxuICAgICAgY2xhc3M9XCJ7eyBnZXRidG5DbGFzcygpIH19IHt7IGFkZGVkQ3NzQ2xhc3MoKSB9fVwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJnZXREYXRhVGVzdElkKClcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNPbmx5SWNvbigpOyB0aGVuIGJ1dHRvbkljb247IGVsc2UgdGV4dFwiPjwvZGl2PlxyXG4gICAgPC9idXR0b24+XHJcbiAgfVxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0ZXh0PlxyXG4gIEBpZiAocmVuZGVyUHJlKCkgfHwgcmVuZGVyUGxhY2Vob2xkZXJQcmUoKSkge1xyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkljb25cIiAvPlxyXG4gIH1cclxuICB7eyBlZmZlY3RpdmVEZXNjcmlwdG9yKCkudGl0bGUgfX1cclxuICBAaWYgKHJlbmRlclBvc3QoKSB8fCByZW5kZXJQbGFjZWhvbGRlclBvc3QoKSkge1xyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkljb25cIiAvPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnV0dG9uSWNvbj5cclxuICBAaWYgKHJlbmRlclBsYWNlaG9sZGVyUHJlKCkgfHwgcmVuZGVyUGxhY2Vob2xkZXJQb3N0KCkpIHtcclxuICAgIDxzbWFydC1pY29uPjwvc21hcnQtaWNvbj5cclxuICB9IEBlbHNlIGlmIChlZmZlY3RpdmVEZXNjcmlwdG9yKCkuaWNvblJlc291cmNlKSB7XHJcbiAgICA8c21hcnQtaWNvblxyXG4gICAgICBbaW1hZ2VSZXNvdXJjZV09XCJlZmZlY3RpdmVEZXNjcmlwdG9yKCkuaWNvblJlc291cmNlXCJcclxuICAgICAgW2NvbG9yXT1cImVmZmVjdGl2ZURlc2NyaXB0b3IoKS5pY29uQ29sb3IgfHwgZWZmZWN0aXZlRGVzY3JpcHRvcigpLmNvbG9yXCJcclxuICAgID48L3NtYXJ0LWljb24+XHJcbiAgfSBAZWxzZSB7XHJcbiAgICA8c21hcnQtaWNvblxyXG4gICAgICBbaWNvbl09XCJlZmZlY3RpdmVEZXNjcmlwdG9yKCkuaWNvblwiXHJcbiAgICAgIFtjb2xvcl09XCJlZmZlY3RpdmVEZXNjcmlwdG9yKCkuaWNvbkNvbG9yIHx8IGVmZmVjdGl2ZURlc2NyaXB0b3IoKS5jb2xvclwiXHJcbiAgICA+PC9zbWFydC1pY29uPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19