@smartbit4all/ng-client 3.3.205 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/component-factory-service/component-factory-service.module.mjs +17 -0
- package/{esm2020 → esm2022}/lib/component-factory-service/component-factory-service.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/component-factory-service/projects.mjs +5 -5
- package/{esm2020 → esm2022}/lib/session/api/api/api.mjs +3 -3
- package/esm2022/lib/session/api/api/session.service.mjs +306 -0
- package/esm2022/lib/session/api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/session/api/encoder.mjs +18 -18
- package/{esm2020 → esm2022}/lib/session/api/index.mjs +2 -2
- package/{esm2020 → esm2022}/lib/session/api/model/accountInfo.mjs +12 -12
- package/{esm2020 → esm2022}/lib/session/api/model/apiError.mjs +12 -12
- package/{esm2020 → esm2022}/lib/session/api/model/authenticationProviderData.mjs +12 -12
- package/{esm2020 → esm2022}/lib/session/api/model/getAuthenticationProvidersResponse.mjs +1 -1
- package/{esm2020 → esm2022}/lib/session/api/model/models.mjs +8 -8
- package/{esm2020 → esm2022}/lib/session/api/model/refreshSessionRequest.mjs +12 -12
- package/{esm2020 → esm2022}/lib/session/api/model/session.mjs +1 -1
- package/esm2022/lib/session/api/model/sessionInfoData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/session/api/model/userActivityLog.mjs +12 -12
- package/{esm2020 → esm2022}/lib/session/api/param.mjs +1 -1
- package/{esm2020 → esm2022}/lib/session/api/variables.mjs +8 -8
- package/esm2022/lib/session/cookie-service/smart-cookie.service.mjs +225 -0
- package/{esm2020 → esm2022}/lib/session/projects.mjs +9 -9
- package/esm2022/lib/session/smart-error-catching.interceptor.mjs +71 -0
- package/esm2022/lib/session/smart-header-maintainer.interceptor.mjs +46 -0
- package/{esm2020 → esm2022}/lib/session/smart-session-handler.service.mjs +5 -5
- package/esm2022/lib/session/smart-session.module.mjs +58 -0
- package/esm2022/lib/session/smart-session.service.mjs +225 -0
- package/{esm2020 → esm2022}/lib/session/smart-timer/smart-session-timer.component.mjs +35 -35
- package/esm2022/lib/session/smart-timer/smart-session-timer.service.mjs +58 -0
- package/{esm2020 → esm2022}/lib/shared/projects.mjs +3 -3
- package/esm2022/lib/shared/shared.module.mjs +19 -0
- package/esm2022/lib/shared/smart-tooltip.directive.mjs +58 -0
- package/{esm2020 → esm2022}/lib/shared/smarttable.date-pipe.mjs +43 -43
- package/{esm2020 → esm2022}/lib/smart-client/projects.mjs +4 -4
- package/{esm2020 → esm2022}/lib/smart-client/smart-authentication.service.mjs +21 -21
- package/esm2022/lib/smart-client/smart-component-api-client.mjs +717 -0
- package/esm2022/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +53 -0
- package/{esm2020 → esm2022}/lib/smart-client/smart.component.mjs +77 -77
- package/{esm2020 → esm2022}/lib/smart-client/smart.service.mjs +75 -75
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/api/api.mjs +4 -4
- package/esm2022/lib/smart-component-layout/api/api/default.service.mjs +133 -0
- package/esm2022/lib/smart-component-layout/api/api.module.mjs +40 -0
- package/esm2022/lib/smart-component-layout/api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/encoder.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/index.mjs +7 -7
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/componentType.mjs +18 -18
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/componentWidgetType.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/layoutDirection.mjs +17 -17
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/model/models.mjs +6 -6
- package/esm2022/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +2 -0
- package/esm2022/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +2 -0
- package/esm2022/lib/smart-component-layout/api/param.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-component-layout/api/variables.mjs +9 -9
- package/{esm2020 → esm2022}/lib/smart-component-layout/projects.mjs +7 -7
- package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +94 -0
- package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +259 -0
- package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +41 -0
- package/{esm2020 → esm2022}/lib/smart-dialog/projects.mjs +7 -7
- package/esm2022/lib/smart-dialog/smartdialog.component.mjs +54 -0
- package/{esm2020 → esm2022}/lib/smart-dialog/smartdialog.model.mjs +15 -15
- package/esm2022/lib/smart-dialog/smartdialog.module.mjs +46 -0
- package/{esm2020 → esm2022}/lib/smart-dialog/smartdialog.service.mjs +54 -54
- package/esm2022/lib/smart-expandable-section/expandable-section.component.mjs +88 -0
- package/{esm2020 → esm2022}/lib/smart-expandable-section/expandable-section.model.mjs +11 -11
- package/{esm2020 → esm2022}/lib/smart-expandable-section/projects.mjs +7 -7
- package/esm2022/lib/smart-expandable-section/smart-expandable-section.module.mjs +49 -0
- package/{esm2020 → esm2022}/lib/smart-expandable-section/smart-expandable-section.service.mjs +14 -14
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.mjs +17 -17
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +2 -0
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +8 -0
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +2 -0
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionDataType.mjs +20 -20
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionField.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.mjs +27 -27
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionList.mjs +2 -0
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionOperation.mjs +32 -32
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/filterExpressionOrderBy.mjs +18 -18
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/model.mjs +15 -15
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.mjs +12 -12
- package/{esm2020 → esm2022}/lib/smart-filter/api/value/model/value.mjs +12 -12
- package/{esm2020 → esm2022}/lib/smart-filter/projects.mjs +8 -8
- package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +14 -14
- package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +165 -0
- package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +45 -45
- package/esm2022/lib/smart-filter/smart-filter/smart-filter.component.mjs +36 -0
- package/{esm2020 → esm2022}/lib/smart-filter/smart-filter/smart-filter.service.mjs +31 -31
- package/{esm2020 → esm2022}/lib/smart-filter/smart-filter.model.mjs +12 -12
- package/esm2022/lib/smart-filter/smart-filter.module.mjs +33 -0
- package/esm2022/lib/smart-filter-editor/api/api/filter.service.mjs +198 -0
- package/esm2022/lib/smart-filter-editor/api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/encoder.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.mjs +17 -17
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +13 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +2 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +8 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +2 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +7 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionDataType.mjs +20 -20
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionField.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +2 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.mjs +27 -27
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionList.mjs +2 -0
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionOperation.mjs +32 -32
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/filterExpressionOrderBy.mjs +18 -18
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/model/smartFilterType.mjs +17 -17
- package/esm2022/lib/smart-filter-editor/api/param.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/api/variables.mjs +9 -9
- package/{esm2020 → esm2022}/lib/smart-filter-editor/filterExpressionBuilderApiActions.mjs +14 -14
- package/{esm2020 → esm2022}/lib/smart-filter-editor/project.mjs +7 -7
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +73 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.mjs +40 -40
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +235 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-editor.model.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +69 -0
- package/esm2022/lib/smart-filter-editor/smart-filter-editor.service.mjs +47 -0
- package/{esm2020 → esm2022}/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.mjs +24 -24
- package/esm2022/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +57 -0
- package/{esm2020 → esm2022}/lib/smart-form/api/api/api.mjs +3 -3
- package/esm2022/lib/smart-form/api/api/default.service.mjs +133 -0
- package/esm2022/lib/smart-form/api/api.module.mjs +40 -0
- package/esm2022/lib/smart-form/api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/smart-form/api/encoder.mjs +18 -18
- package/{esm2020 → esm2022}/lib/smart-form/api/index.mjs +6 -6
- package/{esm2020 → esm2022}/lib/smart-form/api/model/models.mjs +10 -10
- package/{esm2020 → esm2022}/lib/smart-form/api/model/propertyMapping.mjs +12 -12
- package/{esm2020 → esm2022}/lib/smart-form/api/model/selectionDefinition.mjs +6 -6
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormInputMode.mjs +21 -21
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormWidgetDirection.mjs +16 -16
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartFormWidgetType.mjs +44 -44
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartLayoutDefinition.mjs +1 -1
- package/esm2022/lib/smart-form/api/model/smartMatrixModel.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartWidgetDefinition.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-form/api/model/smartWidgetHint.mjs +17 -17
- package/{esm2020 → esm2022}/lib/smart-form/api/model/valueChangeMode.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-form/api/param.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-form/api/variables.mjs +8 -8
- package/{esm2020 → esm2022}/lib/smart-form/highlightMacthingString-pipe.mjs +20 -20
- package/{esm2020 → esm2022}/lib/smart-form/projects.mjs +12 -12
- package/{esm2020 → esm2022}/lib/smart-form/services/smartform.layout-definition.service.mjs +542 -502
- package/esm2022/lib/smart-form/services/smartform.service.mjs +640 -0
- package/{esm2020 → esm2022}/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +14 -14
- package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +78 -0
- package/{esm2020 → esm2022}/lib/smart-form/smartfileuploader/smartfileuploader.model.mjs +1 -1
- package/esm2022/lib/smart-form/smartform.component.mjs +178 -0
- package/{esm2020 → esm2022}/lib/smart-form/smartform.form-model.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-form/smartform.model.mjs +37 -37
- package/esm2022/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +84 -0
- package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +735 -0
- package/esm2022/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +59 -0
- package/{esm2020 → esm2022}/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +31 -31
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/api/api.mjs +3 -3
- package/esm2022/lib/smart-grid/api/grid-api/api/grid.service.mjs +451 -0
- package/esm2022/lib/smart-grid/api/grid-api/api.module.mjs +40 -0
- package/esm2022/lib/smart-grid/api/grid-api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/encoder.mjs +18 -18
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/index.mjs +6 -6
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridColumnContentType.mjs +16 -16
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridPage.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridRow.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionChange.mjs +12 -12
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +17 -17
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +16 -16
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridView.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +7 -7
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/model/models.mjs +13 -13
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/param.mjs +1 -1
- package/{esm2020 → esm2022}/lib/smart-grid/api/grid-api/variables.mjs +8 -8
- package/{esm2020 → esm2022}/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +20 -20
- package/esm2022/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +61 -0
- package/esm2022/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +182 -0
- package/{esm2020 → esm2022}/lib/smart-grid/models/model.mjs +28 -28
- package/{esm2020 → esm2022}/lib/smart-grid/projects.mjs +8 -8
- package/{esm2020 → esm2022}/lib/smart-grid/smart-grid.component.mjs +767 -767
- package/esm2022/lib/smart-grid/smart-grid.module.mjs +76 -0
- package/esm2022/lib/smart-grid/smart-grid.service.mjs +80 -0
- package/{esm2020 → esm2022}/lib/smart-icon/projects.mjs +6 -6
- package/esm2022/lib/smart-icon/smart-icon/smart-icon.component.mjs +40 -0
- package/esm2022/lib/smart-icon/smart-icon.module.mjs +22 -0
- package/esm2022/lib/smart-icon/smart-icon.service.mjs +74 -0
- package/{esm2020 → esm2022}/lib/smart-navbar/projects.mjs +7 -7
- package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +61 -0
- package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar.model.mjs +5 -5
- package/esm2022/lib/smart-navbar/smart-navbar.module.mjs +63 -0
- package/{esm2020 → esm2022}/lib/smart-navbar/smart-navbar.service.mjs +14 -14
- package/{esm2020 → esm2022}/lib/smart-navigation/projects.mjs +5 -5
- package/{esm2020 → esm2022}/lib/smart-navigation/smart-navigation.interface.mjs +1 -1
- package/esm2022/lib/smart-navigation/smart-navigation.module.mjs +18 -0
- package/esm2022/lib/smart-navigation/smart-navigation.service.mjs +56 -0
- package/esm2022/lib/smart-ng-client.module.mjs +126 -0
- package/{esm2020 → esm2022}/lib/smart-ng-client.service.mjs +19 -19
- package/{esm2020 → esm2022}/lib/smart-subject/projects.mjs +4 -4
- package/esm2022/lib/smart-subject/smart-subject.mjs +21 -0
- package/{esm2020 → esm2022}/lib/smart-tab-group/projects.mjs +8 -8
- package/{esm2020 → esm2022}/lib/smart-tab-group/smart-tab-group.component.mjs +43 -43
- package/esm2022/lib/smart-tab-group/smart-tab-group.module.mjs +25 -0
- package/{esm2020 → esm2022}/lib/smart-tab-group/smart-tab-group.service.mjs +14 -14
- package/esm2022/lib/smart-tab-group/tab-content/tab-content.component.mjs +31 -0
- package/esm2022/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +66 -0
- package/{esm2020 → esm2022}/lib/smart-tab-group/tabTile.model.mjs +1 -1
- package/esm2022/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +43 -0
- package/{esm2020 → esm2022}/lib/smart-table/components/loading/loading.component.mjs +15 -15
- package/esm2022/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +52 -0
- package/{esm2020 → esm2022}/lib/smart-table/projects.mjs +7 -7
- package/esm2022/lib/smart-table/smarttable.component.mjs +98 -0
- package/esm2022/lib/smart-table/smarttable.model.mjs +169 -0
- package/esm2022/lib/smart-table/smarttable.module.mjs +105 -0
- package/{esm2020 → esm2022}/lib/smart-table/smarttable.service.mjs +14 -14
- package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +39 -0
- package/{esm2020 → esm2022}/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +23 -23
- package/esm2022/lib/smart-table/tables/table.mjs +520 -0
- package/{esm2020 → esm2022}/lib/smart-tree/projects.mjs +8 -8
- package/esm2022/lib/smart-tree/smarttree-generic.service.mjs +288 -0
- package/esm2022/lib/smart-tree/smarttree.component.mjs +181 -0
- package/{esm2020 → esm2022}/lib/smart-tree/smarttree.model.mjs +6 -6
- package/esm2022/lib/smart-tree/smarttree.module.mjs +60 -0
- package/{esm2020 → esm2022}/lib/smart-tree/smarttree.node.model.mjs +5 -5
- package/{esm2020 → esm2022}/lib/smart-tree/smarttree.service.interface.mjs +1 -1
- package/esm2022/lib/smart-tree/smarttree.service.mjs +47 -0
- package/esm2022/lib/smart-tree/tree-api/api/tree.service.mjs +1190 -0
- package/esm2022/lib/smart-tree/tree-api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/smart-tree/tree-api/encoder.mjs +19 -19
- package/esm2022/lib/smart-tree/tree-api/param.mjs +2 -0
- package/{esm2020 → esm2022}/lib/smart-tree/tree-api/variables.mjs +9 -9
- package/{esm2020 → esm2022}/lib/view-context/api/api/api.mjs +3 -3
- package/esm2022/lib/view-context/api/api/view.service.mjs +903 -0
- package/esm2022/lib/view-context/api/api.module.mjs +40 -0
- package/esm2022/lib/view-context/api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/view-context/api/encoder.mjs +18 -18
- package/{esm2020 → esm2022}/lib/view-context/api/index.mjs +6 -6
- package/esm2022/lib/view-context/api/model/clipboardData.mjs +13 -0
- package/{esm2020 → esm2022}/lib/view-context/api/model/closeResult.mjs +17 -17
- package/{esm2020 → esm2022}/lib/view-context/api/model/componentConstraint.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/componentModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/componentModelChange.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/dataChange.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/dataChangeEvent.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/dataChangeKind.mjs +20 -20
- package/{esm2020 → esm2022}/lib/view-context/api/model/downloadedFile.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/iconPosition.mjs +19 -19
- package/{esm2020 → esm2022}/lib/view-context/api/model/imageResource.mjs +7 -7
- package/{esm2020 → esm2022}/lib/view-context/api/model/link.mjs +19 -19
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageOption.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageOptionType.mjs +17 -17
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageResult.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageTextType.mjs +16 -16
- package/{esm2020 → esm2022}/lib/view-context/api/model/messageType.mjs +18 -18
- package/{esm2020 → esm2022}/lib/view-context/api/model/models.mjs +52 -52
- package/{esm2020 → esm2022}/lib/view-context/api/model/openPendingData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestExecutionStat.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestTrack.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/serverRequestType.mjs +23 -23
- package/{esm2020 → esm2022}/lib/view-context/api/model/smartLinkData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/statisticRecord.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/style.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiAction.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionButtonDescriptor.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionButtonType.mjs +26 -26
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionConstraint.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionDescriptor.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionDialogDescriptor.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionFeedbackType.mjs +19 -19
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionInputType.mjs +20 -20
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionRequest.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionTooltip.mjs +21 -21
- package/{esm2020 → esm2022}/lib/view-context/api/model/uiActionUploadDescriptor.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/uploadedFile.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/valueSet.mjs +1 -1
- package/esm2022/lib/view-context/api/model/view.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewApiError.mjs +12 -12
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewConstraint.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewContext.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewContextChange.mjs +1 -1
- package/esm2022/lib/view-context/api/model/viewContextData.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewContextUpdate.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewData.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewEventHandler.mjs +17 -17
- package/esm2022/lib/view-context/api/model/viewPlaceholder.mjs +13 -0
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewState.mjs +21 -21
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewStateUpdate.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/model/viewType.mjs +17 -17
- package/{esm2020 → esm2022}/lib/view-context/api/param.mjs +1 -1
- package/{esm2020 → esm2022}/lib/view-context/api/variables.mjs +8 -8
- package/{esm2020 → esm2022}/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +19 -19
- package/esm2022/lib/view-context/message-dialog/message-dialog.component.mjs +66 -0
- package/{esm2020 → esm2022}/lib/view-context/projects.mjs +16 -16
- package/{esm2020 → esm2022}/lib/view-context/property-definition-data.mjs +1 -1
- package/esm2022/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +30 -0
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +56 -56
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +48 -48
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +72 -0
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +53 -53
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +126 -0
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +52 -52
- package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +146 -0
- package/esm2022/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +180 -0
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/ui-action.model.mjs +6 -6
- package/{esm2020 → esm2022}/lib/view-context/smart-ui-action/ui-action.service.mjs +211 -211
- package/esm2022/lib/view-context/smart-view-context-dialog.service.mjs +54 -0
- package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +29 -0
- package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +69 -0
- package/esm2022/lib/view-context/smart-view-context.interceptor.mjs +39 -0
- package/esm2022/lib/view-context/smart-view-context.model.mjs +2 -0
- package/esm2022/lib/view-context/smart-view-context.module.mjs +221 -0
- package/esm2022/lib/view-context/smart-view-context.service.mjs +685 -0
- package/esm2022/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +33 -0
- package/esm2022/lib/view-context/utility/smart-object-utility.mjs +30 -0
- package/esm2022/lib/view-context/utility/smart-style-utility.mjs +68 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/api/api.mjs +4 -4
- package/esm2022/lib/view-context/value-api/api/value.service.mjs +138 -0
- package/esm2022/lib/view-context/value-api/api.module.mjs +40 -0
- package/esm2022/lib/view-context/value-api/configuration.mjs +91 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/encoder.mjs +19 -19
- package/{esm2020 → esm2022}/lib/view-context/value-api/index.mjs +7 -7
- package/esm2022/lib/view-context/value-api/model/genericValue.mjs +13 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/models.mjs +11 -11
- package/esm2022/lib/view-context/value-api/model/value.mjs +13 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetData.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetDefinition.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetDefinitionData.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +13 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +23 -23
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetExpression.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetOperand.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/model/valueSetOperation.mjs +18 -18
- package/esm2022/lib/view-context/value-api/param.mjs +2 -0
- package/{esm2020 → esm2022}/lib/view-context/value-api/variables.mjs +9 -9
- package/{esm2020 → esm2022}/projects.mjs +25 -25
- package/{esm2020 → esm2022}/smartbit4all-ng-client.mjs +4 -4
- package/{fesm2020 → fesm2022}/smartbit4all-ng-client.mjs +15917 -15886
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -0
- package/{smartbit4all-ng-client.d.ts → index.d.ts} +5 -5
- package/lib/component-factory-service/component-factory-service.module.d.ts +6 -6
- package/lib/component-factory-service/component-factory-service.service.d.ts +13 -13
- package/lib/component-factory-service/projects.d.ts +2 -2
- package/lib/session/api/api/api.d.ts +3 -3
- package/lib/session/api/api/session.service.d.ts +107 -107
- package/lib/session/api/configuration.d.ts +104 -104
- package/lib/session/api/encoder.d.ts +11 -11
- package/lib/session/api/index.d.ts +2 -2
- package/lib/session/api/model/accountInfo.d.ts +22 -22
- package/lib/session/api/model/apiError.d.ts +15 -15
- package/lib/session/api/model/authenticationProviderData.d.ts +17 -17
- package/lib/session/api/model/getAuthenticationProvidersResponse.d.ts +15 -15
- package/lib/session/api/model/models.d.ts +8 -8
- package/lib/session/api/model/refreshSessionRequest.d.ts +14 -14
- package/lib/session/api/model/session.d.ts +32 -32
- package/lib/session/api/model/sessionInfoData.d.ts +26 -26
- package/lib/session/api/model/userActivityLog.d.ts +33 -33
- package/lib/session/api/param.d.ts +37 -37
- package/lib/session/api/variables.d.ts +8 -8
- package/lib/session/cookie-service/smart-cookie.service.d.ts +129 -129
- package/lib/session/projects.d.ts +6 -6
- package/lib/session/smart-error-catching.interceptor.d.ts +13 -13
- package/lib/session/smart-header-maintainer.interceptor.d.ts +11 -11
- package/lib/session/smart-session-handler.service.d.ts +11 -11
- package/lib/session/smart-session.module.d.ts +12 -12
- package/lib/session/smart-session.service.d.ts +54 -54
- package/lib/session/smart-timer/smart-session-timer.component.d.ts +14 -14
- package/lib/session/smart-timer/smart-session-timer.service.d.ts +21 -21
- package/lib/shared/projects.d.ts +3 -3
- package/lib/shared/shared.module.d.ts +9 -9
- package/lib/shared/smart-tooltip.directive.d.ts +16 -16
- package/lib/shared/smarttable.date-pipe.d.ts +18 -18
- package/lib/smart-client/projects.d.ts +4 -4
- package/lib/smart-client/smart-authentication.service.d.ts +15 -15
- package/lib/smart-client/smart-component-api-client.d.ts +111 -111
- package/lib/smart-client/smart-file-uploader/smart-file-uploader.component.d.ts +18 -18
- package/lib/smart-client/smart.component.d.ts +30 -30
- package/lib/smart-client/smart.service.d.ts +30 -30
- package/lib/smart-component-layout/api/api/api.d.ts +3 -3
- package/lib/smart-component-layout/api/api/default.service.d.ts +33 -33
- package/lib/smart-component-layout/api/api.module.d.ts +11 -11
- package/lib/smart-component-layout/api/configuration.d.ts +104 -104
- package/lib/smart-component-layout/api/encoder.d.ts +11 -11
- package/lib/smart-component-layout/api/index.d.ts +6 -6
- package/lib/smart-component-layout/api/model/componentType.d.ts +16 -16
- package/lib/smart-component-layout/api/model/componentWidgetType.d.ts +17 -17
- package/lib/smart-component-layout/api/model/layoutDirection.d.ts +15 -15
- package/lib/smart-component-layout/api/model/models.d.ts +5 -5
- package/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.d.ts +26 -26
- package/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.d.ts +20 -20
- package/lib/smart-component-layout/api/param.d.ts +37 -37
- package/lib/smart-component-layout/api/variables.d.ts +8 -8
- package/lib/smart-component-layout/projects.d.ts +4 -4
- package/lib/smart-component-layout/smart-component-layout-utility.d.ts +14 -14
- package/lib/smart-component-layout/smart-component-layout.component.d.ts +58 -58
- package/lib/smart-component-layout/smart-component-layout.module.d.ts +13 -13
- package/lib/smart-dialog/projects.d.ts +4 -4
- package/lib/smart-dialog/smartdialog.component.d.ts +19 -19
- package/lib/smart-dialog/smartdialog.model.d.ts +67 -67
- package/lib/smart-dialog/smartdialog.module.d.ts +14 -14
- package/lib/smart-dialog/smartdialog.service.d.ts +23 -23
- package/lib/smart-expandable-section/expandable-section.component.d.ts +25 -25
- package/lib/smart-expandable-section/expandable-section.model.d.ts +42 -42
- package/lib/smart-expandable-section/projects.d.ts +4 -4
- package/lib/smart-expandable-section/smart-expandable-section.module.d.ts +15 -15
- package/lib/smart-expandable-section/smart-expandable-section.service.d.ts +6 -6
- package/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.d.ts +15 -15
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderField.d.ts +27 -27
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.d.ts +36 -36
- package/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.d.ts +27 -27
- package/lib/smart-filter/api/filter/model/filterExpressionData.d.ts +27 -27
- package/lib/smart-filter/api/filter/model/filterExpressionDataType.d.ts +18 -18
- package/lib/smart-filter/api/filter/model/filterExpressionField.d.ts +40 -40
- package/lib/smart-filter/api/filter/model/filterExpressionFieldList.d.ts +21 -21
- package/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.d.ts +25 -25
- package/lib/smart-filter/api/filter/model/filterExpressionList.d.ts +18 -18
- package/lib/smart-filter/api/filter/model/filterExpressionOperandData.d.ts +24 -24
- package/lib/smart-filter/api/filter/model/filterExpressionOperation.d.ts +30 -30
- package/lib/smart-filter/api/filter/model/filterExpressionOrderBy.d.ts +25 -25
- package/lib/smart-filter/api/filter/model/model.d.ts +15 -15
- package/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.d.ts +19 -19
- package/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.d.ts +18 -18
- package/lib/smart-filter/api/value/model/value.d.ts +29 -29
- package/lib/smart-filter/projects.d.ts +5 -5
- package/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.d.ts +8 -8
- package/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.d.ts +31 -31
- package/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.d.ts +18 -18
- package/lib/smart-filter/smart-filter/smart-filter.component.d.ts +15 -15
- package/lib/smart-filter/smart-filter/smart-filter.service.d.ts +16 -16
- package/lib/smart-filter/smart-filter.model.d.ts +25 -25
- package/lib/smart-filter/smart-filter.module.d.ts +15 -15
- package/lib/smart-filter-editor/api/api/filter.service.d.ts +57 -57
- package/lib/smart-filter-editor/api/configuration.d.ts +104 -104
- package/lib/smart-filter-editor/api/encoder.d.ts +11 -11
- package/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.d.ts +15 -15
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.d.ts +16 -16
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderField.d.ts +27 -27
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.d.ts +36 -36
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.d.ts +27 -27
- package/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.d.ts +38 -38
- package/lib/smart-filter-editor/api/model/filterExpressionData.d.ts +27 -27
- package/lib/smart-filter-editor/api/model/filterExpressionDataType.d.ts +18 -18
- package/lib/smart-filter-editor/api/model/filterExpressionField.d.ts +40 -40
- package/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.d.ts +17 -17
- package/lib/smart-filter-editor/api/model/filterExpressionFieldList.d.ts +21 -21
- package/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.d.ts +25 -25
- package/lib/smart-filter-editor/api/model/filterExpressionList.d.ts +18 -18
- package/lib/smart-filter-editor/api/model/filterExpressionOperandData.d.ts +24 -24
- package/lib/smart-filter-editor/api/model/filterExpressionOperation.d.ts +30 -30
- package/lib/smart-filter-editor/api/model/filterExpressionOrderBy.d.ts +28 -28
- package/lib/smart-filter-editor/api/model/smartFilterType.d.ts +15 -15
- package/lib/smart-filter-editor/api/param.d.ts +37 -37
- package/lib/smart-filter-editor/api/variables.d.ts +8 -8
- package/lib/smart-filter-editor/filterExpressionBuilderApiActions.d.ts +13 -13
- package/lib/smart-filter-editor/project.d.ts +7 -7
- package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.d.ts +19 -19
- package/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.d.ts +17 -17
- package/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.d.ts +40 -40
- package/lib/smart-filter-editor/smart-filter-editor.model.d.ts +4 -4
- package/lib/smart-filter-editor/smart-filter-editor.module.d.ts +18 -18
- package/lib/smart-filter-editor/smart-filter-editor.service.d.ts +35 -35
- package/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.d.ts +9 -9
- package/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.d.ts +21 -21
- package/lib/smart-form/api/api/api.d.ts +3 -3
- package/lib/smart-form/api/api/default.service.d.ts +33 -33
- package/lib/smart-form/api/api.module.d.ts +11 -11
- package/lib/smart-form/api/configuration.d.ts +104 -104
- package/lib/smart-form/api/encoder.d.ts +11 -11
- package/lib/smart-form/api/index.d.ts +6 -6
- package/lib/smart-form/api/model/models.d.ts +10 -10
- package/lib/smart-form/api/model/propertyMapping.d.ts +24 -24
- package/lib/smart-form/api/model/selectionDefinition.d.ts +41 -41
- package/lib/smart-form/api/model/smartFormInputMode.d.ts +20 -20
- package/lib/smart-form/api/model/smartFormWidgetDirection.d.ts +15 -15
- package/lib/smart-form/api/model/smartFormWidgetType.d.ts +43 -43
- package/lib/smart-form/api/model/smartLayoutDefinition.d.ts +15 -15
- package/lib/smart-form/api/model/smartMatrixModel.d.ts +29 -29
- package/lib/smart-form/api/model/smartWidgetDefinition.d.ts +106 -106
- package/lib/smart-form/api/model/smartWidgetHint.d.ts +19 -19
- package/lib/smart-form/api/model/valueChangeMode.d.ts +18 -18
- package/lib/smart-form/api/param.d.ts +37 -37
- package/lib/smart-form/api/variables.d.ts +8 -8
- package/lib/smart-form/highlightMacthingString-pipe.d.ts +7 -7
- package/lib/smart-form/projects.d.ts +9 -9
- package/lib/smart-form/services/smartform.layout-definition.service.d.ts +45 -42
- package/lib/smart-form/services/smartform.service.d.ts +46 -46
- package/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.d.ts +8 -8
- package/lib/smart-form/smartfileuploader/smartfileuploader.component.d.ts +22 -22
- package/lib/smart-form/smartfileuploader/smartfileuploader.model.d.ts +7 -7
- package/lib/smart-form/smartform.component.d.ts +40 -40
- package/lib/smart-form/smartform.form-model.d.ts +631 -631
- package/lib/smart-form/smartform.model.d.ts +120 -120
- package/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.d.ts +29 -29
- package/lib/smart-form/widgets/smartformwidget/smartformwidget.component.d.ts +132 -132
- package/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.d.ts +20 -20
- package/lib/smart-form/widgets/smartformwidget/trackCaps.directive.d.ts +9 -9
- package/lib/smart-grid/api/grid-api/api/api.d.ts +3 -3
- package/lib/smart-grid/api/grid-api/api/grid.service.d.ts +161 -161
- package/lib/smart-grid/api/grid-api/api.module.d.ts +11 -11
- package/lib/smart-grid/api/grid-api/configuration.d.ts +104 -104
- package/lib/smart-grid/api/grid-api/encoder.d.ts +11 -11
- package/lib/smart-grid/api/grid-api/index.d.ts +6 -6
- package/lib/smart-grid/api/grid-api/model/gridColumnContentType.d.ts +15 -15
- package/lib/smart-grid/api/grid-api/model/gridColumnMeta.d.ts +33 -33
- package/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.d.ts +40 -40
- package/lib/smart-grid/api/grid-api/model/gridModel.d.ts +34 -34
- package/lib/smart-grid/api/grid-api/model/gridPage.d.ts +26 -26
- package/lib/smart-grid/api/grid-api/model/gridRow.d.ts +39 -39
- package/lib/smart-grid/api/grid-api/model/gridSelectionChange.d.ts +18 -18
- package/lib/smart-grid/api/grid-api/model/gridSelectionMode.d.ts +16 -16
- package/lib/smart-grid/api/grid-api/model/gridSelectionType.d.ts +15 -15
- package/lib/smart-grid/api/grid-api/model/gridServerModel.d.ts +22 -22
- package/lib/smart-grid/api/grid-api/model/gridUpdateData.d.ts +20 -20
- package/lib/smart-grid/api/grid-api/model/gridView.d.ts +21 -21
- package/lib/smart-grid/api/grid-api/model/gridViewDescriptor.d.ts +37 -37
- package/lib/smart-grid/api/grid-api/model/models.d.ts +13 -13
- package/lib/smart-grid/api/grid-api/param.d.ts +37 -37
- package/lib/smart-grid/api/grid-api/variables.d.ts +8 -8
- package/lib/smart-grid/components/expandable-grid/expandable-grid.component.d.ts +10 -10
- package/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.d.ts +23 -23
- package/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.d.ts +46 -46
- package/lib/smart-grid/models/model.d.ts +71 -71
- package/lib/smart-grid/projects.d.ts +5 -5
- package/lib/smart-grid/smart-grid.component.d.ts +103 -103
- package/lib/smart-grid/smart-grid.module.d.ts +22 -22
- package/lib/smart-grid/smart-grid.service.d.ts +23 -23
- package/lib/smart-icon/projects.d.ts +3 -3
- package/lib/smart-icon/smart-icon/smart-icon.component.d.ts +16 -16
- package/lib/smart-icon/smart-icon.module.d.ts +10 -10
- package/lib/smart-icon/smart-icon.service.d.ts +28 -28
- package/lib/smart-navbar/projects.d.ts +4 -4
- package/lib/smart-navbar/smart-navbar.component.d.ts +20 -20
- package/lib/smart-navbar/smart-navbar.model.d.ts +48 -48
- package/lib/smart-navbar/smart-navbar.module.d.ts +18 -18
- package/lib/smart-navbar/smart-navbar.service.d.ts +6 -6
- package/lib/smart-navigation/projects.d.ts +2 -2
- package/lib/smart-navigation/smart-navigation.interface.d.ts +11 -11
- package/lib/smart-navigation/smart-navigation.module.d.ts +6 -6
- package/lib/smart-navigation/smart-navigation.service.d.ts +18 -18
- package/lib/smart-ng-client.module.d.ts +24 -24
- package/lib/smart-ng-client.service.d.ts +10 -10
- package/lib/smart-subject/projects.d.ts +1 -1
- package/lib/smart-subject/smart-subject.d.ts +6 -6
- package/lib/smart-tab-group/projects.d.ts +5 -5
- package/lib/smart-tab-group/smart-tab-group.component.d.ts +21 -21
- package/lib/smart-tab-group/smart-tab-group.module.d.ts +13 -13
- package/lib/smart-tab-group/smart-tab-group.service.d.ts +6 -6
- package/lib/smart-tab-group/tab-content/tab-content.component.d.ts +14 -14
- package/lib/smart-tab-group/tab-group-simplified/tab-group.component.d.ts +29 -29
- package/lib/smart-tab-group/tabTile.model.d.ts +8 -8
- package/lib/smart-table/components/default-actions-popup/default-actions-popup.component.d.ts +19 -19
- package/lib/smart-table/components/loading/loading.component.d.ts +8 -8
- package/lib/smart-table/directives/mat-context-menu-trigger-for.directive.d.ts +10 -10
- package/lib/smart-table/projects.d.ts +4 -4
- package/lib/smart-table/smarttable.component.d.ts +34 -34
- package/lib/smart-table/smarttable.model.d.ts +198 -198
- package/lib/smart-table/smarttable.module.d.ts +28 -28
- package/lib/smart-table/smarttable.service.d.ts +6 -6
- package/lib/smart-table/tables/material-table/material-table.component.d.ts +8 -8
- package/lib/smart-table/tables/mobile-table/mobile-table.component.d.ts +8 -8
- package/lib/smart-table/tables/table.d.ts +85 -85
- package/lib/smart-tree/projects.d.ts +5 -5
- package/lib/smart-tree/smarttree-generic.service.d.ts +49 -49
- package/lib/smart-tree/smarttree.component.d.ts +42 -42
- package/lib/smart-tree/smarttree.model.d.ts +41 -41
- package/lib/smart-tree/smarttree.module.d.ts +15 -15
- package/lib/smart-tree/smarttree.node.model.d.ts +13 -13
- package/lib/smart-tree/smarttree.service.d.ts +24 -24
- package/lib/smart-tree/smarttree.service.interface.d.ts +43 -43
- package/lib/smart-tree/tree-api/api/tree.service.d.ts +336 -336
- package/lib/smart-tree/tree-api/configuration.d.ts +104 -104
- package/lib/smart-tree/tree-api/encoder.d.ts +11 -11
- package/lib/smart-tree/tree-api/param.d.ts +37 -37
- package/lib/smart-tree/tree-api/variables.d.ts +8 -8
- package/lib/view-context/api/api/api.d.ts +3 -3
- package/lib/view-context/api/api/view.service.d.ts +331 -331
- package/lib/view-context/api/api.module.d.ts +11 -11
- package/lib/view-context/api/configuration.d.ts +104 -104
- package/lib/view-context/api/encoder.d.ts +11 -11
- package/lib/view-context/api/index.d.ts +6 -6
- package/lib/view-context/api/model/clipboardData.d.ts +20 -20
- package/lib/view-context/api/model/closeResult.d.ts +16 -16
- package/lib/view-context/api/model/componentConstraint.d.ts +25 -25
- package/lib/view-context/api/model/componentModel.d.ts +42 -42
- package/lib/view-context/api/model/componentModelChange.d.ts +29 -29
- package/lib/view-context/api/model/dataChange.d.ts +25 -25
- package/lib/view-context/api/model/dataChangeEvent.d.ts +31 -31
- package/lib/view-context/api/model/dataChangeKind.d.ts +19 -19
- package/lib/view-context/api/model/downloadedFile.d.ts +19 -19
- package/lib/view-context/api/model/iconPosition.d.ts +18 -18
- package/lib/view-context/api/model/imageResource.d.ts +26 -26
- package/lib/view-context/api/model/link.d.ts +35 -35
- package/lib/view-context/api/model/messageData.d.ts +29 -29
- package/lib/view-context/api/model/messageOption.d.ts +18 -18
- package/lib/view-context/api/model/messageOptionType.d.ts +16 -16
- package/lib/view-context/api/model/messageResult.d.ts +16 -16
- package/lib/view-context/api/model/messageTextType.d.ts +15 -15
- package/lib/view-context/api/model/messageType.d.ts +17 -17
- package/lib/view-context/api/model/models.d.ts +51 -51
- package/lib/view-context/api/model/openPendingData.d.ts +29 -29
- package/lib/view-context/api/model/serverRequestExecutionStat.d.ts +40 -40
- package/lib/view-context/api/model/serverRequestTrack.d.ts +60 -60
- package/lib/view-context/api/model/serverRequestType.d.ts +22 -22
- package/lib/view-context/api/model/smartLinkData.d.ts +21 -21
- package/lib/view-context/api/model/statisticRecord.d.ts +36 -36
- package/lib/view-context/api/model/style.d.ts +21 -21
- package/lib/view-context/api/model/uiAction.d.ts +48 -48
- package/lib/view-context/api/model/uiActionButtonDescriptor.d.ts +18 -18
- package/lib/view-context/api/model/uiActionButtonType.d.ts +25 -25
- package/lib/view-context/api/model/uiActionConstraint.d.ts +22 -22
- package/lib/view-context/api/model/uiActionDescriptor.d.ts +36 -36
- package/lib/view-context/api/model/uiActionDialogDescriptor.d.ts +23 -23
- package/lib/view-context/api/model/uiActionFeedbackType.d.ts +18 -18
- package/lib/view-context/api/model/uiActionInputType.d.ts +19 -19
- package/lib/view-context/api/model/uiActionRequest.d.ts +28 -28
- package/lib/view-context/api/model/uiActionTooltip.d.ts +25 -25
- package/lib/view-context/api/model/uiActionUploadDescriptor.d.ts +23 -23
- package/lib/view-context/api/model/uploadedFile.d.ts +19 -19
- package/lib/view-context/api/model/valueSet.d.ts +20 -20
- package/lib/view-context/api/model/view.d.ts +80 -80
- package/lib/view-context/api/model/viewApiError.d.ts +18 -18
- package/lib/view-context/api/model/viewConstraint.d.ts +18 -18
- package/lib/view-context/api/model/viewContext.d.ts +30 -30
- package/lib/view-context/api/model/viewContextChange.d.ts +24 -24
- package/lib/view-context/api/model/viewContextData.d.ts +25 -25
- package/lib/view-context/api/model/viewContextUpdate.d.ts +22 -22
- package/lib/view-context/api/model/viewData.d.ts +25 -25
- package/lib/view-context/api/model/viewEventHandler.d.ts +30 -30
- package/lib/view-context/api/model/viewPlaceholder.d.ts +21 -21
- package/lib/view-context/api/model/viewState.d.ts +20 -20
- package/lib/view-context/api/model/viewStateUpdate.d.ts +22 -22
- package/lib/view-context/api/model/viewType.d.ts +16 -16
- package/lib/view-context/api/param.d.ts +37 -37
- package/lib/view-context/api/variables.d.ts +8 -8
- package/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.d.ts +9 -9
- package/lib/view-context/message-dialog/message-dialog.component.d.ts +18 -18
- package/lib/view-context/projects.d.ts +13 -13
- package/lib/view-context/property-definition-data.d.ts +5 -5
- package/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.d.ts +13 -13
- package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.d.ts +25 -25
- package/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.d.ts +18 -18
- package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.d.ts +30 -30
- package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.d.ts +22 -22
- package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.d.ts +29 -29
- package/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.d.ts +25 -25
- package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +36 -36
- package/lib/view-context/smart-ui-action/ui-action.descriptor.service.d.ts +23 -23
- package/lib/view-context/smart-ui-action/ui-action.model.d.ts +43 -43
- package/lib/view-context/smart-ui-action/ui-action.service.d.ts +39 -39
- package/lib/view-context/smart-view-context-dialog.service.d.ts +16 -16
- package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.d.ts +13 -13
- package/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.d.ts +19 -19
- package/lib/view-context/smart-view-context.interceptor.d.ts +13 -13
- package/lib/view-context/smart-view-context.model.d.ts +31 -31
- package/lib/view-context/smart-view-context.module.d.ts +46 -47
- package/lib/view-context/smart-view-context.service.d.ts +119 -119
- package/lib/view-context/smart-view-redirect/smart-view-redirect.d.ts +14 -14
- package/lib/view-context/utility/smart-object-utility.d.ts +4 -4
- package/lib/view-context/utility/smart-style-utility.d.ts +12 -12
- package/lib/view-context/value-api/api/api.d.ts +3 -3
- package/lib/view-context/value-api/api/value.service.d.ts +35 -35
- package/lib/view-context/value-api/api.module.d.ts +11 -11
- package/lib/view-context/value-api/configuration.d.ts +104 -104
- package/lib/view-context/value-api/encoder.d.ts +11 -11
- package/lib/view-context/value-api/index.d.ts +6 -6
- package/lib/view-context/value-api/model/genericValue.d.ts +33 -33
- package/lib/view-context/value-api/model/models.d.ts +10 -10
- package/lib/view-context/value-api/model/value.d.ts +29 -29
- package/lib/view-context/value-api/model/valueSetData.d.ts +41 -41
- package/lib/view-context/value-api/model/valueSetDefinition.d.ts +16 -16
- package/lib/view-context/value-api/model/valueSetDefinitionData.d.ts +53 -53
- package/lib/view-context/value-api/model/valueSetDefinitionIdentifier.d.ts +21 -21
- package/lib/view-context/value-api/model/valueSetDefinitionKind.d.ts +22 -22
- package/lib/view-context/value-api/model/valueSetExpression.d.ts +18 -18
- package/lib/view-context/value-api/model/valueSetOperand.d.ts +25 -25
- package/lib/view-context/value-api/model/valueSetOperation.d.ts +17 -17
- package/lib/view-context/value-api/param.d.ts +37 -37
- package/lib/view-context/value-api/variables.d.ts +8 -8
- package/package.json +14 -20
- package/projects.d.ts +22 -22
- package/smartbit4all-ng-client-4.0.0.tgz +0 -0
- package/esm2020/lib/component-factory-service/component-factory-service.module.mjs +0 -17
- package/esm2020/lib/session/api/api/session.service.mjs +0 -306
- package/esm2020/lib/session/api/configuration.mjs +0 -91
- package/esm2020/lib/session/api/model/sessionInfoData.mjs +0 -2
- package/esm2020/lib/session/cookie-service/smart-cookie.service.mjs +0 -225
- package/esm2020/lib/session/smart-error-catching.interceptor.mjs +0 -71
- package/esm2020/lib/session/smart-header-maintainer.interceptor.mjs +0 -46
- package/esm2020/lib/session/smart-session.module.mjs +0 -58
- package/esm2020/lib/session/smart-session.service.mjs +0 -225
- package/esm2020/lib/session/smart-timer/smart-session-timer.service.mjs +0 -58
- package/esm2020/lib/shared/shared.module.mjs +0 -19
- package/esm2020/lib/shared/smart-tooltip.directive.mjs +0 -58
- package/esm2020/lib/smart-client/smart-component-api-client.mjs +0 -717
- package/esm2020/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +0 -53
- package/esm2020/lib/smart-component-layout/api/api/default.service.mjs +0 -133
- package/esm2020/lib/smart-component-layout/api/api.module.mjs +0 -40
- package/esm2020/lib/smart-component-layout/api/configuration.mjs +0 -91
- package/esm2020/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +0 -2
- package/esm2020/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +0 -2
- package/esm2020/lib/smart-component-layout/api/param.mjs +0 -2
- package/esm2020/lib/smart-component-layout/smart-component-layout-utility.mjs +0 -94
- package/esm2020/lib/smart-component-layout/smart-component-layout.component.mjs +0 -259
- package/esm2020/lib/smart-component-layout/smart-component-layout.module.mjs +0 -43
- package/esm2020/lib/smart-dialog/smartdialog.component.mjs +0 -54
- package/esm2020/lib/smart-dialog/smartdialog.module.mjs +0 -48
- package/esm2020/lib/smart-expandable-section/expandable-section.component.mjs +0 -88
- package/esm2020/lib/smart-expandable-section/smart-expandable-section.module.mjs +0 -51
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +0 -2
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +0 -8
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +0 -2
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionData.mjs +0 -2
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +0 -2
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionList.mjs +0 -2
- package/esm2020/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +0 -2
- package/esm2020/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +0 -165
- package/esm2020/lib/smart-filter/smart-filter/smart-filter.component.mjs +0 -36
- package/esm2020/lib/smart-filter/smart-filter.module.mjs +0 -33
- package/esm2020/lib/smart-filter-editor/api/api/filter.service.mjs +0 -198
- package/esm2020/lib/smart-filter-editor/api/configuration.mjs +0 -91
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +0 -13
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +0 -8
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +0 -7
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionData.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionList.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/api/param.mjs +0 -2
- package/esm2020/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +0 -73
- package/esm2020/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +0 -235
- package/esm2020/lib/smart-filter-editor/smart-filter-editor.module.mjs +0 -71
- package/esm2020/lib/smart-filter-editor/smart-filter-editor.service.mjs +0 -47
- package/esm2020/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +0 -57
- package/esm2020/lib/smart-form/api/api/default.service.mjs +0 -133
- package/esm2020/lib/smart-form/api/api.module.mjs +0 -40
- package/esm2020/lib/smart-form/api/configuration.mjs +0 -91
- package/esm2020/lib/smart-form/api/model/smartMatrixModel.mjs +0 -2
- package/esm2020/lib/smart-form/services/smartform.service.mjs +0 -640
- package/esm2020/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +0 -78
- package/esm2020/lib/smart-form/smartform.component.mjs +0 -178
- package/esm2020/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +0 -84
- package/esm2020/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +0 -736
- package/esm2020/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +0 -59
- package/esm2020/lib/smart-grid/api/grid-api/api/grid.service.mjs +0 -451
- package/esm2020/lib/smart-grid/api/grid-api/api.module.mjs +0 -40
- package/esm2020/lib/smart-grid/api/grid-api/configuration.mjs +0 -91
- package/esm2020/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +0 -61
- package/esm2020/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +0 -182
- package/esm2020/lib/smart-grid/smart-grid.module.mjs +0 -78
- package/esm2020/lib/smart-grid/smart-grid.service.mjs +0 -80
- package/esm2020/lib/smart-icon/smart-icon/smart-icon.component.mjs +0 -40
- package/esm2020/lib/smart-icon/smart-icon.module.mjs +0 -22
- package/esm2020/lib/smart-icon/smart-icon.service.mjs +0 -74
- package/esm2020/lib/smart-navbar/smart-navbar.component.mjs +0 -61
- package/esm2020/lib/smart-navbar/smart-navbar.module.mjs +0 -65
- package/esm2020/lib/smart-navigation/smart-navigation.module.mjs +0 -18
- package/esm2020/lib/smart-navigation/smart-navigation.service.mjs +0 -56
- package/esm2020/lib/smart-ng-client.module.mjs +0 -128
- package/esm2020/lib/smart-subject/smart-subject.mjs +0 -21
- package/esm2020/lib/smart-tab-group/smart-tab-group.module.mjs +0 -25
- package/esm2020/lib/smart-tab-group/tab-content/tab-content.component.mjs +0 -31
- package/esm2020/lib/smart-tab-group/tab-group-simplified/tab-group.component.mjs +0 -66
- package/esm2020/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +0 -43
- package/esm2020/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +0 -52
- package/esm2020/lib/smart-table/smarttable.component.mjs +0 -98
- package/esm2020/lib/smart-table/smarttable.model.mjs +0 -169
- package/esm2020/lib/smart-table/smarttable.module.mjs +0 -107
- package/esm2020/lib/smart-table/tables/material-table/material-table.component.mjs +0 -39
- package/esm2020/lib/smart-table/tables/table.mjs +0 -520
- package/esm2020/lib/smart-tree/smarttree-generic.service.mjs +0 -288
- package/esm2020/lib/smart-tree/smarttree.component.mjs +0 -181
- package/esm2020/lib/smart-tree/smarttree.module.mjs +0 -62
- package/esm2020/lib/smart-tree/smarttree.service.mjs +0 -47
- package/esm2020/lib/smart-tree/tree-api/api/tree.service.mjs +0 -1190
- package/esm2020/lib/smart-tree/tree-api/configuration.mjs +0 -91
- package/esm2020/lib/smart-tree/tree-api/param.mjs +0 -2
- package/esm2020/lib/view-context/api/api/view.service.mjs +0 -903
- package/esm2020/lib/view-context/api/api.module.mjs +0 -40
- package/esm2020/lib/view-context/api/configuration.mjs +0 -91
- package/esm2020/lib/view-context/api/model/clipboardData.mjs +0 -13
- package/esm2020/lib/view-context/api/model/view.mjs +0 -2
- package/esm2020/lib/view-context/api/model/viewContext.mjs +0 -2
- package/esm2020/lib/view-context/api/model/viewContextData.mjs +0 -2
- package/esm2020/lib/view-context/api/model/viewPlaceholder.mjs +0 -13
- package/esm2020/lib/view-context/message-dialog/message-dialog.component.mjs +0 -66
- package/esm2020/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +0 -30
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +0 -72
- package/esm2020/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +0 -126
- package/esm2020/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +0 -146
- package/esm2020/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +0 -180
- package/esm2020/lib/view-context/smart-view-context-dialog.service.mjs +0 -54
- package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +0 -29
- package/esm2020/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +0 -69
- package/esm2020/lib/view-context/smart-view-context.interceptor.mjs +0 -39
- package/esm2020/lib/view-context/smart-view-context.model.mjs +0 -2
- package/esm2020/lib/view-context/smart-view-context.module.mjs +0 -222
- package/esm2020/lib/view-context/smart-view-context.service.mjs +0 -685
- package/esm2020/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +0 -33
- package/esm2020/lib/view-context/utility/smart-object-utility.mjs +0 -30
- package/esm2020/lib/view-context/utility/smart-style-utility.mjs +0 -68
- package/esm2020/lib/view-context/value-api/api/value.service.mjs +0 -138
- package/esm2020/lib/view-context/value-api/api.module.mjs +0 -40
- package/esm2020/lib/view-context/value-api/configuration.mjs +0 -91
- package/esm2020/lib/view-context/value-api/model/genericValue.mjs +0 -13
- package/esm2020/lib/view-context/value-api/model/value.mjs +0 -13
- package/esm2020/lib/view-context/value-api/model/valueSetDefinition.mjs +0 -2
- package/esm2020/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +0 -13
- package/esm2020/lib/view-context/value-api/model/valueSetOperand.mjs +0 -2
- package/esm2020/lib/view-context/value-api/param.mjs +0 -2
- package/fesm2015/smartbit4all-ng-client.mjs +0 -16397
- package/fesm2015/smartbit4all-ng-client.mjs.map +0 -1
- package/fesm2020/smartbit4all-ng-client.mjs.map +0 -1
- package/smartbit4all-ng-client-3.3.205.tgz +0 -0
- package/src/lib/component-factory-service/README.md +0 -99
- package/src/lib/session/api/README.md +0 -226
- package/src/lib/smart-component-layout/README.md +0 -31
- package/src/lib/smart-component-layout/api/README.md +0 -226
- package/src/lib/smart-dialog/README.md +0 -197
- package/src/lib/smart-expandable-section/README.md +0 -249
- package/src/lib/smart-filter/README.md +0 -101
- package/src/lib/smart-filter-editor/api/README.md +0 -226
- package/src/lib/smart-form/README.md +0 -1178
- package/src/lib/smart-form/api/README.md +0 -226
- package/src/lib/smart-grid/README.md +0 -24
- package/src/lib/smart-grid/api/grid-api/README.md +0 -226
- package/src/lib/smart-icon/README.md +0 -116
- package/src/lib/smart-navbar/README.md +0 -119
- package/src/lib/smart-navigation/README.md +0 -141
- package/src/lib/smart-tab-group/README.md +0 -155
- package/src/lib/smart-table/README.md +0 -667
- package/src/lib/smart-tree/tree-api/README.md +0 -226
- package/src/lib/view-context/api/README.md +0 -226
- package/src/lib/view-context/value-api/README.md +0 -226
|
@@ -0,0 +1,685 @@
|
|
|
1
|
+
import { Injectable, InjectionToken } from '@angular/core';
|
|
2
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import { LinkTargetEnum, ViewState, ViewType, } from './api';
|
|
4
|
+
import { MessageDialogComponent } from './message-dialog/message-dialog.component';
|
|
5
|
+
import { SmartSubject } from '../smart-subject/projects';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "./api";
|
|
8
|
+
import * as i2 from "../session/smart-session.service";
|
|
9
|
+
import * as i3 from "../smart-navigation/projects";
|
|
10
|
+
import * as i4 from "./smart-view-context-dialog.service";
|
|
11
|
+
export const SmartViewContextErrorDialogButtonLabel = 'SmartViewContextErrorDialogButtonLabel';
|
|
12
|
+
export const SmartViewContextErrorDialogTitle = 'SmartViewContextErrorDialogTitle';
|
|
13
|
+
export const SmartViewContextErrorDialogMessage = 'SmartViewContextErrorDialogMessage';
|
|
14
|
+
export const DefaultUiActionCode_CLOSE = 'DEFAULT_CLOSE';
|
|
15
|
+
export const DIALOG_DISABLE_CLOSE = new InjectionToken('dialogDisableClose');
|
|
16
|
+
export class SmartViewContextService {
|
|
17
|
+
set translateService(translateService) {
|
|
18
|
+
this._translateService = translateService;
|
|
19
|
+
this.translateServiceChanged.next();
|
|
20
|
+
this.translateServiceChanged.complete();
|
|
21
|
+
}
|
|
22
|
+
get translateService() {
|
|
23
|
+
if (this._translateService) {
|
|
24
|
+
return this._translateService;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
constructor(view, session, navigation, dialog, apiQueueService, inject) {
|
|
29
|
+
this.view = view;
|
|
30
|
+
this.session = session;
|
|
31
|
+
this.navigation = navigation;
|
|
32
|
+
this.dialog = dialog;
|
|
33
|
+
this.apiQueueService = apiQueueService;
|
|
34
|
+
this.inject = inject;
|
|
35
|
+
this.viewContextUuidName = 'viewContextUuid';
|
|
36
|
+
this.viewContextUuidHeaderName = 'viewContextUuid';
|
|
37
|
+
this.pageNamePrefix = 'page.';
|
|
38
|
+
this.componentNamePrefix = 'component.';
|
|
39
|
+
this.viewHandlers = new Array();
|
|
40
|
+
this.openedViewUuids = new Array();
|
|
41
|
+
this.openedViewData = new Array();
|
|
42
|
+
this._destroy$ = new Subject();
|
|
43
|
+
this.uuidOfPageHasBeenChanged = new SmartSubject(this._destroy$);
|
|
44
|
+
this.viewContextHasBeenSynced = new SmartSubject(this._destroy$);
|
|
45
|
+
this.openSmartLink = new SmartSubject(this._destroy$);
|
|
46
|
+
this.isOpeningSmartLink = false;
|
|
47
|
+
this.dialogRefs = [];
|
|
48
|
+
this.smartApiClients = new Map();
|
|
49
|
+
this.translateServiceChanged = new SmartSubject(this._destroy$);
|
|
50
|
+
}
|
|
51
|
+
ngOnDestroy() {
|
|
52
|
+
this._destroy$.next();
|
|
53
|
+
this._destroy$.complete();
|
|
54
|
+
}
|
|
55
|
+
follow(uuid, detectChange) {
|
|
56
|
+
this.smartApiClients.set(uuid, detectChange);
|
|
57
|
+
}
|
|
58
|
+
unfollow(uuid) {
|
|
59
|
+
this.smartApiClients.delete(uuid);
|
|
60
|
+
}
|
|
61
|
+
setActionDescriptors(actionDescriptors) {
|
|
62
|
+
this.actionDescriptors = actionDescriptors;
|
|
63
|
+
}
|
|
64
|
+
getActionDescriptors() {
|
|
65
|
+
if (!this.actionDescriptors) {
|
|
66
|
+
console.error('No action descriptors has been set to ViewContext.');
|
|
67
|
+
}
|
|
68
|
+
return this.actionDescriptors;
|
|
69
|
+
}
|
|
70
|
+
setViewHandlers(viewHandlers) {
|
|
71
|
+
this.viewHandlers = viewHandlers;
|
|
72
|
+
}
|
|
73
|
+
setViewApiErrors(viewApiErrors) {
|
|
74
|
+
this.smartViewContextApiErrors = viewApiErrors;
|
|
75
|
+
}
|
|
76
|
+
setMessageDialogName(messageDialogName) {
|
|
77
|
+
this.messageDialogname = messageDialogName;
|
|
78
|
+
this.viewHandlers.push({
|
|
79
|
+
name: messageDialogName,
|
|
80
|
+
component: MessageDialogComponent,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
setUpUrlForViewService() {
|
|
84
|
+
this.view.configuration.basePath = this.url;
|
|
85
|
+
}
|
|
86
|
+
setUrl(url) {
|
|
87
|
+
this.url = url + '/view';
|
|
88
|
+
this.setUpUrlForViewService();
|
|
89
|
+
}
|
|
90
|
+
async getAndSyncViewContext(uuid) {
|
|
91
|
+
if (!uuid) {
|
|
92
|
+
uuid = this.getViewContextUuid();
|
|
93
|
+
}
|
|
94
|
+
await this.getViewContext(uuid).then(() => {
|
|
95
|
+
this.syncView();
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async getViewContext(uuid) {
|
|
99
|
+
this.viewContext = await this.view.getViewContext(uuid).toPromise();
|
|
100
|
+
if (!this.viewContext) {
|
|
101
|
+
throw new Error('ViewContext does not exist with the given uuid.');
|
|
102
|
+
}
|
|
103
|
+
return this.viewContext;
|
|
104
|
+
}
|
|
105
|
+
async getViewContextDataByPageName(pageName) {
|
|
106
|
+
if (!this.viewContext) {
|
|
107
|
+
await this.getViewContext(this.getViewContextUuid());
|
|
108
|
+
}
|
|
109
|
+
let pageUuid = this.getUuidOfPage(pageName);
|
|
110
|
+
let viewContextByPageName = this.viewContext?.views.find((view) => view.uuid === pageUuid);
|
|
111
|
+
if (!viewContextByPageName) {
|
|
112
|
+
throw new Error(`The ViewData of ${pageName} is not found!`);
|
|
113
|
+
}
|
|
114
|
+
return viewContextByPageName;
|
|
115
|
+
}
|
|
116
|
+
async updateViewContext(viewContextUpdate) {
|
|
117
|
+
this.viewContext = await this.view.updateViewContext(viewContextUpdate).toPromise();
|
|
118
|
+
return this.viewContext;
|
|
119
|
+
}
|
|
120
|
+
clearSessionStorage() {
|
|
121
|
+
sessionStorage.clear();
|
|
122
|
+
this.openedViewData = [];
|
|
123
|
+
this.openedViewUuids = [];
|
|
124
|
+
}
|
|
125
|
+
async startViewContext() {
|
|
126
|
+
this.clearSessionStorage();
|
|
127
|
+
let newViewContext = await this.view
|
|
128
|
+
.createViewContext()
|
|
129
|
+
.toPromise();
|
|
130
|
+
if (!newViewContext) {
|
|
131
|
+
throw new Error('No ViewContext was created');
|
|
132
|
+
}
|
|
133
|
+
this.viewContext = newViewContext;
|
|
134
|
+
this.setViewContextUuid(newViewContext.uuid);
|
|
135
|
+
return this.viewContext;
|
|
136
|
+
}
|
|
137
|
+
async initialize(uuid) {
|
|
138
|
+
if (this.initializeRunning) {
|
|
139
|
+
return this.initializeRunning.toPromise();
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
this.initializeRunning = new SmartSubject(this._destroy$);
|
|
143
|
+
try {
|
|
144
|
+
if (this.viewHandlers.length === 0) {
|
|
145
|
+
throw new Error("There aren't any viewHandlers in SmartViewContextService! Provide some to use its functions.");
|
|
146
|
+
}
|
|
147
|
+
if (!this.messageDialogname) {
|
|
148
|
+
throw new Error('The messageDialogName provided by the backend has not been set.');
|
|
149
|
+
}
|
|
150
|
+
if (uuid) {
|
|
151
|
+
this.setViewContextUuid(uuid);
|
|
152
|
+
try {
|
|
153
|
+
await this.getViewContext(uuid);
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
await this.startViewContext();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
await this.startViewContext();
|
|
161
|
+
}
|
|
162
|
+
return this.viewContext;
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
this.initializeRunning.next(this.viewContext);
|
|
166
|
+
this.initializeRunning.complete();
|
|
167
|
+
this.initializeRunning = undefined;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
openView(view) {
|
|
172
|
+
let alreadyOpened = this.openedViewUuids.some((uuid) => uuid === view.uuid);
|
|
173
|
+
if (alreadyOpened)
|
|
174
|
+
return undefined;
|
|
175
|
+
let viewHandler = this.viewHandlers.find((handler) => handler.name === view.viewName);
|
|
176
|
+
if (!viewHandler) {
|
|
177
|
+
throw new Error(`SmartViewHandlerModel was not found by view name: ${view.viewName}`);
|
|
178
|
+
}
|
|
179
|
+
if (view.type === ViewType.DIALOG) {
|
|
180
|
+
if (!viewHandler.component) {
|
|
181
|
+
throw new Error(`Component is undefined in SmartViewHandlerModel with name: ${view.viewName}`);
|
|
182
|
+
}
|
|
183
|
+
let refIsAlradyAdded = this.dialogRefs.some((ref) => ref.uuid === view.uuid);
|
|
184
|
+
if (!refIsAlradyAdded) {
|
|
185
|
+
let dialogRef;
|
|
186
|
+
try {
|
|
187
|
+
this.openedViewUuids.push(view.uuid);
|
|
188
|
+
this.openedViewData.push(view);
|
|
189
|
+
this.setUuidOfPage(view.viewName, view.uuid, viewHandler.componentName);
|
|
190
|
+
dialogRef = this.dialog.openComponentAsDialog(viewHandler.component, viewHandler.name);
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
const index = this.openedViewUuids.indexOf(view.uuid);
|
|
194
|
+
if (index >= 0) {
|
|
195
|
+
this.openedViewUuids.splice(index, 1);
|
|
196
|
+
this.openedViewData.splice(index, 1);
|
|
197
|
+
this.clearUuidOfPage(view.viewName, viewHandler.componentName);
|
|
198
|
+
}
|
|
199
|
+
this.setUuidOfPage(view.viewName, view.uuid, viewHandler.componentName);
|
|
200
|
+
}
|
|
201
|
+
let dialogDisableClose = true;
|
|
202
|
+
let isMessageDialog = view.viewName === this.messageDialogname;
|
|
203
|
+
if (!isMessageDialog) {
|
|
204
|
+
try {
|
|
205
|
+
dialogDisableClose = this.inject.get(DIALOG_DISABLE_CLOSE);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
console.error('Error during reading DIALOG_DISABLE_CLOSE');
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
dialogRef.disableClose = dialogDisableClose;
|
|
212
|
+
// if (isMessageDialog) {
|
|
213
|
+
// if (view.message?.options && view.message.options.length) {
|
|
214
|
+
// }
|
|
215
|
+
// }
|
|
216
|
+
if (!dialogDisableClose) {
|
|
217
|
+
dialogRef
|
|
218
|
+
.afterClosed()
|
|
219
|
+
.pipe(takeUntil(this._destroy$))
|
|
220
|
+
.subscribe(() => {
|
|
221
|
+
this.performAction(view.uuid, { code: DefaultUiActionCode_CLOSE, params: {} });
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
this.dialogRefs.push({
|
|
225
|
+
uuid: view.uuid,
|
|
226
|
+
dialogRef,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else if (view.type === ViewType.NORMAL) {
|
|
231
|
+
if (viewHandler.route === undefined) {
|
|
232
|
+
throw new Error(`Route is undefined in SmartViewHandlerModel with name: ${view.viewName}`);
|
|
233
|
+
}
|
|
234
|
+
this.navigation.navigateTo(viewHandler.route.split('/'));
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
throw new Error('The type of the view and its viewHandler is not the same!');
|
|
238
|
+
}
|
|
239
|
+
view.state = ViewState.OPENED;
|
|
240
|
+
this.openedViewUuids.push(view.uuid);
|
|
241
|
+
this.openedViewData.push(view);
|
|
242
|
+
this.setUuidOfPage(view.viewName, view.uuid, viewHandler.componentName);
|
|
243
|
+
this.uuidOfPageHasBeenChanged.next(view.viewName);
|
|
244
|
+
return {
|
|
245
|
+
state: ViewState.OPENED,
|
|
246
|
+
uuid: view.uuid,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
closeView(view) {
|
|
250
|
+
let viewHandler = this.viewHandlers.find((handler) => handler.name === view.viewName);
|
|
251
|
+
if (!viewHandler) {
|
|
252
|
+
throw new Error(`SmartViewHandlerModel was not found by view name: ${view.viewName}`);
|
|
253
|
+
}
|
|
254
|
+
if (view.type === ViewType.DIALOG) {
|
|
255
|
+
let dialogRef = this.dialogRefs.find((dialogRef) => dialogRef.uuid === view.uuid);
|
|
256
|
+
if (dialogRef) {
|
|
257
|
+
dialogRef.dialogRef.close();
|
|
258
|
+
let index = this.dialogRefs.indexOf(dialogRef);
|
|
259
|
+
this.dialogRefs.splice(index, 1);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
console.log('DialogRef is not found by uuid.');
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
else if (view.type === ViewType.NORMAL) {
|
|
266
|
+
// TODO: close normal page???
|
|
267
|
+
// this.navigation.navigateTo(viewHandler.route.split("/"));
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
throw new Error('The type of the view and its viewHandler is not the same!');
|
|
271
|
+
}
|
|
272
|
+
view.state = ViewState.CLOSED;
|
|
273
|
+
const index = this.openedViewUuids.indexOf(view.uuid);
|
|
274
|
+
if (index >= 0) {
|
|
275
|
+
this.openedViewUuids.splice(index, 1);
|
|
276
|
+
this.openedViewData.splice(index, 1);
|
|
277
|
+
this.clearUuidOfPage(view.viewName, viewHandler.componentName);
|
|
278
|
+
}
|
|
279
|
+
return {
|
|
280
|
+
state: ViewState.CLOSED,
|
|
281
|
+
uuid: view.uuid,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
sendViewContextUpdates(updatesToSend) {
|
|
285
|
+
const updates = [];
|
|
286
|
+
updatesToSend.forEach((update) => {
|
|
287
|
+
if (update !== undefined && update !== null)
|
|
288
|
+
updates.push(update);
|
|
289
|
+
});
|
|
290
|
+
if (updates.length > 0) {
|
|
291
|
+
this.updateViewContext({
|
|
292
|
+
updates,
|
|
293
|
+
uuid: this.viewContext?.uuid,
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
async restoreViews(uuid) {
|
|
298
|
+
const updates = [];
|
|
299
|
+
if (!this.viewContext) {
|
|
300
|
+
await this.getViewContext(uuid);
|
|
301
|
+
}
|
|
302
|
+
this.viewContext.views.filter((view) => view.state === ViewState.OPENED || view.state === ViewState.TO_OPEN).map((view) => {
|
|
303
|
+
const update = this.openView(view);
|
|
304
|
+
if (update) {
|
|
305
|
+
updates.push(update);
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
this.sendViewContextUpdates(updates);
|
|
309
|
+
}
|
|
310
|
+
syncView() {
|
|
311
|
+
const updates = [];
|
|
312
|
+
this.viewContext?.views.map((view) => {
|
|
313
|
+
switch (view.state) {
|
|
314
|
+
case ViewState.TO_OPEN:
|
|
315
|
+
updates.push(this.openView(view));
|
|
316
|
+
break;
|
|
317
|
+
case ViewState.TO_CLOSE:
|
|
318
|
+
updates.push(this.closeView(view));
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
const viewDataToClose = this.openedViewData.filter((viewData) => !this.viewContext?.views
|
|
323
|
+
.flatMap((viewData) => viewData.uuid)
|
|
324
|
+
.includes(viewData.uuid));
|
|
325
|
+
if (viewDataToClose?.length) {
|
|
326
|
+
viewDataToClose.map((viewData) => {
|
|
327
|
+
updates.push(this.closeView(viewData));
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
this.sendViewContextUpdates(updates);
|
|
331
|
+
this.viewContext?.links?.map((data) => {
|
|
332
|
+
const link = document.createElement('a');
|
|
333
|
+
let target = '_blank'; // default
|
|
334
|
+
switch (data.target ?? LinkTargetEnum.BLANK) {
|
|
335
|
+
case 'SELF':
|
|
336
|
+
target = '_self';
|
|
337
|
+
break;
|
|
338
|
+
case 'BLANK':
|
|
339
|
+
target = '_blank';
|
|
340
|
+
break;
|
|
341
|
+
case 'PARENT':
|
|
342
|
+
target = '_parent';
|
|
343
|
+
break;
|
|
344
|
+
case 'TOP':
|
|
345
|
+
target = '_top';
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
link.setAttribute('target', target);
|
|
349
|
+
link.setAttribute('href', data.url);
|
|
350
|
+
if (data.download) {
|
|
351
|
+
link.setAttribute('download', data.filename ?? '');
|
|
352
|
+
}
|
|
353
|
+
document.body.appendChild(link);
|
|
354
|
+
link.click();
|
|
355
|
+
link.remove();
|
|
356
|
+
});
|
|
357
|
+
this.viewContext?.downloads?.map(async (file) => {
|
|
358
|
+
try {
|
|
359
|
+
let blob = await this.downloadResource(file.uuid, file.identifier);
|
|
360
|
+
let url = URL.createObjectURL(blob);
|
|
361
|
+
const link = document.createElement('a');
|
|
362
|
+
link.setAttribute('target', '_blank');
|
|
363
|
+
link.setAttribute('href', url);
|
|
364
|
+
link.setAttribute('download', file.filename);
|
|
365
|
+
document.body.appendChild(link);
|
|
366
|
+
link.click();
|
|
367
|
+
link.remove();
|
|
368
|
+
}
|
|
369
|
+
catch (e) {
|
|
370
|
+
console.error('Error downloading file');
|
|
371
|
+
console.error(e);
|
|
372
|
+
}
|
|
373
|
+
});
|
|
374
|
+
const clipboardText = this.viewContext?.clipboardData
|
|
375
|
+
?.map((cd) => cd.text || '')
|
|
376
|
+
.join('');
|
|
377
|
+
if (clipboardText) {
|
|
378
|
+
const clipboard = navigator.clipboard;
|
|
379
|
+
// available only in secure contexts.
|
|
380
|
+
if (clipboard) {
|
|
381
|
+
try {
|
|
382
|
+
clipboard
|
|
383
|
+
.writeText(clipboardText)
|
|
384
|
+
.catch((e) => console.error('Failed to copy text to clipboard', e));
|
|
385
|
+
}
|
|
386
|
+
catch (e) {
|
|
387
|
+
console.error('Error accessing clipboard', e);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
this.viewContextHasBeenSynced.next();
|
|
392
|
+
}
|
|
393
|
+
setViewContextUuid(uuid) {
|
|
394
|
+
sessionStorage.setItem(this.viewContextUuidName, uuid);
|
|
395
|
+
this.session.addHeaderParam({
|
|
396
|
+
headerName: this.viewContextUuidHeaderName,
|
|
397
|
+
value: uuid,
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
getViewContextUuid() {
|
|
401
|
+
let viewContextUuid = sessionStorage.getItem(this.viewContextUuidName);
|
|
402
|
+
if (!viewContextUuid) {
|
|
403
|
+
throw new Error('View context is not initialized!');
|
|
404
|
+
}
|
|
405
|
+
return viewContextUuid;
|
|
406
|
+
}
|
|
407
|
+
hasViewContextUuid() {
|
|
408
|
+
let viewContextUuid = sessionStorage.getItem(this.viewContextUuidName);
|
|
409
|
+
return viewContextUuid !== null && viewContextUuid !== undefined;
|
|
410
|
+
}
|
|
411
|
+
setUuidOfPage(pageName, uuid, componentName) {
|
|
412
|
+
sessionStorage.setItem(this.pageNamePrefix + pageName, uuid);
|
|
413
|
+
if (componentName) {
|
|
414
|
+
sessionStorage.setItem(this.componentNamePrefix + componentName, pageName);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
clearUuidOfPage(pageName, componentName) {
|
|
418
|
+
sessionStorage.removeItem(this.pageNamePrefix + pageName);
|
|
419
|
+
if (componentName) {
|
|
420
|
+
sessionStorage.removeItem(this.componentNamePrefix + componentName);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
getUuidOfPage(pageName) {
|
|
424
|
+
let uuid = sessionStorage.getItem(this.pageNamePrefix + pageName);
|
|
425
|
+
if (!uuid) {
|
|
426
|
+
throw new Error(`The uuid of ${pageName} is not available.`);
|
|
427
|
+
}
|
|
428
|
+
return uuid;
|
|
429
|
+
}
|
|
430
|
+
getPageNameOfComponent(componentName) {
|
|
431
|
+
let pageName = sessionStorage.getItem(this.componentNamePrefix + componentName);
|
|
432
|
+
if (!pageName) {
|
|
433
|
+
throw new Error(`The pageName of ${componentName} is not available.`);
|
|
434
|
+
}
|
|
435
|
+
return pageName;
|
|
436
|
+
}
|
|
437
|
+
async message(messageData, messageResult) {
|
|
438
|
+
return await this.handlePerformActionResponse(await this.view
|
|
439
|
+
.message(messageData.viewUuid ?? '', messageData.uuid, messageResult)
|
|
440
|
+
.toPromise());
|
|
441
|
+
// in future use this.apiQueueService.addToQueue
|
|
442
|
+
}
|
|
443
|
+
async getSmartViewContextApiErrorByCode(code) {
|
|
444
|
+
let buttonLabel;
|
|
445
|
+
let dialogTitle;
|
|
446
|
+
let message;
|
|
447
|
+
if (this.translateService) {
|
|
448
|
+
buttonLabel = await this.translateService
|
|
449
|
+
.get(SmartViewContextErrorDialogButtonLabel)
|
|
450
|
+
.toPromise();
|
|
451
|
+
dialogTitle = await this.translateService.get(SmartViewContextErrorDialogTitle).toPromise();
|
|
452
|
+
message = await this.translateService.get(SmartViewContextErrorDialogMessage).toPromise();
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
buttonLabel = 'Ok';
|
|
456
|
+
dialogTitle = 'Hiba';
|
|
457
|
+
message = 'An error has occured.';
|
|
458
|
+
}
|
|
459
|
+
if (!this.smartViewContextApiErrors) {
|
|
460
|
+
return {
|
|
461
|
+
code,
|
|
462
|
+
message,
|
|
463
|
+
buttonLabel,
|
|
464
|
+
dialogTitle,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
let apiErrorsWithCode = this.smartViewContextApiErrors.viewContextApiErrors.filter((apiError) => {
|
|
468
|
+
return apiError.code === code;
|
|
469
|
+
});
|
|
470
|
+
if (!apiErrorsWithCode || (apiErrorsWithCode && !apiErrorsWithCode.length)) {
|
|
471
|
+
console.error(`SmartViewContextApiError with code ${code} could not be found.`);
|
|
472
|
+
return {
|
|
473
|
+
code,
|
|
474
|
+
message,
|
|
475
|
+
buttonLabel,
|
|
476
|
+
dialogTitle,
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
return apiErrorsWithCode[0];
|
|
480
|
+
}
|
|
481
|
+
async getViewConstraint(uuid) {
|
|
482
|
+
let viewConstraintResponse = await this.view.getViewConstraint(uuid).toPromise();
|
|
483
|
+
if (!viewConstraintResponse)
|
|
484
|
+
throw new Error('Could not get ViewConstraint with the given uuid.');
|
|
485
|
+
return viewConstraintResponse;
|
|
486
|
+
}
|
|
487
|
+
async showPublishedView(channel, uuid) {
|
|
488
|
+
await this.session.initialize();
|
|
489
|
+
// TODO init view context automatically
|
|
490
|
+
// await this.initialize();
|
|
491
|
+
this.isOpeningSmartLink = true;
|
|
492
|
+
this.openSmartLink.next();
|
|
493
|
+
await this.openSmartLink.toPromise();
|
|
494
|
+
await this.view.showPublishedView(channel, uuid).toPromise();
|
|
495
|
+
await this.getAndSyncViewContext();
|
|
496
|
+
this.isOpeningSmartLink = false;
|
|
497
|
+
}
|
|
498
|
+
async downloadResource(uuid, item) {
|
|
499
|
+
return await this.view.downloadItem(uuid, item).toPromise();
|
|
500
|
+
}
|
|
501
|
+
async performAction(uuid, uiActionRequest) {
|
|
502
|
+
return await this._performAction({
|
|
503
|
+
uuid,
|
|
504
|
+
uiActionRequest,
|
|
505
|
+
});
|
|
506
|
+
// const isCompleted = new Subject<void>();
|
|
507
|
+
// this.apiQueueService.addToQueue({
|
|
508
|
+
// callback: this._performAction.bind(this),
|
|
509
|
+
// config: {
|
|
510
|
+
// uuid,
|
|
511
|
+
// uiActionRequest,
|
|
512
|
+
// },
|
|
513
|
+
// isCompleted,
|
|
514
|
+
// });
|
|
515
|
+
// return await isCompleted.toPromise();
|
|
516
|
+
}
|
|
517
|
+
async performWidgetAction(uuid, widgetId, nodeId, uiActionRequest) {
|
|
518
|
+
return await this._performWidgetAction({ uuid, widgetId, nodeId, uiActionRequest });
|
|
519
|
+
// const isCompleted = new Subject<void>();
|
|
520
|
+
// this.apiQueueService.addToQueue({
|
|
521
|
+
// callback: this._performWidgetAction.bind(this),
|
|
522
|
+
// config: {
|
|
523
|
+
// uuid,
|
|
524
|
+
// widgetId,
|
|
525
|
+
// nodeId,
|
|
526
|
+
// uiActionRequest,
|
|
527
|
+
// },
|
|
528
|
+
// isCompleted,
|
|
529
|
+
// });
|
|
530
|
+
// return await isCompleted.toPromise();
|
|
531
|
+
}
|
|
532
|
+
async performWidgetMainAction(uuid, widgetId, uiActionRequest) {
|
|
533
|
+
return await this._performWidgetMainAction({ uuid, widgetId, uiActionRequest });
|
|
534
|
+
// const isCompleted = new Subject<void>();
|
|
535
|
+
// this.apiQueueService.addToQueue({
|
|
536
|
+
// callback: this._performWidgetMainAction.bind(this),
|
|
537
|
+
// config: {
|
|
538
|
+
// uuid,
|
|
539
|
+
// widgetId,
|
|
540
|
+
// uiActionRequest,
|
|
541
|
+
// },
|
|
542
|
+
// isCompleted,
|
|
543
|
+
// });
|
|
544
|
+
// return await isCompleted.toPromise();
|
|
545
|
+
}
|
|
546
|
+
async performUploadAction(uuid, uiActionRequest, param, content) {
|
|
547
|
+
this._performUploadAction({
|
|
548
|
+
uuid,
|
|
549
|
+
uiActionRequest,
|
|
550
|
+
param,
|
|
551
|
+
content,
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
async performUploadMultipleAction(uuid, uiActionRequest, param, content) {
|
|
555
|
+
this._performUploadMultipleAction({
|
|
556
|
+
uuid,
|
|
557
|
+
uiActionRequest,
|
|
558
|
+
param,
|
|
559
|
+
content,
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
async dataChanged(uuid, dataChange) {
|
|
563
|
+
return await this._dataChanged({ uuid, dataChange });
|
|
564
|
+
// const isCompleted = new Subject<void>();
|
|
565
|
+
// this.apiQueueService.addToQueue(
|
|
566
|
+
// {
|
|
567
|
+
// callback: this._dataChanged.bind(this),
|
|
568
|
+
// config: {
|
|
569
|
+
// uuid,
|
|
570
|
+
// dataChange,
|
|
571
|
+
// },
|
|
572
|
+
// isCompleted,
|
|
573
|
+
// },
|
|
574
|
+
// true
|
|
575
|
+
// );
|
|
576
|
+
// return await isCompleted.toPromise();
|
|
577
|
+
}
|
|
578
|
+
async _performAction(config) {
|
|
579
|
+
return await this.handlePerformActionResponse(await this.view.performAction(config.uuid, config.uiActionRequest).toPromise());
|
|
580
|
+
}
|
|
581
|
+
async _performWidgetAction(config) {
|
|
582
|
+
return await this.handlePerformActionResponse(await this.view
|
|
583
|
+
.performWidgetAction(config.uuid, config.widgetId, config.nodeId, config.uiActionRequest)
|
|
584
|
+
.toPromise());
|
|
585
|
+
}
|
|
586
|
+
async _performWidgetMainAction(config) {
|
|
587
|
+
return await this.handlePerformActionResponse(await this.view
|
|
588
|
+
.performWidgetMainAction(config.uuid, config.widgetId, config.uiActionRequest)
|
|
589
|
+
.toPromise());
|
|
590
|
+
}
|
|
591
|
+
async _performUploadAction(config) {
|
|
592
|
+
return await this.handlePerformActionResponse(await this.view
|
|
593
|
+
.uploadAction(config.uuid, JSON.stringify(config.uiActionRequest), config.param, config.content)
|
|
594
|
+
.toPromise());
|
|
595
|
+
}
|
|
596
|
+
async _performUploadMultipleAction(config) {
|
|
597
|
+
return await this.handlePerformActionResponse(await this.view
|
|
598
|
+
.uploadMultipleAction(config.uuid, JSON.stringify(config.uiActionRequest), config.param, config.content)
|
|
599
|
+
.toPromise());
|
|
600
|
+
}
|
|
601
|
+
async _dataChanged(config) {
|
|
602
|
+
return await this.handlePerformActionResponse(await this.view.dataChanged(config.uuid, config.dataChange).toPromise());
|
|
603
|
+
}
|
|
604
|
+
async handlePerformActionResponse(viewContextChange) {
|
|
605
|
+
this.viewContext = viewContextChange?.viewContext;
|
|
606
|
+
this.syncView();
|
|
607
|
+
if (viewContextChange?.changes) {
|
|
608
|
+
this.handleChanges(viewContextChange.changes);
|
|
609
|
+
}
|
|
610
|
+
return viewContextChange?.result;
|
|
611
|
+
}
|
|
612
|
+
handleChanges(changes) {
|
|
613
|
+
changes.forEach((componentModelChange) => {
|
|
614
|
+
let detectChange = this.smartApiClients.get(componentModelChange.uuid);
|
|
615
|
+
if (detectChange) {
|
|
616
|
+
detectChange.next(componentModelChange);
|
|
617
|
+
}
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
async load(uuid) {
|
|
621
|
+
return await this.view.getComponentModel(uuid).toPromise();
|
|
622
|
+
}
|
|
623
|
+
async load2(uuid) {
|
|
624
|
+
let change = await this.view.getComponentModel2(uuid).toPromise();
|
|
625
|
+
this.handlePerformActionResponse(change);
|
|
626
|
+
return change;
|
|
627
|
+
}
|
|
628
|
+
getCurrentViewContext() {
|
|
629
|
+
return this.viewContext;
|
|
630
|
+
}
|
|
631
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartViewContextService, deps: [{ token: i1.ViewService }, { token: i2.SmartSessionService }, { token: i3.SmartNavigationService }, { token: i4.SmartViewContextDialogService }, { token: ApiQueueService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
632
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartViewContextService, providedIn: 'root' }); }
|
|
633
|
+
}
|
|
634
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartViewContextService, decorators: [{
|
|
635
|
+
type: Injectable,
|
|
636
|
+
args: [{
|
|
637
|
+
providedIn: 'root',
|
|
638
|
+
}]
|
|
639
|
+
}], ctorParameters: () => [{ type: i1.ViewService }, { type: i2.SmartSessionService }, { type: i3.SmartNavigationService }, { type: i4.SmartViewContextDialogService }, { type: ApiQueueService }, { type: i0.Injector }] });
|
|
640
|
+
export const IS_ASYNC_PARAM_NAME = 'isAsync';
|
|
641
|
+
export class ApiQueueService {
|
|
642
|
+
constructor() {
|
|
643
|
+
this._destroy$ = new Subject();
|
|
644
|
+
this.queue = [];
|
|
645
|
+
this.isProcessing = false;
|
|
646
|
+
this.queueSubject = new SmartSubject(this._destroy$);
|
|
647
|
+
this.queueSubject.pipe(takeUntil(this._destroy$)).subscribe(() => this.processQueue());
|
|
648
|
+
}
|
|
649
|
+
ngOnDestroy() {
|
|
650
|
+
this._destroy$.next();
|
|
651
|
+
this._destroy$.complete();
|
|
652
|
+
}
|
|
653
|
+
addToQueue(call, priority = false) {
|
|
654
|
+
if (priority) {
|
|
655
|
+
this.queue.unshift(call); // Add at the beginning of the queue if it has higher priority
|
|
656
|
+
}
|
|
657
|
+
else {
|
|
658
|
+
this.queue.push(call); // Add at the end of the queue if it has lower priority
|
|
659
|
+
}
|
|
660
|
+
if (!this.isProcessing) {
|
|
661
|
+
this.processQueue();
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
async processQueue() {
|
|
665
|
+
if (this.queue.length === 0) {
|
|
666
|
+
this.isProcessing = false;
|
|
667
|
+
return;
|
|
668
|
+
}
|
|
669
|
+
const apiQueueCall = this.queue.shift();
|
|
670
|
+
if (apiQueueCall) {
|
|
671
|
+
await apiQueueCall.callback(apiQueueCall.config);
|
|
672
|
+
apiQueueCall.isCompleted.complete();
|
|
673
|
+
this.queueSubject.next();
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ApiQueueService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
677
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ApiQueueService, providedIn: 'root' }); }
|
|
678
|
+
}
|
|
679
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ApiQueueService, decorators: [{
|
|
680
|
+
type: Injectable,
|
|
681
|
+
args: [{
|
|
682
|
+
providedIn: 'root',
|
|
683
|
+
}]
|
|
684
|
+
}], ctorParameters: () => [] });
|
|
685
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdmlldy1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFPTCxjQUFjLEVBV2QsU0FBUyxFQUVULFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBUW5GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7O0FBSXpELE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFHLHdDQUF3QyxDQUFDO0FBQy9GLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLGtDQUFrQyxDQUFDO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLG9DQUFvQyxDQUFDO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLGVBQWUsQ0FBQztBQUV6RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBVSxvQkFBb0IsQ0FBQyxDQUFDO0FBS3RGLE1BQU0sT0FBTyx1QkFBdUI7SUE4QmxDLElBQVcsZ0JBQWdCLENBQUMsZ0JBQW1EO1FBQzdFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUMxQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFXLGdCQUFn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SUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxZQUFZLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRCxZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7OEdBdENVLGVBQWU7a0hBQWYsZUFBZSxjQUZkLE1BQU07OzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNtYXJ0U2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uL3NtYXJ0LXNlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQ2xpcGJvYXJkRGF0YSxcclxuICBDb21wb25lbnRNb2RlbCxcclxuICBDb21wb25lbnRNb2RlbENoYW5nZSxcclxuICBEYXRhQ2hhbmdlLFxyXG4gIERvd25sb2FkZWRGaWxlLFxyXG4gIExpbmssXHJcbiAgTGlua1RhcmdldEVudW0sXHJcbiAgTWVzc2FnZURhdGEsXHJcbiAgTWVzc2FnZVJlc3VsdCxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3IsXHJcbiAgVWlBY3Rpb25SZXF1ZXN0LFxyXG4gIFZpZXdDb25zdHJhaW50LFxyXG4gIFZpZXdDb250ZXh0Q2hhbmdlLFxyXG4gIFZpZXdDb250ZXh0RGF0YSxcclxuICBWaWV3Q29udGV4dFVwZGF0ZSxcclxuICBWaWV3RGF0YSxcclxuICBWaWV3U2VydmljZSxcclxuICBWaWV3U3RhdGUsXHJcbiAgVmlld1N0YXRlVXBkYXRlLFxyXG4gIFZpZXdUeXBlLFxyXG59IGZyb20gJy4vYXBpJztcclxuaW1wb3J0IHsgTWVzc2FnZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbWVzc2FnZS1kaWFsb2cvbWVzc2FnZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBTbWFydFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgU21hcnRWaWV3Q29udGV4dEFwaUVycm9yLFxyXG4gIFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnMsXHJcbiAgU21hcnRWaWV3RGlhbG9nUmVmLFxyXG4gIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCxcclxufSBmcm9tICcuL3NtYXJ0LXZpZXctY29udGV4dC5tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0U3ViamVjdCB9IGZyb20gJy4uL3NtYXJ0LXN1YmplY3QvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtbmF2aWdhdGlvbi9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0Vmlld0NvbnRleHREaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC12aWV3LWNvbnRleHQtZGlhbG9nLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ0J1dHRvbkxhYmVsID0gJ1NtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ0J1dHRvbkxhYmVsJztcclxuZXhwb3J0IGNvbnN0IFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ1RpdGxlID0gJ1NtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ1RpdGxlJztcclxuZXhwb3J0IGNvbnN0IFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ01lc3NhZ2UgPSAnU21hcnRWaWV3Q29udGV4dEVycm9yRGlhbG9nTWVzc2FnZSc7XHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0VWlBY3Rpb25Db2RlX0NMT1NFID0gJ0RFRkFVTFRfQ0xPU0UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IERJQUxPR19ESVNBQkxFX0NMT1NFID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdkaWFsb2dEaXNhYmxlQ2xvc2UnKTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydFZpZXdDb250ZXh0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGV4dFV1aWROYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcclxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250ZXh0VXVpZEhlYWRlck5hbWU6IHN0cmluZyA9ICd2aWV3Q29udGV4dFV1aWQnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFnZU5hbWVQcmVmaXg6IHN0cmluZyA9ICdwYWdlLic7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnROYW1lUHJlZml4OiBzdHJpbmcgPSAnY29tcG9uZW50Lic7XHJcbiAgcHVibGljIG1lc3NhZ2VEaWFsb2duYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSB1cmw/OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB2aWV3Q29udGV4dD86IFZpZXdDb250ZXh0RGF0YTtcclxuICBwcml2YXRlIHZpZXdIYW5kbGVyczogQXJyYXk8U21hcnRWaWV3SGFuZGxlck1vZGVsPiA9IG5ldyBBcnJheSgpO1xyXG4gIHByaXZhdGUgb3BlbmVkVmlld1V1aWRzOiBBcnJheTxzdHJpbmc+ID0gbmV3IEFycmF5KCk7XHJcbiAgcHJpdmF0ZSBvcGVuZWRWaWV3RGF0YTogQXJyYXk8Vmlld0RhdGE+ID0gbmV3IEFycmF5KCk7XHJcblxyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBwdWJsaWMgdXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICBwdWJsaWMgdmlld0NvbnRleHRIYXNCZWVuU3luY2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVubmluZzogU3ViamVjdDxWaWV3Q29udGV4dERhdGE+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwdWJsaWMgc21hcnRWaWV3Q29udGV4dEFwaUVycm9ycz86IFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcnM7XHJcblxyXG4gIHB1YmxpYyBvcGVuU21hcnRMaW5rOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcbiAgcHVibGljIGlzT3BlbmluZ1NtYXJ0TGluazogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGRpYWxvZ1JlZnM6IFNtYXJ0Vmlld0RpYWxvZ1JlZltdID0gW107XHJcblxyXG4gIHByaXZhdGUgYWN0aW9uRGVzY3JpcHRvcnM/OiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+O1xyXG5cclxuICBwdWJsaWMgY29tbW9uRmVlZGJhY2tUZXh0Pzogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgc21hcnRBcGlDbGllbnRzOiBNYXA8c3RyaW5nLCBTbWFydFN1YmplY3Q8YW55Pj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHB1YmxpYyBzZXQgdHJhbnNsYXRlU2VydmljZSh0cmFuc2xhdGVTZXJ2aWNlOiBTbWFydFRyYW5zbGF0ZVNlcnZpY2UgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlQ2hhbmdlZC5uZXh0KCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRyYW5zbGF0ZVNlcnZpY2UoKTogU21hcnRUcmFuc2xhdGVTZXJ2aWNlIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U/OiBTbWFydFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2VDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB2aWV3OiBWaWV3U2VydmljZSxcclxuICAgIHByaXZhdGUgc2Vzc2lvbjogU21hcnRTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbmF2aWdhdGlvbjogU21hcnROYXZpZ2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBTbWFydFZpZXdDb250ZXh0RGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBpUXVldWVTZXJ2aWNlOiBBcGlRdWV1ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGluamVjdDogSW5qZWN0b3JcclxuICApIHt9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2xsb3codXVpZDogc3RyaW5nLCBkZXRlY3RDaGFuZ2U6IFNtYXJ0U3ViamVjdDxhbnk+KTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5zZXQodXVpZCwgZGV0ZWN0Q2hhbmdlKTtcclxuICB9XHJcbiAgcHVibGljIHVuZm9sbG93KHV1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydEFwaUNsaWVudHMuZGVsZXRlKHV1aWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEFjdGlvbkRlc2NyaXB0b3JzKGFjdGlvbkRlc2NyaXB0b3JzOiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+KTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzID0gYWN0aW9uRGVzY3JpcHRvcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QWN0aW9uRGVzY3JpcHRvcnMoKTogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPiB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aW9uRGVzY3JpcHRvcnMpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gYWN0aW9uIGRlc2NyaXB0b3JzIGhhcyBiZWVuIHNldCB0byBWaWV3Q29udGV4dC4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFjdGlvbkRlc2NyaXB0b3JzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpZXdIYW5kbGVycyh2aWV3SGFuZGxlcnM6IEFycmF5PFNtYXJ0Vmlld0hhbmRsZXJNb2RlbD4pOiB2b2lkIHtcclxuICAgIHRoaXMudmlld0hhbmRsZXJzID0gdmlld0hhbmRsZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpZXdBcGlFcnJvcnModmlld0FwaUVycm9yczogU21hcnRWaWV3Q29udGV4dEFwaUVycm9ycyk6IHZvaWQge1xyXG4gICAgdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzID0gdmlld0FwaUVycm9ycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNZXNzYWdlRGlhbG9nTmFtZShtZXNzYWdlRGlhbG9nTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lc3NhZ2VEaWFsb2duYW1lID0gbWVzc2FnZURpYWxvZ05hbWU7XHJcbiAgICB0aGlzLnZpZXdIYW5kbGVycy5wdXNoKHtcclxuICAgICAgbmFtZTogbWVzc2FnZURpYWxvZ05hbWUsXHJcbiAgICAgIGNvbXBvbmVudDogTWVzc2FnZURpYWxvZ0NvbXBvbmVudCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcFVybEZvclZpZXdTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3LmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggPSB0aGlzLnVybDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudXJsID0gdXJsICsgJy92aWV3JztcclxuICAgIHRoaXMuc2V0VXBVcmxGb3JWaWV3U2VydmljZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFuZFN5bmNWaWV3Q29udGV4dCh1dWlkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXV1aWQpIHtcclxuICAgICAgdXVpZCA9IHRoaXMuZ2V0Vmlld0NvbnRleHRVdWlkKCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLnN5bmNWaWV3KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRWaWV3Q29udGV4dCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdDb250ZXh0RGF0YT4ge1xyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IGF3YWl0IHRoaXMudmlldy5nZXRWaWV3Q29udGV4dCh1dWlkKS50b1Byb21pc2UoKTtcclxuICAgIGlmICghdGhpcy52aWV3Q29udGV4dCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpZXdDb250ZXh0IGRvZXMgbm90IGV4aXN0IHdpdGggdGhlIGdpdmVuIHV1aWQuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRWaWV3Q29udGV4dERhdGFCeVBhZ2VOYW1lKHBhZ2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdEYXRhPiB7XHJcbiAgICBpZiAoIXRoaXMudmlld0NvbnRleHQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRWaWV3Q29udGV4dCh0aGlzLmdldFZpZXdDb250ZXh0VXVpZCgpKTtcclxuICAgIH1cclxuICAgIGxldCBwYWdlVXVpZCA9IHRoaXMuZ2V0VXVpZE9mUGFnZShwYWdlTmFtZSk7XHJcblxyXG4gICAgbGV0IHZpZXdDb250ZXh0QnlQYWdlTmFtZSA9IHRoaXMudmlld0NvbnRleHQ/LnZpZXdzLmZpbmQoKHZpZXcpID0+IHZpZXcudXVpZCA9PT0gcGFnZVV1aWQpO1xyXG4gICAgaWYgKCF2aWV3Q29udGV4dEJ5UGFnZU5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgVmlld0RhdGEgb2YgJHtwYWdlTmFtZX0gaXMgbm90IGZvdW5kIWApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZpZXdDb250ZXh0QnlQYWdlTmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVWaWV3Q29udGV4dChcclxuICAgIHZpZXdDb250ZXh0VXBkYXRlOiBWaWV3Q29udGV4dFVwZGF0ZVxyXG4gICk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkPiB7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gYXdhaXQgdGhpcy52aWV3LnVwZGF0ZVZpZXdDb250ZXh0KHZpZXdDb250ZXh0VXBkYXRlKS50b1Byb21pc2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTZXNzaW9uU3RvcmFnZSgpOiB2b2lkIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XHJcbiAgICB0aGlzLm9wZW5lZFZpZXdEYXRhID0gW107XHJcbiAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN0YXJ0Vmlld0NvbnRleHQoKTogUHJvbWlzZTxWaWV3Q29udGV4dERhdGE+IHtcclxuICAgIHRoaXMuY2xlYXJTZXNzaW9uU3RvcmFnZSgpO1xyXG5cclxuICAgIGxldCBuZXdWaWV3Q29udGV4dDogVmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy52aWV3XHJcbiAgICAgIC5jcmVhdGVWaWV3Q29udGV4dCgpXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICAgIGlmICghbmV3Vmlld0NvbnRleHQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBWaWV3Q29udGV4dCB3YXMgY3JlYXRlZCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IG5ld1ZpZXdDb250ZXh0O1xyXG4gICAgdGhpcy5zZXRWaWV3Q29udGV4dFV1aWQobmV3Vmlld0NvbnRleHQudXVpZCEpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUodXVpZD86IHN0cmluZyk6IFByb21pc2U8Vmlld0NvbnRleHREYXRhIHwgdW5kZWZpbmVkPiB7XHJcbiAgICBpZiAodGhpcy5pbml0aWFsaXplUnVubmluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplUnVubmluZy50b1Byb21pc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcgPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAodGhpcy52aWV3SGFuZGxlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIFwiVGhlcmUgYXJlbid0IGFueSB2aWV3SGFuZGxlcnMgaW4gU21hcnRWaWV3Q29udGV4dFNlcnZpY2UhIFByb3ZpZGUgc29tZSB0byB1c2UgaXRzIGZ1bmN0aW9ucy5cIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VEaWFsb2duYW1lKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXNzYWdlRGlhbG9nTmFtZSBwcm92aWRlZCBieSB0aGUgYmFja2VuZCBoYXMgbm90IGJlZW4gc2V0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodXVpZCkge1xyXG4gICAgICAgICAgdGhpcy5zZXRWaWV3Q29udGV4dFV1aWQodXVpZCk7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldFZpZXdDb250ZXh0KHV1aWQpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRWaWV3Q29udGV4dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0Vmlld0NvbnRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0ITtcclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nLm5leHQodGhpcy52aWV3Q29udGV4dCEpO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVJ1bm5pbmcuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVSdW5uaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlblZpZXcodmlldzogVmlld0RhdGEpOiBWaWV3U3RhdGVVcGRhdGUgfCB1bmRlZmluZWQge1xyXG4gICAgbGV0IGFscmVhZHlPcGVuZWQgPSB0aGlzLm9wZW5lZFZpZXdVdWlkcy5zb21lKCh1dWlkKSA9PiB1dWlkID09PSB2aWV3LnV1aWQpO1xyXG4gICAgaWYgKGFscmVhZHlPcGVuZWQpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgbGV0IHZpZXdIYW5kbGVyOiBTbWFydFZpZXdIYW5kbGVyTW9kZWwgfCB1bmRlZmluZWQgPSB0aGlzLnZpZXdIYW5kbGVycy5maW5kKFxyXG4gICAgICAoaGFuZGxlcikgPT4gaGFuZGxlci5uYW1lID09PSB2aWV3LnZpZXdOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghdmlld0hhbmRsZXIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2FzIG5vdCBmb3VuZCBieSB2aWV3IG5hbWU6ICR7dmlldy52aWV3TmFtZX1gKTtcclxuICAgIH1cclxuICAgIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLkRJQUxPRykge1xyXG4gICAgICBpZiAoIXZpZXdIYW5kbGVyLmNvbXBvbmVudCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBDb21wb25lbnQgaXMgdW5kZWZpbmVkIGluIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3aXRoIG5hbWU6ICR7dmlldy52aWV3TmFtZX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgcmVmSXNBbHJhZHlBZGRlZCA9IHRoaXMuZGlhbG9nUmVmcy5zb21lKFxyXG4gICAgICAgIChyZWY6IFNtYXJ0Vmlld0RpYWxvZ1JlZikgPT4gcmVmLnV1aWQgPT09IHZpZXcudXVpZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIXJlZklzQWxyYWR5QWRkZWQpIHtcclxuICAgICAgICBsZXQgZGlhbG9nUmVmO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLm9wZW5lZFZpZXdVdWlkcy5wdXNoKHZpZXcudXVpZCk7XHJcbiAgICAgICAgICB0aGlzLm9wZW5lZFZpZXdEYXRhLnB1c2godmlldyk7XHJcbiAgICAgICAgICB0aGlzLnNldFV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlldy51dWlkLCB2aWV3SGFuZGxlci5jb21wb25lbnROYW1lKTtcclxuICAgICAgICAgIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW5Db21wb25lbnRBc0RpYWxvZyh2aWV3SGFuZGxlci5jb21wb25lbnQsIHZpZXdIYW5kbGVyLm5hbWUpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLmluZGV4T2Yodmlldy51dWlkKTtcclxuICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5zZXRVdWlkT2ZQYWdlKHZpZXcudmlld05hbWUsIHZpZXcudXVpZCwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkaWFsb2dEaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIGxldCBpc01lc3NhZ2VEaWFsb2cgPSB2aWV3LnZpZXdOYW1lID09PSB0aGlzLm1lc3NhZ2VEaWFsb2duYW1lO1xyXG4gICAgICAgIGlmICghaXNNZXNzYWdlRGlhbG9nKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkaWFsb2dEaXNhYmxlQ2xvc2UgPSB0aGlzLmluamVjdC5nZXQoRElBTE9HX0RJU0FCTEVfQ0xPU0UpO1xyXG4gICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyByZWFkaW5nIERJQUxPR19ESVNBQkxFX0NMT1NFJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkaWFsb2dSZWYuZGlzYWJsZUNsb3NlID0gZGlhbG9nRGlzYWJsZUNsb3NlO1xyXG4gICAgICAgIC8vIGlmIChpc01lc3NhZ2VEaWFsb2cpIHtcclxuICAgICAgICAvLyAgIGlmICh2aWV3Lm1lc3NhZ2U/Lm9wdGlvbnMgJiYgdmlldy5tZXNzYWdlLm9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGlmICghZGlhbG9nRGlzYWJsZUNsb3NlKSB7XHJcbiAgICAgICAgICBkaWFsb2dSZWZcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtQWN0aW9uKHZpZXcudXVpZCwgeyBjb2RlOiBEZWZhdWx0VWlBY3Rpb25Db2RlX0NMT1NFLCBwYXJhbXM6IHt9IH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmcy5wdXNoKHtcclxuICAgICAgICAgIHV1aWQ6IHZpZXcudXVpZCxcclxuICAgICAgICAgIGRpYWxvZ1JlZixcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLk5PUk1BTCkge1xyXG4gICAgICBpZiAodmlld0hhbmRsZXIucm91dGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUm91dGUgaXMgdW5kZWZpbmVkIGluIFNtYXJ0Vmlld0hhbmRsZXJNb2RlbCB3aXRoIG5hbWU6ICR7dmlldy52aWV3TmFtZX1gKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm5hdmlnYXRpb24ubmF2aWdhdGVUbyh2aWV3SGFuZGxlci5yb3V0ZS5zcGxpdCgnLycpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHR5cGUgb2YgdGhlIHZpZXcgYW5kIGl0cyB2aWV3SGFuZGxlciBpcyBub3QgdGhlIHNhbWUhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlldy5zdGF0ZSA9IFZpZXdTdGF0ZS5PUEVORUQ7XHJcblxyXG4gICAgdGhpcy5vcGVuZWRWaWV3VXVpZHMucHVzaCh2aWV3LnV1aWQpO1xyXG4gICAgdGhpcy5vcGVuZWRWaWV3RGF0YS5wdXNoKHZpZXcpO1xyXG5cclxuICAgIHRoaXMuc2V0VXVpZE9mUGFnZSh2aWV3LnZpZXdOYW1lLCB2aWV3LnV1aWQsIHZpZXdIYW5kbGVyLmNvbXBvbmVudE5hbWUpO1xyXG4gICAgdGhpcy51dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWQubmV4dCh2aWV3LnZpZXdOYW1lKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzdGF0ZTogVmlld1N0YXRlLk9QRU5FRCxcclxuICAgICAgdXVpZDogdmlldy51dWlkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZVZpZXcodmlldzogVmlld0RhdGEpOiBWaWV3U3RhdGVVcGRhdGUge1xyXG4gICAgbGV0IHZpZXdIYW5kbGVyOiBTbWFydFZpZXdIYW5kbGVyTW9kZWwgfCB1bmRlZmluZWQgPSB0aGlzLnZpZXdIYW5kbGVycy5maW5kKFxyXG4gICAgICAoaGFuZGxlcikgPT4gaGFuZGxlci5uYW1lID09PSB2aWV3LnZpZXdOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghdmlld0hhbmRsZXIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTbWFydFZpZXdIYW5kbGVyTW9kZWwgd2FzIG5vdCBmb3VuZCBieSB2aWV3IG5hbWU6ICR7dmlldy52aWV3TmFtZX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmlldy50eXBlID09PSBWaWV3VHlwZS5ESUFMT0cpIHtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nUmVmcy5maW5kKFxyXG4gICAgICAgIChkaWFsb2dSZWY6IFNtYXJ0Vmlld0RpYWxvZ1JlZikgPT4gZGlhbG9nUmVmLnV1aWQgPT09IHZpZXcudXVpZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoZGlhbG9nUmVmKSB7XHJcbiAgICAgICAgZGlhbG9nUmVmLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuZGlhbG9nUmVmcy5pbmRleE9mKGRpYWxvZ1JlZik7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWZzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0RpYWxvZ1JlZiBpcyBub3QgZm91bmQgYnkgdXVpZC4nKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh2aWV3LnR5cGUgPT09IFZpZXdUeXBlLk5PUk1BTCkge1xyXG4gICAgICAvLyBUT0RPOiBjbG9zZSBub3JtYWwgcGFnZT8/P1xyXG4gICAgICAvLyB0aGlzLm5hdmlnYXRpb24ubmF2aWdhdGVUbyh2aWV3SGFuZGxlci5yb3V0ZS5zcGxpdChcIi9cIikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdHlwZSBvZiB0aGUgdmlldyBhbmQgaXRzIHZpZXdIYW5kbGVyIGlzIG5vdCB0aGUgc2FtZSEnKTtcclxuICAgIH1cclxuXHJcbiAgICB2aWV3LnN0YXRlID0gVmlld1N0YXRlLkNMT1NFRDtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMub3BlbmVkVmlld1V1aWRzLmluZGV4T2Yodmlldy51dWlkKTtcclxuICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgIHRoaXMub3BlbmVkVmlld1V1aWRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIHRoaXMub3BlbmVkVmlld0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5jbGVhclV1aWRPZlBhZ2Uodmlldy52aWV3TmFtZSwgdmlld0hhbmRsZXIuY29tcG9uZW50TmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc3RhdGU6IFZpZXdTdGF0ZS5DTE9TRUQsXHJcbiAgICAgIHV1aWQ6IHZpZXcudXVpZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRWaWV3Q29udGV4dFVwZGF0ZXModXBkYXRlc1RvU2VuZDogKFZpZXdTdGF0ZVVwZGF0ZSB8IHVuZGVmaW5lZClbXSkge1xyXG4gICAgY29uc3QgdXBkYXRlczogVmlld1N0YXRlVXBkYXRlW10gPSBbXTtcclxuICAgIHVwZGF0ZXNUb1NlbmQuZm9yRWFjaCgodXBkYXRlKSA9PiB7XHJcbiAgICAgIGlmICh1cGRhdGUgIT09IHVuZGVmaW5lZCAmJiB1cGRhdGUgIT09IG51bGwpIHVwZGF0ZXMucHVzaCh1cGRhdGUpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodXBkYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVmlld0NvbnRleHQoe1xyXG4gICAgICAgIHVwZGF0ZXMsXHJcbiAgICAgICAgdXVpZDogdGhpcy52aWV3Q29udGV4dD8udXVpZCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBhc3luYyByZXN0b3JlVmlld3ModXVpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB1cGRhdGVzOiBWaWV3U3RhdGVVcGRhdGVbXSA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLnZpZXdDb250ZXh0KSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Vmlld0NvbnRleHQodXVpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dCEudmlld3MuZmlsdGVyKFxyXG4gICAgICAodmlldykgPT4gdmlldy5zdGF0ZSA9PT0gVmlld1N0YXRlLk9QRU5FRCB8fCB2aWV3LnN0YXRlID09PSBWaWV3U3RhdGUuVE9fT1BFTlxyXG4gICAgKS5tYXAoKHZpZXc6IFZpZXdEYXRhKSA9PiB7XHJcbiAgICAgIGNvbnN0IHVwZGF0ZSA9IHRoaXMub3BlblZpZXcodmlldyk7XHJcbiAgICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgICB1cGRhdGVzLnB1c2godXBkYXRlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbmRWaWV3Q29udGV4dFVwZGF0ZXModXBkYXRlcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3luY1ZpZXcoKTogdm9pZCB7XHJcbiAgICBjb25zdCB1cGRhdGVzOiAoVmlld1N0YXRlVXBkYXRlIHwgdW5kZWZpbmVkKVtdID0gW107XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0Py52aWV3cy5tYXAoKHZpZXc6IFZpZXdEYXRhKSA9PiB7XHJcbiAgICAgIHN3aXRjaCAodmlldy5zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgVmlld1N0YXRlLlRPX09QRU46XHJcbiAgICAgICAgICB1cGRhdGVzLnB1c2godGhpcy5vcGVuVmlldyh2aWV3KSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFZpZXdTdGF0ZS5UT19DTE9TRTpcclxuICAgICAgICAgIHVwZGF0ZXMucHVzaCh0aGlzLmNsb3NlVmlldyh2aWV3KSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgdmlld0RhdGFUb0Nsb3NlID0gdGhpcy5vcGVuZWRWaWV3RGF0YS5maWx0ZXIoXHJcbiAgICAgICh2aWV3RGF0YTogVmlld0RhdGEpID0+XHJcbiAgICAgICAgIXRoaXMudmlld0NvbnRleHQ/LnZpZXdzXHJcbiAgICAgICAgICAuZmxhdE1hcCgodmlld0RhdGE6IFZpZXdEYXRhKSA9PiB2aWV3RGF0YS51dWlkKVxyXG4gICAgICAgICAgLmluY2x1ZGVzKHZpZXdEYXRhLnV1aWQpXHJcbiAgICApO1xyXG4gICAgaWYgKHZpZXdEYXRhVG9DbG9zZT8ubGVuZ3RoKSB7XHJcbiAgICAgIHZpZXdEYXRhVG9DbG9zZS5tYXAoKHZpZXdEYXRhOiBWaWV3RGF0YSkgPT4ge1xyXG4gICAgICAgIHVwZGF0ZXMucHVzaCh0aGlzLmNsb3NlVmlldyh2aWV3RGF0YSkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VuZFZpZXdDb250ZXh0VXBkYXRlcyh1cGRhdGVzKTtcclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0Py5saW5rcz8ubWFwKChkYXRhOiBMaW5rKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgIGxldCB0YXJnZXQgPSAnX2JsYW5rJzsgLy8gZGVmYXVsdFxyXG4gICAgICBzd2l0Y2ggKGRhdGEudGFyZ2V0ID8/IExpbmtUYXJnZXRFbnVtLkJMQU5LKSB7XHJcbiAgICAgICAgY2FzZSAnU0VMRic6XHJcbiAgICAgICAgICB0YXJnZXQgPSAnX3NlbGYnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnQkxBTksnOlxyXG4gICAgICAgICAgdGFyZ2V0ID0gJ19ibGFuayc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdQQVJFTlQnOlxyXG4gICAgICAgICAgdGFyZ2V0ID0gJ19wYXJlbnQnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnVE9QJzpcclxuICAgICAgICAgIHRhcmdldCA9ICdfdG9wJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCB0YXJnZXQpO1xyXG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGRhdGEudXJsKTtcclxuICAgICAgaWYgKGRhdGEuZG93bmxvYWQpIHtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBkYXRhLmZpbGVuYW1lID8/ICcnKTtcclxuICAgICAgfVxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgIGxpbmsucmVtb3ZlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0Py5kb3dubG9hZHM/Lm1hcChhc3luYyAoZmlsZTogRG93bmxvYWRlZEZpbGUpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgYmxvYiA9IGF3YWl0IHRoaXMuZG93bmxvYWRSZXNvdXJjZShmaWxlLnV1aWQhLCBmaWxlLmlkZW50aWZpZXIhKTtcclxuICAgICAgICBsZXQgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlLmZpbGVuYW1lISk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgbGluay5yZW1vdmUoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIGZpbGUnKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjbGlwYm9hcmRUZXh0ID0gdGhpcy52aWV3Q29udGV4dD8uY2xpcGJvYXJkRGF0YVxyXG4gICAgICA/Lm1hcCgoY2Q6IENsaXBib2FyZERhdGEpID0+IGNkLnRleHQgfHwgJycpXHJcbiAgICAgIC5qb2luKCcnKTtcclxuICAgIGlmIChjbGlwYm9hcmRUZXh0KSB7XHJcbiAgICAgIGNvbnN0IGNsaXBib2FyZCA9IG5hdmlnYXRvci5jbGlwYm9hcmQ7XHJcbiAgICAgIC8vIGF2YWlsYWJsZSBvbmx5IGluIHNlY3VyZSBjb250ZXh0cy5cclxuICAgICAgaWYgKGNsaXBib2FyZCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjbGlwYm9hcmRcclxuICAgICAgICAgICAgLndyaXRlVGV4dChjbGlwYm9hcmRUZXh0KVxyXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjb3B5IHRleHQgdG8gY2xpcGJvYXJkJywgZSkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFjY2Vzc2luZyBjbGlwYm9hcmQnLCBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0SGFzQmVlblN5bmNlZC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZpZXdDb250ZXh0VXVpZCh1dWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy52aWV3Q29udGV4dFV1aWROYW1lLCB1dWlkKTtcclxuICAgIHRoaXMuc2Vzc2lvbi5hZGRIZWFkZXJQYXJhbSh7XHJcbiAgICAgIGhlYWRlck5hbWU6IHRoaXMudmlld0NvbnRleHRVdWlkSGVhZGVyTmFtZSxcclxuICAgICAgdmFsdWU6IHV1aWQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRWaWV3Q29udGV4dFV1aWQoKTogc3RyaW5nIHtcclxuICAgIGxldCB2aWV3Q29udGV4dFV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMudmlld0NvbnRleHRVdWlkTmFtZSk7XHJcbiAgICBpZiAoIXZpZXdDb250ZXh0VXVpZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpZXcgY29udGV4dCBpcyBub3QgaW5pdGlhbGl6ZWQhJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlld0NvbnRleHRVdWlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc1ZpZXdDb250ZXh0VXVpZCgpOiBib29sZWFuIHtcclxuICAgIGxldCB2aWV3Q29udGV4dFV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMudmlld0NvbnRleHRVdWlkTmFtZSk7XHJcbiAgICByZXR1cm4gdmlld0NvbnRleHRVdWlkICE9PSBudWxsICYmIHZpZXdDb250ZXh0VXVpZCAhPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFV1aWRPZlBhZ2UocGFnZU5hbWU6IHN0cmluZywgdXVpZDogc3RyaW5nLCBjb21wb25lbnROYW1lPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMucGFnZU5hbWVQcmVmaXggKyBwYWdlTmFtZSwgdXVpZCk7XHJcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuY29tcG9uZW50TmFtZVByZWZpeCArIGNvbXBvbmVudE5hbWUsIHBhZ2VOYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhclV1aWRPZlBhZ2UocGFnZU5hbWU6IHN0cmluZywgY29tcG9uZW50TmFtZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnBhZ2VOYW1lUHJlZml4ICsgcGFnZU5hbWUpO1xyXG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmNvbXBvbmVudE5hbWVQcmVmaXggKyBjb21wb25lbnROYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRVdWlkT2ZQYWdlKHBhZ2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHV1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMucGFnZU5hbWVQcmVmaXggKyBwYWdlTmFtZSk7XHJcbiAgICBpZiAoIXV1aWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdXVpZCBvZiAke3BhZ2VOYW1lfSBpcyBub3QgYXZhaWxhYmxlLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHV1aWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UGFnZU5hbWVPZkNvbXBvbmVudChjb21wb25lbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHBhZ2VOYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmNvbXBvbmVudE5hbWVQcmVmaXggKyBjb21wb25lbnROYW1lKTtcclxuICAgIGlmICghcGFnZU5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcGFnZU5hbWUgb2YgJHtjb21wb25lbnROYW1lfSBpcyBub3QgYXZhaWxhYmxlLmApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhZ2VOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG1lc3NhZ2UobWVzc2FnZURhdGE6IE1lc3NhZ2VEYXRhLCBtZXNzYWdlUmVzdWx0OiBNZXNzYWdlUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAgIC5tZXNzYWdlKG1lc3NhZ2VEYXRhLnZpZXdVdWlkID8/ICcnLCBtZXNzYWdlRGF0YS51dWlkLCBtZXNzYWdlUmVzdWx0KVxyXG4gICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICAgIC8vIGluIGZ1dHVyZSB1c2UgdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvckJ5Q29kZShjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvcj4ge1xyXG4gICAgbGV0IGJ1dHRvbkxhYmVsO1xyXG4gICAgbGV0IGRpYWxvZ1RpdGxlO1xyXG4gICAgbGV0IG1lc3NhZ2U7XHJcbiAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgIGJ1dHRvbkxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXHJcbiAgICAgICAgLmdldChTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dCdXR0b25MYWJlbClcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgIGRpYWxvZ1RpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldChTbWFydFZpZXdDb250ZXh0RXJyb3JEaWFsb2dUaXRsZSkudG9Qcm9taXNlKCk7XHJcbiAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KFNtYXJ0Vmlld0NvbnRleHRFcnJvckRpYWxvZ01lc3NhZ2UpLnRvUHJvbWlzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYnV0dG9uTGFiZWwgPSAnT2snO1xyXG4gICAgICBkaWFsb2dUaXRsZSA9ICdIaWJhJztcclxuICAgICAgbWVzc2FnZSA9ICdBbiBlcnJvciBoYXMgb2NjdXJlZC4nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgY29kZSxcclxuICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgIGJ1dHRvbkxhYmVsLFxyXG4gICAgICAgIGRpYWxvZ1RpdGxlLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IGFwaUVycm9yc1dpdGhDb2RlID0gdGhpcy5zbWFydFZpZXdDb250ZXh0QXBpRXJyb3JzLnZpZXdDb250ZXh0QXBpRXJyb3JzLmZpbHRlcihcclxuICAgICAgKGFwaUVycm9yOiBTbWFydFZpZXdDb250ZXh0QXBpRXJyb3IpID0+IHtcclxuICAgICAgICByZXR1cm4gYXBpRXJyb3IuY29kZSA9PT0gY29kZTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGlmICghYXBpRXJyb3JzV2l0aENvZGUgfHwgKGFwaUVycm9yc1dpdGhDb2RlICYmICFhcGlFcnJvcnNXaXRoQ29kZS5sZW5ndGgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFNtYXJ0Vmlld0NvbnRleHRBcGlFcnJvciB3aXRoIGNvZGUgJHtjb2RlfSBjb3VsZCBub3QgYmUgZm91bmQuYCk7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNvZGUsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBidXR0b25MYWJlbCxcclxuICAgICAgICBkaWFsb2dUaXRsZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcGlFcnJvcnNXaXRoQ29kZVswXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRWaWV3Q29uc3RyYWludCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPFZpZXdDb25zdHJhaW50PiB7XHJcbiAgICBsZXQgdmlld0NvbnN0cmFpbnRSZXNwb25zZSA9IGF3YWl0IHRoaXMudmlldy5nZXRWaWV3Q29uc3RyYWludCh1dWlkKS50b1Byb21pc2UoKTtcclxuICAgIGlmICghdmlld0NvbnN0cmFpbnRSZXNwb25zZSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IFZpZXdDb25zdHJhaW50IHdpdGggdGhlIGdpdmVuIHV1aWQuJyk7XHJcbiAgICByZXR1cm4gdmlld0NvbnN0cmFpbnRSZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzaG93UHVibGlzaGVkVmlldyhjaGFubmVsOiBzdHJpbmcsIHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5zZXNzaW9uLmluaXRpYWxpemUoKTtcclxuICAgIC8vIFRPRE8gaW5pdCB2aWV3IGNvbnRleHQgYXV0b21hdGljYWxseVxyXG4gICAgLy8gYXdhaXQgdGhpcy5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgdGhpcy5pc09wZW5pbmdTbWFydExpbmsgPSB0cnVlO1xyXG4gICAgdGhpcy5vcGVuU21hcnRMaW5rLm5leHQoKTtcclxuICAgIGF3YWl0IHRoaXMub3BlblNtYXJ0TGluay50b1Byb21pc2UoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnZpZXcuc2hvd1B1Ymxpc2hlZFZpZXcoY2hhbm5lbCwgdXVpZCkudG9Qcm9taXNlKCk7XHJcbiAgICBhd2FpdCB0aGlzLmdldEFuZFN5bmNWaWV3Q29udGV4dCgpO1xyXG4gICAgdGhpcy5pc09wZW5pbmdTbWFydExpbmsgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkb3dubG9hZFJlc291cmNlKHV1aWQ6IHN0cmluZywgaXRlbTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnZpZXcuZG93bmxvYWRJdGVtKHV1aWQsIGl0ZW0pLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBlcmZvcm1BY3Rpb24odXVpZDogc3RyaW5nLCB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BlcmZvcm1BY3Rpb24oe1xyXG4gICAgICB1dWlkLFxyXG4gICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICB9KTtcclxuICAgIC8vIGNvbnN0IGlzQ29tcGxldGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIC8vIHRoaXMuYXBpUXVldWVTZXJ2aWNlLmFkZFRvUXVldWUoe1xyXG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybUFjdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgLy8gICBjb25maWc6IHtcclxuICAgIC8vICAgICB1dWlkLFxyXG4gICAgLy8gICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgaXNDb21wbGV0ZWQsXHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHJldHVybiBhd2FpdCBpc0NvbXBsZXRlZC50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwZXJmb3JtV2lkZ2V0QWN0aW9uKFxyXG4gICAgdXVpZDogc3RyaW5nLFxyXG4gICAgd2lkZ2V0SWQ6IHN0cmluZyxcclxuICAgIG5vZGVJZDogc3RyaW5nLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3RcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9wZXJmb3JtV2lkZ2V0QWN0aW9uKHsgdXVpZCwgd2lkZ2V0SWQsIG5vZGVJZCwgdWlBY3Rpb25SZXF1ZXN0IH0pO1xyXG4gICAgLy8gY29uc3QgaXNDb21wbGV0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgLy8gdGhpcy5hcGlRdWV1ZVNlcnZpY2UuYWRkVG9RdWV1ZSh7XHJcbiAgICAvLyAgIGNhbGxiYWNrOiB0aGlzLl9wZXJmb3JtV2lkZ2V0QWN0aW9uLmJpbmQodGhpcyksXHJcbiAgICAvLyAgIGNvbmZpZzoge1xyXG4gICAgLy8gICAgIHV1aWQsXHJcbiAgICAvLyAgICAgd2lkZ2V0SWQsXHJcbiAgICAvLyAgICAgbm9kZUlkLFxyXG4gICAgLy8gICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgaXNDb21wbGV0ZWQsXHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHJldHVybiBhd2FpdCBpc0NvbXBsZXRlZC50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBwZXJmb3JtV2lkZ2V0TWFpbkFjdGlvbihcclxuICAgIHV1aWQ6IHN0cmluZyxcclxuICAgIHdpZGdldElkOiBzdHJpbmcsXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BlcmZvcm1XaWRnZXRNYWluQWN0aW9uKHsgdXVpZCwgd2lkZ2V0SWQsIHVpQWN0aW9uUmVxdWVzdCB9KTtcclxuICAgIC8vIGNvbnN0IGlzQ29tcGxldGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIC8vIHRoaXMuYXBpUXVldWVTZXJ2aWNlLmFkZFRvUXVldWUoe1xyXG4gICAgLy8gICBjYWxsYmFjazogdGhpcy5fcGVyZm9ybVdpZGdldE1haW5BY3Rpb24uYmluZCh0aGlzKSxcclxuICAgIC8vICAgY29uZmlnOiB7XHJcbiAgICAvLyAgICAgdXVpZCxcclxuICAgIC8vICAgICB3aWRnZXRJZCxcclxuICAgIC8vICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIGlzQ29tcGxldGVkLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyByZXR1cm4gYXdhaXQgaXNDb21wbGV0ZWQudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVVwbG9hZEFjdGlvbihcclxuICAgIHV1aWQ6IHN0cmluZyxcclxuICAgIHVpQWN0aW9uUmVxdWVzdDogVWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgcGFyYW06ICdpbnB1dCcgfCAnaW5wdXRcIicsXHJcbiAgICBjb250ZW50OiBhbnlcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3BlcmZvcm1VcGxvYWRBY3Rpb24oe1xyXG4gICAgICB1dWlkLFxyXG4gICAgICB1aUFjdGlvblJlcXVlc3QsXHJcbiAgICAgIHBhcmFtLFxyXG4gICAgICBjb250ZW50LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcGVyZm9ybVVwbG9hZE11bHRpcGxlQWN0aW9uKFxyXG4gICAgdXVpZDogc3RyaW5nLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QsXHJcbiAgICBwYXJhbTogJ2lucHV0JyB8ICdpbnB1dDInLFxyXG4gICAgY29udGVudDogYW55W11cclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3BlcmZvcm1VcGxvYWRNdWx0aXBsZUFjdGlvbih7XHJcbiAgICAgIHV1aWQsXHJcbiAgICAgIHVpQWN0aW9uUmVxdWVzdCxcclxuICAgICAgcGFyYW0sXHJcbiAgICAgIGNvbnRlbnQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBkYXRhQ2hhbmdlZCh1dWlkOiBzdHJpbmcsIGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9kYXRhQ2hhbmdlZCh7IHV1aWQsIGRhdGFDaGFuZ2UgfSk7XHJcbiAgICAvLyBjb25zdCBpc0NvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICAvLyB0aGlzLmFwaVF1ZXVlU2VydmljZS5hZGRUb1F1ZXVlKFxyXG4gICAgLy8gICB7XHJcbiAgICAvLyAgICAgY2FsbGJhY2s6IHRoaXMuX2RhdGFDaGFuZ2VkLmJpbmQodGhpcyksXHJcbiAgICAvLyAgICAgY29uZmlnOiB7XHJcbiAgICAvLyAgICAgICB1dWlkLFxyXG4gICAgLy8gICAgICAgZGF0YUNoYW5nZSxcclxuICAgIC8vICAgICB9LFxyXG4gICAgLy8gICAgIGlzQ29tcGxldGVkLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICB0cnVlXHJcbiAgICAvLyApO1xyXG4gICAgLy8gcmV0dXJuIGF3YWl0IGlzQ29tcGxldGVkLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybUFjdGlvbihjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnZpZXcucGVyZm9ybUFjdGlvbihjb25maWcudXVpZCwgY29uZmlnLnVpQWN0aW9uUmVxdWVzdCkudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9wZXJmb3JtV2lkZ2V0QWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAgIC5wZXJmb3JtV2lkZ2V0QWN0aW9uKGNvbmZpZy51dWlkLCBjb25maWcud2lkZ2V0SWQsIGNvbmZpZy5ub2RlSWQsIGNvbmZpZy51aUFjdGlvblJlcXVlc3QpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVdpZGdldE1haW5BY3Rpb24oY29uZmlnOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy52aWV3XHJcbiAgICAgICAgLnBlcmZvcm1XaWRnZXRNYWluQWN0aW9uKGNvbmZpZy51dWlkLCBjb25maWcud2lkZ2V0SWQsIGNvbmZpZy51aUFjdGlvblJlcXVlc3QpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVVwbG9hZEFjdGlvbihjb25maWc6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdcclxuICAgICAgICAudXBsb2FkQWN0aW9uKFxyXG4gICAgICAgICAgY29uZmlnLnV1aWQsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShjb25maWcudWlBY3Rpb25SZXF1ZXN0KSxcclxuICAgICAgICAgIGNvbmZpZy5wYXJhbSxcclxuICAgICAgICAgIGNvbmZpZy5jb250ZW50XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfcGVyZm9ybVVwbG9hZE11bHRpcGxlQWN0aW9uKGNvbmZpZzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlld1xyXG4gICAgICAgIC51cGxvYWRNdWx0aXBsZUFjdGlvbihcclxuICAgICAgICAgIGNvbmZpZy51dWlkLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29uZmlnLnVpQWN0aW9uUmVxdWVzdCksXHJcbiAgICAgICAgICBjb25maWcucGFyYW0sXHJcbiAgICAgICAgICBjb25maWcuY29udGVudFxyXG4gICAgICAgIClcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9kYXRhQ2hhbmdlZChjb25maWc6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMudmlldy5kYXRhQ2hhbmdlZChjb25maWcudXVpZCwgY29uZmlnLmRhdGFDaGFuZ2UpLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgIHZpZXdDb250ZXh0Q2hhbmdlOiBWaWV3Q29udGV4dENoYW5nZSB8IHVuZGVmaW5lZFxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gdmlld0NvbnRleHRDaGFuZ2U/LnZpZXdDb250ZXh0O1xyXG4gICAgdGhpcy5zeW5jVmlldygpO1xyXG5cclxuICAgIGlmICh2aWV3Q29udGV4dENoYW5nZT8uY2hhbmdlcykge1xyXG4gICAgICB0aGlzLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmlld0NvbnRleHRDaGFuZ2U/LnJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ2hhbmdlcyhjaGFuZ2VzOiBBcnJheTxDb21wb25lbnRNb2RlbENoYW5nZT4pOiB2b2lkIHtcclxuICAgIGNoYW5nZXMuZm9yRWFjaCgoY29tcG9uZW50TW9kZWxDaGFuZ2U6IENvbXBvbmVudE1vZGVsQ2hhbmdlKSA9PiB7XHJcbiAgICAgIGxldCBkZXRlY3RDaGFuZ2U6IFNtYXJ0U3ViamVjdDxDb21wb25lbnRNb2RlbENoYW5nZT4gfCB1bmRlZmluZWQgPSB0aGlzLnNtYXJ0QXBpQ2xpZW50cy5nZXQoXHJcbiAgICAgICAgY29tcG9uZW50TW9kZWxDaGFuZ2UudXVpZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoZGV0ZWN0Q2hhbmdlKSB7XHJcbiAgICAgICAgZGV0ZWN0Q2hhbmdlLm5leHQoY29tcG9uZW50TW9kZWxDaGFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8Q29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQ+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnZpZXcuZ2V0Q29tcG9uZW50TW9kZWwodXVpZCkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZDIodXVpZDogc3RyaW5nKTogUHJvbWlzZTxWaWV3Q29udGV4dENoYW5nZSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgbGV0IGNoYW5nZSA9IGF3YWl0IHRoaXMudmlldy5nZXRDb21wb25lbnRNb2RlbDIodXVpZCkudG9Qcm9taXNlKCk7XHJcbiAgICB0aGlzLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShjaGFuZ2UpO1xyXG4gICAgcmV0dXJuIGNoYW5nZTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRWaWV3Q29udGV4dCgpOiBWaWV3Q29udGV4dERhdGEgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQ7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgSVNfQVNZTkNfUEFSQU1fTkFNRSA9ICdpc0FzeW5jJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBpUXVldWVDYWxsIHtcclxuICBjYWxsYmFjazogKGNvbmZpZzogYW55KSA9PiBQcm9taXNlPGFueT47XHJcbiAgY29uZmlnOiBhbnk7XHJcbiAgaXNDb21wbGV0ZWQ6IFN1YmplY3Q8dm9pZD47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcGlRdWV1ZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBxdWV1ZTogQXBpUXVldWVDYWxsW10gPSBbXTtcclxuICBwcml2YXRlIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcXVldWVTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5xdWV1ZVN1YmplY3QucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wcm9jZXNzUXVldWUoKSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGFkZFRvUXVldWUoY2FsbDogQXBpUXVldWVDYWxsLCBwcmlvcml0eTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAocHJpb3JpdHkpIHtcclxuICAgICAgdGhpcy5xdWV1ZS51bnNoaWZ0KGNhbGwpOyAvLyBBZGQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcXVldWUgaWYgaXQgaGFzIGhpZ2hlciBwcmlvcml0eVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGNhbGwpOyAvLyBBZGQgYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUgaWYgaXQgaGFzIGxvd2VyIHByaW9yaXR5XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaXNQcm9jZXNzaW5nKSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzUXVldWUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFwaVF1ZXVlQ2FsbCA9IHRoaXMucXVldWUuc2hpZnQoKTtcclxuICAgIGlmIChhcGlRdWV1ZUNhbGwpIHtcclxuICAgICAgYXdhaXQgYXBpUXVldWVDYWxsLmNhbGxiYWNrKGFwaVF1ZXVlQ2FsbC5jb25maWcpO1xyXG4gICAgICBhcGlRdWV1ZUNhbGwuaXNDb21wbGV0ZWQuY29tcGxldGUoKTtcclxuICAgICAgdGhpcy5xdWV1ZVN1YmplY3QubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|