@smartbit4all/ng-client 6.0.35 → 7.0.1
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.
- package/MIGRATION-7.0.md +1722 -0
- package/README.md +199 -386
- package/WIDGETS.md +206 -0
- package/fesm2022/smartbit4all-ng-client.mjs +15013 -17559
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
- package/package.json +15 -18
- package/smartbit4all-ng-client-7.0.1.tgz +0 -0
- package/types/smartbit4all-ng-client.d.ts +10350 -0
- package/esm2022/lib/component-factory-service/component-factory-service.module.mjs +0 -17
- package/esm2022/lib/component-factory-service/component-factory-service.service.mjs +0 -35
- package/esm2022/lib/component-factory-service/projects.mjs +0 -6
- package/esm2022/lib/session/api/api/api.mjs +0 -4
- package/esm2022/lib/session/api/api/session.service.mjs +0 -306
- package/esm2022/lib/session/api/configuration.mjs +0 -91
- package/esm2022/lib/session/api/encoder.mjs +0 -19
- package/esm2022/lib/session/api/index.mjs +0 -3
- package/esm2022/lib/session/api/model/accountInfo.mjs +0 -13
- package/esm2022/lib/session/api/model/apiError.mjs +0 -13
- package/esm2022/lib/session/api/model/authenticationProviderData.mjs +0 -13
- package/esm2022/lib/session/api/model/getAuthenticationProvidersResponse.mjs +0 -2
- package/esm2022/lib/session/api/model/models.mjs +0 -9
- package/esm2022/lib/session/api/model/refreshSessionRequest.mjs +0 -13
- package/esm2022/lib/session/api/model/session.mjs +0 -2
- package/esm2022/lib/session/api/model/sessionInfoData.mjs +0 -2
- package/esm2022/lib/session/api/model/userActivityLog.mjs +0 -13
- package/esm2022/lib/session/api/param.mjs +0 -2
- package/esm2022/lib/session/api/variables.mjs +0 -9
- package/esm2022/lib/session/cookie-service/smart-cookie.service.mjs +0 -225
- package/esm2022/lib/session/projects.mjs +0 -12
- package/esm2022/lib/session/smart-backend-bootstrap.config.mjs +0 -2
- package/esm2022/lib/session/smart-backend-bootstrap.service.mjs +0 -217
- package/esm2022/lib/session/smart-default-error-ui.service.mjs +0 -134
- package/esm2022/lib/session/smart-error-catching.interceptor.mjs +0 -109
- package/esm2022/lib/session/smart-header-maintainer.interceptor.mjs +0 -44
- package/esm2022/lib/session/smart-session-handler.service.mjs +0 -7
- package/esm2022/lib/session/smart-session.module.mjs +0 -58
- package/esm2022/lib/session/smart-session.service.mjs +0 -309
- package/esm2022/lib/session/smart-timer/smart-session-timer.component.mjs +0 -59
- package/esm2022/lib/shared/projects.mjs +0 -4
- package/esm2022/lib/shared/shared.module.mjs +0 -19
- package/esm2022/lib/shared/smart-tooltip.directive.mjs +0 -58
- package/esm2022/lib/shared/smarttable.date-pipe.mjs +0 -43
- package/esm2022/lib/smart-client/projects.mjs +0 -4
- package/esm2022/lib/smart-client/smart-component-api-client.mjs +0 -935
- package/esm2022/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +0 -79
- package/esm2022/lib/smart-client/smart.component.mjs +0 -88
- package/esm2022/lib/smart-client/smart.service.mjs +0 -71
- package/esm2022/lib/smart-component-layout/api/api/api.mjs +0 -4
- package/esm2022/lib/smart-component-layout/api/api/default.service.mjs +0 -133
- package/esm2022/lib/smart-component-layout/api/api.module.mjs +0 -40
- package/esm2022/lib/smart-component-layout/api/configuration.mjs +0 -91
- package/esm2022/lib/smart-component-layout/api/encoder.mjs +0 -19
- package/esm2022/lib/smart-component-layout/api/index.mjs +0 -7
- package/esm2022/lib/smart-component-layout/api/model/componentType.mjs +0 -18
- package/esm2022/lib/smart-component-layout/api/model/componentWidgetType.mjs +0 -22
- package/esm2022/lib/smart-component-layout/api/model/layoutDefinitionDescriptor.mjs +0 -2
- package/esm2022/lib/smart-component-layout/api/model/layoutDirection.mjs +0 -17
- package/esm2022/lib/smart-component-layout/api/model/models.mjs +0 -10
- package/esm2022/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +0 -2
- package/esm2022/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +0 -2
- package/esm2022/lib/smart-component-layout/api/model/toolbarAlignment.mjs +0 -17
- package/esm2022/lib/smart-component-layout/api/model/toolbarDirection.mjs +0 -17
- package/esm2022/lib/smart-component-layout/api/model/toolbarProperties.mjs +0 -2
- package/esm2022/lib/smart-component-layout/api/param.mjs +0 -2
- package/esm2022/lib/smart-component-layout/api/variables.mjs +0 -9
- package/esm2022/lib/smart-component-layout/projects.mjs +0 -8
- package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +0 -169
- package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +0 -438
- package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +0 -57
- package/esm2022/lib/smart-diagram/api/api/api.mjs +0 -4
- package/esm2022/lib/smart-diagram/api/api/diagramService.service.mjs +0 -141
- package/esm2022/lib/smart-diagram/api/api.module.mjs +0 -40
- package/esm2022/lib/smart-diagram/api/configuration.mjs +0 -91
- package/esm2022/lib/smart-diagram/api/encoder.mjs +0 -19
- package/esm2022/lib/smart-diagram/api/index.mjs +0 -7
- package/esm2022/lib/smart-diagram/api/model/diagramColor.mjs +0 -13
- package/esm2022/lib/smart-diagram/api/model/diagramDataContainer.mjs +0 -2
- package/esm2022/lib/smart-diagram/api/model/diagramDataItem.mjs +0 -13
- package/esm2022/lib/smart-diagram/api/model/diagramDataSet.mjs +0 -2
- package/esm2022/lib/smart-diagram/api/model/diagramDescriptor.mjs +0 -2
- package/esm2022/lib/smart-diagram/api/model/diagramModel.mjs +0 -2
- package/esm2022/lib/smart-diagram/api/model/diagramShape.mjs +0 -2
- package/esm2022/lib/smart-diagram/api/model/drawTime.mjs +0 -18
- package/esm2022/lib/smart-diagram/api/model/labelText.mjs +0 -2
- package/esm2022/lib/smart-diagram/api/model/models.mjs +0 -10
- package/esm2022/lib/smart-diagram/api/param.mjs +0 -2
- package/esm2022/lib/smart-diagram/api/variables.mjs +0 -9
- package/esm2022/lib/smart-diagram/component/default-smart-diagram-options.provider.mjs +0 -312
- package/esm2022/lib/smart-diagram/component/smart-diagram.component.mjs +0 -359
- package/esm2022/lib/smart-diagram/component/smart-diagram.module.mjs +0 -40
- package/esm2022/lib/smart-diagram/component/smart-diagram.util.mjs +0 -10
- package/esm2022/lib/smart-diagram/projects.mjs +0 -5
- package/esm2022/lib/smart-dialog/projects.mjs +0 -8
- package/esm2022/lib/smart-dialog/smartdialog.component.mjs +0 -54
- package/esm2022/lib/smart-dialog/smartdialog.model.mjs +0 -16
- package/esm2022/lib/smart-dialog/smartdialog.module.mjs +0 -46
- package/esm2022/lib/smart-dialog/smartdialog.service.mjs +0 -86
- package/esm2022/lib/smart-expandable-section/expandable-section.component.mjs +0 -101
- package/esm2022/lib/smart-expandable-section/expandable-section.model.mjs +0 -12
- package/esm2022/lib/smart-expandable-section/projects.mjs +0 -8
- package/esm2022/lib/smart-expandable-section/smart-expandable-section.module.mjs +0 -57
- package/esm2022/lib/smart-expandable-section/smart-expandable-section.service.mjs +0 -14
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.mjs +0 -17
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +0 -2
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +0 -8
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +0 -2
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionData.mjs +0 -2
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionDataType.mjs +0 -20
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionField.mjs +0 -2
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +0 -2
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.mjs +0 -28
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionList.mjs +0 -2
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +0 -2
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperation.mjs +0 -32
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOrderBy.mjs +0 -18
- package/esm2022/lib/smart-filter/api/filter/model/model.mjs +0 -16
- package/esm2022/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.mjs +0 -2
- package/esm2022/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.mjs +0 -13
- package/esm2022/lib/smart-filter/api/value/model/value.mjs +0 -13
- package/esm2022/lib/smart-filter/projects.mjs +0 -9
- package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +0 -14
- package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +0 -166
- package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +0 -45
- package/esm2022/lib/smart-filter/smart-filter/smart-filter.component.mjs +0 -36
- package/esm2022/lib/smart-filter/smart-filter/smart-filter.service.mjs +0 -31
- package/esm2022/lib/smart-filter/smart-filter.model.mjs +0 -13
- package/esm2022/lib/smart-filter/smart-filter.module.mjs +0 -33
- package/esm2022/lib/smart-filter-editor/api/api/api.mjs +0 -4
- package/esm2022/lib/smart-filter-editor/api/api/filter.service.mjs +0 -198
- package/esm2022/lib/smart-filter-editor/api/api.module.mjs +0 -40
- package/esm2022/lib/smart-filter-editor/api/configuration.mjs +0 -91
- package/esm2022/lib/smart-filter-editor/api/encoder.mjs +0 -19
- package/esm2022/lib/smart-filter-editor/api/index.mjs +0 -7
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.mjs +0 -17
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilder.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +0 -13
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +0 -8
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +0 -7
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionData.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionDataType.mjs +0 -20
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionField.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.mjs +0 -28
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionList.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperation.mjs +0 -32
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOrderBy.mjs +0 -19
- package/esm2022/lib/smart-filter-editor/api/model/models.mjs +0 -20
- package/esm2022/lib/smart-filter-editor/api/model/searchPageConfig.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/api/model/smartFilterType.mjs +0 -17
- package/esm2022/lib/smart-filter-editor/api/param.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/api/variables.mjs +0 -9
- package/esm2022/lib/smart-filter-editor/filter-utils.mjs +0 -3
- package/esm2022/lib/smart-filter-editor/filterExpressionBuilderApiActions.mjs +0 -15
- package/esm2022/lib/smart-filter-editor/project.mjs +0 -11
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/advanced-relation-button/advanced-relation-button.component.mjs +0 -27
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/advanced-smart-filter-expression-item/advanced-smart-filter-expression-item.component.mjs +0 -32
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/expression-editor-dialog/expression-editor-dialog.component.mjs +0 -29
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/expression-editor-dialog/expression-editor-dialog.service.mjs +0 -50
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +0 -72
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.mjs +0 -52
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +0 -329
- package/esm2022/lib/smart-filter-editor/smart-filter-editor.model.mjs +0 -2
- package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +0 -84
- package/esm2022/lib/smart-filter-editor/smart-filter-editor.service.mjs +0 -78
- package/esm2022/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.mjs +0 -24
- package/esm2022/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +0 -57
- package/esm2022/lib/smart-form/api/api/api.mjs +0 -4
- package/esm2022/lib/smart-form/api/api/default.service.mjs +0 -133
- package/esm2022/lib/smart-form/api/api.module.mjs +0 -40
- package/esm2022/lib/smart-form/api/configuration.mjs +0 -91
- package/esm2022/lib/smart-form/api/encoder.mjs +0 -19
- package/esm2022/lib/smart-form/api/index.mjs +0 -7
- package/esm2022/lib/smart-form/api/model/dateFieldProperties.mjs +0 -13
- package/esm2022/lib/smart-form/api/model/divProperties.mjs +0 -2
- package/esm2022/lib/smart-form/api/model/fileUploaderProperties.mjs +0 -2
- package/esm2022/lib/smart-form/api/model/imageProperties.mjs +0 -2
- package/esm2022/lib/smart-form/api/model/models.mjs +0 -20
- package/esm2022/lib/smart-form/api/model/multiFileUploaderProperties.mjs +0 -2
- package/esm2022/lib/smart-form/api/model/propertyMapping.mjs +0 -13
- package/esm2022/lib/smart-form/api/model/recordingUploaderProperties.mjs +0 -7
- package/esm2022/lib/smart-form/api/model/selectionDefinition.mjs +0 -14
- package/esm2022/lib/smart-form/api/model/smartFormInputMode.mjs +0 -22
- package/esm2022/lib/smart-form/api/model/smartFormWidgetDirection.mjs +0 -17
- package/esm2022/lib/smart-form/api/model/smartFormWidgetType.mjs +0 -49
- package/esm2022/lib/smart-form/api/model/smartLayoutDefinition.mjs +0 -2
- package/esm2022/lib/smart-form/api/model/smartMatrixModel.mjs +0 -2
- package/esm2022/lib/smart-form/api/model/smartWidgetDefinition.mjs +0 -2
- package/esm2022/lib/smart-form/api/model/smartWidgetHint.mjs +0 -18
- package/esm2022/lib/smart-form/api/model/sortDefinition.mjs +0 -13
- package/esm2022/lib/smart-form/api/model/textBoxProperties.mjs +0 -13
- package/esm2022/lib/smart-form/api/model/textFieldProperties.mjs +0 -13
- package/esm2022/lib/smart-form/api/model/valueChangeMode.mjs +0 -21
- package/esm2022/lib/smart-form/api/param.mjs +0 -2
- package/esm2022/lib/smart-form/api/variables.mjs +0 -9
- package/esm2022/lib/smart-form/highlightMacthingString-pipe.mjs +0 -20
- package/esm2022/lib/smart-form/projects.mjs +0 -18
- package/esm2022/lib/smart-form/services/smartform.layout-definition.service.mjs +0 -754
- package/esm2022/lib/smart-form/services/smartform.service.mjs +0 -683
- package/esm2022/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +0 -15
- package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +0 -193
- package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.model.mjs +0 -2
- package/esm2022/lib/smart-form/smartform.component.mjs +0 -190
- package/esm2022/lib/smart-form/smartform.form-model.mjs +0 -2
- package/esm2022/lib/smart-form/smartform.model.mjs +0 -38
- package/esm2022/lib/smart-form/widgets/components/smart-file-editor/smart-file-editor.component.mjs +0 -179
- package/esm2022/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +0 -83
- package/esm2022/lib/smart-form/widgets/components/smart-multi-file-editor/smart-multi-file-editor.component.mjs +0 -170
- package/esm2022/lib/smart-form/widgets/components/smart-voice-recorder/smart-voice-recorder.component.mjs +0 -151
- package/esm2022/lib/smart-form/widgets/directives/comparable-dropdown.directive.mjs +0 -35
- package/esm2022/lib/smart-form/widgets/directives/comparable-multiselect.directive.mjs +0 -79
- package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +0 -1050
- package/esm2022/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +0 -78
- package/esm2022/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +0 -31
- package/esm2022/lib/smart-generic-pages/acl-editing-view/acl-editing-view.component.mjs +0 -98
- package/esm2022/lib/smart-generic-pages/api/platform/acl/model/aCL.mjs +0 -2
- package/esm2022/lib/smart-generic-pages/api/platform/acl/model/aCLEntry.mjs +0 -18
- package/esm2022/lib/smart-generic-pages/api/platform/acl/model/objectValidationSeverity.mjs +0 -19
- package/esm2022/lib/smart-generic-pages/api/platform/acl/model/subject.mjs +0 -13
- package/esm2022/lib/smart-generic-pages/api/platform/api-default/objectHistoryRangeData.mjs +0 -2
- package/esm2022/lib/smart-generic-pages/api/platform/searchpage/model/searchPageModel.mjs +0 -2
- package/esm2022/lib/smart-generic-pages/api/platform/subjectselector/model/subjectSelectorPageModel.mjs +0 -13
- package/esm2022/lib/smart-generic-pages/api/platform/validation/model/validationItem.mjs +0 -2
- package/esm2022/lib/smart-generic-pages/api/platform/validation/model/validationResultPageModel.mjs +0 -2
- package/esm2022/lib/smart-generic-pages/generic-page/generic-page.component.mjs +0 -54
- package/esm2022/lib/smart-generic-pages/invalid-smartlink/invalid-smartlink.component.mjs +0 -40
- package/esm2022/lib/smart-generic-pages/no-permission-page/no-permission-page.component.mjs +0 -40
- package/esm2022/lib/smart-generic-pages/projects.mjs +0 -13
- package/esm2022/lib/smart-generic-pages/search-page/search-page.component.mjs +0 -81
- package/esm2022/lib/smart-generic-pages/smart-generic-pages.module.mjs +0 -116
- package/esm2022/lib/smart-generic-pages/subject-selector/subject-selector.component.mjs +0 -78
- package/esm2022/lib/smart-generic-pages/validation-result-page/validation-result-page.component.mjs +0 -93
- package/esm2022/lib/smart-grid/api/grid-api/api/api.mjs +0 -4
- package/esm2022/lib/smart-grid/api/grid-api/api/grid.service.mjs +0 -514
- package/esm2022/lib/smart-grid/api/grid-api/api.module.mjs +0 -40
- package/esm2022/lib/smart-grid/api/grid-api/configuration.mjs +0 -91
- package/esm2022/lib/smart-grid/api/grid-api/encoder.mjs +0 -19
- package/esm2022/lib/smart-grid/api/grid-api/index.mjs +0 -7
- package/esm2022/lib/smart-grid/api/grid-api/model/gridColumnContentType.mjs +0 -17
- package/esm2022/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +0 -2
- package/esm2022/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +0 -20
- package/esm2022/lib/smart-grid/api/grid-api/model/gridExportDescriptor.mjs +0 -2
- package/esm2022/lib/smart-grid/api/grid-api/model/gridModel.mjs +0 -2
- package/esm2022/lib/smart-grid/api/grid-api/model/gridPage.mjs +0 -2
- package/esm2022/lib/smart-grid/api/grid-api/model/gridRow.mjs +0 -2
- package/esm2022/lib/smart-grid/api/grid-api/model/gridRowLayoutDescriptor.mjs +0 -2
- package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionChange.mjs +0 -13
- package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +0 -18
- package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +0 -17
- package/esm2022/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +0 -2
- package/esm2022/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +0 -2
- package/esm2022/lib/smart-grid/api/grid-api/model/gridView.mjs +0 -2
- package/esm2022/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +0 -8
- package/esm2022/lib/smart-grid/api/grid-api/model/models.mjs +0 -16
- package/esm2022/lib/smart-grid/api/grid-api/param.mjs +0 -2
- package/esm2022/lib/smart-grid/api/grid-api/variables.mjs +0 -9
- package/esm2022/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +0 -20
- package/esm2022/lib/smart-grid/components/generic-component/expanded-row-renderer.component.mjs +0 -47
- package/esm2022/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +0 -92
- package/esm2022/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +0 -200
- package/esm2022/lib/smart-grid/models/model.mjs +0 -29
- package/esm2022/lib/smart-grid/projects.mjs +0 -9
- package/esm2022/lib/smart-grid/smart-grid-toolbar-util.mjs +0 -76
- package/esm2022/lib/smart-grid/smart-grid.component.mjs +0 -1074
- package/esm2022/lib/smart-grid/smart-grid.module.mjs +0 -103
- package/esm2022/lib/smart-grid/smart-grid.service.mjs +0 -92
- package/esm2022/lib/smart-icon/projects.mjs +0 -9
- package/esm2022/lib/smart-icon/smart-icon/smart-icon.component.mjs +0 -95
- package/esm2022/lib/smart-icon/smart-icon/ui-badge/ui-badge.component.mjs +0 -33
- package/esm2022/lib/smart-icon/smart-icon/ui-badge/ui-badge.directive.mjs +0 -37
- package/esm2022/lib/smart-icon/smart-icon.module.mjs +0 -26
- package/esm2022/lib/smart-icon/smart-icon.service.mjs +0 -93
- package/esm2022/lib/smart-map/abstract-map.mjs +0 -112
- package/esm2022/lib/smart-map/api/api/api.mjs +0 -4
- package/esm2022/lib/smart-map/api/api/geoMap.service.mjs +0 -312
- package/esm2022/lib/smart-map/api/api.module.mjs +0 -40
- package/esm2022/lib/smart-map/api/configuration.mjs +0 -91
- package/esm2022/lib/smart-map/api/encoder.mjs +0 -19
- package/esm2022/lib/smart-map/api/index.mjs +0 -7
- package/esm2022/lib/smart-map/api/model/gPSPosition.mjs +0 -13
- package/esm2022/lib/smart-map/api/model/gPSRoute.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapChange.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapDataLoadingMode.mjs +0 -17
- package/esm2022/lib/smart-map/api/model/geoMapDataSourceDescriptor.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapDataSourceType.mjs +0 -19
- package/esm2022/lib/smart-map/api/model/geoMapEditingSession.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapInteraction.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapItem.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapItemKind.mjs +0 -18
- package/esm2022/lib/smart-map/api/model/geoMapLayer.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapLayerChange.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapLayerDescriptor.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapModel.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapOperationMode.mjs +0 -17
- package/esm2022/lib/smart-map/api/model/geoMapSelectionMode.mjs +0 -18
- package/esm2022/lib/smart-map/api/model/geoMapServerModel.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapTextType.mjs +0 -17
- package/esm2022/lib/smart-map/api/model/geoMapViewState.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/geoMapViewport.mjs +0 -2
- package/esm2022/lib/smart-map/api/model/models.mjs +0 -21
- package/esm2022/lib/smart-map/api/param.mjs +0 -2
- package/esm2022/lib/smart-map/api/variables.mjs +0 -9
- package/esm2022/lib/smart-map/api-default/api-default.mjs +0 -2
- package/esm2022/lib/smart-map/impl/google-map.mjs +0 -224
- package/esm2022/lib/smart-map/impl/leaflet-map.mjs +0 -422
- package/esm2022/lib/smart-map/projects.mjs +0 -9
- package/esm2022/lib/smart-map/smart-map.component.mjs +0 -222
- package/esm2022/lib/smart-map/smart-map.module.mjs +0 -22
- package/esm2022/lib/smart-map/smart-map.types.mjs +0 -2
- package/esm2022/lib/smart-navbar/projects.mjs +0 -8
- package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +0 -61
- package/esm2022/lib/smart-navbar/smart-navbar.model.mjs +0 -6
- package/esm2022/lib/smart-navbar/smart-navbar.module.mjs +0 -63
- package/esm2022/lib/smart-navbar/smart-navbar.service.mjs +0 -14
- package/esm2022/lib/smart-navigation/projects.mjs +0 -6
- package/esm2022/lib/smart-navigation/smart-navigation.interface.mjs +0 -2
- package/esm2022/lib/smart-navigation/smart-navigation.module.mjs +0 -18
- package/esm2022/lib/smart-navigation/smart-navigation.service.mjs +0 -27
- package/esm2022/lib/smart-ng-client.module.mjs +0 -131
- package/esm2022/lib/smart-ng-client.service.mjs +0 -19
- package/esm2022/lib/smart-subject/projects.mjs +0 -5
- package/esm2022/lib/smart-subject/smart-subject.mjs +0 -21
- package/esm2022/lib/smart-tab-group/projects.mjs +0 -5
- package/esm2022/lib/smart-tab-group/smart-tab-group.module.mjs +0 -22
- package/esm2022/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +0 -43
- package/esm2022/lib/smart-table/components/loading/loading.component.mjs +0 -15
- package/esm2022/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +0 -52
- package/esm2022/lib/smart-table/projects.mjs +0 -8
- package/esm2022/lib/smart-table/smarttable.component.mjs +0 -98
- package/esm2022/lib/smart-table/smarttable.model.mjs +0 -177
- package/esm2022/lib/smart-table/smarttable.module.mjs +0 -109
- package/esm2022/lib/smart-table/smarttable.service.mjs +0 -14
- package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +0 -40
- package/esm2022/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +0 -23
- package/esm2022/lib/smart-table/tables/table.mjs +0 -614
- package/esm2022/lib/smart-tree/projects.mjs +0 -9
- package/esm2022/lib/smart-tree/smarttree-generic.service.mjs +0 -292
- package/esm2022/lib/smart-tree/smarttree.component.mjs +0 -188
- package/esm2022/lib/smart-tree/smarttree.model.mjs +0 -7
- package/esm2022/lib/smart-tree/smarttree.module.mjs +0 -64
- package/esm2022/lib/smart-tree/smarttree.node.model.mjs +0 -6
- package/esm2022/lib/smart-tree/smarttree.service.interface.mjs +0 -2
- package/esm2022/lib/smart-tree/smarttree.service.mjs +0 -47
- package/esm2022/lib/smart-tree/tree-api/api/tree.service.mjs +0 -1190
- package/esm2022/lib/smart-tree/tree-api/configuration.mjs +0 -91
- package/esm2022/lib/smart-tree/tree-api/encoder.mjs +0 -19
- package/esm2022/lib/smart-tree/tree-api/param.mjs +0 -2
- package/esm2022/lib/smart-tree/tree-api/variables.mjs +0 -9
- package/esm2022/lib/smart-validation/named-validator.service.mjs +0 -115
- package/esm2022/lib/smart-validation/projects.mjs +0 -4
- package/esm2022/lib/smart-validation/smart-validation.module.mjs +0 -24
- package/esm2022/lib/smart-validation/smart-validation.types.mjs +0 -4
- package/esm2022/lib/theme/theme.service.mjs +0 -48
- package/esm2022/lib/view-context/api/api/api.mjs +0 -4
- package/esm2022/lib/view-context/api/api/view.service.mjs +0 -1113
- package/esm2022/lib/view-context/api/api-default/binaryContentData.mjs +0 -2
- package/esm2022/lib/view-context/api/api-default/binaryData.mjs +0 -2
- package/esm2022/lib/view-context/api/api-default/invocationError.mjs +0 -2
- package/esm2022/lib/view-context/api/api-default/invocationRequest.mjs +0 -2
- package/esm2022/lib/view-context/api/api-default/invocationRun.mjs +0 -2
- package/esm2022/lib/view-context/api/api.module.mjs +0 -40
- package/esm2022/lib/view-context/api/configuration.mjs +0 -91
- package/esm2022/lib/view-context/api/encoder.mjs +0 -19
- package/esm2022/lib/view-context/api/index.mjs +0 -7
- package/esm2022/lib/view-context/api/model/backgroundProcessInfo.mjs +0 -2
- package/esm2022/lib/view-context/api/model/badgeDescriptor.mjs +0 -13
- package/esm2022/lib/view-context/api/model/clipboardData.mjs +0 -13
- package/esm2022/lib/view-context/api/model/closeResult.mjs +0 -18
- package/esm2022/lib/view-context/api/model/componentConstraint.mjs +0 -2
- package/esm2022/lib/view-context/api/model/componentModel.mjs +0 -2
- package/esm2022/lib/view-context/api/model/componentModelChange.mjs +0 -13
- package/esm2022/lib/view-context/api/model/dataChange.mjs +0 -2
- package/esm2022/lib/view-context/api/model/dataChangeEvent.mjs +0 -2
- package/esm2022/lib/view-context/api/model/dataChangeKind.mjs +0 -21
- package/esm2022/lib/view-context/api/model/deviceInfo.mjs +0 -13
- package/esm2022/lib/view-context/api/model/downloadedFile.mjs +0 -13
- package/esm2022/lib/view-context/api/model/iconPosition.mjs +0 -20
- package/esm2022/lib/view-context/api/model/imageResource.mjs +0 -8
- package/esm2022/lib/view-context/api/model/link.mjs +0 -20
- package/esm2022/lib/view-context/api/model/menuDescriptor.mjs +0 -2
- package/esm2022/lib/view-context/api/model/menuOpenDirection.mjs +0 -23
- package/esm2022/lib/view-context/api/model/menuTriggerType.mjs +0 -17
- package/esm2022/lib/view-context/api/model/messageData.mjs +0 -2
- package/esm2022/lib/view-context/api/model/messageOption.mjs +0 -2
- package/esm2022/lib/view-context/api/model/messageOptionType.mjs +0 -18
- package/esm2022/lib/view-context/api/model/messageResult.mjs +0 -2
- package/esm2022/lib/view-context/api/model/messageTextType.mjs +0 -17
- package/esm2022/lib/view-context/api/model/messageType.mjs +0 -19
- package/esm2022/lib/view-context/api/model/models.mjs +0 -71
- package/esm2022/lib/view-context/api/model/multiComboBoxElement.mjs +0 -13
- package/esm2022/lib/view-context/api/model/multiComboBoxModel.mjs +0 -2
- package/esm2022/lib/view-context/api/model/namedValidator.mjs +0 -19
- package/esm2022/lib/view-context/api/model/openPendingData.mjs +0 -2
- package/esm2022/lib/view-context/api/model/publishedViewData.mjs +0 -13
- package/esm2022/lib/view-context/api/model/serverRequestExecutionStat.mjs +0 -2
- package/esm2022/lib/view-context/api/model/serverRequestTrack.mjs +0 -2
- package/esm2022/lib/view-context/api/model/serverRequestType.mjs +0 -24
- package/esm2022/lib/view-context/api/model/shellProperty.mjs +0 -13
- package/esm2022/lib/view-context/api/model/smartLinkData.mjs +0 -2
- package/esm2022/lib/view-context/api/model/smartLinkMigrationStatus.mjs +0 -8
- package/esm2022/lib/view-context/api/model/statisticRecord.mjs +0 -13
- package/esm2022/lib/view-context/api/model/style.mjs +0 -13
- package/esm2022/lib/view-context/api/model/themeDefinition.mjs +0 -2
- package/esm2022/lib/view-context/api/model/themeDescriptor.mjs +0 -2
- package/esm2022/lib/view-context/api/model/themeShellDescriptor.mjs +0 -2
- package/esm2022/lib/view-context/api/model/uiAction.mjs +0 -2
- package/esm2022/lib/view-context/api/model/uiActionButtonDescriptor.mjs +0 -2
- package/esm2022/lib/view-context/api/model/uiActionButtonType.mjs +0 -27
- package/esm2022/lib/view-context/api/model/uiActionConstraint.mjs +0 -13
- package/esm2022/lib/view-context/api/model/uiActionDefinition.mjs +0 -2
- package/esm2022/lib/view-context/api/model/uiActionDefinitionEntry.mjs +0 -2
- package/esm2022/lib/view-context/api/model/uiActionDescriptor.mjs +0 -2
- package/esm2022/lib/view-context/api/model/uiActionDialogDescriptor.mjs +0 -2
- package/esm2022/lib/view-context/api/model/uiActionFeedbackType.mjs +0 -20
- package/esm2022/lib/view-context/api/model/uiActionInputType.mjs +0 -21
- package/esm2022/lib/view-context/api/model/uiActionRequest.mjs +0 -13
- package/esm2022/lib/view-context/api/model/uiActionSchedule.mjs +0 -13
- package/esm2022/lib/view-context/api/model/uiActionTooltip.mjs +0 -22
- package/esm2022/lib/view-context/api/model/uiActionUploadDescriptor.mjs +0 -2
- package/esm2022/lib/view-context/api/model/uploadWidgetType.mjs +0 -18
- package/esm2022/lib/view-context/api/model/uploadedFile.mjs +0 -2
- package/esm2022/lib/view-context/api/model/valueSet.mjs +0 -2
- package/esm2022/lib/view-context/api/model/view.mjs +0 -2
- package/esm2022/lib/view-context/api/model/viewApiError.mjs +0 -13
- package/esm2022/lib/view-context/api/model/viewConstraint.mjs +0 -2
- package/esm2022/lib/view-context/api/model/viewContext.mjs +0 -2
- package/esm2022/lib/view-context/api/model/viewContextChange.mjs +0 -2
- package/esm2022/lib/view-context/api/model/viewContextData.mjs +0 -2
- package/esm2022/lib/view-context/api/model/viewContextUpdate.mjs +0 -2
- package/esm2022/lib/view-context/api/model/viewData.mjs +0 -2
- package/esm2022/lib/view-context/api/model/viewEventHandler.mjs +0 -8
- package/esm2022/lib/view-context/api/model/viewPlaceholder.mjs +0 -13
- package/esm2022/lib/view-context/api/model/viewState.mjs +0 -22
- package/esm2022/lib/view-context/api/model/viewStateUpdate.mjs +0 -2
- package/esm2022/lib/view-context/api/model/viewType.mjs +0 -18
- package/esm2022/lib/view-context/api/param.mjs +0 -2
- package/esm2022/lib/view-context/api/variables.mjs +0 -9
- package/esm2022/lib/view-context/default-view-components.token.mjs +0 -9
- package/esm2022/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +0 -20
- package/esm2022/lib/view-context/message-dialog/message-dialog.component.mjs +0 -93
- package/esm2022/lib/view-context/projects.mjs +0 -30
- package/esm2022/lib/view-context/property-definition-data.mjs +0 -2
- package/esm2022/lib/view-context/reuse-router-slot.token.mjs +0 -4
- package/esm2022/lib/view-context/smart-embedded-slot.directive.mjs +0 -57
- package/esm2022/lib/view-context/smart-ui-action/components/menu/click/menu.component.mjs +0 -254
- package/esm2022/lib/view-context/smart-ui-action/components/menu/hover/hover-menu.component.mjs +0 -256
- package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.constants.mjs +0 -62
- package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.service.mjs +0 -29
- package/esm2022/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +0 -30
- package/esm2022/lib/view-context/smart-ui-action/components/theme-selector/theme-selector.component.mjs +0 -35
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/photo-capture-widget/photo-capture-widget.component.mjs +0 -198
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/prime-file-uploader/prime-file-uploader.component.mjs +0 -95
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.component.mjs +0 -134
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.utils.mjs +0 -12
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/voice-record-widget/voice-record-widget.component.mjs +0 -256
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +0 -77
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +0 -54
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-dialog-button/ui-action-dialog-button.component.mjs +0 -60
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +0 -106
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +0 -60
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +0 -132
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +0 -58
- package/esm2022/lib/view-context/smart-ui-action/file-editor-toolbar/file-editor-toolbar.component.mjs +0 -35
- package/esm2022/lib/view-context/smart-ui-action/ui-action-button/button-icon-placeholder.mjs +0 -7
- package/esm2022/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.mjs +0 -258
- package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +0 -349
- package/esm2022/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +0 -185
- package/esm2022/lib/view-context/smart-ui-action/ui-action.model.mjs +0 -7
- package/esm2022/lib/view-context/smart-ui-action/ui-action.service.mjs +0 -250
- package/esm2022/lib/view-context/smart-view-context-dialog.service.mjs +0 -77
- package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +0 -35
- package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +0 -74
- package/esm2022/lib/view-context/smart-view-context.interceptor.mjs +0 -63
- package/esm2022/lib/view-context/smart-view-context.model.mjs +0 -2
- package/esm2022/lib/view-context/smart-view-context.module.mjs +0 -405
- package/esm2022/lib/view-context/smart-view-context.service.mjs +0 -1079
- package/esm2022/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +0 -41
- package/esm2022/lib/view-context/utility/componentLibrary.mjs +0 -9
- package/esm2022/lib/view-context/utility/smart-object-utility.mjs +0 -44
- package/esm2022/lib/view-context/utility/smart-style-utility.mjs +0 -68
- package/esm2022/lib/view-context/value-api/api/api.mjs +0 -4
- package/esm2022/lib/view-context/value-api/api/value.service.mjs +0 -138
- package/esm2022/lib/view-context/value-api/api.module.mjs +0 -40
- package/esm2022/lib/view-context/value-api/configuration.mjs +0 -91
- package/esm2022/lib/view-context/value-api/encoder.mjs +0 -19
- package/esm2022/lib/view-context/value-api/index.mjs +0 -7
- package/esm2022/lib/view-context/value-api/model/genericValue.mjs +0 -13
- package/esm2022/lib/view-context/value-api/model/models.mjs +0 -11
- package/esm2022/lib/view-context/value-api/model/value.mjs +0 -13
- package/esm2022/lib/view-context/value-api/model/valueSetData.mjs +0 -2
- package/esm2022/lib/view-context/value-api/model/valueSetDefinition.mjs +0 -2
- package/esm2022/lib/view-context/value-api/model/valueSetDefinitionData.mjs +0 -2
- package/esm2022/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +0 -13
- package/esm2022/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +0 -24
- package/esm2022/lib/view-context/value-api/model/valueSetExpression.mjs +0 -2
- package/esm2022/lib/view-context/value-api/model/valueSetOperand.mjs +0 -2
- package/esm2022/lib/view-context/value-api/model/valueSetOperation.mjs +0 -19
- package/esm2022/lib/view-context/value-api/param.mjs +0 -2
- package/esm2022/lib/view-context/value-api/variables.mjs +0 -9
- package/esm2022/lib/view-context/view-handler-resolution.mjs +0 -21
- package/esm2022/lib/view-context/view-op.mjs +0 -41
- package/esm2022/lib/view-context/view-slot-resolution.mjs +0 -28
- package/esm2022/projects.mjs +0 -31
- package/esm2022/smartbit4all-ng-client.mjs +0 -5
- package/index.d.ts +0 -5
- package/lib/component-factory-service/component-factory-service.module.d.ts +0 -6
- package/lib/component-factory-service/component-factory-service.service.d.ts +0 -13
- package/lib/component-factory-service/projects.d.ts +0 -2
- package/lib/session/api/api/api.d.ts +0 -3
- package/lib/session/api/api/session.service.d.ts +0 -107
- package/lib/session/api/configuration.d.ts +0 -104
- package/lib/session/api/encoder.d.ts +0 -11
- package/lib/session/api/index.d.ts +0 -2
- package/lib/session/api/model/accountInfo.d.ts +0 -24
- package/lib/session/api/model/apiError.d.ts +0 -15
- package/lib/session/api/model/authenticationProviderData.d.ts +0 -17
- package/lib/session/api/model/getAuthenticationProvidersResponse.d.ts +0 -15
- package/lib/session/api/model/models.d.ts +0 -8
- package/lib/session/api/model/refreshSessionRequest.d.ts +0 -14
- package/lib/session/api/model/session.d.ts +0 -32
- package/lib/session/api/model/sessionInfoData.d.ts +0 -26
- package/lib/session/api/model/userActivityLog.d.ts +0 -33
- package/lib/session/api/param.d.ts +0 -37
- package/lib/session/api/variables.d.ts +0 -8
- package/lib/session/cookie-service/smart-cookie.service.d.ts +0 -129
- package/lib/session/projects.d.ts +0 -8
- package/lib/session/smart-backend-bootstrap.config.d.ts +0 -73
- package/lib/session/smart-backend-bootstrap.service.d.ts +0 -57
- package/lib/session/smart-default-error-ui.service.d.ts +0 -90
- package/lib/session/smart-error-catching.interceptor.d.ts +0 -21
- package/lib/session/smart-header-maintainer.interceptor.d.ts +0 -11
- package/lib/session/smart-session-handler.service.d.ts +0 -22
- package/lib/session/smart-session.module.d.ts +0 -12
- package/lib/session/smart-session.service.d.ts +0 -88
- package/lib/session/smart-timer/smart-session-timer.component.d.ts +0 -19
- package/lib/shared/projects.d.ts +0 -3
- package/lib/shared/shared.module.d.ts +0 -9
- package/lib/shared/smart-tooltip.directive.d.ts +0 -16
- package/lib/shared/smarttable.date-pipe.d.ts +0 -18
- package/lib/smart-client/projects.d.ts +0 -3
- package/lib/smart-client/smart-component-api-client.d.ts +0 -143
- package/lib/smart-client/smart-file-uploader/smart-file-uploader.component.d.ts +0 -25
- package/lib/smart-client/smart.component.d.ts +0 -35
- package/lib/smart-client/smart.service.d.ts +0 -29
- package/lib/smart-component-layout/api/api/api.d.ts +0 -3
- package/lib/smart-component-layout/api/api/default.service.d.ts +0 -33
- package/lib/smart-component-layout/api/api.module.d.ts +0 -11
- package/lib/smart-component-layout/api/configuration.d.ts +0 -104
- package/lib/smart-component-layout/api/encoder.d.ts +0 -11
- package/lib/smart-component-layout/api/index.d.ts +0 -6
- package/lib/smart-component-layout/api/model/componentType.d.ts +0 -16
- package/lib/smart-component-layout/api/model/componentWidgetType.d.ts +0 -20
- package/lib/smart-component-layout/api/model/layoutDefinitionDescriptor.d.ts +0 -19
- package/lib/smart-component-layout/api/model/layoutDirection.d.ts +0 -15
- package/lib/smart-component-layout/api/model/models.d.ts +0 -9
- package/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.d.ts +0 -32
- package/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.d.ts +0 -26
- package/lib/smart-component-layout/api/model/toolbarAlignment.d.ts +0 -15
- package/lib/smart-component-layout/api/model/toolbarDirection.d.ts +0 -15
- package/lib/smart-component-layout/api/model/toolbarProperties.d.ts +0 -18
- package/lib/smart-component-layout/api/param.d.ts +0 -37
- package/lib/smart-component-layout/api/variables.d.ts +0 -8
- package/lib/smart-component-layout/projects.d.ts +0 -4
- package/lib/smart-component-layout/smart-component-layout-utility.d.ts +0 -25
- package/lib/smart-component-layout/smart-component-layout.component.d.ts +0 -93
- package/lib/smart-component-layout/smart-component-layout.module.d.ts +0 -17
- package/lib/smart-diagram/api/api/api.d.ts +0 -3
- package/lib/smart-diagram/api/api/diagramService.service.d.ts +0 -36
- package/lib/smart-diagram/api/api.module.d.ts +0 -11
- package/lib/smart-diagram/api/configuration.d.ts +0 -104
- package/lib/smart-diagram/api/encoder.d.ts +0 -11
- package/lib/smart-diagram/api/index.d.ts +0 -6
- package/lib/smart-diagram/api/model/diagramColor.d.ts +0 -17
- package/lib/smart-diagram/api/model/diagramDataContainer.d.ts +0 -19
- package/lib/smart-diagram/api/model/diagramDataItem.d.ts +0 -25
- package/lib/smart-diagram/api/model/diagramDataSet.d.ts +0 -22
- package/lib/smart-diagram/api/model/diagramDescriptor.d.ts +0 -57
- package/lib/smart-diagram/api/model/diagramModel.d.ts +0 -19
- package/lib/smart-diagram/api/model/diagramShape.d.ts +0 -30
- package/lib/smart-diagram/api/model/drawTime.d.ts +0 -18
- package/lib/smart-diagram/api/model/labelText.d.ts +0 -21
- package/lib/smart-diagram/api/model/models.d.ts +0 -9
- package/lib/smart-diagram/api/param.d.ts +0 -37
- package/lib/smart-diagram/api/variables.d.ts +0 -8
- package/lib/smart-diagram/component/default-smart-diagram-options.provider.d.ts +0 -33
- package/lib/smart-diagram/component/smart-diagram.component.d.ts +0 -43
- package/lib/smart-diagram/component/smart-diagram.module.d.ts +0 -11
- package/lib/smart-diagram/component/smart-diagram.util.d.ts +0 -1
- package/lib/smart-diagram/projects.d.ts +0 -4
- package/lib/smart-dialog/projects.d.ts +0 -4
- package/lib/smart-dialog/smartdialog.component.d.ts +0 -19
- package/lib/smart-dialog/smartdialog.model.d.ts +0 -68
- package/lib/smart-dialog/smartdialog.module.d.ts +0 -14
- package/lib/smart-dialog/smartdialog.service.d.ts +0 -28
- package/lib/smart-expandable-section/expandable-section.component.d.ts +0 -30
- package/lib/smart-expandable-section/expandable-section.model.d.ts +0 -43
- package/lib/smart-expandable-section/projects.d.ts +0 -4
- package/lib/smart-expandable-section/smart-expandable-section.module.d.ts +0 -17
- package/lib/smart-expandable-section/smart-expandable-section.service.d.ts +0 -6
- package/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.d.ts +0 -15
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderField.d.ts +0 -27
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.d.ts +0 -36
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.d.ts +0 -27
- package/lib/smart-filter/api/filter/model/filterExpressionData.d.ts +0 -27
- package/lib/smart-filter/api/filter/model/filterExpressionDataType.d.ts +0 -18
- package/lib/smart-filter/api/filter/model/filterExpressionField.d.ts +0 -44
- package/lib/smart-filter/api/filter/model/filterExpressionFieldList.d.ts +0 -21
- package/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.d.ts +0 -26
- package/lib/smart-filter/api/filter/model/filterExpressionList.d.ts +0 -18
- package/lib/smart-filter/api/filter/model/filterExpressionOperandData.d.ts +0 -25
- package/lib/smart-filter/api/filter/model/filterExpressionOperation.d.ts +0 -30
- package/lib/smart-filter/api/filter/model/filterExpressionOrderBy.d.ts +0 -25
- package/lib/smart-filter/api/filter/model/model.d.ts +0 -15
- package/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.d.ts +0 -19
- package/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.d.ts +0 -18
- package/lib/smart-filter/api/value/model/value.d.ts +0 -29
- package/lib/smart-filter/projects.d.ts +0 -5
- package/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.d.ts +0 -8
- package/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.d.ts +0 -31
- package/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.d.ts +0 -18
- package/lib/smart-filter/smart-filter/smart-filter.component.d.ts +0 -15
- package/lib/smart-filter/smart-filter/smart-filter.service.d.ts +0 -16
- package/lib/smart-filter/smart-filter.model.d.ts +0 -25
- package/lib/smart-filter/smart-filter.module.d.ts +0 -15
- package/lib/smart-filter-editor/api/api/api.d.ts +0 -3
- package/lib/smart-filter-editor/api/api/filter.service.d.ts +0 -57
- package/lib/smart-filter-editor/api/api.module.d.ts +0 -11
- package/lib/smart-filter-editor/api/configuration.d.ts +0 -104
- package/lib/smart-filter-editor/api/encoder.d.ts +0 -11
- package/lib/smart-filter-editor/api/index.d.ts +0 -6
- package/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.d.ts +0 -15
- package/lib/smart-filter-editor/api/model/filterExpressionBuilder.d.ts +0 -16
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.d.ts +0 -16
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderField.d.ts +0 -27
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.d.ts +0 -36
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.d.ts +0 -27
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.d.ts +0 -38
- package/lib/smart-filter-editor/api/model/filterExpressionData.d.ts +0 -27
- package/lib/smart-filter-editor/api/model/filterExpressionDataType.d.ts +0 -18
- package/lib/smart-filter-editor/api/model/filterExpressionField.d.ts +0 -44
- package/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.d.ts +0 -17
- package/lib/smart-filter-editor/api/model/filterExpressionFieldList.d.ts +0 -23
- package/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.d.ts +0 -26
- package/lib/smart-filter-editor/api/model/filterExpressionList.d.ts +0 -18
- package/lib/smart-filter-editor/api/model/filterExpressionOperandData.d.ts +0 -25
- package/lib/smart-filter-editor/api/model/filterExpressionOperation.d.ts +0 -30
- package/lib/smart-filter-editor/api/model/filterExpressionOrderBy.d.ts +0 -28
- package/lib/smart-filter-editor/api/model/models.d.ts +0 -19
- package/lib/smart-filter-editor/api/model/searchPageConfig.d.ts +0 -73
- package/lib/smart-filter-editor/api/model/smartFilterType.d.ts +0 -15
- package/lib/smart-filter-editor/api/param.d.ts +0 -37
- package/lib/smart-filter-editor/api/variables.d.ts +0 -8
- package/lib/smart-filter-editor/filter-utils.d.ts +0 -2
- package/lib/smart-filter-editor/filterExpressionBuilderApiActions.d.ts +0 -13
- package/lib/smart-filter-editor/project.d.ts +0 -10
- package/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/advanced-relation-button/advanced-relation-button.component.d.ts +0 -11
- package/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/advanced-smart-filter-expression-item/advanced-smart-filter-expression-item.component.d.ts +0 -11
- package/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/expression-editor-dialog/expression-editor-dialog.component.d.ts +0 -14
- package/lib/smart-filter-editor/smart-filter-editor-content/components/advanced/expression-editor-dialog/expression-editor-dialog.service.d.ts +0 -21
- package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.d.ts +0 -19
- package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.d.ts +0 -20
- package/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.d.ts +0 -50
- package/lib/smart-filter-editor/smart-filter-editor.model.d.ts +0 -4
- package/lib/smart-filter-editor/smart-filter-editor.module.d.ts +0 -21
- package/lib/smart-filter-editor/smart-filter-editor.service.d.ts +0 -51
- package/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.d.ts +0 -9
- package/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.d.ts +0 -21
- package/lib/smart-form/api/api/api.d.ts +0 -3
- package/lib/smart-form/api/api/default.service.d.ts +0 -33
- package/lib/smart-form/api/api.module.d.ts +0 -11
- package/lib/smart-form/api/configuration.d.ts +0 -104
- package/lib/smart-form/api/encoder.d.ts +0 -11
- package/lib/smart-form/api/index.d.ts +0 -6
- package/lib/smart-form/api/model/dateFieldProperties.d.ts +0 -15
- package/lib/smart-form/api/model/divProperties.d.ts +0 -15
- package/lib/smart-form/api/model/fileUploaderProperties.d.ts +0 -20
- package/lib/smart-form/api/model/imageProperties.d.ts +0 -15
- package/lib/smart-form/api/model/models.d.ts +0 -19
- package/lib/smart-form/api/model/multiFileUploaderProperties.d.ts +0 -19
- package/lib/smart-form/api/model/propertyMapping.d.ts +0 -24
- package/lib/smart-form/api/model/recordingUploaderProperties.d.ts +0 -20
- package/lib/smart-form/api/model/selectionDefinition.d.ts +0 -58
- package/lib/smart-form/api/model/smartFormInputMode.d.ts +0 -20
- package/lib/smart-form/api/model/smartFormWidgetDirection.d.ts +0 -15
- package/lib/smart-form/api/model/smartFormWidgetType.d.ts +0 -47
- package/lib/smart-form/api/model/smartLayoutDefinition.d.ts +0 -15
- package/lib/smart-form/api/model/smartMatrixModel.d.ts +0 -29
- package/lib/smart-form/api/model/smartWidgetDefinition.d.ts +0 -125
- package/lib/smart-form/api/model/smartWidgetHint.d.ts +0 -19
- package/lib/smart-form/api/model/sortDefinition.d.ts +0 -15
- package/lib/smart-form/api/model/textBoxProperties.d.ts +0 -15
- package/lib/smart-form/api/model/textFieldProperties.d.ts +0 -14
- package/lib/smart-form/api/model/valueChangeMode.d.ts +0 -19
- package/lib/smart-form/api/param.d.ts +0 -37
- package/lib/smart-form/api/variables.d.ts +0 -8
- package/lib/smart-form/highlightMacthingString-pipe.d.ts +0 -7
- package/lib/smart-form/projects.d.ts +0 -14
- package/lib/smart-form/services/smartform.layout-definition.service.d.ts +0 -50
- package/lib/smart-form/services/smartform.service.d.ts +0 -52
- package/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.d.ts +0 -8
- package/lib/smart-form/smartfileuploader/smartfileuploader.component.d.ts +0 -38
- package/lib/smart-form/smartfileuploader/smartfileuploader.model.d.ts +0 -7
- package/lib/smart-form/smartform.component.d.ts +0 -43
- package/lib/smart-form/smartform.form-model.d.ts +0 -864
- package/lib/smart-form/smartform.model.d.ts +0 -126
- package/lib/smart-form/widgets/components/smart-file-editor/smart-file-editor.component.d.ts +0 -54
- package/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.d.ts +0 -29
- package/lib/smart-form/widgets/components/smart-multi-file-editor/smart-multi-file-editor.component.d.ts +0 -57
- package/lib/smart-form/widgets/components/smart-voice-recorder/smart-voice-recorder.component.d.ts +0 -50
- package/lib/smart-form/widgets/directives/comparable-dropdown.directive.d.ts +0 -10
- package/lib/smart-form/widgets/directives/comparable-multiselect.directive.d.ts +0 -10
- package/lib/smart-form/widgets/smartformwidget/smartformwidget.component.d.ts +0 -173
- package/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.d.ts +0 -24
- package/lib/smart-form/widgets/smartformwidget/trackCaps.directive.d.ts +0 -9
- package/lib/smart-generic-pages/acl-editing-view/acl-editing-view.component.d.ts +0 -21
- package/lib/smart-generic-pages/api/platform/acl/model/aCL.d.ts +0 -18
- package/lib/smart-generic-pages/api/platform/acl/model/aCLEntry.d.ts +0 -54
- package/lib/smart-generic-pages/api/platform/acl/model/objectValidationSeverity.d.ts +0 -19
- package/lib/smart-generic-pages/api/platform/acl/model/subject.d.ts +0 -24
- package/lib/smart-generic-pages/api/platform/api-default/objectHistoryRangeData.d.ts +0 -2
- package/lib/smart-generic-pages/api/platform/searchpage/model/searchPageModel.d.ts +0 -27
- package/lib/smart-generic-pages/api/platform/subjectselector/model/subjectSelectorPageModel.d.ts +0 -14
- package/lib/smart-generic-pages/api/platform/validation/model/validationItem.d.ts +0 -17
- package/lib/smart-generic-pages/api/platform/validation/model/validationResultPageModel.d.ts +0 -18
- package/lib/smart-generic-pages/generic-page/generic-page.component.d.ts +0 -12
- package/lib/smart-generic-pages/invalid-smartlink/invalid-smartlink.component.d.ts +0 -11
- package/lib/smart-generic-pages/no-permission-page/no-permission-page.component.d.ts +0 -11
- package/lib/smart-generic-pages/projects.d.ts +0 -9
- package/lib/smart-generic-pages/search-page/search-page.component.d.ts +0 -25
- package/lib/smart-generic-pages/smart-generic-pages.module.d.ts +0 -19
- package/lib/smart-generic-pages/subject-selector/subject-selector.component.d.ts +0 -17
- package/lib/smart-generic-pages/validation-result-page/validation-result-page.component.d.ts +0 -25
- package/lib/smart-grid/api/grid-api/api/api.d.ts +0 -3
- package/lib/smart-grid/api/grid-api/api/grid.service.d.ts +0 -182
- package/lib/smart-grid/api/grid-api/api.module.d.ts +0 -11
- package/lib/smart-grid/api/grid-api/configuration.d.ts +0 -104
- package/lib/smart-grid/api/grid-api/encoder.d.ts +0 -11
- package/lib/smart-grid/api/grid-api/index.d.ts +0 -6
- package/lib/smart-grid/api/grid-api/model/gridColumnContentType.d.ts +0 -15
- package/lib/smart-grid/api/grid-api/model/gridColumnMeta.d.ts +0 -34
- package/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.d.ts +0 -44
- package/lib/smart-grid/api/grid-api/model/gridExportDescriptor.d.ts +0 -19
- package/lib/smart-grid/api/grid-api/model/gridModel.d.ts +0 -36
- package/lib/smart-grid/api/grid-api/model/gridPage.d.ts +0 -26
- package/lib/smart-grid/api/grid-api/model/gridRow.d.ts +0 -47
- package/lib/smart-grid/api/grid-api/model/gridRowLayoutDescriptor.d.ts +0 -20
- package/lib/smart-grid/api/grid-api/model/gridSelectionChange.d.ts +0 -24
- package/lib/smart-grid/api/grid-api/model/gridSelectionMode.d.ts +0 -16
- package/lib/smart-grid/api/grid-api/model/gridSelectionType.d.ts +0 -15
- package/lib/smart-grid/api/grid-api/model/gridServerModel.d.ts +0 -22
- package/lib/smart-grid/api/grid-api/model/gridUpdateData.d.ts +0 -20
- package/lib/smart-grid/api/grid-api/model/gridView.d.ts +0 -21
- package/lib/smart-grid/api/grid-api/model/gridViewDescriptor.d.ts +0 -39
- package/lib/smart-grid/api/grid-api/model/models.d.ts +0 -15
- package/lib/smart-grid/api/grid-api/param.d.ts +0 -37
- package/lib/smart-grid/api/grid-api/variables.d.ts +0 -8
- package/lib/smart-grid/components/expandable-grid/expandable-grid.component.d.ts +0 -10
- package/lib/smart-grid/components/generic-component/expanded-row-renderer.component.d.ts +0 -21
- package/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.d.ts +0 -26
- package/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.d.ts +0 -47
- package/lib/smart-grid/models/model.d.ts +0 -73
- package/lib/smart-grid/projects.d.ts +0 -5
- package/lib/smart-grid/smart-grid-toolbar-util.d.ts +0 -12
- package/lib/smart-grid/smart-grid.component.d.ts +0 -157
- package/lib/smart-grid/smart-grid.module.d.ts +0 -29
- package/lib/smart-grid/smart-grid.service.d.ts +0 -26
- package/lib/smart-icon/projects.d.ts +0 -5
- package/lib/smart-icon/smart-icon/smart-icon.component.d.ts +0 -34
- package/lib/smart-icon/smart-icon/ui-badge/ui-badge.component.d.ts +0 -10
- package/lib/smart-icon/smart-icon/ui-badge/ui-badge.directive.d.ts +0 -14
- package/lib/smart-icon/smart-icon.module.d.ts +0 -14
- package/lib/smart-icon/smart-icon.service.d.ts +0 -29
- package/lib/smart-map/abstract-map.d.ts +0 -37
- package/lib/smart-map/api/api/api.d.ts +0 -3
- package/lib/smart-map/api/api/geoMap.service.d.ts +0 -101
- package/lib/smart-map/api/api.module.d.ts +0 -11
- package/lib/smart-map/api/configuration.d.ts +0 -104
- package/lib/smart-map/api/encoder.d.ts +0 -11
- package/lib/smart-map/api/index.d.ts +0 -6
- package/lib/smart-map/api/model/gPSPosition.d.ts +0 -32
- package/lib/smart-map/api/model/gPSRoute.d.ts +0 -21
- package/lib/smart-map/api/model/geoMapChange.d.ts +0 -21
- package/lib/smart-map/api/model/geoMapDataLoadingMode.d.ts +0 -15
- package/lib/smart-map/api/model/geoMapDataSourceDescriptor.d.ts +0 -52
- package/lib/smart-map/api/model/geoMapDataSourceType.d.ts +0 -17
- package/lib/smart-map/api/model/geoMapEditingSession.d.ts +0 -17
- package/lib/smart-map/api/model/geoMapInteraction.d.ts +0 -24
- package/lib/smart-map/api/model/geoMapItem.d.ts +0 -41
- package/lib/smart-map/api/model/geoMapItemKind.d.ts +0 -16
- package/lib/smart-map/api/model/geoMapLayer.d.ts +0 -19
- package/lib/smart-map/api/model/geoMapLayerChange.d.ts +0 -20
- package/lib/smart-map/api/model/geoMapLayerDescriptor.d.ts +0 -28
- package/lib/smart-map/api/model/geoMapModel.d.ts +0 -26
- package/lib/smart-map/api/model/geoMapOperationMode.d.ts +0 -15
- package/lib/smart-map/api/model/geoMapSelectionMode.d.ts +0 -16
- package/lib/smart-map/api/model/geoMapServerModel.d.ts +0 -25
- package/lib/smart-map/api/model/geoMapTextType.d.ts +0 -15
- package/lib/smart-map/api/model/geoMapViewState.d.ts +0 -27
- package/lib/smart-map/api/model/geoMapViewport.d.ts +0 -20
- package/lib/smart-map/api/model/models.d.ts +0 -20
- package/lib/smart-map/api/param.d.ts +0 -37
- package/lib/smart-map/api/variables.d.ts +0 -8
- package/lib/smart-map/api-default/api-default.d.ts +0 -2
- package/lib/smart-map/impl/google-map.d.ts +0 -23
- package/lib/smart-map/impl/leaflet-map.d.ts +0 -22
- package/lib/smart-map/projects.d.ts +0 -8
- package/lib/smart-map/smart-map.component.d.ts +0 -39
- package/lib/smart-map/smart-map.module.d.ts +0 -11
- package/lib/smart-map/smart-map.types.d.ts +0 -34
- package/lib/smart-navbar/projects.d.ts +0 -4
- package/lib/smart-navbar/smart-navbar.component.d.ts +0 -20
- package/lib/smart-navbar/smart-navbar.model.d.ts +0 -48
- package/lib/smart-navbar/smart-navbar.module.d.ts +0 -18
- package/lib/smart-navbar/smart-navbar.service.d.ts +0 -6
- package/lib/smart-navigation/projects.d.ts +0 -2
- package/lib/smart-navigation/smart-navigation.interface.d.ts +0 -5
- package/lib/smart-navigation/smart-navigation.module.d.ts +0 -6
- package/lib/smart-navigation/smart-navigation.service.d.ts +0 -12
- package/lib/smart-ng-client.module.d.ts +0 -25
- package/lib/smart-ng-client.service.d.ts +0 -10
- package/lib/smart-subject/projects.d.ts +0 -1
- package/lib/smart-subject/smart-subject.d.ts +0 -6
- package/lib/smart-tab-group/projects.d.ts +0 -1
- package/lib/smart-tab-group/smart-tab-group.module.d.ts +0 -10
- package/lib/smart-table/components/default-actions-popup/default-actions-popup.component.d.ts +0 -19
- package/lib/smart-table/components/loading/loading.component.d.ts +0 -8
- package/lib/smart-table/directives/mat-context-menu-trigger-for.directive.d.ts +0 -10
- package/lib/smart-table/projects.d.ts +0 -4
- package/lib/smart-table/smarttable.component.d.ts +0 -34
- package/lib/smart-table/smarttable.model.d.ts +0 -202
- package/lib/smart-table/smarttable.module.d.ts +0 -29
- package/lib/smart-table/smarttable.service.d.ts +0 -6
- package/lib/smart-table/tables/material-table/material-table.component.d.ts +0 -8
- package/lib/smart-table/tables/mobile-table/mobile-table.component.d.ts +0 -8
- package/lib/smart-table/tables/table.d.ts +0 -98
- package/lib/smart-tree/projects.d.ts +0 -5
- package/lib/smart-tree/smarttree-generic.service.d.ts +0 -48
- package/lib/smart-tree/smarttree.component.d.ts +0 -43
- package/lib/smart-tree/smarttree.model.d.ts +0 -42
- package/lib/smart-tree/smarttree.module.d.ts +0 -16
- package/lib/smart-tree/smarttree.node.model.d.ts +0 -13
- package/lib/smart-tree/smarttree.service.d.ts +0 -25
- package/lib/smart-tree/smarttree.service.interface.d.ts +0 -43
- package/lib/smart-tree/tree-api/api/tree.service.d.ts +0 -336
- package/lib/smart-tree/tree-api/configuration.d.ts +0 -104
- package/lib/smart-tree/tree-api/encoder.d.ts +0 -11
- package/lib/smart-tree/tree-api/param.d.ts +0 -37
- package/lib/smart-tree/tree-api/variables.d.ts +0 -8
- package/lib/smart-validation/named-validator.service.d.ts +0 -17
- package/lib/smart-validation/projects.d.ts +0 -3
- package/lib/smart-validation/smart-validation.module.d.ts +0 -8
- package/lib/smart-validation/smart-validation.types.d.ts +0 -12
- package/lib/theme/theme.service.d.ts +0 -17
- package/lib/view-context/api/api/api.d.ts +0 -3
- package/lib/view-context/api/api/view.service.d.ts +0 -426
- package/lib/view-context/api/api-default/binaryContentData.d.ts +0 -2
- package/lib/view-context/api/api-default/binaryData.d.ts +0 -2
- package/lib/view-context/api/api-default/invocationError.d.ts +0 -2
- package/lib/view-context/api/api-default/invocationRequest.d.ts +0 -2
- package/lib/view-context/api/api-default/invocationRun.d.ts +0 -2
- package/lib/view-context/api/api.module.d.ts +0 -11
- package/lib/view-context/api/configuration.d.ts +0 -104
- package/lib/view-context/api/encoder.d.ts +0 -11
- package/lib/view-context/api/index.d.ts +0 -6
- package/lib/view-context/api/model/backgroundProcessInfo.d.ts +0 -25
- package/lib/view-context/api/model/badgeDescriptor.d.ts +0 -15
- package/lib/view-context/api/model/clipboardData.d.ts +0 -20
- package/lib/view-context/api/model/closeResult.d.ts +0 -16
- package/lib/view-context/api/model/componentConstraint.d.ts +0 -31
- package/lib/view-context/api/model/componentModel.d.ts +0 -47
- package/lib/view-context/api/model/componentModelChange.d.ts +0 -29
- package/lib/view-context/api/model/dataChange.d.ts +0 -25
- package/lib/view-context/api/model/dataChangeEvent.d.ts +0 -31
- package/lib/view-context/api/model/dataChangeKind.d.ts +0 -19
- package/lib/view-context/api/model/deviceInfo.d.ts +0 -43
- package/lib/view-context/api/model/downloadedFile.d.ts +0 -19
- package/lib/view-context/api/model/iconPosition.d.ts +0 -18
- package/lib/view-context/api/model/imageResource.d.ts +0 -28
- package/lib/view-context/api/model/link.d.ts +0 -35
- package/lib/view-context/api/model/menuDescriptor.d.ts +0 -17
- package/lib/view-context/api/model/menuOpenDirection.d.ts +0 -21
- package/lib/view-context/api/model/menuTriggerType.d.ts +0 -15
- package/lib/view-context/api/model/messageData.d.ts +0 -29
- package/lib/view-context/api/model/messageOption.d.ts +0 -20
- package/lib/view-context/api/model/messageOptionType.d.ts +0 -16
- package/lib/view-context/api/model/messageResult.d.ts +0 -16
- package/lib/view-context/api/model/messageTextType.d.ts +0 -15
- package/lib/view-context/api/model/messageType.d.ts +0 -17
- package/lib/view-context/api/model/models.d.ts +0 -70
- package/lib/view-context/api/model/multiComboBoxElement.d.ts +0 -16
- package/lib/view-context/api/model/multiComboBoxModel.d.ts +0 -16
- package/lib/view-context/api/model/namedValidator.d.ts +0 -27
- package/lib/view-context/api/model/openPendingData.d.ts +0 -29
- package/lib/view-context/api/model/publishedViewData.d.ts +0 -14
- package/lib/view-context/api/model/serverRequestExecutionStat.d.ts +0 -40
- package/lib/view-context/api/model/serverRequestTrack.d.ts +0 -60
- package/lib/view-context/api/model/serverRequestType.d.ts +0 -22
- package/lib/view-context/api/model/shellProperty.d.ts +0 -15
- package/lib/view-context/api/model/smartLinkData.d.ts +0 -29
- package/lib/view-context/api/model/smartLinkMigrationStatus.d.ts +0 -39
- package/lib/view-context/api/model/statisticRecord.d.ts +0 -36
- package/lib/view-context/api/model/style.d.ts +0 -21
- package/lib/view-context/api/model/themeDefinition.d.ts +0 -22
- package/lib/view-context/api/model/themeDescriptor.d.ts +0 -16
- package/lib/view-context/api/model/themeShellDescriptor.d.ts +0 -17
- package/lib/view-context/api/model/uiAction.d.ts +0 -68
- package/lib/view-context/api/model/uiActionButtonDescriptor.d.ts +0 -25
- package/lib/view-context/api/model/uiActionButtonType.d.ts +0 -25
- package/lib/view-context/api/model/uiActionConstraint.d.ts +0 -22
- package/lib/view-context/api/model/uiActionDefinition.d.ts +0 -19
- package/lib/view-context/api/model/uiActionDefinitionEntry.d.ts +0 -18
- package/lib/view-context/api/model/uiActionDescriptor.d.ts +0 -44
- package/lib/view-context/api/model/uiActionDialogDescriptor.d.ts +0 -23
- package/lib/view-context/api/model/uiActionFeedbackType.d.ts +0 -18
- package/lib/view-context/api/model/uiActionInputType.d.ts +0 -19
- package/lib/view-context/api/model/uiActionRequest.d.ts +0 -31
- package/lib/view-context/api/model/uiActionSchedule.d.ts +0 -14
- package/lib/view-context/api/model/uiActionTooltip.d.ts +0 -25
- package/lib/view-context/api/model/uiActionUploadDescriptor.d.ts +0 -27
- package/lib/view-context/api/model/uploadWidgetType.d.ts +0 -16
- package/lib/view-context/api/model/uploadedFile.d.ts +0 -20
- package/lib/view-context/api/model/valueSet.d.ts +0 -20
- package/lib/view-context/api/model/view.d.ts +0 -88
- package/lib/view-context/api/model/viewApiError.d.ts +0 -18
- package/lib/view-context/api/model/viewConstraint.d.ts +0 -18
- package/lib/view-context/api/model/viewContext.d.ts +0 -33
- package/lib/view-context/api/model/viewContextChange.d.ts +0 -24
- package/lib/view-context/api/model/viewContextData.d.ts +0 -25
- package/lib/view-context/api/model/viewContextUpdate.d.ts +0 -24
- package/lib/view-context/api/model/viewData.d.ts +0 -28
- package/lib/view-context/api/model/viewEventHandler.d.ts +0 -36
- package/lib/view-context/api/model/viewPlaceholder.d.ts +0 -22
- package/lib/view-context/api/model/viewState.d.ts +0 -20
- package/lib/view-context/api/model/viewStateUpdate.d.ts +0 -22
- package/lib/view-context/api/model/viewType.d.ts +0 -16
- package/lib/view-context/api/param.d.ts +0 -37
- package/lib/view-context/api/variables.d.ts +0 -8
- package/lib/view-context/default-view-components.token.d.ts +0 -18
- package/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.d.ts +0 -9
- package/lib/view-context/message-dialog/message-dialog.component.d.ts +0 -27
- package/lib/view-context/projects.d.ts +0 -26
- package/lib/view-context/property-definition-data.d.ts +0 -5
- package/lib/view-context/reuse-router-slot.token.d.ts +0 -3
- package/lib/view-context/smart-embedded-slot.directive.d.ts +0 -20
- package/lib/view-context/smart-ui-action/components/menu/click/menu.component.d.ts +0 -49
- package/lib/view-context/smart-ui-action/components/menu/hover/hover-menu.component.d.ts +0 -50
- package/lib/view-context/smart-ui-action/components/menu/menu.constants.d.ts +0 -7
- package/lib/view-context/smart-ui-action/components/menu/menu.service.d.ts +0 -11
- package/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.d.ts +0 -13
- package/lib/view-context/smart-ui-action/components/theme-selector/theme-selector.component.d.ts +0 -16
- package/lib/view-context/smart-ui-action/components/upload-widget/photo-capture-widget/photo-capture-widget.component.d.ts +0 -30
- package/lib/view-context/smart-ui-action/components/upload-widget/prime-file-uploader/prime-file-uploader.component.d.ts +0 -32
- package/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.component.d.ts +0 -40
- package/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.utils.d.ts +0 -3
- package/lib/view-context/smart-ui-action/components/upload-widget/voice-record-widget/voice-record-widget.component.d.ts +0 -43
- package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.d.ts +0 -29
- package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.d.ts +0 -21
- package/lib/view-context/smart-ui-action/dialogs/ui-action-dialog-button/ui-action-dialog-button.component.d.ts +0 -15
- package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.d.ts +0 -36
- package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.d.ts +0 -26
- package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +0 -31
- package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.d.ts +0 -28
- package/lib/view-context/smart-ui-action/file-editor-toolbar/file-editor-toolbar.component.d.ts +0 -13
- package/lib/view-context/smart-ui-action/ui-action-button/button-icon-placeholder.d.ts +0 -5
- package/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.d.ts +0 -55
- package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +0 -73
- package/lib/view-context/smart-ui-action/ui-action.descriptor.service.d.ts +0 -23
- package/lib/view-context/smart-ui-action/ui-action.model.d.ts +0 -43
- package/lib/view-context/smart-ui-action/ui-action.service.d.ts +0 -42
- package/lib/view-context/smart-view-context-dialog.service.d.ts +0 -21
- package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.d.ts +0 -15
- package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.d.ts +0 -21
- package/lib/view-context/smart-view-context.interceptor.d.ts +0 -17
- package/lib/view-context/smart-view-context.model.d.ts +0 -37
- package/lib/view-context/smart-view-context.module.d.ts +0 -86
- package/lib/view-context/smart-view-context.service.d.ts +0 -172
- package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +0 -16
- package/lib/view-context/utility/componentLibrary.d.ts +0 -6
- package/lib/view-context/utility/smart-object-utility.d.ts +0 -5
- package/lib/view-context/utility/smart-style-utility.d.ts +0 -12
- package/lib/view-context/value-api/api/api.d.ts +0 -3
- package/lib/view-context/value-api/api/value.service.d.ts +0 -35
- package/lib/view-context/value-api/api.module.d.ts +0 -11
- package/lib/view-context/value-api/configuration.d.ts +0 -104
- package/lib/view-context/value-api/encoder.d.ts +0 -11
- package/lib/view-context/value-api/index.d.ts +0 -6
- package/lib/view-context/value-api/model/genericValue.d.ts +0 -33
- package/lib/view-context/value-api/model/models.d.ts +0 -10
- package/lib/view-context/value-api/model/value.d.ts +0 -29
- package/lib/view-context/value-api/model/valueSetData.d.ts +0 -41
- package/lib/view-context/value-api/model/valueSetDefinition.d.ts +0 -16
- package/lib/view-context/value-api/model/valueSetDefinitionData.d.ts +0 -53
- package/lib/view-context/value-api/model/valueSetDefinitionIdentifier.d.ts +0 -21
- package/lib/view-context/value-api/model/valueSetDefinitionKind.d.ts +0 -22
- package/lib/view-context/value-api/model/valueSetExpression.d.ts +0 -18
- package/lib/view-context/value-api/model/valueSetOperand.d.ts +0 -25
- package/lib/view-context/value-api/model/valueSetOperation.d.ts +0 -17
- package/lib/view-context/value-api/param.d.ts +0 -37
- package/lib/view-context/value-api/variables.d.ts +0 -8
- package/lib/view-context/view-handler-resolution.d.ts +0 -11
- package/lib/view-context/view-op.d.ts +0 -18
- package/lib/view-context/view-slot-resolution.d.ts +0 -27
- package/projects.d.ts +0 -27
- package/smartbit4all-ng-client-6.0.35.tgz +0 -0
|
@@ -1,683 +0,0 @@
|
|
|
1
|
-
import { Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
|
|
3
|
-
import { SelectionDefinitionTypeEnum, SmartFormWidgetType } from '../api';
|
|
4
|
-
import { ComponentLibrary } from '../../view-context/utility/componentLibrary';
|
|
5
|
-
import { SmartWidgetSettings } from '../widgets/smartformwidget/smartformwidget.component';
|
|
6
|
-
import moment from 'moment';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../../smart-validation/named-validator.service";
|
|
9
|
-
export class SmartFormService {
|
|
10
|
-
constructor(validatorProvider) {
|
|
11
|
-
this.validatorProvider = validatorProvider;
|
|
12
|
-
this.emptyKey = 'e#m%p@t*y';
|
|
13
|
-
this.componentLibrary = ComponentLibrary;
|
|
14
|
-
this.group = {};
|
|
15
|
-
this.regexRegexChars = new RegExp(/[\.\-\[\]\/\{\}\(\)\+\^\$\\\|]/g);
|
|
16
|
-
this.regexAsteriskInTheMiddle = new RegExp(/([^\*])\*([^\*])/g);
|
|
17
|
-
this.regexAsteriskInTheEnd = new RegExp(/([^\*])\*$/g);
|
|
18
|
-
this.regexAsteriskInTheBeginning = new RegExp(/^\*([^\*])/g);
|
|
19
|
-
this.regexAsteriskOnly = new RegExp(/^\*$/g);
|
|
20
|
-
this.regexDoubleAsteriskWithDot = new RegExp(/\*\*\\\./g);
|
|
21
|
-
this.regexDoubleAsterisk = new RegExp(/\*\*/g);
|
|
22
|
-
this.regexQuestionMark = new RegExp(/\?/g);
|
|
23
|
-
this.regexByPattern = new Map();
|
|
24
|
-
}
|
|
25
|
-
getSmartFormWidgetByKey(key) {
|
|
26
|
-
return this.findSmartFormWidgetByKey(this.smartForm?.widgets, key);
|
|
27
|
-
}
|
|
28
|
-
collectKeysFromSmartForm(widgets, keys) {
|
|
29
|
-
widgets.forEach((w) => {
|
|
30
|
-
if (w.type !== SmartFormWidgetType.CONTAINER &&
|
|
31
|
-
w.type !== SmartFormWidgetType.LABEL &&
|
|
32
|
-
w.type !== SmartFormWidgetType.CHECK_BOX_2 &&
|
|
33
|
-
w.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
|
|
34
|
-
keys.push(w.key);
|
|
35
|
-
}
|
|
36
|
-
if (w.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
|
|
37
|
-
w.type === SmartFormWidgetType.SELECT ||
|
|
38
|
-
w.type === SmartFormWidgetType.SELECT_MULTIPLE ||
|
|
39
|
-
w.type === SmartFormWidgetType.RADIO_BUTTON ||
|
|
40
|
-
w.type === SmartFormWidgetType.CONTAINER) {
|
|
41
|
-
if (w.valueList?.length) {
|
|
42
|
-
keys = this.collectKeysFromSmartForm(w.valueList, keys);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
else if (w.type === SmartFormWidgetType.CHECK_BOX_2) {
|
|
46
|
-
if (w.valueList?.length) {
|
|
47
|
-
let childrenKeys = this.collectKeysFromSmartForm(w.valueList, []);
|
|
48
|
-
childrenKeys = childrenKeys
|
|
49
|
-
.filter((key) => key !== w.key)
|
|
50
|
-
.flatMap((key) => `${w.key}.${key}`);
|
|
51
|
-
keys.push(...childrenKeys);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
return keys;
|
|
56
|
-
}
|
|
57
|
-
findSmartFormWidgetByKey(widgets, key) {
|
|
58
|
-
let widgetFoundByKey;
|
|
59
|
-
for (let w of widgets) {
|
|
60
|
-
if (w.key === key) {
|
|
61
|
-
return w;
|
|
62
|
-
}
|
|
63
|
-
else if (w.type === SmartFormWidgetType.CONTAINER && w.valueList?.length) {
|
|
64
|
-
widgetFoundByKey = this.findSmartFormWidgetByKey(w.valueList, key);
|
|
65
|
-
if (widgetFoundByKey) {
|
|
66
|
-
return widgetFoundByKey;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return widgetFoundByKey;
|
|
71
|
-
}
|
|
72
|
-
getValueDeeply(model, key) {
|
|
73
|
-
let splittedKey = key.split('.');
|
|
74
|
-
let value;
|
|
75
|
-
splittedKey.forEach((k) => {
|
|
76
|
-
if (!value) {
|
|
77
|
-
value = model[k];
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
if (value[k] === undefined ||
|
|
81
|
-
value[k] === null ||
|
|
82
|
-
(!value && typeof value[k] !== 'boolean')) {
|
|
83
|
-
value = '';
|
|
84
|
-
return value;
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
value = value[k];
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
return value;
|
|
92
|
-
}
|
|
93
|
-
setValueDeeply(model, key, value) {
|
|
94
|
-
let splittedKeys = key.split('.');
|
|
95
|
-
let deepModel = [model];
|
|
96
|
-
let tempModel;
|
|
97
|
-
for (let index = 0; index < splittedKeys.length; index++) {
|
|
98
|
-
tempModel = deepModel[index];
|
|
99
|
-
if (typeof tempModel[splittedKeys[index]] !== 'string' &&
|
|
100
|
-
typeof tempModel[splittedKeys[index]] !== 'boolean' &&
|
|
101
|
-
typeof tempModel[splittedKeys[index]] !== 'number' &&
|
|
102
|
-
tempModel[splittedKeys[index]] !== undefined) {
|
|
103
|
-
deepModel.push(tempModel[splittedKeys[index]]);
|
|
104
|
-
}
|
|
105
|
-
if (index === splittedKeys.length - 1) {
|
|
106
|
-
let oldValue = tempModel[splittedKeys[index]];
|
|
107
|
-
// if (value === '' && (oldValue === null || oldValue === undefined) then don't change value.
|
|
108
|
-
if (value !== '' || (oldValue !== null && oldValue !== undefined)) {
|
|
109
|
-
tempModel[splittedKeys[index]] = value;
|
|
110
|
-
}
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
getPropertyNamesDeeply(element) {
|
|
116
|
-
let properties = Object.keys(element);
|
|
117
|
-
properties.forEach((property) => {
|
|
118
|
-
if (typeof element[property] === 'string' ||
|
|
119
|
-
typeof element[property] === 'boolean' ||
|
|
120
|
-
typeof element[property] === 'number' ||
|
|
121
|
-
element[property] === undefined ||
|
|
122
|
-
element[property] === null ||
|
|
123
|
-
!element[property] ||
|
|
124
|
-
!element) {
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
let innerProperties = this.getPropertyNamesDeeply(element[property]);
|
|
128
|
-
innerProperties = innerProperties.map((innerProperty) => `${property}.${innerProperty}`);
|
|
129
|
-
properties.push(...innerProperties);
|
|
130
|
-
});
|
|
131
|
-
return properties;
|
|
132
|
-
}
|
|
133
|
-
setValuesFromModel(widgets, compLib) {
|
|
134
|
-
const smartForm = this.smartForm;
|
|
135
|
-
const data = smartForm.componentModel?.data;
|
|
136
|
-
if (!data) {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
if (!widgets) {
|
|
140
|
-
widgets = smartForm.widgets;
|
|
141
|
-
}
|
|
142
|
-
const keys = this.collectKeysFromSmartForm(widgets, []);
|
|
143
|
-
let widget;
|
|
144
|
-
for (const key of this.getPropertyNamesDeeply(data)) {
|
|
145
|
-
if (keys.includes(key)) {
|
|
146
|
-
widget = this.findSmartFormWidgetByKey(widgets, key);
|
|
147
|
-
if (widget) {
|
|
148
|
-
let value = this.getValueDeeply(data, key);
|
|
149
|
-
if (typeof value === 'boolean' &&
|
|
150
|
-
widget.type !== SmartFormWidgetType.TOGGLE &&
|
|
151
|
-
widget.type !== SmartFormWidgetType.CHECK_BOX) {
|
|
152
|
-
value = `${value}`;
|
|
153
|
-
}
|
|
154
|
-
if (compLib === this.componentLibrary.PRIMENG) {
|
|
155
|
-
if (widget.type === SmartFormWidgetType.DATE_PICKER ||
|
|
156
|
-
widget.type === SmartFormWidgetType.DATE_TIME_PICKER) {
|
|
157
|
-
if (value) {
|
|
158
|
-
widget.value = new Date(value);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
163
|
-
widget.type !== SmartFormWidgetType.LABEL &&
|
|
164
|
-
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
165
|
-
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
166
|
-
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
167
|
-
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
168
|
-
widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
|
|
169
|
-
widget.value = value;
|
|
170
|
-
if (widget.showLabel === undefined && smartForm.showLabel) {
|
|
171
|
-
widget.showLabel = true;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
this.copyFromValueSetToValuesList(widget, smartForm.componentModel.valueSets);
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
// In case of CheckBox2
|
|
178
|
-
let splittedKeys = key.split('.');
|
|
179
|
-
splittedKeys.splice(splittedKeys.length - 1, 1);
|
|
180
|
-
widget = this.findSmartFormWidgetByKey(widgets, splittedKeys.join('.'));
|
|
181
|
-
if (widget && widget.type === SmartFormWidgetType.CHECK_BOX_2) {
|
|
182
|
-
this.copyFromValueSetToValuesList(widget, smartForm.componentModel.valueSets);
|
|
183
|
-
if (widget.valueList) {
|
|
184
|
-
widget.valueList = widget.valueList.map((item) => {
|
|
185
|
-
let value = this.getValueDeeply(data, `${widget?.key}.${item.key}`);
|
|
186
|
-
item.value = value;
|
|
187
|
-
return item;
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
copyFromValueSetToValuesList(widget, valueSets) {
|
|
196
|
-
if (widget.type === SmartFormWidgetType.SELECT ||
|
|
197
|
-
widget.type === SmartFormWidgetType.SELECT_MULTIPLE ||
|
|
198
|
-
widget.type === SmartFormWidgetType.RADIO_BUTTON ||
|
|
199
|
-
widget.type === SmartFormWidgetType.CHECK_BOX_2 ||
|
|
200
|
-
widget.type === SmartFormWidgetType.TEXT_FIELD) {
|
|
201
|
-
if (widget.selection && valueSets) {
|
|
202
|
-
let valueSet = valueSets[widget.selection.valueSetName];
|
|
203
|
-
if (!valueSet) {
|
|
204
|
-
console.warn('valueSet not found', widget.selection.valueSetName);
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
let valueSetData = valueSet.valueSetData;
|
|
208
|
-
let values = valueSetData.values;
|
|
209
|
-
let selectionDefinition = widget.selection;
|
|
210
|
-
let displayProperty = selectionDefinition?.displayProperty ?? 'displayValue';
|
|
211
|
-
// check is displayProperty exists, fallback for common display properties
|
|
212
|
-
if (!this.checkProperty(values, displayProperty)) {
|
|
213
|
-
displayProperty = 'name'; // GenericValue.name
|
|
214
|
-
if (!this.checkProperty(values, displayProperty)) {
|
|
215
|
-
displayProperty = 'displayValue'; // Value.displayValue
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
if (widget.selection.type === SelectionDefinitionTypeEnum.PROPERTY &&
|
|
219
|
-
!widget.selection.mapping.length) {
|
|
220
|
-
let keyProperty = selectionDefinition?.keyProperty ?? valueSetData?.keyProperty ?? 'objectUri';
|
|
221
|
-
if (!this.checkProperty(values, keyProperty)) {
|
|
222
|
-
keyProperty = 'uri'; // GenericValue.uri
|
|
223
|
-
if (!this.checkProperty(values, keyProperty)) {
|
|
224
|
-
keyProperty = 'objectUri'; // Value.objectUri
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
widget.valueList = values.map((value) => {
|
|
228
|
-
return {
|
|
229
|
-
key: value[keyProperty],
|
|
230
|
-
label: value[displayProperty],
|
|
231
|
-
type: SmartFormWidgetType.ITEM,
|
|
232
|
-
value: value[keyProperty],
|
|
233
|
-
};
|
|
234
|
-
});
|
|
235
|
-
this.addEmptyItemToValueList(widget, widget.selection.emptyLabel);
|
|
236
|
-
}
|
|
237
|
-
else if (widget.selection.type === SelectionDefinitionTypeEnum.OBJECT &&
|
|
238
|
-
!widget.selection.mapping.length) {
|
|
239
|
-
widget.valueList = values.map((value, index) => {
|
|
240
|
-
return {
|
|
241
|
-
key: `${index}`,
|
|
242
|
-
label: value[displayProperty],
|
|
243
|
-
type: SmartFormWidgetType.ITEM,
|
|
244
|
-
value: value,
|
|
245
|
-
};
|
|
246
|
-
});
|
|
247
|
-
this.addEmptyItemToValueList(widget);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
checkProperty(values, property) {
|
|
254
|
-
if (!values?.length) {
|
|
255
|
-
// no sample data, assume existance
|
|
256
|
-
return true;
|
|
257
|
-
}
|
|
258
|
-
return property in values[0];
|
|
259
|
-
}
|
|
260
|
-
toFormGroup(compLib) {
|
|
261
|
-
this.createFormControls(this.smartForm.widgets, compLib);
|
|
262
|
-
if (this.formGroup) {
|
|
263
|
-
this.formGroup.controls = this.group;
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
this.formGroup = new UntypedFormGroup(this.group);
|
|
267
|
-
}
|
|
268
|
-
if (this.smartForm.validators && this.smartForm.validators.length) {
|
|
269
|
-
this.formGroup.setValidators(this.smartForm.validators.map((validator) => {
|
|
270
|
-
return validator.validator;
|
|
271
|
-
}));
|
|
272
|
-
}
|
|
273
|
-
return this.formGroup;
|
|
274
|
-
}
|
|
275
|
-
createFormControls(widgets, compLib, parentKey) {
|
|
276
|
-
widgets.map((widget) => {
|
|
277
|
-
if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
278
|
-
widget.type !== SmartFormWidgetType.LABEL &&
|
|
279
|
-
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
280
|
-
widget.type !== SmartFormWidgetType.IMAGE &&
|
|
281
|
-
widget.type !== SmartFormWidgetType.SVG &&
|
|
282
|
-
widget.type !== SmartFormWidgetType.DIV &&
|
|
283
|
-
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
284
|
-
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
285
|
-
widget.type !== SmartFormWidgetType.CHECK_BOX_2 &&
|
|
286
|
-
widget.type !== SmartFormWidgetType.ITEM &&
|
|
287
|
-
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
288
|
-
widget.type !== SmartFormWidgetType.MATRIX &&
|
|
289
|
-
widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
|
|
290
|
-
if (compLib === this.componentLibrary.PRIMENG) {
|
|
291
|
-
if (widget.type === SmartFormWidgetType.DATE_PICKER ||
|
|
292
|
-
widget.type === SmartFormWidgetType.DATE_TIME_PICKER) {
|
|
293
|
-
if (widget.value) {
|
|
294
|
-
widget.value = new Date(widget.value);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
this.createFormControl(`${widget.key}`, widget.value, widget.isDisabled, widget.validators);
|
|
299
|
-
if (widget.type === SmartFormWidgetType.DATE_TIME_PICKER &&
|
|
300
|
-
compLib !== ComponentLibrary.PRIMENG) {
|
|
301
|
-
this.createFormControl(`${widget.key}-time`, extractTime(widget), widget.isDisabled, widget.validators);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
if (widget.type === SmartFormWidgetType.MATRIX) {
|
|
305
|
-
if (widget.isMultiple) {
|
|
306
|
-
let dataKeys = Object.keys(widget.value.data);
|
|
307
|
-
let itemKeys = widget.value.columns.map((value) => value.code);
|
|
308
|
-
dataKeys.forEach((key) => {
|
|
309
|
-
itemKeys.forEach((item) => {
|
|
310
|
-
this.createFormControl(`${widget.key}.data.${key}.${item}`, widget.value.data[key][item], undefined, // TODO really we don't pass widget.isDisabled?
|
|
311
|
-
widget.validators);
|
|
312
|
-
});
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
else {
|
|
316
|
-
Object.keys(widget.value.data).map((key) => {
|
|
317
|
-
this.createFormControl(`${widget.key}.${key}`, widget.isMultiple ? widget.value.data[key] : widget.value.data[key][0], widget.isDisabled, widget.validators);
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
if (widget.type === SmartFormWidgetType.ITEM && parentKey) {
|
|
322
|
-
this.createFormControl(`${parentKey}.${widget.key}`, widget.value, widget.isDisabled, undefined);
|
|
323
|
-
}
|
|
324
|
-
if (widget.type === SmartFormWidgetType.CONTAINER && widget.valueList?.length) {
|
|
325
|
-
this.createFormControls(widget.valueList, compLib);
|
|
326
|
-
}
|
|
327
|
-
if (widget.type === SmartFormWidgetType.CHECK_BOX_2 && widget.valueList?.length) {
|
|
328
|
-
this.createFormControls(widget.valueList, compLib, widget.key);
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
isValidatorInList(validator, list) {
|
|
333
|
-
return list !== undefined && list.length > 0 && list.some((v) => v === validator);
|
|
334
|
-
}
|
|
335
|
-
createFormControl(key, value, isDisabled, validators) {
|
|
336
|
-
let formControl = this.group[key];
|
|
337
|
-
if (!formControl) {
|
|
338
|
-
formControl = new UntypedFormControl();
|
|
339
|
-
this.group[key] = formControl;
|
|
340
|
-
}
|
|
341
|
-
formControl.setValue(value || '', { emitEvent: false });
|
|
342
|
-
formControl.clearValidators();
|
|
343
|
-
validators?.map((validator) => {
|
|
344
|
-
formControl.addValidators(validator.validator);
|
|
345
|
-
});
|
|
346
|
-
if (isDisabled !== undefined) {
|
|
347
|
-
if (isDisabled) {
|
|
348
|
-
formControl.disable({ emitEvent: false });
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
formControl.enable({ emitEvent: false });
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
return formControl;
|
|
355
|
-
}
|
|
356
|
-
copyValueFromFormToWidgetBeans(widgets, group) {
|
|
357
|
-
widgets.forEach((widget) => {
|
|
358
|
-
if (widget.type === SmartFormWidgetType.CONTAINER && widget.valueList?.length) {
|
|
359
|
-
this.copyValueFromFormToWidgetBeans(widget.valueList, group);
|
|
360
|
-
}
|
|
361
|
-
else if (widget.type === SmartFormWidgetType.MATRIX) {
|
|
362
|
-
if (widget.isMultiple) {
|
|
363
|
-
let dataKeys = Object.keys(widget.value.data);
|
|
364
|
-
let itemKeys = widget.value.columns.map((value) => value.code);
|
|
365
|
-
dataKeys.forEach((key) => {
|
|
366
|
-
itemKeys.forEach((item) => {
|
|
367
|
-
widget.value.data[key][item] = [
|
|
368
|
-
group.controls[`${widget.key}.data.${key}.${item}`].value,
|
|
369
|
-
];
|
|
370
|
-
});
|
|
371
|
-
});
|
|
372
|
-
let datakeys = Object.keys(widget.value.data);
|
|
373
|
-
//Map checkbox key - boolean value to string key array
|
|
374
|
-
let valueKeys = widget.value.columns.map((value) => value.code);
|
|
375
|
-
datakeys.forEach((key) => {
|
|
376
|
-
let newData = [];
|
|
377
|
-
valueKeys.forEach((valueKey) => {
|
|
378
|
-
let value = widget.value.data[key][valueKey];
|
|
379
|
-
if (value[0]) {
|
|
380
|
-
newData.push(valueKey);
|
|
381
|
-
}
|
|
382
|
-
});
|
|
383
|
-
widget.value.data[key] = newData;
|
|
384
|
-
});
|
|
385
|
-
}
|
|
386
|
-
else {
|
|
387
|
-
Object.keys(widget.value.data).map((key) => {
|
|
388
|
-
widget.value.data[key] = [group.controls[`${widget.key}.${key}`].value];
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
else if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
393
|
-
widget.type !== SmartFormWidgetType.LABEL &&
|
|
394
|
-
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
395
|
-
widget.type !== SmartFormWidgetType.IMAGE &&
|
|
396
|
-
widget.type !== SmartFormWidgetType.SVG &&
|
|
397
|
-
widget.type !== SmartFormWidgetType.DIV &&
|
|
398
|
-
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
399
|
-
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
400
|
-
widget.type !== SmartFormWidgetType.CHECK_BOX_2 &&
|
|
401
|
-
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
402
|
-
widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
|
|
403
|
-
widget.value = group.controls[widget.key].value;
|
|
404
|
-
}
|
|
405
|
-
});
|
|
406
|
-
}
|
|
407
|
-
toSmartForm(group) {
|
|
408
|
-
if (this.smartForm) {
|
|
409
|
-
this.copyValueFromFormToWidgetBeans(this.smartForm.widgets, group);
|
|
410
|
-
const data = this.smartForm.componentModel?.data;
|
|
411
|
-
if (data) {
|
|
412
|
-
for (const key of this.getPropertyNamesDeeply(data)) {
|
|
413
|
-
if (group.controls[key]) {
|
|
414
|
-
this.setValueDeeply(data, key, group.controls[key].value);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
return this.smartForm;
|
|
420
|
-
}
|
|
421
|
-
getModel(group) {
|
|
422
|
-
if (!this.smartForm?.componentModel) {
|
|
423
|
-
return {};
|
|
424
|
-
}
|
|
425
|
-
let originalModel = this.smartForm.componentModel.data;
|
|
426
|
-
let copyOfModel = { ...originalModel };
|
|
427
|
-
// copyOfModel should be the current model
|
|
428
|
-
this.smartForm.componentModel.data = copyOfModel;
|
|
429
|
-
// copy value from FormGroup into model
|
|
430
|
-
this.toSmartForm(group);
|
|
431
|
-
let newModel = this.smartForm.componentModel.data;
|
|
432
|
-
this.smartForm.componentModel.data = originalModel;
|
|
433
|
-
return newModel;
|
|
434
|
-
}
|
|
435
|
-
applyComponentConstraints(widgets, constraints) {
|
|
436
|
-
widgets.forEach((widget) => {
|
|
437
|
-
let widgetConstraints = constraints?.filter(
|
|
438
|
-
//(constraint: SmartFormComponentConstraint) => constraint.dataName === widget.key
|
|
439
|
-
(constraint) => this.antPathMatcher(constraint.dataName, widget.key));
|
|
440
|
-
if (widgetConstraints && widgetConstraints.length) {
|
|
441
|
-
widgetConstraints.forEach((constraint) => {
|
|
442
|
-
if (constraint.visible === undefined) {
|
|
443
|
-
if (widget.isVisible === undefined) {
|
|
444
|
-
widget.isVisible = true;
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
else {
|
|
448
|
-
widget.isVisible = constraint.visible;
|
|
449
|
-
}
|
|
450
|
-
if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
451
|
-
widget.type !== SmartFormWidgetType.LABEL &&
|
|
452
|
-
widget.type !== SmartFormWidgetType.CONTAINER &&
|
|
453
|
-
widget.type !== SmartFormWidgetType.IMAGE &&
|
|
454
|
-
widget.type !== SmartFormWidgetType.SVG &&
|
|
455
|
-
widget.type !== SmartFormWidgetType.DIV &&
|
|
456
|
-
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
457
|
-
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
458
|
-
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
459
|
-
widget.type !== SmartFormWidgetType.YOUTUBE_PLAYER) {
|
|
460
|
-
let validators = widget.validators ?? [];
|
|
461
|
-
let requiredIndex = validators.findIndex((v) => v.validator === Validators.required);
|
|
462
|
-
let wasMandatory = requiredIndex >= 0;
|
|
463
|
-
let tobeMandatory = false;
|
|
464
|
-
if (constraint.mandatory === undefined) {
|
|
465
|
-
// not specified on server, use client state
|
|
466
|
-
// if widget is not visible, client should default to not mandatory
|
|
467
|
-
tobeMandatory = widget.isVisible && wasMandatory;
|
|
468
|
-
}
|
|
469
|
-
else {
|
|
470
|
-
tobeMandatory = constraint.mandatory;
|
|
471
|
-
}
|
|
472
|
-
if (!wasMandatory && tobeMandatory) {
|
|
473
|
-
// add required validator
|
|
474
|
-
widget.validators = [
|
|
475
|
-
...validators,
|
|
476
|
-
{
|
|
477
|
-
validator: Validators.required,
|
|
478
|
-
isCustom: false,
|
|
479
|
-
errorMessage: '',
|
|
480
|
-
name: 'required',
|
|
481
|
-
},
|
|
482
|
-
];
|
|
483
|
-
// remove empty item
|
|
484
|
-
this.removeEmptyItemFromValueList(widget);
|
|
485
|
-
}
|
|
486
|
-
if (wasMandatory && !tobeMandatory) {
|
|
487
|
-
// remove required validator
|
|
488
|
-
widget.validators?.splice(requiredIndex, 1);
|
|
489
|
-
// add empty item
|
|
490
|
-
let emptyLabel = '';
|
|
491
|
-
if ('selection' in widget) {
|
|
492
|
-
emptyLabel = widget.selection?.emptyLabel ?? '';
|
|
493
|
-
}
|
|
494
|
-
this.addEmptyItemToValueList(widget, emptyLabel);
|
|
495
|
-
}
|
|
496
|
-
if (constraint.enabled === undefined || constraint.enabled === null) {
|
|
497
|
-
if (widget.isDisabled === undefined) {
|
|
498
|
-
widget.isDisabled = false;
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
else {
|
|
502
|
-
widget.isDisabled = !constraint.enabled;
|
|
503
|
-
if (widget.type == SmartFormWidgetType.RICH_TEXT) {
|
|
504
|
-
widget.isReadonly = !constraint.enabled;
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
this.validatorProvider?.applyConstraint(widget, constraint);
|
|
508
|
-
}
|
|
509
|
-
});
|
|
510
|
-
}
|
|
511
|
-
if (widget.type === SmartFormWidgetType.CONTAINER &&
|
|
512
|
-
widget.valueList &&
|
|
513
|
-
widget.valueList.length) {
|
|
514
|
-
this.applyComponentConstraints(widget.valueList, constraints);
|
|
515
|
-
}
|
|
516
|
-
});
|
|
517
|
-
}
|
|
518
|
-
antPathMatcher(pattern, path) {
|
|
519
|
-
if (!pattern || !path) {
|
|
520
|
-
// empty pattern or path -> not evaluated, true or false?
|
|
521
|
-
return false;
|
|
522
|
-
}
|
|
523
|
-
let regex = this.regexByPattern.get(pattern);
|
|
524
|
-
if (regex === undefined) {
|
|
525
|
-
// escape regex characters except for ?, *, **
|
|
526
|
-
let regexPattern = pattern.replace(this.regexRegexChars, '\\$&');
|
|
527
|
-
// replace ant-style wildcards with regex equivalents
|
|
528
|
-
// replace * with a pattern that matches any character except for '.'
|
|
529
|
-
regexPattern = regexPattern.replace(this.regexAsteriskInTheMiddle, '$1[^.]*$2'); // not* * not*
|
|
530
|
-
regexPattern = regexPattern.replace(this.regexAsteriskInTheEnd, '$1[^.]*'); // not* * EOL
|
|
531
|
-
regexPattern = regexPattern.replace(this.regexAsteriskInTheBeginning, '[^.]*$1'); // BOL * not*
|
|
532
|
-
regexPattern = regexPattern.replace(this.regexAsteriskOnly, '[^.]*'); // BOL * EOL
|
|
533
|
-
// replace ** with a pattern that matches any character including '.'
|
|
534
|
-
regexPattern = regexPattern.replace(this.regexDoubleAsteriskWithDot, '.*'); // **.
|
|
535
|
-
regexPattern = regexPattern.replace(this.regexDoubleAsterisk, '.*'); // **
|
|
536
|
-
// replace ? with a single character matcher
|
|
537
|
-
regexPattern = regexPattern.replace(this.regexQuestionMark, '.');
|
|
538
|
-
// create a RegExp object
|
|
539
|
-
regex = new RegExp('^' + regexPattern + '$');
|
|
540
|
-
this.regexByPattern.set(pattern, regex);
|
|
541
|
-
}
|
|
542
|
-
// test the path against the generated regex
|
|
543
|
-
return regex.test(path);
|
|
544
|
-
}
|
|
545
|
-
applyConstraints(widgets) {
|
|
546
|
-
if (this.smartForm.componentModel?.constraints &&
|
|
547
|
-
this.smartForm.componentModel?.constraints.length) {
|
|
548
|
-
if (!widgets) {
|
|
549
|
-
widgets = this.smartForm.widgets;
|
|
550
|
-
}
|
|
551
|
-
this.applyComponentConstraints(widgets, this.smartForm.componentModel?.constraints);
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
addEmptyItemToValueList(widget, emptyLabel) {
|
|
555
|
-
if (widget.type == SmartFormWidgetType.SELECT) {
|
|
556
|
-
const containsEmptyKey = widget.valueList.some((v) => v.key === this.emptyKey);
|
|
557
|
-
if (!containsEmptyKey) {
|
|
558
|
-
widget.valueList?.unshift({
|
|
559
|
-
key: this.emptyKey,
|
|
560
|
-
label: emptyLabel ?? '',
|
|
561
|
-
type: SmartFormWidgetType.ITEM,
|
|
562
|
-
value: '', // this should be undefined, but FormControl cannot be null, from v14 it will
|
|
563
|
-
});
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
removeEmptyItemFromValueList(widget) {
|
|
568
|
-
if ('valueList' in widget) {
|
|
569
|
-
if (widget.valueList?.length) {
|
|
570
|
-
let firstItem = widget.valueList[0];
|
|
571
|
-
if (firstItem?.key === this.emptyKey) {
|
|
572
|
-
widget.valueList.shift();
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
}
|
|
577
|
-
filterWidgetsByVisibility(widgets) {
|
|
578
|
-
return widgets.filter((widget) => widget.isVisible === undefined ? true : widget.isVisible);
|
|
579
|
-
}
|
|
580
|
-
async getTranslationOfKey(key) {
|
|
581
|
-
try {
|
|
582
|
-
return await this.smartForm.translateService.get(key).toPromise();
|
|
583
|
-
}
|
|
584
|
-
catch (err) {
|
|
585
|
-
return Promise.resolve(key);
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
async translateWidgets(widgets) {
|
|
589
|
-
Promise.all(widgets.map(async (widget) => {
|
|
590
|
-
if (widget.type === SmartFormWidgetType.YOUTUBE_PLAYER)
|
|
591
|
-
return;
|
|
592
|
-
if (widget.type !== SmartFormWidgetType.CONTAINER) {
|
|
593
|
-
if (!widget.originalLabel) {
|
|
594
|
-
widget.originalLabel = `${widget.label}`;
|
|
595
|
-
}
|
|
596
|
-
// Label
|
|
597
|
-
widget.label = await this.getTranslationOfKey(widget.originalLabel);
|
|
598
|
-
// Placeholder
|
|
599
|
-
if ((widget.type === SmartFormWidgetType.TEXT_FIELD ||
|
|
600
|
-
widget.type === SmartFormWidgetType.TEXT_FIELD_NUMBER ||
|
|
601
|
-
widget.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
|
|
602
|
-
widget.type === SmartFormWidgetType.RICH_TEXT ||
|
|
603
|
-
widget.type === SmartFormWidgetType.TEXT_BOX) &&
|
|
604
|
-
widget.placeholder) {
|
|
605
|
-
if (!widget.originalPlaceholder) {
|
|
606
|
-
widget.originalPlaceholder = `${widget.placeholder}`;
|
|
607
|
-
}
|
|
608
|
-
widget.placeholder = await this.getTranslationOfKey(widget.originalPlaceholder);
|
|
609
|
-
}
|
|
610
|
-
// Validators
|
|
611
|
-
if (widget.type !== SmartFormWidgetType.INDICATOR &&
|
|
612
|
-
widget.type !== SmartFormWidgetType.LABEL &&
|
|
613
|
-
widget.type !== SmartFormWidgetType.IMAGE &&
|
|
614
|
-
widget.type !== SmartFormWidgetType.SVG &&
|
|
615
|
-
widget.type !== SmartFormWidgetType.DIV &&
|
|
616
|
-
widget.type !== SmartFormWidgetType.FILE_UPLOADER &&
|
|
617
|
-
widget.type !== SmartFormWidgetType.MULTI_FILE_UPLOADER &&
|
|
618
|
-
widget.type !== SmartFormWidgetType.DIVIDER &&
|
|
619
|
-
widget.type !== SmartFormWidgetType.BUTTON &&
|
|
620
|
-
widget.type !== SmartFormWidgetType.COMPONENT &&
|
|
621
|
-
widget.validators) {
|
|
622
|
-
widget.validators = await Promise.all(widget.validators.map(async (validator) => {
|
|
623
|
-
if (!validator.originalErrorMessage) {
|
|
624
|
-
validator.originalErrorMessage = `${validator.errorMessage}`;
|
|
625
|
-
}
|
|
626
|
-
validator.errorMessage = await this.getTranslationOfKey(validator.originalErrorMessage);
|
|
627
|
-
return validator;
|
|
628
|
-
}));
|
|
629
|
-
}
|
|
630
|
-
// Indicator
|
|
631
|
-
if (widget.type === SmartFormWidgetType.INDICATOR && widget.indicator) {
|
|
632
|
-
if (!widget.indicator.originalIndicatorStatusLabels) {
|
|
633
|
-
widget.indicator.originalIndicatorStatusLabels =
|
|
634
|
-
widget.indicator.indicatorStatusLabels.map((label) => label);
|
|
635
|
-
}
|
|
636
|
-
widget.indicator.indicatorStatusLabels = await Promise.all(widget.indicator.indicatorStatusLabels.map(async (label, index) => await this.getTranslationOfKey(widget.indicator.originalIndicatorStatusLabels[index])));
|
|
637
|
-
}
|
|
638
|
-
if ((widget.type === SmartFormWidgetType.TEXT_FIELD_CHIPS ||
|
|
639
|
-
widget.type === SmartFormWidgetType.SELECT ||
|
|
640
|
-
widget.type === SmartFormWidgetType.SELECT_MULTIPLE ||
|
|
641
|
-
widget.type === SmartFormWidgetType.CHECK_BOX_2 ||
|
|
642
|
-
widget.type === SmartFormWidgetType.RADIO_BUTTON) &&
|
|
643
|
-
widget.valueList) {
|
|
644
|
-
this.translateWidgetItems(widget.valueList);
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
else {
|
|
648
|
-
this.translateWidgets(widget.valueList);
|
|
649
|
-
}
|
|
650
|
-
}));
|
|
651
|
-
}
|
|
652
|
-
async translateWidgetItems(widgets) {
|
|
653
|
-
Promise.all(widgets.map(async (widget) => {
|
|
654
|
-
if (!widget.originalLabel) {
|
|
655
|
-
widget.originalLabel = `${widget.label}`;
|
|
656
|
-
}
|
|
657
|
-
// Label
|
|
658
|
-
widget.label = await this.getTranslationOfKey(widget.originalLabel);
|
|
659
|
-
}));
|
|
660
|
-
}
|
|
661
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFormService, deps: [{ token: i1.NamedValidatorService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
662
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFormService }); }
|
|
663
|
-
}
|
|
664
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFormService, decorators: [{
|
|
665
|
-
type: Injectable
|
|
666
|
-
}], ctorParameters: () => [{ type: i1.NamedValidatorService, decorators: [{
|
|
667
|
-
type: Optional
|
|
668
|
-
}] }] });
|
|
669
|
-
export function extractTime(widgetInstance) {
|
|
670
|
-
let time;
|
|
671
|
-
if (widgetInstance.value) {
|
|
672
|
-
let date = new Date(widgetInstance.value);
|
|
673
|
-
let hour = SmartWidgetSettings.useUtc ? date.getUTCHours() : date.getHours();
|
|
674
|
-
let min = SmartWidgetSettings.useUtc ? date.getUTCMinutes() : date.getMinutes();
|
|
675
|
-
time = String(hour).padStart(2, '0') + ':' + String(min).padStart(2, '0');
|
|
676
|
-
widgetInstance.value = moment(date);
|
|
677
|
-
}
|
|
678
|
-
else {
|
|
679
|
-
time = '';
|
|
680
|
-
}
|
|
681
|
-
return time;
|
|
682
|
-
}
|
|
683
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1mb3JtL3NlcnZpY2VzL3NtYXJ0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFTMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFLL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDM0YsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7QUFHNUIsTUFBTSxPQUFPLGdCQUFnQjtJQVMzQixZQUFnQyxpQkFBeUM7UUFBekMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF3QjtRQVJ4RCxhQUFRLEdBQVcsV0FBVyxDQUFDO1FBQ2hELHFCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3BDLFVBQUssR0FBUSxFQUFFLENBQUM7UUFpbUJDLG9CQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNoRSw2QkFBd0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNELDBCQUFxQixHQUFHLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELGdDQUEyQixHQUFHLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELHNCQUFpQixHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLCtCQUEwQixHQUFH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QUFoQixnQkFBZ0I7a0JBRDVCLFVBQVU7OzBCQVVJLFFBQVE7O0FBNHhCdkIsTUFBTSxVQUFVLFdBQVcsQ0FBQyxjQUF3QztJQUNsRSxJQUFJLElBQUksQ0FBQztJQUNULElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdFLElBQUksR0FBRyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEYsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxRSxjQUFjLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksR0FBRyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25EZWZpbml0aW9uVHlwZUVudW0sIFNtYXJ0Rm9ybVdpZGdldFR5cGUgfSBmcm9tICcuLi9hcGknO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0RGF0ZVRpbWVQaWNrZXIsXHJcbiAgU21hcnRGb3JtV2lkZ2V0LFxyXG4gIFNtYXJ0SXRlbSxcclxuICBTbWFydEl0ZW1zLFxyXG4gIFNtYXJ0U2VsZWN0LFxyXG59IGZyb20gJy4uL3NtYXJ0Zm9ybS5mb3JtLW1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRGb3JtLCBTbWFydEZvcm1Db21wb25lbnRDb25zdHJhaW50LCBTbWFydFZhbGlkYXRvciwgVmFsdWUgfSBmcm9tICcuLi9zbWFydGZvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRMaWJyYXJ5IH0gZnJvbSAnLi4vLi4vdmlldy1jb250ZXh0L3V0aWxpdHkvY29tcG9uZW50TGlicmFyeSc7XHJcbmltcG9ydCB7XHJcbiAgTmFtZWRWYWxpZGF0b3JTZXJ2aWNlLFxyXG4gIFZhbGlkYXRlZFdpZGdldCxcclxufSBmcm9tICcuLi8uLi9zbWFydC12YWxpZGF0aW9uL25hbWVkLXZhbGlkYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU21hcnRXaWRnZXRTZXR0aW5ncyB9IGZyb20gJy4uL3dpZGdldHMvc21hcnRmb3Jtd2lkZ2V0L3NtYXJ0Zm9ybXdpZGdldC5jb21wb25lbnQnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTbWFydEZvcm1TZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVtcHR5S2V5OiBzdHJpbmcgPSAnZSNtJXBAdCp5JztcclxuICBjb21wb25lbnRMaWJyYXJ5ID0gQ29tcG9uZW50TGlicmFyeTtcclxuICBncm91cDogYW55ID0ge307XHJcblxyXG4gIGZvcm1Hcm91cD86IFVudHlwZWRGb3JtR3JvdXA7XHJcblxyXG4gIHNtYXJ0Rm9ybT86IFNtYXJ0Rm9ybTtcclxuXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSB2YWxpZGF0b3JQcm92aWRlcj86IE5hbWVkVmFsaWRhdG9yU2VydmljZSkge31cclxuXHJcbiAgZ2V0U21hcnRGb3JtV2lkZ2V0QnlLZXkoa2V5OiBzdHJpbmcpOiBTbWFydEZvcm1XaWRnZXQ8YW55PiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kU21hcnRGb3JtV2lkZ2V0QnlLZXkodGhpcy5zbWFydEZvcm0/LndpZGdldHMhLCBrZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0oXHJcbiAgICB3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdIHwgU21hcnRJdGVtczxhbnk+W10sXHJcbiAgICBrZXlzOiBzdHJpbmdbXVxyXG4gICk6IHN0cmluZ1tdIHtcclxuICAgIHdpZGdldHMuZm9yRWFjaCgodykgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdy50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJlxyXG4gICAgICAgIHcudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICApIHtcclxuICAgICAgICBrZXlzLnB1c2gody5rZXkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QgfHxcclxuICAgICAgICB3LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUX01VTFRJUExFIHx8XHJcbiAgICAgICAgdy50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJBRElPX0JVVFRPTiB8fFxyXG4gICAgICAgIHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKHcudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIGtleXMgPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybSh3LnZhbHVlTGlzdCwga2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMikge1xyXG4gICAgICAgIGlmICh3LnZhbHVlTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBsZXQgY2hpbGRyZW5LZXlzID0gdGhpcy5jb2xsZWN0S2V5c0Zyb21TbWFydEZvcm0ody52YWx1ZUxpc3QsIFtdKTtcclxuICAgICAgICAgIGNoaWxkcmVuS2V5cyA9IGNoaWxkcmVuS2V5c1xyXG4gICAgICAgICAgICAuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ga2V5ICE9PSB3LmtleSlcclxuICAgICAgICAgICAgLmZsYXRNYXAoKGtleTogc3RyaW5nKSA9PiBgJHt3LmtleX0uJHtrZXl9YCk7XHJcblxyXG4gICAgICAgICAga2V5cy5wdXNoKC4uLmNoaWxkcmVuS2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ga2V5cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KFxyXG4gICAgd2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSxcclxuICAgIGtleTogc3RyaW5nXHJcbiAgKTogU21hcnRGb3JtV2lkZ2V0PGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IHdpZGdldEZvdW5kQnlLZXk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGZvciAobGV0IHcgb2Ygd2lkZ2V0cykge1xyXG4gICAgICBpZiAody5rZXkgPT09IGtleSkge1xyXG4gICAgICAgIHJldHVybiB3O1xyXG4gICAgICB9IGVsc2UgaWYgKHcudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiYgdy52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHdpZGdldEZvdW5kQnlLZXkgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh3LnZhbHVlTGlzdCwga2V5KTtcclxuICAgICAgICBpZiAod2lkZ2V0Rm91bmRCeUtleSkge1xyXG4gICAgICAgICAgcmV0dXJuIHdpZGdldEZvdW5kQnlLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2lkZ2V0Rm91bmRCeUtleTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmFsdWVEZWVwbHkobW9kZWw6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgbGV0IHNwbGl0dGVkS2V5ID0ga2V5LnNwbGl0KCcuJyk7XHJcbiAgICBsZXQgdmFsdWU6IGFueTtcclxuXHJcbiAgICBzcGxpdHRlZEtleS5mb3JFYWNoKChrOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHZhbHVlID0gbW9kZWxba107XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgdmFsdWVba10gPT09IG51bGwgfHxcclxuICAgICAgICAgICghdmFsdWUgJiYgdHlwZW9mIHZhbHVlW2tdICE9PSAnYm9vbGVhbicpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2tdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZURlZXBseShtb2RlbDogYW55LCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IHNwbGl0dGVkS2V5cyA9IGtleS5zcGxpdCgnLicpO1xyXG5cclxuICAgIGxldCBkZWVwTW9kZWw6IGFueVtdID0gW21vZGVsXTtcclxuICAgIGxldCB0ZW1wTW9kZWw6IGFueTtcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3BsaXR0ZWRLZXlzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICB0ZW1wTW9kZWwgPSBkZWVwTW9kZWxbaW5kZXhdO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ2Jvb2xlYW4nICYmXHJcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ251bWJlcicgJiZcclxuICAgICAgICB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICBkZWVwTW9kZWwucHVzaCh0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaW5kZXggPT09IHNwbGl0dGVkS2V5cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgbGV0IG9sZFZhbHVlID0gdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dO1xyXG4gICAgICAgIC8vIGlmICh2YWx1ZSA9PT0gJycgJiYgKG9sZFZhbHVlID09PSBudWxsIHx8IG9sZFZhbHVlID09PSB1bmRlZmluZWQpIHRoZW4gZG9uJ3QgY2hhbmdlIHZhbHVlLlxyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gJycgfHwgKG9sZFZhbHVlICE9PSBudWxsICYmIG9sZFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByb3BlcnR5TmFtZXNEZWVwbHkoZWxlbWVudDogYW55KTogc3RyaW5nW10ge1xyXG4gICAgbGV0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhlbGVtZW50KTtcclxuICAgIHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHR5cGVvZiBlbGVtZW50W3Byb3BlcnR5XSA9PT0gJ3N0cmluZycgfHxcclxuICAgICAgICB0eXBlb2YgZWxlbWVudFtwcm9wZXJ0eV0gPT09ICdib29sZWFuJyB8fFxyXG4gICAgICAgIHR5cGVvZiBlbGVtZW50W3Byb3BlcnR5XSA9PT0gJ251bWJlcicgfHxcclxuICAgICAgICBlbGVtZW50W3Byb3BlcnR5XSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgZWxlbWVudFtwcm9wZXJ0eV0gPT09IG51bGwgfHxcclxuICAgICAgICAhZWxlbWVudFtwcm9wZXJ0eV0gfHxcclxuICAgICAgICAhZWxlbWVudFxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGlubmVyUHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydHlOYW1lc0RlZXBseShlbGVtZW50W3Byb3BlcnR5XSk7XHJcbiAgICAgIGlubmVyUHJvcGVydGllcyA9IGlubmVyUHJvcGVydGllcy5tYXAoXHJcbiAgICAgICAgKGlubmVyUHJvcGVydHk6IHN0cmluZykgPT4gYCR7cHJvcGVydHl9LiR7aW5uZXJQcm9wZXJ0eX1gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBwcm9wZXJ0aWVzLnB1c2goLi4uaW5uZXJQcm9wZXJ0aWVzKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZXNGcm9tTW9kZWwod2lkZ2V0cz86IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10sIGNvbXBMaWI/OiBDb21wb25lbnRMaWJyYXJ5KTogdm9pZCB7XHJcbiAgICBjb25zdCBzbWFydEZvcm0gPSB0aGlzLnNtYXJ0Rm9ybSE7XHJcbiAgICBjb25zdCBkYXRhID0gc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsPy5kYXRhO1xyXG4gICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXdpZGdldHMpIHtcclxuICAgICAgd2lkZ2V0cyA9IHNtYXJ0Rm9ybS53aWRnZXRzO1xyXG4gICAgfVxyXG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSB0aGlzLmNvbGxlY3RLZXlzRnJvbVNtYXJ0Rm9ybSh3aWRnZXRzLCBbXSk7XHJcblxyXG4gICAgbGV0IHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmdldFByb3BlcnR5TmFtZXNEZWVwbHkoZGF0YSkpIHtcclxuICAgICAgaWYgKGtleXMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgIHdpZGdldCA9IHRoaXMuZmluZFNtYXJ0Rm9ybVdpZGdldEJ5S2V5KHdpZGdldHMsIGtleSk7XHJcbiAgICAgICAgaWYgKHdpZGdldCkge1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBrZXkpO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5UT0dHTEUgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBgJHt2YWx1ZX1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbXBMaWIgPT09IHRoaXMuY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1BJQ0tFUiB8fFxyXG4gICAgICAgICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB3aWRnZXQudmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAod2lkZ2V0LnNob3dMYWJlbCA9PT0gdW5kZWZpbmVkICYmIHNtYXJ0Rm9ybS5zaG93TGFiZWwpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuc2hvd0xhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY29weUZyb21WYWx1ZVNldFRvVmFsdWVzTGlzdCh3aWRnZXQsIHNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC52YWx1ZVNldHMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBJbiBjYXNlIG9mIENoZWNrQm94MlxyXG4gICAgICAgICAgbGV0IHNwbGl0dGVkS2V5cyA9IGtleS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgc3BsaXR0ZWRLZXlzLnNwbGljZShzcGxpdHRlZEtleXMubGVuZ3RoIC0gMSwgMSk7XHJcbiAgICAgICAgICB3aWRnZXQgPSB0aGlzLmZpbmRTbWFydEZvcm1XaWRnZXRCeUtleSh3aWRnZXRzLCBzcGxpdHRlZEtleXMuam9pbignLicpKTtcclxuICAgICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3B5RnJvbVZhbHVlU2V0VG9WYWx1ZXNMaXN0KHdpZGdldCwgc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsLnZhbHVlU2V0cyk7XHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQudmFsdWVMaXN0KSB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdCA9IHdpZGdldC52YWx1ZUxpc3QubWFwKChpdGVtOiBTbWFydEl0ZW08YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZURlZXBseShkYXRhLCBgJHt3aWRnZXQ/LmtleX0uJHtpdGVtLmtleX1gKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvcHlGcm9tVmFsdWVTZXRUb1ZhbHVlc0xpc3Qod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PiwgdmFsdWVTZXRzOiBhbnkpIHtcclxuICAgIGlmIChcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUIHx8XHJcbiAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVF9NVUxUSVBMRSB8fFxyXG4gICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SQURJT19CVVRUT04gfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgfHxcclxuICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRFxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh3aWRnZXQuc2VsZWN0aW9uICYmIHZhbHVlU2V0cykge1xyXG4gICAgICAgIGxldCB2YWx1ZVNldCA9IHZhbHVlU2V0c1t3aWRnZXQuc2VsZWN0aW9uLnZhbHVlU2V0TmFtZV07XHJcbiAgICAgICAgaWYgKCF2YWx1ZVNldCkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCd2YWx1ZVNldCBub3QgZm91bmQnLCB3aWRnZXQuc2VsZWN0aW9uLnZhbHVlU2V0TmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB2YWx1ZVNldERhdGEgPSB2YWx1ZVNldC52YWx1ZVNldERhdGE7XHJcbiAgICAgICAgICBsZXQgdmFsdWVzID0gdmFsdWVTZXREYXRhLnZhbHVlcztcclxuXHJcbiAgICAgICAgICBsZXQgc2VsZWN0aW9uRGVmaW5pdGlvbiA9ICh3aWRnZXQgYXMgU21hcnRTZWxlY3Q8YW55Pikuc2VsZWN0aW9uO1xyXG4gICAgICAgICAgbGV0IGRpc3BsYXlQcm9wZXJ0eSA9IHNlbGVjdGlvbkRlZmluaXRpb24/LmRpc3BsYXlQcm9wZXJ0eSA/PyAnZGlzcGxheVZhbHVlJztcclxuXHJcbiAgICAgICAgICAvLyBjaGVjayBpcyBkaXNwbGF5UHJvcGVydHkgZXhpc3RzLCBmYWxsYmFjayBmb3IgY29tbW9uIGRpc3BsYXkgcHJvcGVydGllc1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBkaXNwbGF5UHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0eSA9ICduYW1lJzsgLy8gR2VuZXJpY1ZhbHVlLm5hbWVcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBkaXNwbGF5UHJvcGVydHkpKSB7XHJcbiAgICAgICAgICAgICAgZGlzcGxheVByb3BlcnR5ID0gJ2Rpc3BsYXlWYWx1ZSc7IC8vIFZhbHVlLmRpc3BsYXlWYWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHdpZGdldC5zZWxlY3Rpb24udHlwZSA9PT0gU2VsZWN0aW9uRGVmaW5pdGlvblR5cGVFbnVtLlBST1BFUlRZICYmXHJcbiAgICAgICAgICAgICF3aWRnZXQuc2VsZWN0aW9uLm1hcHBpbmcubGVuZ3RoXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IGtleVByb3BlcnR5ID1cclxuICAgICAgICAgICAgICBzZWxlY3Rpb25EZWZpbml0aW9uPy5rZXlQcm9wZXJ0eSA/PyB2YWx1ZVNldERhdGE/LmtleVByb3BlcnR5ID8/ICdvYmplY3RVcmknO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBrZXlQcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgICBrZXlQcm9wZXJ0eSA9ICd1cmknOyAvLyBHZW5lcmljVmFsdWUudXJpXHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrUHJvcGVydHkodmFsdWVzLCBrZXlQcm9wZXJ0eSkpIHtcclxuICAgICAgICAgICAgICAgIGtleVByb3BlcnR5ID0gJ29iamVjdFVyaSc7IC8vIFZhbHVlLm9iamVjdFVyaVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gdmFsdWVzLm1hcCgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IHZhbHVlW2tleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVtkaXNwbGF5UHJvcGVydHldLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlW2tleVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQsIHdpZGdldC5zZWxlY3Rpb24uZW1wdHlMYWJlbCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQuc2VsZWN0aW9uLnR5cGUgPT09IFNlbGVjdGlvbkRlZmluaXRpb25UeXBlRW51bS5PQkpFQ1QgJiZcclxuICAgICAgICAgICAgIXdpZGdldC5zZWxlY3Rpb24ubWFwcGluZy5sZW5ndGhcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB3aWRnZXQudmFsdWVMaXN0ID0gdmFsdWVzLm1hcCgodmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IGAke2luZGV4fWAsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVbZGlzcGxheVByb3BlcnR5XSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hZGRFbXB0eUl0ZW1Ub1ZhbHVlTGlzdCh3aWRnZXQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1Byb3BlcnR5KHZhbHVlczogb2JqZWN0W10sIHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWVzPy5sZW5ndGgpIHtcclxuICAgICAgLy8gbm8gc2FtcGxlIGRhdGEsIGFzc3VtZSBleGlzdGFuY2VcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcGVydHkgaW4gdmFsdWVzWzBdO1xyXG4gIH1cclxuXHJcbiAgdG9Gb3JtR3JvdXAoY29tcExpYj86IENvbXBvbmVudExpYnJhcnkpOiBVbnR5cGVkRm9ybUdyb3VwIHtcclxuICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHRoaXMuc21hcnRGb3JtIS53aWRnZXRzLCBjb21wTGliISk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzID0gdGhpcy5ncm91cDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAodGhpcy5ncm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzICYmIHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5zZXRWYWxpZGF0b3JzKFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtIS52YWxpZGF0b3JzLm1hcCgodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0b3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGb3JtQ29udHJvbHMoXHJcbiAgICB3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdIHwgU21hcnRJdGVtPGFueT5bXSxcclxuICAgIGNvbXBMaWI6IENvbXBvbmVudExpYnJhcnksXHJcbiAgICBwYXJlbnRLZXk/OiBzdHJpbmdcclxuICApOiB2b2lkIHtcclxuICAgIHdpZGdldHMubWFwKCh3aWRnZXQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVYgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKGNvbXBMaWIhID09PSB0aGlzLmNvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1BJQ0tFUiB8fFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1RJTUVfUElDS0VSXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKHdpZGdldC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHdpZGdldC52YWx1ZSA9IG5ldyBEYXRlKHdpZGdldC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbChgJHt3aWRnZXQua2V5fWAsIHdpZGdldC52YWx1ZSwgd2lkZ2V0LmlzRGlzYWJsZWQsIHdpZGdldC52YWxpZGF0b3JzKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1RJTUVfUElDS0VSICYmXHJcbiAgICAgICAgICBjb21wTGliICE9PSBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkdcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgIGAke3dpZGdldC5rZXl9LXRpbWVgLFxyXG4gICAgICAgICAgICBleHRyYWN0VGltZSh3aWRnZXQpLFxyXG4gICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCxcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWAsXHJcbiAgICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCAvLyBUT0RPIHJlYWxseSB3ZSBkb24ndCBwYXNzIHdpZGdldC5pc0Rpc2FibGVkP1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSkubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIGAke3dpZGdldC5rZXl9LiR7a2V5fWAsXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LmlzTXVsdGlwbGUgPyB3aWRnZXQudmFsdWUuZGF0YVtrZXldIDogd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVswXSxcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNEaXNhYmxlZCxcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9yc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JVEVNICYmIHBhcmVudEtleSkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICBgJHtwYXJlbnRLZXl9LiR7d2lkZ2V0LmtleX1gLFxyXG4gICAgICAgICAgd2lkZ2V0LnZhbHVlLFxyXG4gICAgICAgICAgd2lkZ2V0LmlzRGlzYWJsZWQsXHJcbiAgICAgICAgICB1bmRlZmluZWRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmIHdpZGdldC52YWx1ZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzKHdpZGdldC52YWx1ZUxpc3QsIGNvbXBMaWIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1hfMiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh3aWRnZXQudmFsdWVMaXN0LCBjb21wTGliLCB3aWRnZXQua2V5KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkYXRvckluTGlzdCh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yLCBsaXN0PzogU21hcnRWYWxpZGF0b3JbXSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGxpc3QgIT09IHVuZGVmaW5lZCAmJiBsaXN0Lmxlbmd0aCA+IDAgJiYgbGlzdC5zb21lKCh2KSA9PiB2ID09PSB2YWxpZGF0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtQ29udHJvbChcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICAgdmFsdWU/OiBzdHJpbmcsXHJcbiAgICBpc0Rpc2FibGVkPzogYm9vbGVhbixcclxuICAgIHZhbGlkYXRvcnM/OiBTbWFydFZhbGlkYXRvcltdXHJcbiAgKTogVW50eXBlZEZvcm1Db250cm9sIHtcclxuICAgIGxldCBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sID0gdGhpcy5ncm91cFtrZXldO1xyXG4gICAgaWYgKCFmb3JtQ29udHJvbCkge1xyXG4gICAgICBmb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgICAgdGhpcy5ncm91cFtrZXldID0gZm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcbiAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSB8fCAnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgZm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB2YWxpZGF0b3JzPy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgZm9ybUNvbnRyb2wuYWRkVmFsaWRhdG9ycyh2YWxpZGF0b3IudmFsaWRhdG9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpc0Rpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3JtQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyhcclxuICAgIHdpZGdldHM6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10sXHJcbiAgICBncm91cDogVW50eXBlZEZvcm1Hcm91cFxyXG4gICk6IHZvaWQge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHtcclxuICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJiB3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmNvcHlWYWx1ZUZyb21Gb3JtVG9XaWRnZXRCZWFucyh3aWRnZXQudmFsdWVMaXN0LCBncm91cCk7XHJcbiAgICAgIH0gZWxzZSBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTUFUUklYKSB7XHJcbiAgICAgICAgaWYgKHdpZGdldC5pc011bHRpcGxlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YUtleXMgPSBPYmplY3Qua2V5cyh3aWRnZXQudmFsdWUuZGF0YSk7XHJcbiAgICAgICAgICBsZXQgaXRlbUtleXMgPSB3aWRnZXQudmFsdWUuY29sdW1ucy5tYXAoKHZhbHVlOiBWYWx1ZSkgPT4gdmFsdWUuY29kZSk7XHJcbiAgICAgICAgICBkYXRhS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpdGVtS2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsdWUuZGF0YVtrZXldW2l0ZW1dID0gW1xyXG4gICAgICAgICAgICAgICAgZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uZGF0YS4ke2tleX0uJHtpdGVtfWBdLnZhbHVlLFxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IGRhdGFrZXlzID0gT2JqZWN0LmtleXMod2lkZ2V0LnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgLy9NYXAgY2hlY2tib3gga2V5IC0gYm9vbGVhbiB2YWx1ZSB0byBzdHJpbmcga2V5IGFycmF5XHJcbiAgICAgICAgICBsZXQgdmFsdWVLZXlzID0gd2lkZ2V0LnZhbHVlLmNvbHVtbnMubWFwKCh2YWx1ZTogVmFsdWUpID0+IHZhbHVlLmNvZGUpO1xyXG4gICAgICAgICAgZGF0YWtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgbGV0IG5ld0RhdGE6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIHZhbHVlS2V5cy5mb3JFYWNoKCh2YWx1ZUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gd2lkZ2V0LnZhbHVlLmRhdGFba2V5XVt2YWx1ZUtleV07XHJcbiAgICAgICAgICAgICAgaWYgKHZhbHVlWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdEYXRhLnB1c2godmFsdWVLZXkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBuZXdEYXRhO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHdpZGdldC52YWx1ZS5kYXRhKS5tYXAoKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZS5kYXRhW2tleV0gPSBbZ3JvdXAuY29udHJvbHNbYCR7d2lkZ2V0LmtleX0uJHtrZXl9YF0udmFsdWVdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVYgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlQgJiZcclxuICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICApIHtcclxuICAgICAgICB3aWRnZXQudmFsdWUgPSBncm91cC5jb250cm9sc1t3aWRnZXQua2V5XS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b1NtYXJ0Rm9ybShncm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFNtYXJ0Rm9ybSB7XHJcbiAgICBpZiAodGhpcy5zbWFydEZvcm0pIHtcclxuICAgICAgdGhpcy5jb3B5VmFsdWVGcm9tRm9ybVRvV2lkZ2V0QmVhbnModGhpcy5zbWFydEZvcm0ud2lkZ2V0cywgZ3JvdXApO1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5zbWFydEZvcm0uY29tcG9uZW50TW9kZWw/LmRhdGE7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5nZXRQcm9wZXJ0eU5hbWVzRGVlcGx5KGRhdGEpKSB7XHJcbiAgICAgICAgICBpZiAoZ3JvdXAuY29udHJvbHNba2V5XSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlRGVlcGx5KGRhdGEsIGtleSwgZ3JvdXAuY29udHJvbHNba2V5XS52YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zbWFydEZvcm0hO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWwoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0Rm9ybT8uY29tcG9uZW50TW9kZWwpIHtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgbGV0IG9yaWdpbmFsTW9kZWwgPSB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhO1xyXG4gICAgbGV0IGNvcHlPZk1vZGVsID0geyAuLi5vcmlnaW5hbE1vZGVsIH07XHJcblxyXG4gICAgLy8gY29weU9mTW9kZWwgc2hvdWxkIGJlIHRoZSBjdXJyZW50IG1vZGVsXHJcbiAgICB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhID0gY29weU9mTW9kZWw7XHJcbiAgICAvLyBjb3B5IHZhbHVlIGZyb20gRm9ybUdyb3VwIGludG8gbW9kZWxcclxuICAgIHRoaXMudG9TbWFydEZvcm0oZ3JvdXApO1xyXG5cclxuICAgIGxldCBuZXdNb2RlbCA9IHRoaXMuc21hcnRGb3JtLmNvbXBvbmVudE1vZGVsLmRhdGE7XHJcbiAgICB0aGlzLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbC5kYXRhID0gb3JpZ2luYWxNb2RlbDtcclxuXHJcbiAgICByZXR1cm4gbmV3TW9kZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5Q29tcG9uZW50Q29uc3RyYWludHMoXHJcbiAgICB3aWRnZXRzOiBTbWFydEZvcm1XaWRnZXQ8YW55PltdLFxyXG4gICAgY29uc3RyYWludHM6IFNtYXJ0Rm9ybUNvbXBvbmVudENvbnN0cmFpbnRbXVxyXG4gICkge1xyXG4gICAgd2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSA9PiB7XHJcbiAgICAgIGxldCB3aWRnZXRDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzPy5maWx0ZXIoXHJcbiAgICAgICAgLy8oY29uc3RyYWludDogU21hcnRGb3JtQ29tcG9uZW50Q29uc3RyYWludCkgPT4gY29uc3RyYWludC5kYXRhTmFtZSA9PT0gd2lkZ2V0LmtleVxyXG4gICAgICAgIChjb25zdHJhaW50KSA9PiB0aGlzLmFudFBhdGhNYXRjaGVyKGNvbnN0cmFpbnQuZGF0YU5hbWUsIHdpZGdldC5rZXkpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAod2lkZ2V0Q29uc3RyYWludHMgJiYgd2lkZ2V0Q29uc3RyYWludHMubGVuZ3RoKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29uc3RyYWludHMuZm9yRWFjaCgoY29uc3RyYWludCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnN0cmFpbnQudmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQuaXNWaXNpYmxlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2lkZ2V0LmlzVmlzaWJsZSA9IGNvbnN0cmFpbnQudmlzaWJsZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTUFHRSAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzID0gd2lkZ2V0LnZhbGlkYXRvcnMgPz8gW107XHJcbiAgICAgICAgICAgIGxldCByZXF1aXJlZEluZGV4ID0gdmFsaWRhdG9ycy5maW5kSW5kZXgoKHYpID0+IHYudmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgbGV0IHdhc01hbmRhdG9yeSA9IHJlcXVpcmVkSW5kZXggPj0gMDtcclxuICAgICAgICAgICAgbGV0IHRvYmVNYW5kYXRvcnkgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnQubWFuZGF0b3J5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAvLyBub3Qgc3BlY2lmaWVkIG9uIHNlcnZlciwgdXNlIGNsaWVudCBzdGF0ZVxyXG4gICAgICAgICAgICAgIC8vIGlmIHdpZGdldCBpcyBub3QgdmlzaWJsZSwgY2xpZW50IHNob3VsZCBkZWZhdWx0IHRvIG5vdCBtYW5kYXRvcnlcclxuICAgICAgICAgICAgICB0b2JlTWFuZGF0b3J5ID0gd2lkZ2V0LmlzVmlzaWJsZSAmJiB3YXNNYW5kYXRvcnk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdG9iZU1hbmRhdG9yeSA9IGNvbnN0cmFpbnQubWFuZGF0b3J5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghd2FzTWFuZGF0b3J5ICYmIHRvYmVNYW5kYXRvcnkpIHtcclxuICAgICAgICAgICAgICAvLyBhZGQgcmVxdWlyZWQgdmFsaWRhdG9yXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAuLi52YWxpZGF0b3JzLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogJ3JlcXVpcmVkJyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAvLyByZW1vdmUgZW1wdHkgaXRlbVxyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlJdGVtRnJvbVZhbHVlTGlzdCh3aWRnZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh3YXNNYW5kYXRvcnkgJiYgIXRvYmVNYW5kYXRvcnkpIHtcclxuICAgICAgICAgICAgICAvLyByZW1vdmUgcmVxdWlyZWQgdmFsaWRhdG9yXHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnM/LnNwbGljZShyZXF1aXJlZEluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAvLyBhZGQgZW1wdHkgaXRlbVxyXG4gICAgICAgICAgICAgIGxldCBlbXB0eUxhYmVsID0gJyc7XHJcbiAgICAgICAgICAgICAgaWYgKCdzZWxlY3Rpb24nIGluIHdpZGdldCkge1xyXG4gICAgICAgICAgICAgICAgZW1wdHlMYWJlbCA9IHdpZGdldC5zZWxlY3Rpb24/LmVtcHR5TGFiZWwgPz8gJyc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuYWRkRW1wdHlJdGVtVG9WYWx1ZUxpc3Qod2lkZ2V0LCBlbXB0eUxhYmVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29uc3RyYWludC5lbmFibGVkID09PSB1bmRlZmluZWQgfHwgY29uc3RyYWludC5lbmFibGVkID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHdpZGdldC5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHdpZGdldC5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHdpZGdldC5pc0Rpc2FibGVkID0gIWNvbnN0cmFpbnQuZW5hYmxlZDtcclxuICAgICAgICAgICAgICBpZiAod2lkZ2V0LnR5cGUgPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SSUNIX1RFWFQpIHtcclxuICAgICAgICAgICAgICAgIHdpZGdldC5pc1JlYWRvbmx5ID0gIWNvbnN0cmFpbnQuZW5hYmxlZDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52YWxpZGF0b3JQcm92aWRlcj8uYXBwbHlDb25zdHJhaW50KHdpZGdldCBhcyBWYWxpZGF0ZWRXaWRnZXQ8YW55PiwgY29uc3RyYWludCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICAgIHdpZGdldC52YWx1ZUxpc3QgJiZcclxuICAgICAgICB3aWRnZXQudmFsdWVMaXN0Lmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmFwcGx5Q29tcG9uZW50Q29uc3RyYWludHMod2lkZ2V0LnZhbHVlTGlzdCwgY29uc3RyYWludHMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhSZWdleENoYXJzID0gbmV3IFJlZ0V4cCgvW1xcLlxcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcK1xcXlxcJFxcXFxcXHxdL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhBc3Rlcmlza0luVGhlTWlkZGxlID0gbmV3IFJlZ0V4cCgvKFteXFwqXSlcXCooW15cXCpdKS9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4QXN0ZXJpc2tJblRoZUVuZCA9IG5ldyBSZWdFeHAoLyhbXlxcKl0pXFwqJC9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4QXN0ZXJpc2tJblRoZUJlZ2lubmluZyA9IG5ldyBSZWdFeHAoL15cXCooW15cXCpdKS9nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2V4QXN0ZXJpc2tPbmx5ID0gbmV3IFJlZ0V4cCgvXlxcKiQvZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleERvdWJsZUFzdGVyaXNrV2l0aERvdCA9IG5ldyBSZWdFeHAoL1xcKlxcKlxcXFxcXC4vZyk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdleERvdWJsZUFzdGVyaXNrID0gbmV3IFJlZ0V4cCgvXFwqXFwqL2cpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnZXhRdWVzdGlvbk1hcmsgPSBuZXcgUmVnRXhwKC9cXD8vZyk7XHJcbiAgcHJpdmF0ZSByZWdleEJ5UGF0dGVybjogTWFwPHN0cmluZywgUmVnRXhwPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgYW50UGF0aE1hdGNoZXIocGF0dGVybj86IHN0cmluZywgcGF0aD86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFwYXR0ZXJuIHx8ICFwYXRoKSB7XHJcbiAgICAgIC8vIGVtcHR5IHBhdHRlcm4gb3IgcGF0aCAtPiBub3QgZXZhbHVhdGVkLCB0cnVlIG9yIGZhbHNlP1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgcmVnZXggPSB0aGlzLnJlZ2V4QnlQYXR0ZXJuLmdldChwYXR0ZXJuKTtcclxuICAgIGlmIChyZWdleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIGVzY2FwZSByZWdleCBjaGFyYWN0ZXJzIGV4Y2VwdCBmb3IgPywgKiwgKipcclxuICAgICAgbGV0IHJlZ2V4UGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4UmVnZXhDaGFycywgJ1xcXFwkJicpO1xyXG5cclxuICAgICAgLy8gcmVwbGFjZSBhbnQtc3R5bGUgd2lsZGNhcmRzIHdpdGggcmVnZXggZXF1aXZhbGVudHNcclxuXHJcbiAgICAgIC8vIHJlcGxhY2UgKiB3aXRoIGEgcGF0dGVybiB0aGF0IG1hdGNoZXMgYW55IGNoYXJhY3RlciBleGNlcHQgZm9yICcuJ1xyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4QXN0ZXJpc2tJblRoZU1pZGRsZSwgJyQxW14uXSokMicpOyAvLyBub3QqICogbm90KlxyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4QXN0ZXJpc2tJblRoZUVuZCwgJyQxW14uXSonKTsgLy8gbm90KiAqIEVPTFxyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4QXN0ZXJpc2tJblRoZUJlZ2lubmluZywgJ1teLl0qJDEnKTsgLy8gQk9MICogbm90KlxyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4QXN0ZXJpc2tPbmx5LCAnW14uXSonKTsgLy8gQk9MICogRU9MXHJcblxyXG4gICAgICAvLyByZXBsYWNlICoqIHdpdGggYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGluY2x1ZGluZyAnLidcclxuICAgICAgcmVnZXhQYXR0ZXJuID0gcmVnZXhQYXR0ZXJuLnJlcGxhY2UodGhpcy5yZWdleERvdWJsZUFzdGVyaXNrV2l0aERvdCwgJy4qJyk7IC8vICoqLlxyXG4gICAgICByZWdleFBhdHRlcm4gPSByZWdleFBhdHRlcm4ucmVwbGFjZSh0aGlzLnJlZ2V4RG91YmxlQXN0ZXJpc2ssICcuKicpOyAvLyAqKlxyXG5cclxuICAgICAgLy8gcmVwbGFjZSA/IHdpdGggYSBzaW5nbGUgY2hhcmFjdGVyIG1hdGNoZXJcclxuICAgICAgcmVnZXhQYXR0ZXJuID0gcmVnZXhQYXR0ZXJuLnJlcGxhY2UodGhpcy5yZWdleFF1ZXN0aW9uTWFyaywgJy4nKTtcclxuXHJcbiAgICAgIC8vIGNyZWF0ZSBhIFJlZ0V4cCBvYmplY3RcclxuICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKCdeJyArIHJlZ2V4UGF0dGVybiArICckJyk7XHJcbiAgICAgIHRoaXMucmVnZXhCeVBhdHRlcm4uc2V0KHBhdHRlcm4sIHJlZ2V4KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0ZXN0IHRoZSBwYXRoIGFnYWluc3QgdGhlIGdlbmVyYXRlZCByZWdleFxyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QocGF0aCk7XHJcbiAgfVxyXG5cclxuICBhcHBseUNvbnN0cmFpbnRzKHdpZGdldHM/OiBTbWFydEZvcm1XaWRnZXQ8YW55PltdKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc21hcnRGb3JtIS5jb21wb25lbnRNb2RlbD8uY29uc3RyYWludHMgJiZcclxuICAgICAgdGhpcy5zbWFydEZvcm0hLmNvbXBvbmVudE1vZGVsPy5jb25zdHJhaW50cy5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICBpZiAoIXdpZGdldHMpIHtcclxuICAgICAgICB3aWRnZXRzID0gdGhpcy5zbWFydEZvcm0hLndpZGdldHM7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hcHBseUNvbXBvbmVudENvbnN0cmFpbnRzKHdpZGdldHMsIHRoaXMuc21hcnRGb3JtIS5jb21wb25lbnRNb2RlbD8uY29uc3RyYWludHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkRW1wdHlJdGVtVG9WYWx1ZUxpc3Qod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PiwgZW1wdHlMYWJlbD86IHN0cmluZykge1xyXG4gICAgaWYgKHdpZGdldC50eXBlID09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRhaW5zRW1wdHlLZXkgPSB3aWRnZXQudmFsdWVMaXN0LnNvbWUoKHYpID0+IHYua2V5ID09PSB0aGlzLmVtcHR5S2V5KTtcclxuICAgICAgaWYgKCFjb250YWluc0VtcHR5S2V5KSB7XHJcbiAgICAgICAgd2lkZ2V0LnZhbHVlTGlzdD8udW5zaGlmdCh7XHJcbiAgICAgICAgICBrZXk6IHRoaXMuZW1wdHlLZXksXHJcbiAgICAgICAgICBsYWJlbDogZW1wdHlMYWJlbCA/PyAnJyxcclxuICAgICAgICAgIHR5cGU6IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSVRFTSxcclxuICAgICAgICAgIHZhbHVlOiAnJywgLy8gdGhpcyBzaG91bGQgYmUgdW5kZWZpbmVkLCBidXQgRm9ybUNvbnRyb2wgY2Fubm90IGJlIG51bGwsIGZyb20gdjE0IGl0IHdpbGxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRW1wdHlJdGVtRnJvbVZhbHVlTGlzdCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSB7XHJcbiAgICBpZiAoJ3ZhbHVlTGlzdCcgaW4gd2lkZ2V0KSB7XHJcbiAgICAgIGlmICh3aWRnZXQudmFsdWVMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgZmlyc3RJdGVtID0gd2lkZ2V0LnZhbHVlTGlzdFswXTtcclxuICAgICAgICBpZiAoZmlyc3RJdGVtPy5rZXkgPT09IHRoaXMuZW1wdHlLZXkpIHtcclxuICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3Quc2hpZnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlcldpZGdldHNCeVZpc2liaWxpdHkod2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSk6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+W10ge1xyXG4gICAgcmV0dXJuIHdpZGdldHMuZmlsdGVyKCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSA9PlxyXG4gICAgICB3aWRnZXQuaXNWaXNpYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogd2lkZ2V0LmlzVmlzaWJsZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0VHJhbnNsYXRpb25PZktleShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zbWFydEZvcm0hLnRyYW5zbGF0ZVNlcnZpY2UhLmdldChrZXkpLnRvUHJvbWlzZSgpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHRyYW5zbGF0ZVdpZGdldHMod2lkZ2V0czogU21hcnRGb3JtV2lkZ2V0PGFueT5bXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHdpZGdldHMubWFwKGFzeW5jICh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KSA9PiB7XHJcbiAgICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUikge1xyXG4gICAgICAgICAgaWYgKCF3aWRnZXQub3JpZ2luYWxMYWJlbCkge1xyXG4gICAgICAgICAgICB3aWRnZXQub3JpZ2luYWxMYWJlbCA9IGAke3dpZGdldC5sYWJlbH1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gIExhYmVsXHJcbiAgICAgICAgICB3aWRnZXQubGFiZWwgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkod2lkZ2V0Lm9yaWdpbmFsTGFiZWwpO1xyXG5cclxuICAgICAgICAgIC8vIFBsYWNlaG9sZGVyXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9OVU1CRVIgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUklDSF9URVhUIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9CT1gpICYmXHJcbiAgICAgICAgICAgIHdpZGdldC5wbGFjZWhvbGRlclxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghd2lkZ2V0Lm9yaWdpbmFsUGxhY2Vob2xkZXIpIHtcclxuICAgICAgICAgICAgICB3aWRnZXQub3JpZ2luYWxQbGFjZWhvbGRlciA9IGAke3dpZGdldC5wbGFjZWhvbGRlcn1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdpZGdldC5wbGFjZWhvbGRlciA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleSh3aWRnZXQub3JpZ2luYWxQbGFjZWhvbGRlcik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gVmFsaWRhdG9yc1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU1ZHICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJViAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgICAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLk1VTFRJX0ZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuRElWSURFUiAmJlxyXG4gICAgICAgICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgICAgICAgIHdpZGdldC52YWxpZGF0b3JzXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgd2lkZ2V0LnZhbGlkYXRvcnMgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICB3aWRnZXQudmFsaWRhdG9ycy5tYXAoYXN5bmMgKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdG9yLm9yaWdpbmFsRXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5vcmlnaW5hbEVycm9yTWVzc2FnZSA9IGAke3ZhbGlkYXRvci5lcnJvck1lc3NhZ2V9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvci5lcnJvck1lc3NhZ2UgPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uT2ZLZXkoXHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvci5vcmlnaW5hbEVycm9yTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3I7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEluZGljYXRvclxyXG4gICAgICAgICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJiB3aWRnZXQuaW5kaWNhdG9yKSB7XHJcbiAgICAgICAgICAgIGlmICghd2lkZ2V0LmluZGljYXRvci5vcmlnaW5hbEluZGljYXRvclN0YXR1c0xhYmVscykge1xyXG4gICAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3Iub3JpZ2luYWxJbmRpY2F0b3JTdGF0dXNMYWJlbHMgPVxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0LmluZGljYXRvci5pbmRpY2F0b3JTdGF0dXNMYWJlbHMubWFwKChsYWJlbDogc3RyaW5nKSA9PiBsYWJlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2lkZ2V0LmluZGljYXRvci5pbmRpY2F0b3JTdGF0dXNMYWJlbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICB3aWRnZXQuaW5kaWNhdG9yLmluZGljYXRvclN0YXR1c0xhYmVscy5tYXAoXHJcbiAgICAgICAgICAgICAgICBhc3luYyAobGFiZWw6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbk9mS2V5KFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZGdldC5pbmRpY2F0b3IhLm9yaWdpbmFsSW5kaWNhdG9yU3RhdHVzTGFiZWxzIVtpbmRleF1cclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUX01VTFRJUExFIHx8XHJcbiAgICAgICAgICAgICAgd2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ0hFQ0tfQk9YXzIgfHxcclxuICAgICAgICAgICAgICB3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SQURJT19CVVRUT04pICYmXHJcbiAgICAgICAgICAgIHdpZGdldC52YWx1ZUxpc3RcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVdpZGdldEl0ZW1zKHdpZGdldC52YWx1ZUxpc3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVdpZGdldHMod2lkZ2V0LnZhbHVlTGlzdCEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB0cmFuc2xhdGVXaWRnZXRJdGVtcyh3aWRnZXRzOiBTbWFydEl0ZW1zPGFueT5bXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHdpZGdldHMubWFwKGFzeW5jICh3aWRnZXQ6IFNtYXJ0SXRlbXM8YW55PikgPT4ge1xyXG4gICAgICAgIGlmICghd2lkZ2V0Lm9yaWdpbmFsTGFiZWwpIHtcclxuICAgICAgICAgIHdpZGdldC5vcmlnaW5hbExhYmVsID0gYCR7d2lkZ2V0LmxhYmVsfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vICBMYWJlbFxyXG4gICAgICAgIHdpZGdldC5sYWJlbCA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25PZktleSh3aWRnZXQub3JpZ2luYWxMYWJlbCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RUaW1lKHdpZGdldEluc3RhbmNlOiBTbWFydERhdGVUaW1lUGlja2VyPGFueT4pIHtcclxuICBsZXQgdGltZTtcclxuICBpZiAod2lkZ2V0SW5zdGFuY2UudmFsdWUpIHtcclxuICAgIGxldCBkYXRlID0gbmV3IERhdGUod2lkZ2V0SW5zdGFuY2UudmFsdWUpO1xyXG4gICAgbGV0IGhvdXIgPSBTbWFydFdpZGdldFNldHRpbmdzLnVzZVV0YyA/IGRhdGUuZ2V0VVRDSG91cnMoKSA6IGRhdGUuZ2V0SG91cnMoKTtcclxuICAgIGxldCBtaW4gPSBTbWFydFdpZGdldFNldHRpbmdzLnVzZVV0YyA/IGRhdGUuZ2V0VVRDTWludXRlcygpIDogZGF0ZS5nZXRNaW51dGVzKCk7XHJcbiAgICB0aW1lID0gU3RyaW5nKGhvdXIpLnBhZFN0YXJ0KDIsICcwJykgKyAnOicgKyBTdHJpbmcobWluKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgd2lkZ2V0SW5zdGFuY2UudmFsdWUgPSBtb21lbnQoZGF0ZSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHRpbWUgPSAnJztcclxuICB9XHJcbiAgcmV0dXJuIHRpbWU7XHJcbn1cclxuIl19
|