@smartbit4all/ng-client 3.3.206 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/esm2022/lib/smart-form/services/smartform.layout-definition.service.mjs +542 -0
- package/esm2022/lib/smart-form/services/smartform.service.mjs +640 -0
- package/esm2022/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +15 -0
- 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/esm2022/lib/smart-grid/smart-grid.component.mjs +767 -0
- 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/esm2022/lib/smart-tab-group/smart-tab-group.component.mjs +43 -0
- 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/esm2022/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +20 -0
- 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/esm2022/lib/view-context/smart-ui-action/ui-action.service.mjs +211 -0
- 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/{esm2020 → esm2022}/lib/view-context/smart-view-context.model.mjs +1 -1
- 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 +15903 -15913
- 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 -45
- 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.1.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.layout-definition.service.mjs +0 -542
- package/esm2020/lib/smart-form/services/smartform.service.mjs +0 -640
- package/esm2020/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +0 -14
- 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.component.mjs +0 -767
- 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.component.mjs +0 -43
- 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/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +0 -19
- 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-ui-action/ui-action.service.mjs +0 -211
- 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.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 -16437
- package/fesm2015/smartbit4all-ng-client.mjs.map +0 -1
- package/fesm2020/smartbit4all-ng-client.mjs.map +0 -1
- package/smartbit4all-ng-client-3.3.206.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,767 @@
|
|
|
1
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
2
|
+
import { FlatTreeControl } from '@angular/cdk/tree';
|
|
3
|
+
import { Component, Inject, Input, ViewChild, ViewContainerRef, } from '@angular/core';
|
|
4
|
+
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
|
|
5
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
6
|
+
import { FilterExpressionOrderBy } from '../smart-filter-editor/api/model/filterExpressionOrderBy';
|
|
7
|
+
import { SmartTable, SmartTableButtonType, SmartTableHeaderPropertyType, SmartTableInterfaceTypeEnum, SmartTableOrder, SmartTableType, SmarttableComponent, } from '../smart-table/projects';
|
|
8
|
+
import { UiActionButtonType } from '../view-context/api';
|
|
9
|
+
import { GridSelectionMode, GridSelectionType, GridViewDescriptorKindEnum, } from './api/grid-api';
|
|
10
|
+
import { TableLayoutDefinerComponent } from './components/table-layout-definer/table-layout-definer.component';
|
|
11
|
+
import { GridUiActionType, SmartLayoutDef } from './models/model';
|
|
12
|
+
import { SmartGridService } from './smart-grid.service';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "./smart-grid.service";
|
|
15
|
+
import * as i2 from "../component-factory-service/projects";
|
|
16
|
+
import * as i3 from "@angular/material/dialog";
|
|
17
|
+
import * as i4 from "../view-context/projects";
|
|
18
|
+
import * as i5 from "@angular/common";
|
|
19
|
+
import * as i6 from "@angular/material/icon";
|
|
20
|
+
import * as i7 from "@angular/material/button";
|
|
21
|
+
import * as i8 from "@angular/material/paginator";
|
|
22
|
+
import * as i9 from "@angular/material/tree";
|
|
23
|
+
import * as i10 from "@angular/material/checkbox";
|
|
24
|
+
import * as i11 from "../smart-expandable-section/expandable-section.component";
|
|
25
|
+
import * as i12 from "../view-context/smart-ui-action/ui-action-toolbar.component";
|
|
26
|
+
import * as i13 from "./components/smart-grid-card/smart-grid-card.component";
|
|
27
|
+
export class SmartGridComponent {
|
|
28
|
+
constructor(service, cfService, dialog, uiActionDescriptorService, gridMenuIcon) {
|
|
29
|
+
this.service = service;
|
|
30
|
+
this.cfService = cfService;
|
|
31
|
+
this.dialog = dialog;
|
|
32
|
+
this.uiActionDescriptorService = uiActionDescriptorService;
|
|
33
|
+
this.gridMenuIcon = gridMenuIcon;
|
|
34
|
+
// private readonly defaultPageSize: number = 10;
|
|
35
|
+
this.defaultPageSizeOptions = [5, 10, 25, 50];
|
|
36
|
+
this._destroy$ = new Subject();
|
|
37
|
+
this.dev = false;
|
|
38
|
+
this.pageSizeOptions = this.defaultPageSizeOptions;
|
|
39
|
+
this.selectionChanges = new Subject();
|
|
40
|
+
this.uiActionDescriptors = new Map();
|
|
41
|
+
this.afterViewInitExecuted = false;
|
|
42
|
+
this.isBlocked = true;
|
|
43
|
+
this.getLevel = (node) => node.level ?? 0;
|
|
44
|
+
this.isExpandable = (node) => (node.children && node.children.length > 0 ? true : false);
|
|
45
|
+
this.getChildren = (node) => {
|
|
46
|
+
if (node.children) {
|
|
47
|
+
let rows = this.smartGrid?.gridModel.page.rows?.filter((row) => node.children?.some((child) => child === row.id));
|
|
48
|
+
if (rows) {
|
|
49
|
+
return rows;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return [];
|
|
53
|
+
};
|
|
54
|
+
this.hasChild = (_, _nodeData) => this.isExpandable(_nodeData);
|
|
55
|
+
this.transformer = (row, level) => {
|
|
56
|
+
row.level = level;
|
|
57
|
+
return row;
|
|
58
|
+
};
|
|
59
|
+
this.service.gridModelChanged.subscribe(() => {
|
|
60
|
+
// called after every service call (load, save, refresh, etc.)
|
|
61
|
+
this.smartGrid.gridModel = this.service.gridModel;
|
|
62
|
+
this.render();
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
ngOnChanges(changes) {
|
|
66
|
+
if (changes['smartGrid']) {
|
|
67
|
+
this.smartGrid = changes['smartGrid'].currentValue;
|
|
68
|
+
this.service.paginator = this.smartGrid?.paginator;
|
|
69
|
+
this.setupToolbar();
|
|
70
|
+
}
|
|
71
|
+
if (changes['uuid']) {
|
|
72
|
+
this.uuid = changes['uuid'].currentValue;
|
|
73
|
+
}
|
|
74
|
+
if (this.afterViewInitExecuted && this.uuid && this.smartGrid) {
|
|
75
|
+
this.refresh();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
ngOnDestroy() {
|
|
79
|
+
this._destroy$.next();
|
|
80
|
+
this._destroy$.complete();
|
|
81
|
+
}
|
|
82
|
+
ngAfterViewInit() {
|
|
83
|
+
if (this.dev) {
|
|
84
|
+
// for dev purposes
|
|
85
|
+
if (this.smartGrid.gridModel) {
|
|
86
|
+
this.service.gridModel = this.smartGrid.gridModel;
|
|
87
|
+
this.render();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (this.uuid && this.smartGrid && !this.dev) {
|
|
91
|
+
this.refresh();
|
|
92
|
+
}
|
|
93
|
+
this.afterViewInitExecuted = true;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
*
|
|
97
|
+
* @returns the selected rows of the table
|
|
98
|
+
*/
|
|
99
|
+
getSelectedRows() {
|
|
100
|
+
if (!this.smartTable.selection)
|
|
101
|
+
throw new Error();
|
|
102
|
+
return this.smartTable.selection;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* This method sends a GET request to the generic GridAPI and refreshes the presented
|
|
106
|
+
* grid with the newest one.
|
|
107
|
+
*/
|
|
108
|
+
async refresh() {
|
|
109
|
+
this.setupToolbar();
|
|
110
|
+
// will cause this.service.gridModelChanged to fire
|
|
111
|
+
if (this.uuid) {
|
|
112
|
+
await this.service.load(this.uuid, this.smartGrid.gridIdentifier);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
setupToolbar() {
|
|
116
|
+
// check if toolbar is available _and_ need set up
|
|
117
|
+
if (this.toolbar && this.smartGrid) {
|
|
118
|
+
let toolbarId = this.smartGrid?.gridIdentifier + '_toolbar';
|
|
119
|
+
if (toolbarId !== this.toolbar.id) {
|
|
120
|
+
this.toolbar.id = toolbarId;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async render() {
|
|
125
|
+
const gridModel = this.smartGrid?.gridModel;
|
|
126
|
+
if (gridModel) {
|
|
127
|
+
this.length = gridModel.totalRowCount;
|
|
128
|
+
this.pageSize = gridModel.pageSize;
|
|
129
|
+
this.pageIndex = gridModel.pageIndex ?? 0;
|
|
130
|
+
if (gridModel.pageSizeOptions && gridModel.pageSizeOptions.length > 0) {
|
|
131
|
+
this.pageSizeOptions = gridModel.pageSizeOptions;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
this.pageSizeOptions = this.defaultPageSizeOptions;
|
|
135
|
+
}
|
|
136
|
+
if (gridModel?.view?.descriptor?.showEditColumns) {
|
|
137
|
+
this.smartGrid.showEditColumns = gridModel?.view?.descriptor?.showEditColumns;
|
|
138
|
+
}
|
|
139
|
+
let kind = gridModel?.view?.descriptor?.kind;
|
|
140
|
+
if (kind) {
|
|
141
|
+
let layoutDef;
|
|
142
|
+
if (kind === GridViewDescriptorKindEnum.TABLE) {
|
|
143
|
+
layoutDef = SmartLayoutDef.TABLE;
|
|
144
|
+
}
|
|
145
|
+
else if (kind === GridViewDescriptorKindEnum.TREE) {
|
|
146
|
+
layoutDef = SmartLayoutDef.TREE;
|
|
147
|
+
}
|
|
148
|
+
else if (kind === GridViewDescriptorKindEnum.CARDS) {
|
|
149
|
+
layoutDef = SmartLayoutDef.CARD;
|
|
150
|
+
}
|
|
151
|
+
if (layoutDef) {
|
|
152
|
+
this.smartGrid.layoutDef = layoutDef;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (gridModel?.paginator === true || gridModel?.paginator === false) {
|
|
156
|
+
this.smartGrid.paginator = gridModel.paginator;
|
|
157
|
+
this.service.paginator = this.smartGrid.paginator;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
console.error('GridModel is undefined in component!');
|
|
162
|
+
}
|
|
163
|
+
if (!this.smartGrid.layoutDef) {
|
|
164
|
+
// fallback, default TABLE
|
|
165
|
+
this.smartGrid.layoutDef = SmartLayoutDef.TABLE;
|
|
166
|
+
}
|
|
167
|
+
if (this.smartGrid.layoutDef === SmartLayoutDef.TABLE) {
|
|
168
|
+
this.renderTable();
|
|
169
|
+
}
|
|
170
|
+
else if (this.smartGrid.layoutDef === SmartLayoutDef.EXPANDABLE) {
|
|
171
|
+
this.renderExpandableSections();
|
|
172
|
+
}
|
|
173
|
+
else if (this.smartGrid.layoutDef === SmartLayoutDef.CARD) {
|
|
174
|
+
this.renderCards();
|
|
175
|
+
}
|
|
176
|
+
else if (this.smartGrid.layoutDef === SmartLayoutDef.TREE) {
|
|
177
|
+
this.renderTree();
|
|
178
|
+
}
|
|
179
|
+
this.isBlocked = false;
|
|
180
|
+
}
|
|
181
|
+
clearTable() {
|
|
182
|
+
this.vcRefTable?.clear();
|
|
183
|
+
this.componentRefTable = undefined;
|
|
184
|
+
}
|
|
185
|
+
async renderTable() {
|
|
186
|
+
this.clearTree();
|
|
187
|
+
let tableRow = this.smartGrid.gridModel.page.rows.map((item) => {
|
|
188
|
+
return item;
|
|
189
|
+
});
|
|
190
|
+
if (!tableRow.length) {
|
|
191
|
+
let placeHolderRow = {};
|
|
192
|
+
this.smartGrid.gridModel.view?.descriptor?.columns.map((meta) => {
|
|
193
|
+
placeHolderRow[meta.propertyName] = undefined;
|
|
194
|
+
});
|
|
195
|
+
this.smartGrid.gridModel.page.rows = [placeHolderRow];
|
|
196
|
+
}
|
|
197
|
+
let tableType;
|
|
198
|
+
if (this.smartGrid.tableConfig?.tableType) {
|
|
199
|
+
tableType = this.smartGrid.tableConfig.tableType;
|
|
200
|
+
}
|
|
201
|
+
else if (this.service.gridModel?.view?.descriptor?.selectionType) {
|
|
202
|
+
tableType =
|
|
203
|
+
this.service.gridModel.view.descriptor.selectionType === GridSelectionType.CHECKBOX
|
|
204
|
+
? SmartTableType.CHECK_BOX
|
|
205
|
+
: SmartTableType.ROW_SELECT;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
tableType = SmartTableType.INHERITED;
|
|
209
|
+
}
|
|
210
|
+
if (this.smartGrid.layoutDef === SmartLayoutDef.TABLE) {
|
|
211
|
+
let tableConfig = {
|
|
212
|
+
...this.smartGrid.tableConfig,
|
|
213
|
+
tableRows: tableRow,
|
|
214
|
+
tableType,
|
|
215
|
+
customSmartTableHeaders: await this.constructHeader(),
|
|
216
|
+
expandable: this.smartGrid.expandable,
|
|
217
|
+
expandedComponent: this.smartGrid.expandedComponent,
|
|
218
|
+
type: SmartTableInterfaceTypeEnum.NORMAL,
|
|
219
|
+
sortable: true,
|
|
220
|
+
defaultActionCodes: this.smartGrid?.gridModel.defaultRowActions,
|
|
221
|
+
defaultActions: this.smartGrid?.gridModel.defaultRowActions?.map((code) => {
|
|
222
|
+
return {
|
|
223
|
+
type: code === '_actionSeparator_'
|
|
224
|
+
? SmartTableButtonType.SEPARATOR
|
|
225
|
+
: SmartTableButtonType.NORMAL,
|
|
226
|
+
callback: this.execute.bind(this),
|
|
227
|
+
code: code,
|
|
228
|
+
// label: this.buttonTranslator({ code: code }),
|
|
229
|
+
translator: this.buttonTranslator.bind(this),
|
|
230
|
+
// args: [
|
|
231
|
+
// {
|
|
232
|
+
// code: code,
|
|
233
|
+
// },
|
|
234
|
+
// ],
|
|
235
|
+
};
|
|
236
|
+
}),
|
|
237
|
+
};
|
|
238
|
+
if (this.smartGrid?.gridModel.view?.descriptor?.highlightProperty &&
|
|
239
|
+
this.smartGrid?.gridModel.view?.descriptor?.highlightClass) {
|
|
240
|
+
tableConfig.highlightClass = this.smartGrid.gridModel.view.descriptor.highlightClass;
|
|
241
|
+
tableConfig.highlightProperty = this.smartGrid.gridModel.view.descriptor.highlightProperty;
|
|
242
|
+
}
|
|
243
|
+
if (this.smartGrid.uiActionService &&
|
|
244
|
+
this.smartGrid.uiActionDescriptorService &&
|
|
245
|
+
this.smartGrid.serviceToUse &&
|
|
246
|
+
this.smartGrid.viewContextService) {
|
|
247
|
+
tableConfig.onSelection = this.onSelect.bind(this);
|
|
248
|
+
tableConfig.onAllSelection = this.onSelectAll.bind(this);
|
|
249
|
+
}
|
|
250
|
+
// Prepared for simple clicks
|
|
251
|
+
// if (!tableConfig.onRowClick) {
|
|
252
|
+
// tableConfig.onRowClick = this.onClick.bind(this);
|
|
253
|
+
// }
|
|
254
|
+
if (!tableConfig.onRowDoubleClick) {
|
|
255
|
+
tableConfig.onRowDoubleClick = this.onDoubleClick.bind(this);
|
|
256
|
+
}
|
|
257
|
+
if (!tableConfig.isRowDisabledPropertyName) {
|
|
258
|
+
tableConfig.selectablePropertyName = 'selectable';
|
|
259
|
+
}
|
|
260
|
+
if (tableConfig.asyncOnExpand) {
|
|
261
|
+
tableConfig.rowExpander = this;
|
|
262
|
+
}
|
|
263
|
+
const selectionMode = this.service.gridModel.view?.descriptor?.selectionMode;
|
|
264
|
+
if (!tableConfig.selection &&
|
|
265
|
+
!tableConfig.selectionProperty &&
|
|
266
|
+
selectionMode !== GridSelectionMode.NONE) {
|
|
267
|
+
const isMultiple = selectionMode === GridSelectionMode.MULTIPLE;
|
|
268
|
+
tableConfig.selectionProperty = 'id';
|
|
269
|
+
const selectedIds = this.service.gridModel.page
|
|
270
|
+
.rows.filter((gridRow) => gridRow.selected)
|
|
271
|
+
.map((gridRow) => gridRow.id);
|
|
272
|
+
tableConfig.selection = new SelectionModel(isMultiple, selectedIds);
|
|
273
|
+
}
|
|
274
|
+
this.smartTable = new SmartTable(tableConfig);
|
|
275
|
+
if (this.componentRefTable) {
|
|
276
|
+
this.componentRefTable.instance.updateSmartTable(this.smartTable);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
this.vcRefTable?.clear();
|
|
280
|
+
if (!this.vcRefTable) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
this.componentRefTable = this.cfService.createComponent(this.vcRefTable, SmarttableComponent, new Map([['smartTable', this.smartTable]]));
|
|
284
|
+
let subscription = this.componentRefTable.instance.sortEvent
|
|
285
|
+
.pipe(takeUntil(this.componentRefTable.instance._destroy$))
|
|
286
|
+
.subscribe((header) => {
|
|
287
|
+
header.propertyName = header.propertyName.substring(5);
|
|
288
|
+
switch (header.order) {
|
|
289
|
+
case undefined:
|
|
290
|
+
header.order = SmartTableOrder.ASC;
|
|
291
|
+
break;
|
|
292
|
+
case SmartTableOrder.ASC:
|
|
293
|
+
header.order = SmartTableOrder.DESC;
|
|
294
|
+
break;
|
|
295
|
+
case SmartTableOrder.DESC:
|
|
296
|
+
header.order = undefined;
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
let filter = this.smartGrid.gridModel.view.orderByList.find((filterExpression) => filterExpression.propertyName === header.propertyName);
|
|
300
|
+
if (filter && !header.order) {
|
|
301
|
+
let index = this.smartGrid.gridModel.view?.orderByList.indexOf(filter);
|
|
302
|
+
this.smartGrid.gridModel.view?.orderByList.splice(index, 1);
|
|
303
|
+
}
|
|
304
|
+
else if (filter) {
|
|
305
|
+
filter.order = header.order;
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
this.smartGrid.gridModel.view.orderByList.push({
|
|
309
|
+
order: header.order,
|
|
310
|
+
propertyName: header.propertyName,
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
let gridUpdateData = {
|
|
314
|
+
orderByList: this.smartGrid.gridModel.view.orderByList,
|
|
315
|
+
orderedColumnNames: this.smartGrid.gridModel.view.orderedColumnNames,
|
|
316
|
+
};
|
|
317
|
+
this.service.sort(this.smartGrid, gridUpdateData);
|
|
318
|
+
});
|
|
319
|
+
this.componentRefTable.instance.smartTable.selection?.changed
|
|
320
|
+
.pipe(takeUntil(this.componentRefTable.instance._destroy$))
|
|
321
|
+
.subscribe((row) => {
|
|
322
|
+
this.selectionChanges.next(row);
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
expand(rowId) { }
|
|
328
|
+
async expandAsync(rowIndex) {
|
|
329
|
+
if (this.smartGrid.gridModel.page.rows) {
|
|
330
|
+
let row = this.smartGrid.gridModel.page.rows[rowIndex];
|
|
331
|
+
if (row && row.id) {
|
|
332
|
+
return await this.service.expand(this.smartGrid, row.id);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return await this.service.expand(this.smartGrid, rowIndex.toString());
|
|
336
|
+
}
|
|
337
|
+
renderExpandableSections() {
|
|
338
|
+
this.expandableSections = this.smartGrid.gridModel.page.rows.map((item) => {
|
|
339
|
+
return {
|
|
340
|
+
title: '',
|
|
341
|
+
headerComponent: this.smartGrid.headerComponent,
|
|
342
|
+
headerInputName: this.smartGrid.headerComponentInputName,
|
|
343
|
+
headerData: item,
|
|
344
|
+
customComponent: this.smartGrid.expandableComponent,
|
|
345
|
+
inputName: this.smartGrid.expandableComponentInputName,
|
|
346
|
+
data: item,
|
|
347
|
+
};
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
renderCards() {
|
|
351
|
+
// TODO
|
|
352
|
+
}
|
|
353
|
+
isMultipleSelection() {
|
|
354
|
+
const selectionMode = this.service.gridModel.view?.descriptor?.selectionMode;
|
|
355
|
+
return selectionMode === GridSelectionMode.MULTIPLE;
|
|
356
|
+
}
|
|
357
|
+
clearTree() {
|
|
358
|
+
this.treeControl = undefined;
|
|
359
|
+
this.treeDataSource = undefined;
|
|
360
|
+
this.treeFlattener = undefined;
|
|
361
|
+
this.treeChecklistSelection = undefined;
|
|
362
|
+
}
|
|
363
|
+
renderTree() {
|
|
364
|
+
this.clearTable();
|
|
365
|
+
if (!this.treeDataSource) {
|
|
366
|
+
this.treeFlattener = new MatTreeFlattener(this.transformer, this.getLevel, this.isExpandable, this.getChildren);
|
|
367
|
+
this.treeControl = new FlatTreeControl(this.getLevel, this.isExpandable);
|
|
368
|
+
this.treeDataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
|
|
369
|
+
this.treeChecklistSelection = new SelectionModel(this.isMultipleSelection());
|
|
370
|
+
}
|
|
371
|
+
let nodes = this.treeControl?.dataNodes;
|
|
372
|
+
let expandedNodes;
|
|
373
|
+
if (nodes) {
|
|
374
|
+
expandedNodes = nodes
|
|
375
|
+
.filter((node) => this.treeControl?.isExpandable(node))
|
|
376
|
+
.filter((node) => this.treeControl?.isExpanded(node))
|
|
377
|
+
.map((node) => node.id);
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
expandedNodes = [];
|
|
381
|
+
}
|
|
382
|
+
this.smartGrid.gridModel.page.rows.forEach((row) => (row.level = undefined));
|
|
383
|
+
this.treeDataSource.data = this.smartGrid.gridModel.page.rows.filter((row) => !row.parent);
|
|
384
|
+
this.treeChecklistSelection?.clear();
|
|
385
|
+
this.treeControl?.dataNodes.forEach((node) => {
|
|
386
|
+
if (node.selected) {
|
|
387
|
+
this.treeChecklistSelection?.select(node);
|
|
388
|
+
}
|
|
389
|
+
});
|
|
390
|
+
this.treeControl?.collapseAll();
|
|
391
|
+
expandedNodes.forEach((rowId) => {
|
|
392
|
+
let row = this.treeControl?.dataNodes.find((row) => rowId === row.id);
|
|
393
|
+
if (row) {
|
|
394
|
+
this.treeControl?.expand(row);
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
getTreeItem(row) {
|
|
399
|
+
let columns = this.smartGrid?.gridModel.view?.orderedColumnNames;
|
|
400
|
+
let data = row.data;
|
|
401
|
+
if (columns && columns.length > 0) {
|
|
402
|
+
return columns.map((col) => data[col]).join(' ');
|
|
403
|
+
}
|
|
404
|
+
return row.id;
|
|
405
|
+
}
|
|
406
|
+
/** Toggle the treeNode selection. Select/deselect all the descendants node */
|
|
407
|
+
treeNodeSelectionToggle(node) {
|
|
408
|
+
if (!this.treeChecklistSelection) {
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
let selectionBefore = this.treeChecklistSelection.selected.map((row) => row.id);
|
|
412
|
+
this.treeChecklistSelection.toggle(node);
|
|
413
|
+
if (this.isMultipleSelection()) {
|
|
414
|
+
const descendants = this.treeControl.getDescendants(node);
|
|
415
|
+
this.treeChecklistSelection.isSelected(node)
|
|
416
|
+
? this.treeChecklistSelection.select(...descendants)
|
|
417
|
+
: this.treeChecklistSelection.deselect(...descendants);
|
|
418
|
+
this.checkAllParentsSelection(node);
|
|
419
|
+
}
|
|
420
|
+
let selectionAfter = this.treeChecklistSelection.selected.map((row) => row.id);
|
|
421
|
+
let selectedIds = selectionAfter.filter((s) => !selectionBefore.includes(s));
|
|
422
|
+
let unselectedIds = selectionBefore.filter((s) => !selectionAfter.includes(s));
|
|
423
|
+
if (this.dev) {
|
|
424
|
+
// when service call is active (!dev), onSelect will toggle row.selected
|
|
425
|
+
this.service.gridModel.page.rows
|
|
426
|
+
?.filter((row) => selectedIds.includes(row.id))
|
|
427
|
+
.forEach((row) => (row.selected = true));
|
|
428
|
+
this.service.gridModel.page.rows
|
|
429
|
+
?.filter((row) => unselectedIds.includes(row.id))
|
|
430
|
+
.forEach((row) => (row.selected = false));
|
|
431
|
+
}
|
|
432
|
+
this.onSelectRows(selectedIds, unselectedIds);
|
|
433
|
+
}
|
|
434
|
+
checkAllParentsSelection(node) {
|
|
435
|
+
let parent = this.getParentNode(node);
|
|
436
|
+
while (parent) {
|
|
437
|
+
this.checkParentNodeSelection(parent);
|
|
438
|
+
parent = this.getParentNode(parent);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
checkParentNodeSelection(node) {
|
|
442
|
+
if (!this.treeChecklistSelection) {
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
const nodeSelected = this.treeChecklistSelection.isSelected(node);
|
|
446
|
+
const descAllSelected = this.descendantsAllSelected(node);
|
|
447
|
+
if (nodeSelected && !descAllSelected) {
|
|
448
|
+
this.treeChecklistSelection.deselect(node);
|
|
449
|
+
}
|
|
450
|
+
else if (!nodeSelected && descAllSelected) {
|
|
451
|
+
this.treeChecklistSelection.select(node);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
/* Get the parent node of a node */
|
|
455
|
+
getParentNode(node) {
|
|
456
|
+
const currentLevel = this.getLevel(node);
|
|
457
|
+
if (currentLevel < 1) {
|
|
458
|
+
return null;
|
|
459
|
+
}
|
|
460
|
+
const startIndex = this.treeControl.dataNodes.indexOf(node) - 1;
|
|
461
|
+
for (let i = startIndex; i >= 0; i--) {
|
|
462
|
+
const currentNode = this.treeControl.dataNodes[i];
|
|
463
|
+
if (this.getLevel(currentNode) < currentLevel) {
|
|
464
|
+
return currentNode;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
return null;
|
|
468
|
+
}
|
|
469
|
+
/** Whether all the descendants of the node are selected. */
|
|
470
|
+
descendantsAllSelected(node) {
|
|
471
|
+
if (!this.treeControl || !this.treeChecklistSelection) {
|
|
472
|
+
return false;
|
|
473
|
+
}
|
|
474
|
+
const descendants = this.treeControl.getDescendants(node);
|
|
475
|
+
const descAllSelected = descendants.length > 0 &&
|
|
476
|
+
descendants.every((child) => {
|
|
477
|
+
return this.treeChecklistSelection.isSelected(child);
|
|
478
|
+
});
|
|
479
|
+
return descAllSelected;
|
|
480
|
+
}
|
|
481
|
+
/** Whether part of the descendants are selected */
|
|
482
|
+
descendantsPartiallySelected(node) {
|
|
483
|
+
if (!this.treeControl || !this.treeChecklistSelection) {
|
|
484
|
+
return false;
|
|
485
|
+
}
|
|
486
|
+
const descendants = this.treeControl.getDescendants(node);
|
|
487
|
+
let result = descendants.some((child) => this.treeChecklistSelection.isSelected(child));
|
|
488
|
+
if (this.isMultipleSelection()) {
|
|
489
|
+
result = result && !this.descendantsAllSelected(node);
|
|
490
|
+
}
|
|
491
|
+
return result;
|
|
492
|
+
}
|
|
493
|
+
async constructHeader() {
|
|
494
|
+
if (this.smartGrid.gridModel.page.rows && this.smartGrid.gridModel.page.rows.length) {
|
|
495
|
+
await Promise.all(this.smartGrid.gridModel.page.rows.map(async (gridRow) => {
|
|
496
|
+
let newUiActions = gridRow.actions?.filter((uiAction) => !this.uiActionDescriptors.get(uiAction.code));
|
|
497
|
+
if (newUiActions) {
|
|
498
|
+
await Promise.all(newUiActions.map(async (uiAction) => {
|
|
499
|
+
let descriptor = await this.smartGrid.uiActionDescriptorService?.getActionDescriptor(uiAction);
|
|
500
|
+
if (!descriptor) {
|
|
501
|
+
descriptor = {
|
|
502
|
+
title: uiAction.code ?? 'CODE',
|
|
503
|
+
color: 'primary',
|
|
504
|
+
type: UiActionButtonType.NORMAL,
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
this.uiActionDescriptors.set(uiAction.code, descriptor);
|
|
508
|
+
}));
|
|
509
|
+
}
|
|
510
|
+
}));
|
|
511
|
+
}
|
|
512
|
+
let orederedDescColumns = this.smartGrid.gridModel.view.orderedColumnNames.map((propertyName) => this.smartGrid.gridModel.view.descriptor.columns.find((colDescriptor) => colDescriptor.propertyName === propertyName)).flatMap((f) => f ?? []);
|
|
513
|
+
let header = await Promise.all(orederedDescColumns.map(async (descColumn) => {
|
|
514
|
+
let customTableHeader = this.smartGrid.tableConfig?.customSmartTableHeaders?.find((header) => header.propertyName === descColumn.propertyName);
|
|
515
|
+
let filterExpressionOrderByItem = this.smartGrid.gridModel.view?.orderByList?.find((filterExpression) => filterExpression.propertyName === descColumn.propertyName);
|
|
516
|
+
let order;
|
|
517
|
+
let orderNumber;
|
|
518
|
+
if (filterExpressionOrderByItem) {
|
|
519
|
+
order =
|
|
520
|
+
filterExpressionOrderByItem.order === FilterExpressionOrderBy.OrderEnum.Asc
|
|
521
|
+
? SmartTableOrder.ASC
|
|
522
|
+
: SmartTableOrder.DESC;
|
|
523
|
+
if (this.service.gridModel.view.orderByList.length > 1) {
|
|
524
|
+
orderNumber = this.service.gridModel.view.orderByList.findIndex((filter) => filter.propertyName === descColumn.propertyName);
|
|
525
|
+
orderNumber++;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
const orignalLabel = customTableHeader?.label ?? descColumn.label;
|
|
529
|
+
let label = '';
|
|
530
|
+
if (!descColumn.hideLabel) {
|
|
531
|
+
if (this.smartGrid.translateService) {
|
|
532
|
+
label = await this.smartGrid.translateService?.get(orignalLabel).toPromise();
|
|
533
|
+
}
|
|
534
|
+
else {
|
|
535
|
+
label = orignalLabel;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
let properties = customTableHeader?.properties;
|
|
539
|
+
if (!properties) {
|
|
540
|
+
if (descColumn.typeClass === 'java.time.OffsetDateTime' ||
|
|
541
|
+
descColumn.typeClass === 'java.time.LocalDateTime') {
|
|
542
|
+
let dateFormat = descColumn.typeFormat ?? 'yyyy.MM.dd H:mm';
|
|
543
|
+
properties = {
|
|
544
|
+
type: SmartTableHeaderPropertyType.DATETIME,
|
|
545
|
+
dateFormat,
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
else if (descColumn.typeClass === 'java.time.LocalDate') {
|
|
549
|
+
let dateFormat = descColumn.typeFormat ?? 'yyyy.MM.dd';
|
|
550
|
+
properties = {
|
|
551
|
+
type: SmartTableHeaderPropertyType.DATE,
|
|
552
|
+
dateFormat,
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
else if (descColumn.typeClass === 'java.time.LocalTime') {
|
|
556
|
+
let dateFormat = descColumn.typeFormat ?? 'H:mm';
|
|
557
|
+
properties = {
|
|
558
|
+
type: SmartTableHeaderPropertyType.TIME,
|
|
559
|
+
dateFormat,
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
else if (descColumn.typeClass === 'java.lang.Boolean') {
|
|
563
|
+
properties = {
|
|
564
|
+
type: SmartTableHeaderPropertyType.CHECKBOX,
|
|
565
|
+
};
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
return {
|
|
569
|
+
...customTableHeader,
|
|
570
|
+
label: label,
|
|
571
|
+
propertyName: 'data.' + descColumn.propertyName,
|
|
572
|
+
order,
|
|
573
|
+
orderNumber,
|
|
574
|
+
properties,
|
|
575
|
+
style: descColumn.style,
|
|
576
|
+
};
|
|
577
|
+
}));
|
|
578
|
+
let complement = this.smartGrid.tableConfig?.customSmartTableHeaders?.filter((tableHeader) => !header.some((tH) => tH.propertyName.includes(tableHeader.propertyName)));
|
|
579
|
+
if (complement) {
|
|
580
|
+
header.push(...complement);
|
|
581
|
+
}
|
|
582
|
+
if (this.smartGrid.options?.simpleButtons) {
|
|
583
|
+
this.smartGrid.options.simpleButtons.forEach((uiActionCode) => {
|
|
584
|
+
header.push({
|
|
585
|
+
label: '',
|
|
586
|
+
propertyName: 'simple_buttons',
|
|
587
|
+
buttons: [
|
|
588
|
+
{
|
|
589
|
+
type: SmartTableButtonType.RAISED,
|
|
590
|
+
callback: this.execute.bind(this),
|
|
591
|
+
// label: this.buttonTranslator({ code: uiActionCode }),
|
|
592
|
+
args: [
|
|
593
|
+
{
|
|
594
|
+
code: uiActionCode,
|
|
595
|
+
},
|
|
596
|
+
],
|
|
597
|
+
color: 'primary',
|
|
598
|
+
showButtonIf: (row) => row.actions.some((item) => {
|
|
599
|
+
return item.code === uiActionCode;
|
|
600
|
+
}),
|
|
601
|
+
},
|
|
602
|
+
],
|
|
603
|
+
});
|
|
604
|
+
});
|
|
605
|
+
}
|
|
606
|
+
if (!header.some((header) => header.propertyName === 'my_menu')) {
|
|
607
|
+
if (this.smartGrid.options?.rowUiActionType === GridUiActionType.POPUP_MENU) {
|
|
608
|
+
let icon = this.gridMenuIcon ?? 'more_vert';
|
|
609
|
+
header.push({
|
|
610
|
+
label: '',
|
|
611
|
+
propertyName: 'my_menu',
|
|
612
|
+
buttons: [
|
|
613
|
+
{
|
|
614
|
+
type: SmartTableButtonType.MENU,
|
|
615
|
+
callback: this.execute.bind(this),
|
|
616
|
+
icon: icon,
|
|
617
|
+
menuItemButtonsPropertyName: 'actions',
|
|
618
|
+
translator: this.buttonTranslator.bind(this),
|
|
619
|
+
args: [],
|
|
620
|
+
},
|
|
621
|
+
],
|
|
622
|
+
isSortable: false,
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
return header;
|
|
627
|
+
}
|
|
628
|
+
async onChangePage(event) {
|
|
629
|
+
let offset = event.pageSize * event.pageIndex;
|
|
630
|
+
let limit = event.pageSize;
|
|
631
|
+
this.pageIndex = event.pageIndex;
|
|
632
|
+
await this.service.setPage(this.smartGrid.gridModel.viewUuid, this.smartGrid.gridIdentifier, offset.toString(), limit.toString());
|
|
633
|
+
}
|
|
634
|
+
async execute(args, row, uiAction) {
|
|
635
|
+
let _uiAction;
|
|
636
|
+
if (!uiAction) {
|
|
637
|
+
uiAction = row.actions.filter((action) => action.code === args[0].code)[0];
|
|
638
|
+
}
|
|
639
|
+
_uiAction = { ...uiAction };
|
|
640
|
+
if (_uiAction.disabled) {
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
643
|
+
_uiAction.params = {
|
|
644
|
+
...uiAction.params,
|
|
645
|
+
model: row,
|
|
646
|
+
};
|
|
647
|
+
let uiActionModel = {
|
|
648
|
+
serviceToUse: this.smartGrid.serviceToUse,
|
|
649
|
+
uiAction: _uiAction,
|
|
650
|
+
};
|
|
651
|
+
if (this.smartGrid.options?.uiActionModelCallback) {
|
|
652
|
+
uiActionModel = this.smartGrid.options.uiActionModelCallback(uiActionModel);
|
|
653
|
+
}
|
|
654
|
+
this.smartGrid.uiActionService.uiActionModel = uiActionModel;
|
|
655
|
+
this.smartGrid.uiActionService.execute(_uiAction, {
|
|
656
|
+
widgetId: this.smartGrid.gridIdentifier,
|
|
657
|
+
nodeId: row.id,
|
|
658
|
+
});
|
|
659
|
+
}
|
|
660
|
+
buttonTranslator(uiAction) {
|
|
661
|
+
let desc = this.uiActionDescriptors.get(uiAction.code);
|
|
662
|
+
if (!desc) {
|
|
663
|
+
desc = {
|
|
664
|
+
title: uiAction.code,
|
|
665
|
+
type: UiActionButtonType.FLAT,
|
|
666
|
+
color: 'primary',
|
|
667
|
+
};
|
|
668
|
+
}
|
|
669
|
+
if (uiAction.descriptor) {
|
|
670
|
+
this.uiActionDescriptorService.mergeActionDescriptorIntoClient(uiAction.descriptor, desc);
|
|
671
|
+
}
|
|
672
|
+
return desc;
|
|
673
|
+
}
|
|
674
|
+
layoutDef() {
|
|
675
|
+
return SmartLayoutDef;
|
|
676
|
+
}
|
|
677
|
+
onClick(gridRow) {
|
|
678
|
+
this.handleOnClick(gridRow);
|
|
679
|
+
}
|
|
680
|
+
onDoubleClick(gridRow) {
|
|
681
|
+
this.handleOnClick(gridRow);
|
|
682
|
+
}
|
|
683
|
+
handleOnClick(gridRow) {
|
|
684
|
+
let defaultRowAction;
|
|
685
|
+
if (this.service.gridModel?.defaultRowActions) {
|
|
686
|
+
for (let index = 0; index < this.service.gridModel.defaultRowActions.length; index++) {
|
|
687
|
+
const defaultRowActionCode = this.service.gridModel.defaultRowActions[index];
|
|
688
|
+
defaultRowAction = gridRow.actions.find((uiAction) => uiAction.code === defaultRowActionCode);
|
|
689
|
+
if (defaultRowAction) {
|
|
690
|
+
this.execute([], gridRow, defaultRowAction);
|
|
691
|
+
return;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
async onSelect(rowId) {
|
|
697
|
+
this.isBlocked = true;
|
|
698
|
+
if (this.dev) {
|
|
699
|
+
this.render();
|
|
700
|
+
}
|
|
701
|
+
else {
|
|
702
|
+
const row = this.service.gridModel.page.rows?.find((gridRow) => gridRow.id === rowId);
|
|
703
|
+
const viewContextChange = await this.service.select(this.smartGrid, row);
|
|
704
|
+
this.smartGrid.viewContextService.handleChanges(viewContextChange.changes);
|
|
705
|
+
this.refresh();
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
async onSelectAll(selected) {
|
|
709
|
+
this.isBlocked = true;
|
|
710
|
+
const viewContextChange = await this.service.selectAll(this.smartGrid, selected);
|
|
711
|
+
this.smartGrid.viewContextService.handleChanges(viewContextChange.changes);
|
|
712
|
+
this.refresh();
|
|
713
|
+
}
|
|
714
|
+
async onSelectRows(selectedIds, unselectedIds) {
|
|
715
|
+
this.isBlocked = true;
|
|
716
|
+
if (this.dev) {
|
|
717
|
+
this.render();
|
|
718
|
+
}
|
|
719
|
+
else {
|
|
720
|
+
let selected = selectedIds.filter((item) => item !== undefined);
|
|
721
|
+
let unselected = unselectedIds.filter((item) => item !== undefined);
|
|
722
|
+
const viewContextChange = await this.service.selectRows(this.smartGrid, selected, unselected);
|
|
723
|
+
this.smartGrid.viewContextService.handleChanges(viewContextChange.changes);
|
|
724
|
+
this.refresh();
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
editColumns() {
|
|
728
|
+
let dialogData = {
|
|
729
|
+
content: {
|
|
730
|
+
title: 'Oszlopok testreszabása',
|
|
731
|
+
},
|
|
732
|
+
size: {},
|
|
733
|
+
customComponent: TableLayoutDefinerComponent,
|
|
734
|
+
customComponentInputs: {
|
|
735
|
+
config: {
|
|
736
|
+
uuid: this.uuid,
|
|
737
|
+
identifier: this.smartGrid.gridIdentifier,
|
|
738
|
+
view: this.service.gridModel.view,
|
|
739
|
+
service: this.service,
|
|
740
|
+
},
|
|
741
|
+
},
|
|
742
|
+
};
|
|
743
|
+
this.dialog.open(TableLayoutDefinerComponent, { data: dialogData });
|
|
744
|
+
}
|
|
745
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartGridComponent, deps: [{ token: i1.SmartGridService }, { token: i2.ComponentFactoryService }, { token: i3.MatDialog }, { token: i4.UiActionDescriptorService }, { token: 'gridMenuIcon' }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
746
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: SmartGridComponent, selector: "smart-grid", inputs: { smartGrid: "smartGrid", uuid: "uuid", dev: "dev" }, providers: [SmartGridService], viewQueries: [{ propertyName: "vcRefTable", first: true, predicate: ["table"], descendants: true, read: ViewContainerRef }, { propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatMiniFabButton, selector: "button[mat-mini-fab]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "directive", type: i9.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i9.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i9.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i9.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i9.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i11.ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { kind: "component", type: i12.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id"] }, { kind: "component", type: i13.SmartGridCardComponent, selector: "app-smart-grid-card", inputs: ["item", "smartGrid", "onSelect"] }] }); }
|
|
747
|
+
}
|
|
748
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SmartGridComponent, decorators: [{
|
|
749
|
+
type: Component,
|
|
750
|
+
args: [{ selector: 'smart-grid', providers: [SmartGridService], template: "<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}\n"] }]
|
|
751
|
+
}], ctorParameters: () => [{ type: i1.SmartGridService }, { type: i2.ComponentFactoryService }, { type: i3.MatDialog }, { type: i4.UiActionDescriptorService }, { type: undefined, decorators: [{
|
|
752
|
+
type: Inject,
|
|
753
|
+
args: ['gridMenuIcon']
|
|
754
|
+
}] }], propDecorators: { smartGrid: [{
|
|
755
|
+
type: Input
|
|
756
|
+
}], uuid: [{
|
|
757
|
+
type: Input
|
|
758
|
+
}], dev: [{
|
|
759
|
+
type: Input
|
|
760
|
+
}], vcRefTable: [{
|
|
761
|
+
type: ViewChild,
|
|
762
|
+
args: ['table', { read: ViewContainerRef }]
|
|
763
|
+
}], toolbar: [{
|
|
764
|
+
type: ViewChild,
|
|
765
|
+
args: ['toolbar']
|
|
766
|
+
}] } });
|
|
767
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUlMLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixvQkFBb0IsRUFFcEIsNEJBQTRCLEVBRTVCLDJCQUEyQixFQUMzQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBWSxrQkFBa0IsRUFBc0IsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RixPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUVqQiwwQkFBMEIsR0FDM0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUMvRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQWEsY0FB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Z0JBQWdCLHVJQy9EOUMsNmdJQW1IQTs7MkZEOURhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSxZQUFZLGFBR1gsQ0FBQyxnQkFBZ0IsQ0FBQzs7MEJBbUQxQixNQUFNOzJCQUFDLGNBQWM7eUNBNUNmLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFHMEMsVUFBVTtzQkFBekQsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS3hCLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudEZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50LWZhY3Rvcnktc2VydmljZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0RGlhbG9nRGF0YSB9IGZyb20gJy4uL3NtYXJ0LWRpYWxvZy9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEV4cGFuZGFibGVTZWN0aW9uIH0gZnJvbSAnLi4vc21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uL3Byb2plY3RzJztcclxuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkgfSBmcm9tICcuLi9zbWFydC1maWx0ZXItZWRpdG9yL2FwaS9tb2RlbC9maWx0ZXJFeHByZXNzaW9uT3JkZXJCeSc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRUYWJsZSxcclxuICBTbWFydFRhYmxlQnV0dG9uVHlwZSxcclxuICBTbWFydFRhYmxlSGVhZGVyLFxyXG4gIFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUsXHJcbiAgU21hcnRUYWJsZUludGVyZmFjZSxcclxuICBTbWFydFRhYmxlSW50ZXJmYWNlVHlwZUVudW0sXHJcbiAgU21hcnRUYWJsZU9yZGVyLFxyXG4gIFNtYXJ0VGFibGVUeXBlLFxyXG4gIFNtYXJ0dGFibGVDb21wb25lbnQsXHJcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbiwgVWlBY3Rpb25CdXR0b25UeXBlLCBVaUFjdGlvbkRlc2NyaXB0b3IgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvYXBpJztcclxuaW1wb3J0IHsgVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSwgVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuaW1wb3J0IHtcclxuICBHcmlkQ29sdW1uTWV0YSxcclxuICBHcmlkUm93LFxyXG4gIEdyaWRTZWxlY3Rpb25Nb2RlLFxyXG4gIEdyaWRTZWxlY3Rpb25UeXBlLFxyXG4gIEdyaWRVcGRhdGVEYXRhLFxyXG4gIEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLFxyXG59IGZyb20gJy4vYXBpL2dyaWQtYXBpJztcclxuaW1wb3J0IHsgVGFibGVMYXlvdXREZWZpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLWxheW91dC1kZWZpbmVyL3RhYmxlLWxheW91dC1kZWZpbmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdyaWRVaUFjdGlvblR5cGUsIFNtYXJ0R3JpZCwgU21hcnRMYXlvdXREZWYgfSBmcm9tICcuL21vZGVscy9tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0R3JpZFNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LWdyaWQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1ncmlkLmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtTbWFydEdyaWRTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0R3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICAvLyBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYWdlU2l6ZTogbnVtYmVyID0gMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjUsIDUwXTtcclxuXHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBJbnB1dCgpIHNtYXJ0R3JpZD86IFNtYXJ0R3JpZDtcclxuICBASW5wdXQoKSB1dWlkPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRldjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyB0YWJsZVxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHZjUmVmVGFibGU/OiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIGNvbXBvbmVudFJlZlRhYmxlPzogQ29tcG9uZW50UmVmPFNtYXJ0dGFibGVDb21wb25lbnQ+O1xyXG4gIHNtYXJ0VGFibGUhOiBTbWFydFRhYmxlPEdyaWRSb3c+O1xyXG5cclxuICAvLyB0b29sYmFyXHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhcicpIHRvb2xiYXI/OiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ7XHJcblxyXG4gIC8vIGV4cGFuZGFibGVcclxuICAvLyBncmlkRGF0YVxyXG4gIGV4cGFuZGFibGVTZWN0aW9ucz86IEV4cGFuZGFibGVTZWN0aW9uPGFueT5bXTtcclxuXHJcbiAgcGFnZUV2ZW50PzogUGFnZUV2ZW50O1xyXG4gIGRhdGFzb3VyY2U/OiBudWxsO1xyXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xyXG4gIGxlbmd0aD86IG51bWJlcjtcclxuICBwYWdlSW5kZXg/OiBudW1iZXI7XHJcbiAgdmFsdWVzOiBhbnk7XHJcbiAgZ3JpZFRhYmxlITogU21hcnRUYWJsZTxhbnk+O1xyXG5cclxuICBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zO1xyXG5cclxuICBzZWxlY3Rpb25DaGFuZ2VzOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICB1aUFjdGlvbkRlc2NyaXB0b3JzOiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBhZnRlclZpZXdJbml0RXhlY3V0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0Jsb2NrZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyB0cmVlXHJcbiAgdHJlZUNvbnRyb2w/OiBGbGF0VHJlZUNvbnRyb2w8R3JpZFJvdz47XHJcbiAgdHJlZUZsYXR0ZW5lcj86IE1hdFRyZWVGbGF0dGVuZXI8R3JpZFJvdywgR3JpZFJvdz47XHJcbiAgdHJlZURhdGFTb3VyY2U/OiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8R3JpZFJvdywgR3JpZFJvdz47XHJcbiAgdHJlZUNoZWNrbGlzdFNlbGVjdGlvbj86IFNlbGVjdGlvbk1vZGVsPEdyaWRSb3c+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2VydmljZTogU21hcnRHcmlkU2VydmljZSxcclxuICAgIHByaXZhdGUgY2ZTZXJ2aWNlOiBDb21wb25lbnRGYWN0b3J5U2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdncmlkTWVudUljb24nKSBwcml2YXRlIGdyaWRNZW51SWNvbj86IHN0cmluZ1xyXG4gICkge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgLy8gY2FsbGVkIGFmdGVyIGV2ZXJ5IHNlcnZpY2UgY2FsbCAobG9hZCwgc2F2ZSwgcmVmcmVzaCwgZXRjLilcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWw7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzbWFydEdyaWQnXSkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCA9IGNoYW5nZXNbJ3NtYXJ0R3JpZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy5zZXJ2aWNlLnBhZ2luYXRvciA9IHRoaXMuc21hcnRHcmlkPy5wYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuc2V0dXBUb29sYmFyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sndXVpZCddKSB7XHJcbiAgICAgIHRoaXMudXVpZCA9IGNoYW5nZXNbJ3V1aWQnXS5jdXJyZW50VmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hZnRlclZpZXdJbml0RXhlY3V0ZWQgJiYgdGhpcy51dWlkICYmIHRoaXMuc21hcnRHcmlkKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGV2KSB7XHJcbiAgICAgIC8vIGZvciBkZXYgcHVycG9zZXNcclxuICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwpIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbDtcclxuICAgICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudXVpZCAmJiB0aGlzLnNtYXJ0R3JpZCAmJiAhdGhpcy5kZXYpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFmdGVyVmlld0luaXRFeGVjdXRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHRoZSBzZWxlY3RlZCByb3dzIG9mIHRoZSB0YWJsZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFJvd3MoKTogU2VsZWN0aW9uTW9kZWw8R3JpZFJvdz4ge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uKSB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgIHJldHVybiB0aGlzLnNtYXJ0VGFibGUhLnNlbGVjdGlvbiE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIEdFVCByZXF1ZXN0IHRvIHRoZSBnZW5lcmljIEdyaWRBUEkgYW5kIHJlZnJlc2hlcyB0aGUgcHJlc2VudGVkXHJcbiAgICogZ3JpZCB3aXRoIHRoZSBuZXdlc3Qgb25lLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zZXR1cFRvb2xiYXIoKTtcclxuICAgIC8vIHdpbGwgY2F1c2UgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbENoYW5nZWQgdG8gZmlyZVxyXG4gICAgaWYgKHRoaXMudXVpZCkge1xyXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2UubG9hZCh0aGlzLnV1aWQsIHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0dXBUb29sYmFyKCkge1xyXG4gICAgLy8gY2hlY2sgaWYgdG9vbGJhciBpcyBhdmFpbGFibGUgX2FuZF8gbmVlZCBzZXQgdXBcclxuICAgIGlmICh0aGlzLnRvb2xiYXIgJiYgdGhpcy5zbWFydEdyaWQpIHtcclxuICAgICAgbGV0IHRvb2xiYXJJZCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkSWRlbnRpZmllciArICdfdG9vbGJhcic7XHJcbiAgICAgIGlmICh0b29sYmFySWQgIT09IHRoaXMudG9vbGJhci5pZCkge1xyXG4gICAgICAgIHRoaXMudG9vbGJhci5pZCA9IHRvb2xiYXJJZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGdyaWRNb2RlbCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWw7XHJcbiAgICBpZiAoZ3JpZE1vZGVsKSB7XHJcbiAgICAgIHRoaXMubGVuZ3RoID0gZ3JpZE1vZGVsLnRvdGFsUm93Q291bnQ7XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSBncmlkTW9kZWwucGFnZVNpemU7XHJcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gZ3JpZE1vZGVsLnBhZ2VJbmRleCA/PyAwO1xyXG4gICAgICBpZiAoZ3JpZE1vZGVsLnBhZ2VTaXplT3B0aW9ucyAmJiBncmlkTW9kZWwucGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IGdyaWRNb2RlbC5wYWdlU2l6ZU9wdGlvbnM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnNob3dFZGl0Q29sdW1ucyA9IGdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBraW5kID0gZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5raW5kO1xyXG4gICAgICBpZiAoa2luZCkge1xyXG4gICAgICAgIGxldCBsYXlvdXREZWY7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLlRBQkxFKSB7XHJcbiAgICAgICAgICBsYXlvdXREZWYgPSBTbWFydExheW91dERlZi5UQUJMRTtcclxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLlRSRUUpIHtcclxuICAgICAgICAgIGxheW91dERlZiA9IFNtYXJ0TGF5b3V0RGVmLlRSRUU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSBHcmlkVmlld0Rlc2NyaXB0b3JLaW5kRW51bS5DQVJEUykge1xyXG4gICAgICAgICAgbGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuQ0FSRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheW91dERlZikge1xyXG4gICAgICAgICAgdGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9IGxheW91dERlZjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyaWRNb2RlbD8ucGFnaW5hdG9yID09PSB0cnVlIHx8IGdyaWRNb2RlbD8ucGFnaW5hdG9yID09PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5wYWdpbmF0b3IgPSBncmlkTW9kZWwucGFnaW5hdG9yO1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5wYWdpbmF0b3IgPSB0aGlzLnNtYXJ0R3JpZCEucGFnaW5hdG9yO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdHcmlkTW9kZWwgaXMgdW5kZWZpbmVkIGluIGNvbXBvbmVudCEnKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zbWFydEdyaWQhLmxheW91dERlZikge1xyXG4gICAgICAvLyBmYWxsYmFjaywgZGVmYXVsdCBUQUJMRVxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuVEFCTEU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVEFCTEUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5FWFBBTkRBQkxFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyRXhwYW5kYWJsZVNlY3Rpb25zKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLkNBUkQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJDYXJkcygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UUkVFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUYWJsZSgpIHtcclxuICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlclRhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jbGVhclRyZWUoKTtcclxuICAgIGxldCB0YWJsZVJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwhLnBhZ2Uucm93cyEubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXRhYmxlUm93Lmxlbmd0aCkge1xyXG4gICAgICBsZXQgcGxhY2VIb2xkZXJSb3c6IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmNvbHVtbnMubWFwKChtZXRhOiBHcmlkQ29sdW1uTWV0YSkgPT4ge1xyXG4gICAgICAgIHBsYWNlSG9sZGVyUm93W21ldGEucHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzID0gW3BsYWNlSG9sZGVyUm93XTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGFibGVUeXBlO1xyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8udGFibGVUeXBlKSB7XHJcbiAgICAgIHRhYmxlVHlwZSA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZy50YWJsZVR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LnNlbGVjdGlvblR5cGUpIHtcclxuICAgICAgdGFibGVUeXBlID1cclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5zZWxlY3Rpb25UeXBlID09PSBHcmlkU2VsZWN0aW9uVHlwZS5DSEVDS0JPWFxyXG4gICAgICAgICAgPyBTbWFydFRhYmxlVHlwZS5DSEVDS19CT1hcclxuICAgICAgICAgIDogU21hcnRUYWJsZVR5cGUuUk9XX1NFTEVDVDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhYmxlVHlwZSA9IFNtYXJ0VGFibGVUeXBlLklOSEVSSVRFRDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVEFCTEUpIHtcclxuICAgICAgbGV0IHRhYmxlQ29uZmlnOiBTbWFydFRhYmxlSW50ZXJmYWNlPEdyaWRSb3c+ID0ge1xyXG4gICAgICAgIC4uLnRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZyxcclxuICAgICAgICB0YWJsZVJvd3M6IHRhYmxlUm93LFxyXG4gICAgICAgIHRhYmxlVHlwZSxcclxuICAgICAgICBjdXN0b21TbWFydFRhYmxlSGVhZGVyczogYXdhaXQgdGhpcy5jb25zdHJ1Y3RIZWFkZXIoKSEsXHJcbiAgICAgICAgZXhwYW5kYWJsZTogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGFibGUsXHJcbiAgICAgICAgZXhwYW5kZWRDb21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRlZENvbXBvbmVudCxcclxuICAgICAgICB0eXBlOiBTbWFydFRhYmxlSW50ZXJmYWNlVHlwZUVudW0uTk9STUFMLFxyXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRBY3Rpb25Db2RlczogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9ucyEsXHJcbiAgICAgICAgZGVmYXVsdEFjdGlvbnM6IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnM/Lm1hcCgoY29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOlxyXG4gICAgICAgICAgICAgIGNvZGUgPT09ICdfYWN0aW9uU2VwYXJhdG9yXydcclxuICAgICAgICAgICAgICAgID8gU21hcnRUYWJsZUJ1dHRvblR5cGUuU0VQQVJBVE9SXHJcbiAgICAgICAgICAgICAgICA6IFNtYXJ0VGFibGVCdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZXhlY3V0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICAgICAgICAvLyBsYWJlbDogdGhpcy5idXR0b25UcmFuc2xhdG9yKHsgY29kZTogY29kZSB9KSxcclxuICAgICAgICAgICAgdHJhbnNsYXRvcjogdGhpcy5idXR0b25UcmFuc2xhdG9yLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIC8vIGFyZ3M6IFtcclxuICAgICAgICAgICAgLy8gICB7XHJcbiAgICAgICAgICAgIC8vICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICAgICAgICAvLyAgIH0sXHJcbiAgICAgICAgICAgIC8vIF0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uaGlnaGxpZ2h0UHJvcGVydHkgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmhpZ2hsaWdodENsYXNzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLmhpZ2hsaWdodENsYXNzID0gdGhpcy5zbWFydEdyaWQuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5oaWdobGlnaHRDbGFzcztcclxuICAgICAgICB0YWJsZUNvbmZpZy5oaWdobGlnaHRQcm9wZXJ0eSA9IHRoaXMuc21hcnRHcmlkLmdyaWRNb2RlbC52aWV3LmRlc2NyaXB0b3IuaGlnaGxpZ2h0UHJvcGVydHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuc2VydmljZVRvVXNlICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZVxyXG4gICAgICApIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vblNlbGVjdGlvbiA9IHRoaXMub25TZWxlY3QuYmluZCh0aGlzKTtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vbkFsbFNlbGVjdGlvbiA9IHRoaXMub25TZWxlY3RBbGwuYmluZCh0aGlzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUHJlcGFyZWQgZm9yIHNpbXBsZSBjbGlja3NcclxuICAgICAgLy8gaWYgKCF0YWJsZUNvbmZpZy5vblJvd0NsaWNrKSB7XHJcbiAgICAgIC8vICAgdGFibGVDb25maWcub25Sb3dDbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICBpZiAoIXRhYmxlQ29uZmlnLm9uUm93RG91YmxlQ2xpY2spIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vblJvd0RvdWJsZUNsaWNrID0gdGhpcy5vbkRvdWJsZUNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGFibGVDb25maWcuaXNSb3dEaXNhYmxlZFByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGFibGVQcm9wZXJ0eU5hbWUgPSAnc2VsZWN0YWJsZSc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0YWJsZUNvbmZpZy5hc3luY09uRXhwYW5kKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcucm93RXhwYW5kZXIgPSB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZXJ2aWNlIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uTW9kZTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGFibGVDb25maWcuc2VsZWN0aW9uICYmXHJcbiAgICAgICAgIXRhYmxlQ29uZmlnLnNlbGVjdGlvblByb3BlcnR5ICYmXHJcbiAgICAgICAgc2VsZWN0aW9uTW9kZSAhPT0gR3JpZFNlbGVjdGlvbk1vZGUuTk9ORVxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBpc011bHRpcGxlID0gc2VsZWN0aW9uTW9kZSA9PT0gR3JpZFNlbGVjdGlvbk1vZGUuTVVMVElQTEU7XHJcblxyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGlvblByb3BlcnR5ID0gJ2lkJztcclxuXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2VcclxuICAgICAgICAgIC5yb3dzIS5maWx0ZXIoKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuc2VsZWN0ZWQpXHJcbiAgICAgICAgICAubWFwKChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LmlkISk7XHJcblxyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+KGlzTXVsdGlwbGUsIHNlbGVjdGVkSWRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zbWFydFRhYmxlID0gbmV3IFNtYXJ0VGFibGU8YW55Pih0YWJsZUNvbmZpZyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb21wb25lbnRSZWZUYWJsZSkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UudXBkYXRlU21hcnRUYWJsZSh0aGlzLnNtYXJ0VGFibGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZjUmVmVGFibGUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZSA9IHRoaXMuY2ZTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgICAgIHRoaXMudmNSZWZUYWJsZSEsXHJcbiAgICAgICAgICBTbWFydHRhYmxlQ29tcG9uZW50LFxyXG4gICAgICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oW1snc21hcnRUYWJsZScsIHRoaXMuc21hcnRUYWJsZV1dKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnNvcnRFdmVudFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXIucHJvcGVydHlOYW1lID0gaGVhZGVyLnByb3BlcnR5TmFtZS5zdWJzdHJpbmcoNSk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxyXG4gICAgICAgICAgICAgICAgaGVhZGVyLm9yZGVyID0gU21hcnRUYWJsZU9yZGVyLkFTQztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgU21hcnRUYWJsZU9yZGVyLkFTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBTbWFydFRhYmxlT3JkZXIuREVTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZmlsdGVyID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5maW5kKFxyXG4gICAgICAgICAgICAgIChmaWx0ZXJFeHByZXNzaW9uOiBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSkgPT5cclxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBoZWFkZXIucHJvcGVydHlOYW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3QuaW5kZXhPZihmaWx0ZXIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3Quc3BsaWNlKGluZGV4ISwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyLm9yZGVyID0gaGVhZGVyLm9yZGVyO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBvcmRlcjogaGVhZGVyLm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBoZWFkZXIucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZ3JpZFVwZGF0ZURhdGE6IEdyaWRVcGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgICAgIG9yZGVyQnlMaXN0OiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LFxyXG4gICAgICAgICAgICAgIG9yZGVyZWRDb2x1bW5OYW1lczogdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5zb3J0KHRoaXMuc21hcnRHcmlkISwgZ3JpZFVwZGF0ZURhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2Uuc21hcnRUYWJsZS5zZWxlY3Rpb24/LmNoYW5nZWRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZXMubmV4dChyb3cpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmQocm93SWQ6IG51bWJlcik6IGFueSB7fVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZXhwYW5kQXN5bmMocm93SW5kZXg6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MpIHtcclxuICAgICAgbGV0IHJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzW3Jvd0luZGV4XTtcclxuICAgICAgaWYgKHJvdyAmJiByb3cuaWQpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZCh0aGlzLnNtYXJ0R3JpZCEsIHJvdy5pZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNlcnZpY2UuZXhwYW5kKHRoaXMuc21hcnRHcmlkISwgcm93SW5kZXgudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckV4cGFuZGFibGVTZWN0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kYWJsZVNlY3Rpb25zID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCEucGFnZS5yb3dzIS5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICBoZWFkZXJDb21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5oZWFkZXJDb21wb25lbnQsXHJcbiAgICAgICAgaGVhZGVySW5wdXROYW1lOiB0aGlzLnNtYXJ0R3JpZCEuaGVhZGVyQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGhlYWRlckRhdGE6IGl0ZW0sXHJcbiAgICAgICAgY3VzdG9tQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZUNvbXBvbmVudCxcclxuICAgICAgICBpbnB1dE5hbWU6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRhYmxlQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQ2FyZHMoKTogdm9pZCB7XHJcbiAgICAvLyBUT0RPXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTXVsdGlwbGVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZXJ2aWNlIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uTW9kZTtcclxuICAgIHJldHVybiBzZWxlY3Rpb25Nb2RlID09PSBHcmlkU2VsZWN0aW9uTW9kZS5NVUxUSVBMRTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUcmVlKCkge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudHJlZURhdGFTb3VyY2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRyZWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyVGFibGUoKTtcclxuICAgIGlmICghdGhpcy50cmVlRGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcihcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVyLFxyXG4gICAgICAgIHRoaXMuZ2V0TGV2ZWwsXHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGFibGUsXHJcbiAgICAgICAgdGhpcy5nZXRDaGlsZHJlblxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxHcmlkUm93Pih0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSk7XHJcbiAgICAgIHRoaXMudHJlZURhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93Pih0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXM7XHJcbiAgICBsZXQgZXhwYW5kZWROb2RlczogKHN0cmluZyB8IHVuZGVmaW5lZClbXTtcclxuICAgIGlmIChub2Rlcykge1xyXG4gICAgICBleHBhbmRlZE5vZGVzID0gbm9kZXNcclxuICAgICAgICAuZmlsdGVyKChub2RlKSA9PiB0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gdGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRlZChub2RlKSlcclxuICAgICAgICAubWFwKChub2RlKSA9PiBub2RlLmlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGV4cGFuZGVkTm9kZXMgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzIS5mb3JFYWNoKChyb3c6IGFueSkgPT4gKHJvdy5sZXZlbCA9IHVuZGVmaW5lZCkpO1xyXG4gICAgdGhpcy50cmVlRGF0YVNvdXJjZS5kYXRhID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MhLmZpbHRlcigocm93KSA9PiAhcm93LnBhcmVudCk7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmNsZWFyKCk7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uc2VsZWN0KG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMudHJlZUNvbnRyb2w/LmNvbGxhcHNlQWxsKCk7XHJcbiAgICBleHBhbmRlZE5vZGVzLmZvckVhY2goKHJvd0lkKSA9PiB7XHJcbiAgICAgIGxldCByb3cgPSB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXMuZmluZCgocm93KSA9PiByb3dJZCA9PT0gcm93LmlkKTtcclxuICAgICAgaWYgKHJvdykge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2w/LmV4cGFuZChyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExldmVsID0gKG5vZGU6IGFueSkgPT4gbm9kZS5sZXZlbCA/PyAwO1xyXG5cclxuICBpc0V4cGFuZGFibGUgPSAobm9kZTogR3JpZFJvdykgPT4gKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlKTtcclxuXHJcbiAgZ2V0Q2hpbGRyZW4gPSAobm9kZTogR3JpZFJvdyk6IEdyaWRSb3dbXSA9PiB7XHJcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBsZXQgcm93cyA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwucGFnZS5yb3dzPy5maWx0ZXIoKHJvdykgPT5cclxuICAgICAgICBub2RlLmNoaWxkcmVuPy5zb21lKChjaGlsZCkgPT4gY2hpbGQgPT09IHJvdy5pZCEpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChyb3dzKSB7XHJcbiAgICAgICAgcmV0dXJuIHJvd3M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9O1xyXG5cclxuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIF9ub2RlRGF0YTogR3JpZFJvdykgPT4gdGhpcy5pc0V4cGFuZGFibGUoX25vZGVEYXRhKTtcclxuXHJcbiAgdHJhbnNmb3JtZXIgPSAocm93OiBHcmlkUm93LCBsZXZlbDogbnVtYmVyKSA9PiB7XHJcbiAgICAocm93IGFzIGFueSkubGV2ZWwgPSBsZXZlbDtcclxuICAgIHJldHVybiByb3c7XHJcbiAgfTtcclxuXHJcbiAgZ2V0VHJlZUl0ZW0ocm93OiBHcmlkUm93KTogc3RyaW5nIHtcclxuICAgIGxldCBjb2x1bW5zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8ub3JkZXJlZENvbHVtbk5hbWVzO1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IHJvdy5kYXRhITtcclxuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbCkgPT4gZGF0YVtjb2xdKS5qb2luKCcgJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93LmlkITtcclxuICB9XHJcblxyXG4gIC8qKiBUb2dnbGUgdGhlIHRyZWVOb2RlIHNlbGVjdGlvbi4gU2VsZWN0L2Rlc2VsZWN0IGFsbCB0aGUgZGVzY2VuZGFudHMgbm9kZSAqL1xyXG4gIHRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBzZWxlY3Rpb25CZWZvcmUgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubWFwKChyb3cpID0+IHJvdy5pZCk7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xyXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKSB7XHJcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbCEuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXHJcbiAgICAgICAgPyB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLmRlc2NlbmRhbnRzKVxyXG4gICAgICAgIDogdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2NlbmRhbnRzKTtcclxuICAgICAgdGhpcy5jaGVja0FsbFBhcmVudHNTZWxlY3Rpb24obm9kZSk7XHJcbiAgICB9XHJcbiAgICBsZXQgc2VsZWN0aW9uQWZ0ZXIgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubWFwKChyb3cpID0+IHJvdy5pZCk7XHJcblxyXG4gICAgbGV0IHNlbGVjdGVkSWRzID0gc2VsZWN0aW9uQWZ0ZXIuZmlsdGVyKChzKSA9PiAhc2VsZWN0aW9uQmVmb3JlLmluY2x1ZGVzKHMpKTtcclxuICAgIGxldCB1bnNlbGVjdGVkSWRzID0gc2VsZWN0aW9uQmVmb3JlLmZpbHRlcigocykgPT4gIXNlbGVjdGlvbkFmdGVyLmluY2x1ZGVzKHMpKTtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICAvLyB3aGVuIHNlcnZpY2UgY2FsbCBpcyBhY3RpdmUgKCFkZXYpLCBvblNlbGVjdCB3aWxsIHRvZ2dsZSByb3cuc2VsZWN0ZWRcclxuICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3NcclxuICAgICAgICA/LmZpbHRlcigocm93KSA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhyb3cuaWQpKVxyXG4gICAgICAgIC5mb3JFYWNoKChyb3cpID0+IChyb3cuc2VsZWN0ZWQgPSB0cnVlKSk7XHJcbiAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzXHJcbiAgICAgICAgPy5maWx0ZXIoKHJvdykgPT4gdW5zZWxlY3RlZElkcy5pbmNsdWRlcyhyb3cuaWQpKVxyXG4gICAgICAgIC5mb3JFYWNoKChyb3cpID0+IChyb3cuc2VsZWN0ZWQgPSBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblNlbGVjdFJvd3Moc2VsZWN0ZWRJZHMsIHVuc2VsZWN0ZWRJZHMpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBbGxQYXJlbnRzU2VsZWN0aW9uKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGxldCBwYXJlbnQ6IEdyaWRSb3cgfCBudWxsID0gdGhpcy5nZXRQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICB0aGlzLmNoZWNrUGFyZW50Tm9kZVNlbGVjdGlvbihwYXJlbnQpO1xyXG4gICAgICBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUocGFyZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrUGFyZW50Tm9kZVNlbGVjdGlvbihub2RlOiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBub2RlU2VsZWN0ZWQgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcclxuICAgIGNvbnN0IGRlc2NBbGxTZWxlY3RlZCA9IHRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcclxuICAgIGlmIChub2RlU2VsZWN0ZWQgJiYgIWRlc2NBbGxTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XHJcbiAgICB9IGVsc2UgaWYgKCFub2RlU2VsZWN0ZWQgJiYgZGVzY0FsbFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBHZXQgdGhlIHBhcmVudCBub2RlIG9mIGEgbm9kZSAqL1xyXG4gIGdldFBhcmVudE5vZGUobm9kZTogR3JpZFJvdyk6IEdyaWRSb3cgfCBudWxsIHtcclxuICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IHRoaXMuZ2V0TGV2ZWwobm9kZSk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMudHJlZUNvbnRyb2whLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLnRyZWVDb250cm9sIS5kYXRhTm9kZXNbaV07XHJcblxyXG4gICAgICBpZiAodGhpcy5nZXRMZXZlbChjdXJyZW50Tm9kZSkgPCBjdXJyZW50TGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoZXRoZXIgYWxsIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgbm9kZSBhcmUgc2VsZWN0ZWQuICovXHJcbiAgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBHcmlkUm93KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wgfHwgIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPVxyXG4gICAgICBkZXNjZW5kYW50cy5sZW5ndGggPiAwICYmXHJcbiAgICAgIGRlc2NlbmRhbnRzLmV2ZXJ5KChjaGlsZCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24hLmlzU2VsZWN0ZWQoY2hpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBkZXNjQWxsU2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciBwYXJ0IG9mIHRoZSBkZXNjZW5kYW50cyBhcmUgc2VsZWN0ZWQgKi9cclxuICBkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGU6IEdyaWRSb3cpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbCB8fCAhdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICAgIGxldCByZXN1bHQgPSBkZXNjZW5kYW50cy5zb21lKChjaGlsZCkgPT4gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uIS5pc1NlbGVjdGVkKGNoaWxkKSk7XHJcbiAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcclxuICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICF0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb25zdHJ1Y3RIZWFkZXIoKTogUHJvbWlzZTxTbWFydFRhYmxlSGVhZGVyW10+IHtcclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyAmJiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cy5sZW5ndGgpIHtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MubWFwKGFzeW5jIChncmlkUm93OiBHcmlkUm93KSA9PiB7XHJcbiAgICAgICAgICBsZXQgbmV3VWlBY3Rpb25zID0gZ3JpZFJvdy5hY3Rpb25zPy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh1aUFjdGlvbjogYW55KSA9PiAhdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKG5ld1VpQWN0aW9ucykge1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICBuZXdVaUFjdGlvbnMubWFwKGFzeW5jICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yOiBVaUFjdGlvbkRlc2NyaXB0b3IgPVxyXG4gICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZT8uZ2V0QWN0aW9uRGVzY3JpcHRvcih1aUFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdWlBY3Rpb24uY29kZSA/PyAnQ09ERScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLnNldCh1aUFjdGlvbi5jb2RlISwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcmVkZXJlZERlc2NDb2x1bW5zID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMubWFwKFxyXG4gICAgICAocHJvcGVydHlOYW1lOiBzdHJpbmcpID0+XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5kZXNjcmlwdG9yIS5jb2x1bW5zIS5maW5kKFxyXG4gICAgICAgICAgKGNvbERlc2NyaXB0b3I6IEdyaWRDb2x1bW5NZXRhKSA9PiBjb2xEZXNjcmlwdG9yLnByb3BlcnR5TmFtZSA9PT0gcHJvcGVydHlOYW1lXHJcbiAgICAgICAgKVxyXG4gICAgKS5mbGF0TWFwKChmKSA9PiBmID8/IFtdKTtcclxuXHJcbiAgICBsZXQgaGVhZGVyID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIG9yZWRlcmVkRGVzY0NvbHVtbnMubWFwKGFzeW5jIChkZXNjQ29sdW1uOiBHcmlkQ29sdW1uTWV0YSk6IFByb21pc2U8U21hcnRUYWJsZUhlYWRlcj4gPT4ge1xyXG4gICAgICAgIGxldCBjdXN0b21UYWJsZUhlYWRlciA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8uY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbmQoXHJcbiAgICAgICAgICAoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiBoZWFkZXIucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbSA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3Q/LmZpbmQoXHJcbiAgICAgICAgICAoZmlsdGVyRXhwcmVzc2lvbjogRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkpID0+XHJcbiAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uIS5wcm9wZXJ0eU5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBvcmRlcjtcclxuICAgICAgICBsZXQgb3JkZXJOdW1iZXI7XHJcbiAgICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbSkge1xyXG4gICAgICAgICAgb3JkZXIgPVxyXG4gICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uT3JkZXJCeUl0ZW0ub3JkZXIgPT09IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5Lk9yZGVyRW51bS5Bc2NcclxuICAgICAgICAgICAgICA/IFNtYXJ0VGFibGVPcmRlci5BU0NcclxuICAgICAgICAgICAgICA6IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBvcmRlck51bWJlciA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgIChmaWx0ZXI6IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5KSA9PiBmaWx0ZXIucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uIS5wcm9wZXJ0eU5hbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgb3JkZXJOdW1iZXIrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JpZ25hbExhYmVsID0gY3VzdG9tVGFibGVIZWFkZXI/LmxhYmVsID8/IGRlc2NDb2x1bW4ubGFiZWw7XHJcbiAgICAgICAgbGV0IGxhYmVsID0gJyc7XHJcbiAgICAgICAgaWYgKCFkZXNjQ29sdW1uLmhpZGVMYWJlbCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS50cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gYXdhaXQgdGhpcy5zbWFydEdyaWQhLnRyYW5zbGF0ZVNlcnZpY2U/LmdldChvcmlnbmFsTGFiZWwpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBvcmlnbmFsTGFiZWw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcHJvcGVydGllcyA9IGN1c3RvbVRhYmxlSGVhZGVyPy5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5PZmZzZXREYXRlVGltZScgfHxcclxuICAgICAgICAgICAgZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLnRpbWUuTG9jYWxEYXRlVGltZSdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgZGF0ZUZvcm1hdCA9IGRlc2NDb2x1bW4udHlwZUZvcm1hdCA/PyAneXl5eS5NTS5kZCBIOm1tJztcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLkRBVEVUSU1FLFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS50aW1lLkxvY2FsRGF0ZScpIHtcclxuICAgICAgICAgICAgbGV0IGRhdGVGb3JtYXQgPSBkZXNjQ29sdW1uLnR5cGVGb3JtYXQgPz8gJ3l5eXkuTU0uZGQnO1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuREFURSxcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5Mb2NhbFRpbWUnKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlRm9ybWF0ID0gZGVzY0NvbHVtbi50eXBlRm9ybWF0ID8/ICdIOm1tJztcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLlRJTUUsXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLmxhbmcuQm9vbGVhbicpIHtcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLkNIRUNLQk9YLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmN1c3RvbVRhYmxlSGVhZGVyLFxyXG4gICAgICAgICAgbGFiZWw6IGxhYmVsLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnZGF0YS4nICsgZGVzY0NvbHVtbi5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICBvcmRlcixcclxuICAgICAgICAgIG9yZGVyTnVtYmVyLFxyXG4gICAgICAgICAgcHJvcGVydGllcyxcclxuICAgICAgICAgIHN0eWxlOiBkZXNjQ29sdW1uLnN0eWxlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBjb21wbGVtZW50ID0gdGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmlsdGVyKFxyXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+XHJcbiAgICAgICAgIWhlYWRlci5zb21lKCh0SDogU21hcnRUYWJsZUhlYWRlcikgPT4gdEgucHJvcGVydHlOYW1lLmluY2x1ZGVzKHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSkpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChjb21wbGVtZW50KSB7XHJcbiAgICAgIGhlYWRlci5wdXNoKC4uLmNvbXBsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8uc2ltcGxlQnV0dG9ucykge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucy5zaW1wbGVCdXR0b25zLmZvckVhY2goKHVpQWN0aW9uQ29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnc2ltcGxlX2J1dHRvbnMnLFxyXG4gICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUJ1dHRvblR5cGUuUkFJU0VELFxyXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAvLyBsYWJlbDogdGhpcy5idXR0b25UcmFuc2xhdG9yKHsgY29kZTogdWlBY3Rpb25Db2RlIH0pLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgY29kZTogdWlBY3Rpb25Db2RlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgICAgICAgICAgc2hvd0J1dHRvbklmOiAocm93OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICByb3cuYWN0aW9ucy5zb21lKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uY29kZSA9PT0gdWlBY3Rpb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhlYWRlci5zb21lKChoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IGhlYWRlci5wcm9wZXJ0eU5hbWUgPT09ICdteV9tZW51JykpIHtcclxuICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS5vcHRpb25zPy5yb3dVaUFjdGlvblR5cGUgPT09IEdyaWRVaUFjdGlvblR5cGUuUE9QVVBfTUVOVSkge1xyXG4gICAgICAgIGxldCBpY29uID0gdGhpcy5ncmlkTWVudUljb24gPz8gJ21vcmVfdmVydCc7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnbXlfbWVudScsXHJcbiAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlQnV0dG9uVHlwZS5NRU5VLFxyXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBpY29uOiBpY29uLFxyXG4gICAgICAgICAgICAgIG1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZTogJ2FjdGlvbnMnLFxyXG4gICAgICAgICAgICAgIHRyYW5zbGF0b3I6IHRoaXMuYnV0dG9uVHJhbnNsYXRvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIGlzU29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvbkNoYW5nZVBhZ2UoZXZlbnQ6IFBhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IG9mZnNldCA9IGV2ZW50LnBhZ2VTaXplICogZXZlbnQucGFnZUluZGV4O1xyXG4gICAgbGV0IGxpbWl0ID0gZXZlbnQucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5zZXRQYWdlKFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXdVdWlkISxcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBvZmZzZXQudG9TdHJpbmcoKSxcclxuICAgICAgbGltaXQudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZShhcmdzOiBhbnlbXSwgcm93OiBhbnksIHVpQWN0aW9uOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBfdWlBY3Rpb246IFVpQWN0aW9uO1xyXG5cclxuICAgIGlmICghdWlBY3Rpb24pIHtcclxuICAgICAgdWlBY3Rpb24gPSByb3cuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbjogVWlBY3Rpb24pID0+IGFjdGlvbi5jb2RlID09PSBhcmdzWzBdLmNvZGUpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIF91aUFjdGlvbiA9IHsgLi4udWlBY3Rpb24gfTtcclxuICAgIGlmIChfdWlBY3Rpb24uZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgX3VpQWN0aW9uLnBhcmFtcyA9IHtcclxuICAgICAgLi4udWlBY3Rpb24ucGFyYW1zLFxyXG4gICAgICBtb2RlbDogcm93LFxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgdWlBY3Rpb25Nb2RlbDogYW55ID0ge1xyXG4gICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMuc21hcnRHcmlkIS5zZXJ2aWNlVG9Vc2UsXHJcbiAgICAgIHVpQWN0aW9uOiBfdWlBY3Rpb24sXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8udWlBY3Rpb25Nb2RlbENhbGxiYWNrKSB7XHJcbiAgICAgIHVpQWN0aW9uTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucyEudWlBY3Rpb25Nb2RlbENhbGxiYWNrKHVpQWN0aW9uTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UudWlBY3Rpb25Nb2RlbCA9IHVpQWN0aW9uTW9kZWw7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlLmV4ZWN1dGUoX3VpQWN0aW9uLCB7XHJcbiAgICAgIHdpZGdldElkOiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgIG5vZGVJZDogcm93LmlkLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1dHRvblRyYW5zbGF0b3IodWlBY3Rpb246IFVpQWN0aW9uKTogVWlBY3Rpb25EZXNjcmlwdG9yIHtcclxuICAgIGxldCBkZXNjID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISk7XHJcbiAgICBpZiAoIWRlc2MpIHtcclxuICAgICAgZGVzYyA9IHtcclxuICAgICAgICB0aXRsZTogdWlBY3Rpb24uY29kZSEsXHJcbiAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLkZMQVQsXHJcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICh1aUFjdGlvbi5kZXNjcmlwdG9yKSB7XHJcbiAgICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZS5tZXJnZUFjdGlvbkRlc2NyaXB0b3JJbnRvQ2xpZW50KHVpQWN0aW9uLmRlc2NyaXB0b3IhLCBkZXNjKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkZXNjO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxheW91dERlZigpOiB0eXBlb2YgU21hcnRMYXlvdXREZWYge1xyXG4gICAgcmV0dXJuIFNtYXJ0TGF5b3V0RGVmO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2xpY2soZ3JpZFJvdzogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrKGdyaWRSb3cpO1xyXG4gIH1cclxuICBwdWJsaWMgb25Eb3VibGVDbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2soZ3JpZFJvdyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU9uQ2xpY2soZ3JpZFJvdzogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgbGV0IGRlZmF1bHRSb3dBY3Rpb246IFVpQWN0aW9uIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWw/LmRlZmF1bHRSb3dBY3Rpb25zKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSb3dBY3Rpb25Db2RlID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICAgIGRlZmF1bHRSb3dBY3Rpb24gPSBncmlkUm93LmFjdGlvbnMuZmluZChcclxuICAgICAgICAgICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHVpQWN0aW9uLmNvZGUgPT09IGRlZmF1bHRSb3dBY3Rpb25Db2RlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZGVmYXVsdFJvd0FjdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5leGVjdXRlKFtdLCBncmlkUm93LCBkZWZhdWx0Um93QWN0aW9uKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvblNlbGVjdChyb3dJZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzPy5maW5kKFxyXG4gICAgICAgIChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LmlkID09PSByb3dJZFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3QodGhpcy5zbWFydEdyaWQhLCByb3chKTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVDaGFuZ2VzKHZpZXdDb250ZXh0Q2hhbmdlLmNoYW5nZXMpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25TZWxlY3RBbGwoc2VsZWN0ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNCbG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3RBbGwodGhpcy5zbWFydEdyaWQhLCBzZWxlY3RlZCk7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uU2VsZWN0Um93cyhcclxuICAgIHNlbGVjdGVkSWRzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdLFxyXG4gICAgdW5zZWxlY3RlZElkczogKHN0cmluZyB8IHVuZGVmaW5lZClbXVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuZGV2KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgc2VsZWN0ZWQ6IHN0cmluZ1tdID0gc2VsZWN0ZWRJZHMuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBzdHJpbmcgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcclxuICAgICAgbGV0IHVuc2VsZWN0ZWQ6IHN0cmluZ1tdID0gdW5zZWxlY3RlZElkcy5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gICAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3RSb3dzKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkISxcclxuICAgICAgICBzZWxlY3RlZCxcclxuICAgICAgICB1bnNlbGVjdGVkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS52aWV3Q29udGV4dFNlcnZpY2UuaGFuZGxlQ2hhbmdlcyh2aWV3Q29udGV4dENoYW5nZS5jaGFuZ2VzKTtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlZGl0Q29sdW1ucygpOiB2b2lkIHtcclxuICAgIGxldCBkaWFsb2dEYXRhOiBTbWFydERpYWxvZ0RhdGEgPSB7XHJcbiAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICB0aXRsZTogJ09zemxvcG9rIHRlc3RyZXN6YWLDoXNhJyxcclxuICAgICAgfSxcclxuICAgICAgc2l6ZToge30sXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudDogVGFibGVMYXlvdXREZWZpbmVyQ29tcG9uZW50LFxyXG4gICAgICBjdXN0b21Db21wb25lbnRJbnB1dHM6IHtcclxuICAgICAgICBjb25maWc6IHtcclxuICAgICAgICAgIHV1aWQ6IHRoaXMudXVpZCxcclxuICAgICAgICAgIGlkZW50aWZpZXI6IHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcixcclxuICAgICAgICAgIHZpZXc6IHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyxcclxuICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZGlhbG9nLm9wZW4oVGFibGVMYXlvdXREZWZpbmVyQ29tcG9uZW50LCB7IGRhdGE6IGRpYWxvZ0RhdGEgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJzbWFydEdyaWRcIiBjbGFzcz1cInNtYXJ0R3JpZC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwic21hcnQtZ3JpZC10b29sYmFyXCI+XHJcbiAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXIgI3Rvb2xiYXIgW2lkXT1cIidncmlkX25vdF9pbml0aWFsaXplZCdcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAoY2xpY2spPVwiZWRpdENvbHVtbnMoKVwiXHJcbiAgICAgIG1hdC1taW5pLWZhYlxyXG4gICAgICBjb2xvcj1cInRleHQtcHJpbWFyeVwiXHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLnNob3dFZGl0Q29sdW1uc1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgYXJpYS1sYWJlbD1cIkNvbHVtbnNcIiBjbGFzcz1cInNtYXJ0LWdyaWQtZWRpdC1pY29uXCJcclxuICAgICAgICA+dmlld19jb2x1bW5zPC9tYXQtaWNvblxyXG4gICAgICA+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwiaXNCbG9ja2VkID8gJ2Jsb2NrZWQnIDogJydcIj48L2Rpdj4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZENvbnRlbnRcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQuc2hvd1Jlc3VsdENvdW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZC1kYXRhLW51bWJlclwiPlxyXG4gICAgICAgICAge3sgc21hcnRHcmlkLmdyaWRNb2RlbC50b3RhbFJvd0NvdW50IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNtYXJ0LWdyaWQtdGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGU+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5FWFBBTkRBQkxFXCI+XHJcbiAgICAgIDxzbWFydC1leHBhbmRhYmxlLXNlY3Rpb25cclxuICAgICAgICAjZ3JpZEV4cGFuZGFibGVTZWN0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGV4cGFuZGFibGVTZWN0aW9uIG9mIGV4cGFuZGFibGVTZWN0aW9uc1wiXHJcbiAgICAgICAgW2RhdGFdPVwiZXhwYW5kYWJsZVNlY3Rpb25cIlxyXG4gICAgICA+PC9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5DQVJEXCJcclxuICAgICAgY2xhc3M9XCJjYXJkcy1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxhcHAtc21hcnQtZ3JpZC1jYXJkXHJcbiAgICAgICAgY2xhc3M9XCJzbWFydEdyaWQtY2FyZC1jb250YWluZXJcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YXNrIG9mIHNtYXJ0R3JpZC5ncmlkTW9kZWwucGFnZS5yb3dzXCJcclxuICAgICAgICBbaXRlbV09XCJ0YXNrXCJcclxuICAgICAgICBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiXHJcbiAgICAgICAgW29uU2VsZWN0XT1cIm9uU2VsZWN0LmJpbmQodGhpcylcIlxyXG4gICAgICA+PC9hcHAtc21hcnQtZ3JpZC1jYXJkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLmxheW91dERlZiA9PT0gbGF5b3V0RGVmKCkuVFJFRSAmJiB0cmVlQ29udHJvbFwiXHJcbiAgICAgIGNsYXNzPVwidHJlZS1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJ0cmVlRGF0YVNvdXJjZSFcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2whXCI+XHJcbiAgICAgICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcclxuICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ0luZGVudD1cIjI0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cInRyZWUtYnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tsaXN0LWxlYWYtbm9kZVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcclxuICAgICAgICAgICAgPnt7IGdldFRyZWVJdGVtKG5vZGUpIH19PC9tYXQtY2hlY2tib3hcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcblxyXG4gICAgICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIlxyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnQ9XCIyNFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcclxuICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgbm9kZS5pdGVtXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPlxyXG4gICAgICAgICAgICAgIHt7IHRyZWVDb250cm9sIS5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0JyB9fVxyXG4gICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGUpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0cmVlTm9kZVNlbGVjdGlvblRvZ2dsZShub2RlKVwiXHJcbiAgICAgICAgICAgID57eyBnZXRUcmVlSXRlbShub2RlKSB9fTwvbWF0LWNoZWNrYm94XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgICA8L21hdC10cmVlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cInNtYXJ0R3JpZC5wYWdpbmF0b3IgJiYgIXRyZWVDb250cm9sXCJcclxuICAgICNwYWdpbmF0b3JcclxuICAgIFtsZW5ndGhdPVwibGVuZ3RoXCJcclxuICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcclxuICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiXHJcbiAgPjwvbWF0LXBhZ2luYXRvcj5cclxuPC9kaXY+XHJcbiJdfQ==
|