@smartbit4all/ng-client 6.0.9 → 6.0.11
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/README.md +386 -386
- package/esm2022/lib/component-factory-service/component-factory-service.module.mjs +1 -1
- package/esm2022/lib/component-factory-service/component-factory-service.service.mjs +1 -1
- package/esm2022/lib/component-factory-service/projects.mjs +1 -1
- package/esm2022/lib/session/api/api/api.mjs +1 -1
- package/esm2022/lib/session/api/api/session.service.mjs +1 -1
- package/esm2022/lib/session/api/configuration.mjs +1 -1
- package/esm2022/lib/session/api/encoder.mjs +1 -1
- package/esm2022/lib/session/api/index.mjs +1 -1
- package/esm2022/lib/session/api/model/accountInfo.mjs +1 -1
- package/esm2022/lib/session/api/model/apiError.mjs +1 -1
- package/esm2022/lib/session/api/model/authenticationProviderData.mjs +1 -1
- package/esm2022/lib/session/api/model/getAuthenticationProvidersResponse.mjs +1 -1
- package/esm2022/lib/session/api/model/models.mjs +1 -1
- package/esm2022/lib/session/api/model/refreshSessionRequest.mjs +1 -1
- package/esm2022/lib/session/api/model/session.mjs +1 -1
- package/esm2022/lib/session/api/model/sessionInfoData.mjs +1 -1
- package/esm2022/lib/session/api/model/userActivityLog.mjs +1 -1
- package/esm2022/lib/session/api/param.mjs +1 -1
- package/esm2022/lib/session/api/variables.mjs +1 -1
- package/esm2022/lib/session/cookie-service/smart-cookie.service.mjs +1 -1
- package/esm2022/lib/session/projects.mjs +1 -1
- package/esm2022/lib/session/smart-backend-bootstrap.config.mjs +1 -1
- package/esm2022/lib/session/smart-backend-bootstrap.service.mjs +7 -4
- package/esm2022/lib/session/smart-default-error-ui.service.mjs +1 -1
- package/esm2022/lib/session/smart-error-catching.interceptor.mjs +1 -1
- package/esm2022/lib/session/smart-header-maintainer.interceptor.mjs +1 -1
- package/esm2022/lib/session/smart-session-handler.service.mjs +1 -1
- package/esm2022/lib/session/smart-session.module.mjs +1 -1
- package/esm2022/lib/session/smart-session.service.mjs +1 -1
- package/esm2022/lib/session/smart-timer/smart-session-timer.component.mjs +3 -3
- package/esm2022/lib/session/smart-timer/smart-session-timer.service.mjs +1 -1
- package/esm2022/lib/shared/projects.mjs +1 -1
- package/esm2022/lib/shared/shared.module.mjs +1 -1
- package/esm2022/lib/shared/smart-tooltip.directive.mjs +1 -1
- package/esm2022/lib/shared/smarttable.date-pipe.mjs +1 -1
- package/esm2022/lib/smart-client/projects.mjs +1 -1
- package/esm2022/lib/smart-client/smart-component-api-client.mjs +1 -1
- package/esm2022/lib/smart-client/smart-file-uploader/smart-file-uploader.component.mjs +3 -3
- package/esm2022/lib/smart-client/smart.component.mjs +1 -1
- package/esm2022/lib/smart-client/smart.service.mjs +1 -1
- package/esm2022/lib/smart-component-layout/api/model/componentWidgetType.mjs +1 -1
- package/esm2022/lib/smart-component-layout/api/model/models.mjs +1 -1
- package/esm2022/lib/smart-component-layout/api/model/toolbarDirection.mjs +1 -1
- package/esm2022/lib/smart-component-layout/api/model/toolbarProperties.mjs +1 -1
- package/esm2022/lib/smart-component-layout/projects.mjs +1 -1
- package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +1 -1
- package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +3 -3
- package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +1 -1
- package/esm2022/lib/smart-diagram/component/default-smart-diagram-options.provider.mjs +1 -1
- package/esm2022/lib/smart-diagram/component/smart-diagram.component.mjs +22 -22
- package/esm2022/lib/smart-diagram/component/smart-diagram.module.mjs +1 -1
- package/esm2022/lib/smart-diagram/component/smart-diagram.util.mjs +1 -1
- package/esm2022/lib/smart-diagram/projects.mjs +1 -1
- package/esm2022/lib/smart-dialog/projects.mjs +1 -1
- package/esm2022/lib/smart-dialog/smartdialog.component.mjs +3 -3
- package/esm2022/lib/smart-dialog/smartdialog.model.mjs +1 -1
- package/esm2022/lib/smart-dialog/smartdialog.module.mjs +1 -1
- package/esm2022/lib/smart-dialog/smartdialog.service.mjs +1 -1
- package/esm2022/lib/smart-expandable-section/expandable-section.component.mjs +3 -3
- package/esm2022/lib/smart-expandable-section/expandable-section.model.mjs +1 -1
- package/esm2022/lib/smart-expandable-section/projects.mjs +1 -1
- package/esm2022/lib/smart-expandable-section/smart-expandable-section.module.mjs +1 -1
- package/esm2022/lib/smart-expandable-section/smart-expandable-section.service.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBoolOperator.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderField.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderGroup.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionBuilderModel.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionData.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionDataType.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionField.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldList.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionFieldWidgetType.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionList.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperandData.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOperation.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/filterExpressionOrderBy.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/model.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/searchIndexObjectDefinitionData.mjs +1 -1
- package/esm2022/lib/smart-filter/api/filter/model/searchIndexPropertyDefinitionData.mjs +1 -1
- package/esm2022/lib/smart-filter/api/value/model/value.mjs +1 -1
- package/esm2022/lib/smart-filter/projects.mjs +1 -1
- package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-expression-field/smart-filter-expression-field.component.mjs +1 -1
- package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/components/smart-filter-simple-field/smart-filter-simple-field.component.mjs +3 -3
- package/esm2022/lib/smart-filter/smart-filter/components/smart-filter-simple/smart-filter-simple.component.mjs +3 -3
- package/esm2022/lib/smart-filter/smart-filter/smart-filter.component.mjs +3 -3
- package/esm2022/lib/smart-filter/smart-filter/smart-filter.service.mjs +1 -1
- package/esm2022/lib/smart-filter/smart-filter.model.mjs +1 -1
- package/esm2022/lib/smart-filter/smart-filter.module.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/api/filter.service.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/configuration.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/encoder.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBoolOperator.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderApiConfig.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderField.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderGroup.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderModel.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionBuilderUiModel.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionData.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionDataType.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionField.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldEditor.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldList.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionFieldWidgetType.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionList.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperandData.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOperation.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/filterExpressionOrderBy.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/model/smartFilterType.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/param.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/api/variables.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/filterExpressionBuilderApiActions.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/project.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-item/smart-filter-expression-item.component.mjs +3 -3
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/components/smart-filter-expression-items/smart-filter-expression-items.component.mjs +3 -3
- package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +3 -3
- package/esm2022/lib/smart-filter-editor/smart-filter-editor.model.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/smart-filter-editor.service.mjs +1 -1
- package/esm2022/lib/smart-filter-editor/smart-filter-params/components/smart-filter-param/smart-filter-param.component.mjs +3 -3
- package/esm2022/lib/smart-filter-editor/smart-filter-params/smart-filter-params.component.mjs +3 -3
- package/esm2022/lib/smart-form/api/model/divProperties.mjs +1 -1
- package/esm2022/lib/smart-form/api/model/models.mjs +1 -1
- package/esm2022/lib/smart-form/highlightMacthingString-pipe.mjs +1 -1
- package/esm2022/lib/smart-form/projects.mjs +1 -1
- package/esm2022/lib/smart-form/services/smartform.layout-definition.service.mjs +1 -1
- package/esm2022/lib/smart-form/services/smartform.service.mjs +1 -1
- package/esm2022/lib/smart-form/smartfileuploader/large-file-snack-bar/large-file-snack-bar.component.mjs +3 -3
- package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.component.mjs +3 -3
- package/esm2022/lib/smart-form/smartfileuploader/smartfileuploader.model.mjs +1 -1
- package/esm2022/lib/smart-form/smartform.component.mjs +3 -3
- package/esm2022/lib/smart-form/smartform.form-model.mjs +1 -1
- package/esm2022/lib/smart-form/smartform.model.mjs +1 -1
- package/esm2022/lib/smart-form/widgets/components/smart-file-editor/smart-file-editor.component.mjs +3 -3
- package/esm2022/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +3 -3
- package/esm2022/lib/smart-form/widgets/components/smart-multi-file-editor/smart-multi-file-editor.component.mjs +3 -3
- package/esm2022/lib/smart-form/widgets/components/smart-voice-recorder/smart-voice-recorder.component.mjs +3 -3
- package/esm2022/lib/smart-form/widgets/directives/comparable-dropdown.directive.mjs +1 -1
- package/esm2022/lib/smart-form/widgets/directives/comparable-multiselect.directive.mjs +1 -1
- package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +3 -3
- package/esm2022/lib/smart-form/widgets/smartformwidget/sortable-widget/sortable-widget.component.mjs +3 -3
- package/esm2022/lib/smart-form/widgets/smartformwidget/trackCaps.directive.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/acl-editing-view/acl-editing-view.component.mjs +3 -3
- package/esm2022/lib/smart-generic-pages/api/platform/acl/model/aCL.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/api/platform/acl/model/aCLEntry.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/api/platform/acl/model/objectValidationSeverity.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/api/platform/acl/model/subject.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/api/platform/api-default/objectHistoryRangeData.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/api/platform/searchpage/model/searchPageModel.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/api/platform/subjectselector/model/subjectSelectorPageModel.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/api/platform/validation/model/validationItem.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/api/platform/validation/model/validationResultPageModel.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/generic-page/generic-page.component.mjs +3 -3
- package/esm2022/lib/smart-generic-pages/invalid-smartlink/invalid-smartlink.component.mjs +3 -3
- package/esm2022/lib/smart-generic-pages/no-permission-page/no-permission-page.component.mjs +3 -3
- package/esm2022/lib/smart-generic-pages/projects.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/search-page/search-page.component.mjs +3 -3
- package/esm2022/lib/smart-generic-pages/smart-generic-pages.module.mjs +1 -1
- package/esm2022/lib/smart-generic-pages/subject-selector/subject-selector.component.mjs +3 -3
- package/esm2022/lib/smart-generic-pages/validation-result-page/validation-result-page.component.mjs +3 -3
- package/esm2022/lib/smart-grid/api/grid-api/api/api.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/api/grid.service.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/api.module.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/configuration.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/encoder.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/index.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridColumnContentType.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridColumnMeta.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridDataAccessConfig.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridExportDescriptor.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridModel.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridPage.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridRow.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionChange.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionMode.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridSelectionType.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridServerModel.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridUpdateData.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridView.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/gridViewDescriptor.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/model/models.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/param.mjs +1 -1
- package/esm2022/lib/smart-grid/api/grid-api/variables.mjs +1 -1
- package/esm2022/lib/smart-grid/components/expandable-grid/expandable-grid.component.mjs +3 -3
- package/esm2022/lib/smart-grid/components/generic-component/expanded-row-renderer.component.mjs +3 -3
- package/esm2022/lib/smart-grid/components/smart-grid-card/smart-grid-card.component.mjs +3 -3
- package/esm2022/lib/smart-grid/components/table-layout-definer/table-layout-definer.component.mjs +3 -3
- package/esm2022/lib/smart-grid/models/model.mjs +1 -1
- package/esm2022/lib/smart-grid/projects.mjs +1 -1
- package/esm2022/lib/smart-grid/smart-grid-toolbar-util.mjs +13 -9
- package/esm2022/lib/smart-grid/smart-grid.component.mjs +36 -3
- package/esm2022/lib/smart-grid/smart-grid.module.mjs +1 -1
- package/esm2022/lib/smart-grid/smart-grid.service.mjs +1 -1
- package/esm2022/lib/smart-icon/projects.mjs +1 -1
- package/esm2022/lib/smart-icon/smart-icon/smart-icon.component.mjs +3 -3
- package/esm2022/lib/smart-icon/smart-icon/ui-badge/ui-badge.component.mjs +3 -3
- package/esm2022/lib/smart-icon/smart-icon/ui-badge/ui-badge.directive.mjs +1 -1
- package/esm2022/lib/smart-icon/smart-icon.module.mjs +1 -1
- package/esm2022/lib/smart-icon/smart-icon.service.mjs +1 -1
- package/esm2022/lib/smart-map/abstract-map.mjs +1 -1
- package/esm2022/lib/smart-map/api-default/api-default.mjs +1 -1
- package/esm2022/lib/smart-map/impl/google-map.mjs +1 -1
- package/esm2022/lib/smart-map/impl/leaflet-map.mjs +1 -1
- package/esm2022/lib/smart-map/projects.mjs +1 -1
- package/esm2022/lib/smart-map/smart-map.component.mjs +3 -3
- package/esm2022/lib/smart-map/smart-map.module.mjs +1 -1
- package/esm2022/lib/smart-map/smart-map.types.mjs +1 -1
- package/esm2022/lib/smart-navbar/projects.mjs +1 -1
- package/esm2022/lib/smart-navbar/smart-navbar.component.mjs +3 -3
- package/esm2022/lib/smart-navbar/smart-navbar.model.mjs +1 -1
- package/esm2022/lib/smart-navbar/smart-navbar.module.mjs +1 -1
- package/esm2022/lib/smart-navbar/smart-navbar.service.mjs +1 -1
- package/esm2022/lib/smart-navigation/projects.mjs +1 -1
- package/esm2022/lib/smart-navigation/smart-navigation.interface.mjs +1 -1
- package/esm2022/lib/smart-navigation/smart-navigation.module.mjs +1 -1
- package/esm2022/lib/smart-navigation/smart-navigation.service.mjs +1 -1
- package/esm2022/lib/smart-ng-client.module.mjs +1 -1
- package/esm2022/lib/smart-ng-client.service.mjs +1 -1
- package/esm2022/lib/smart-subject/projects.mjs +1 -1
- package/esm2022/lib/smart-subject/smart-subject.mjs +1 -1
- package/esm2022/lib/smart-tab-group/projects.mjs +1 -1
- package/esm2022/lib/smart-tab-group/smart-tab-group.module.mjs +1 -1
- package/esm2022/lib/smart-table/components/default-actions-popup/default-actions-popup.component.mjs +3 -3
- package/esm2022/lib/smart-table/components/loading/loading.component.mjs +3 -3
- package/esm2022/lib/smart-table/directives/mat-context-menu-trigger-for.directive.mjs +1 -1
- package/esm2022/lib/smart-table/projects.mjs +1 -1
- package/esm2022/lib/smart-table/smarttable.component.mjs +3 -3
- package/esm2022/lib/smart-table/smarttable.model.mjs +1 -1
- package/esm2022/lib/smart-table/smarttable.module.mjs +1 -1
- package/esm2022/lib/smart-table/smarttable.service.mjs +1 -1
- package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +7 -11
- package/esm2022/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +5 -5
- package/esm2022/lib/smart-table/tables/table.mjs +53 -59
- package/esm2022/lib/smart-tree/projects.mjs +1 -1
- package/esm2022/lib/smart-tree/smarttree-generic.service.mjs +1 -1
- package/esm2022/lib/smart-tree/smarttree.component.mjs +3 -3
- package/esm2022/lib/smart-tree/smarttree.model.mjs +1 -1
- package/esm2022/lib/smart-tree/smarttree.module.mjs +1 -1
- package/esm2022/lib/smart-tree/smarttree.node.model.mjs +1 -1
- package/esm2022/lib/smart-tree/smarttree.service.interface.mjs +1 -1
- package/esm2022/lib/smart-tree/smarttree.service.mjs +1 -1
- package/esm2022/lib/smart-tree/tree-api/api/tree.service.mjs +1 -1
- package/esm2022/lib/smart-tree/tree-api/configuration.mjs +1 -1
- package/esm2022/lib/smart-tree/tree-api/encoder.mjs +1 -1
- package/esm2022/lib/smart-tree/tree-api/param.mjs +1 -1
- package/esm2022/lib/smart-tree/tree-api/variables.mjs +1 -1
- package/esm2022/lib/smart-validation/named-validator.service.mjs +1 -1
- package/esm2022/lib/smart-validation/projects.mjs +1 -1
- package/esm2022/lib/smart-validation/smart-validation.module.mjs +1 -1
- package/esm2022/lib/smart-validation/smart-validation.types.mjs +1 -1
- package/esm2022/lib/theme/theme.service.mjs +48 -0
- package/esm2022/lib/view-context/api/api/view.service.mjs +211 -1
- package/esm2022/lib/view-context/api/api-default/binaryContentData.mjs +2 -0
- package/esm2022/lib/view-context/api/api-default/binaryData.mjs +1 -1
- package/esm2022/lib/view-context/api/api-default/invocationError.mjs +1 -1
- package/esm2022/lib/view-context/api/api-default/invocationRequest.mjs +1 -1
- package/esm2022/lib/view-context/api/api-default/invocationRun.mjs +1 -1
- package/esm2022/lib/view-context/api/model/deviceInfo.mjs +1 -1
- package/esm2022/lib/view-context/api/model/menuDescriptor.mjs +2 -0
- package/esm2022/lib/view-context/api/model/menuOpenDirection.mjs +23 -0
- package/esm2022/lib/view-context/api/model/menuTriggerType.mjs +17 -0
- package/esm2022/lib/view-context/api/model/models.mjs +9 -1
- package/esm2022/lib/view-context/api/model/publishedViewData.mjs +13 -0
- package/esm2022/lib/view-context/api/model/shellProperty.mjs +13 -0
- package/esm2022/lib/view-context/api/model/themeDefinition.mjs +2 -0
- package/esm2022/lib/view-context/api/model/themeDescriptor.mjs +2 -0
- package/esm2022/lib/view-context/api/model/themeShellDescriptor.mjs +2 -0
- package/esm2022/lib/view-context/api/model/uiActionDescriptor.mjs +1 -1
- package/esm2022/lib/view-context/default-view-components.token.mjs +1 -1
- package/esm2022/lib/view-context/invalid-fields-snack-bar/invalid-fields-snack-bar.component.mjs +3 -3
- package/esm2022/lib/view-context/message-dialog/message-dialog.component.mjs +3 -3
- package/esm2022/lib/view-context/projects.mjs +3 -2
- package/esm2022/lib/view-context/property-definition-data.mjs +1 -1
- package/esm2022/lib/view-context/reuse-router-slot.token.mjs +1 -1
- package/esm2022/lib/view-context/smart-embedded-slot.directive.mjs +1 -1
- package/esm2022/lib/view-context/smart-ui-action/components/menu/click/menu.component.mjs +209 -0
- package/esm2022/lib/view-context/smart-ui-action/components/menu/hover/hover-menu.component.mjs +209 -0
- package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.constants.mjs +58 -68
- package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.service.mjs +1 -1
- package/esm2022/lib/view-context/smart-ui-action/components/success-snack-bar/success-snack-bar.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/components/theme-selector/theme-selector.component.mjs +35 -0
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/photo-capture-widget/photo-capture-widget.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/prime-file-uploader/prime-file-uploader.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/upload-widget.utils.mjs +1 -1
- package/esm2022/lib/view-context/smart-ui-action/components/upload-widget/voice-record-widget/voice-record-widget.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-confirm-dialog/ui-action-confirm-dialog.service.mjs +1 -1
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-dialog-button/ui-action-dialog-button.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.service.mjs +1 -1
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-input-dialog/ui-action-input-dialog.service.mjs +1 -1
- package/esm2022/lib/view-context/smart-ui-action/file-editor-toolbar/file-editor-toolbar.component.mjs +6 -4
- package/esm2022/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.mjs +20 -12
- package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +12 -7
- package/esm2022/lib/view-context/smart-ui-action/ui-action.descriptor.service.mjs +1 -1
- package/esm2022/lib/view-context/smart-ui-action/ui-action.model.mjs +1 -1
- package/esm2022/lib/view-context/smart-ui-action/ui-action.service.mjs +13 -3
- package/esm2022/lib/view-context/smart-view-context-dialog.service.mjs +1 -1
- package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.component.mjs +3 -3
- package/esm2022/lib/view-context/smart-view-context-error-dialog/smart-view-context-error-dialog.service.mjs +1 -1
- package/esm2022/lib/view-context/smart-view-context.interceptor.mjs +1 -1
- package/esm2022/lib/view-context/smart-view-context.model.mjs +1 -1
- package/esm2022/lib/view-context/smart-view-context.module.mjs +13 -7
- package/esm2022/lib/view-context/smart-view-context.service.mjs +14 -5
- package/esm2022/lib/view-context/smart-view-redirect/smart-view-redirect.mjs +1 -1
- package/esm2022/lib/view-context/utility/componentLibrary.mjs +1 -1
- package/esm2022/lib/view-context/utility/smart-object-utility.mjs +1 -1
- package/esm2022/lib/view-context/utility/smart-style-utility.mjs +1 -1
- package/esm2022/lib/view-context/value-api/api/api.mjs +1 -1
- package/esm2022/lib/view-context/value-api/api/value.service.mjs +1 -1
- package/esm2022/lib/view-context/value-api/api.module.mjs +1 -1
- package/esm2022/lib/view-context/value-api/configuration.mjs +1 -1
- package/esm2022/lib/view-context/value-api/encoder.mjs +1 -1
- package/esm2022/lib/view-context/value-api/index.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/genericValue.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/models.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/value.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetData.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetDefinition.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetDefinitionData.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetDefinitionIdentifier.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetDefinitionKind.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetExpression.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetOperand.mjs +1 -1
- package/esm2022/lib/view-context/value-api/model/valueSetOperation.mjs +1 -1
- package/esm2022/lib/view-context/value-api/param.mjs +1 -1
- package/esm2022/lib/view-context/value-api/variables.mjs +1 -1
- package/esm2022/lib/view-context/view-handler-resolution.mjs +1 -1
- package/esm2022/lib/view-context/view-op.mjs +1 -1
- package/esm2022/lib/view-context/view-slot-resolution.mjs +1 -1
- package/esm2022/projects.mjs +2 -1
- package/fesm2022/smartbit4all-ng-client.mjs +916 -306
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/session/smart-backend-bootstrap.config.d.ts +9 -1
- package/lib/session/smart-backend-bootstrap.service.d.ts +3 -1
- package/lib/smart-grid/smart-grid.component.d.ts +3 -0
- package/lib/smart-table/tables/material-table/material-table.component.d.ts +0 -1
- package/lib/smart-table/tables/table.d.ts +6 -5
- package/lib/theme/theme.service.d.ts +17 -0
- package/lib/view-context/api/api/view.service.d.ts +94 -0
- package/lib/view-context/api/api-default/binaryContentData.d.ts +2 -0
- package/lib/view-context/api/model/deviceInfo.d.ts +1 -0
- package/lib/view-context/api/model/menuDescriptor.d.ts +17 -0
- package/lib/view-context/api/model/menuOpenDirection.d.ts +21 -0
- package/lib/view-context/api/model/menuTriggerType.d.ts +15 -0
- package/lib/view-context/api/model/models.d.ts +8 -0
- package/lib/view-context/api/model/publishedViewData.d.ts +14 -0
- package/lib/view-context/api/model/shellProperty.d.ts +15 -0
- package/lib/view-context/api/model/themeDefinition.d.ts +22 -0
- package/lib/view-context/api/model/themeDescriptor.d.ts +16 -0
- package/lib/view-context/api/model/themeShellDescriptor.d.ts +17 -0
- package/lib/view-context/api/model/uiActionDescriptor.d.ts +2 -0
- package/lib/view-context/projects.d.ts +2 -1
- package/lib/view-context/smart-ui-action/components/menu/{menu.component.d.ts → click/menu.component.d.ts} +9 -7
- package/lib/view-context/smart-ui-action/components/menu/hover/hover-menu.component.d.ts +44 -0
- package/lib/view-context/smart-ui-action/components/menu/menu.constants.d.ts +4 -0
- package/lib/view-context/smart-ui-action/components/theme-selector/theme-selector.component.d.ts +16 -0
- package/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.d.ts +1 -0
- package/lib/view-context/smart-ui-action/ui-action-toolbar.component.d.ts +2 -1
- package/lib/view-context/smart-ui-action/ui-action.service.d.ts +3 -1
- package/lib/view-context/smart-view-context.module.d.ts +56 -54
- package/lib/view-context/smart-view-context.service.d.ts +4 -2
- package/package.json +1 -1
- package/projects.d.ts +1 -0
- package/smartbit4all-ng-client-6.0.11.tgz +0 -0
- package/esm2022/lib/view-context/smart-ui-action/components/menu/menu.component.mjs +0 -199
- package/smartbit4all-ng-client-6.0.9.tgz +0 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostListener, Inject, Input, Optional, Output, ViewChild, ViewChildren, } from '@angular/core';
|
|
2
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import { TemplatePortal } from '@angular/cdk/portal';
|
|
4
|
+
import { COMPONENT_LIBRARY, ComponentLibrary } from '../../../../utility/componentLibrary';
|
|
5
|
+
import { getMenuPositions, getSubmenuPositions } from '../menu.constants';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../menu.service";
|
|
8
|
+
import * as i2 from "@angular/cdk/overlay";
|
|
9
|
+
import * as i3 from "@angular/common";
|
|
10
|
+
import * as i4 from "../../../../../smart-icon/smart-icon/smart-icon.component";
|
|
11
|
+
import * as i5 from "../../../ui-action-button/ui-action-button.component";
|
|
12
|
+
import * as i6 from "../../../../utility/componentLibrary";
|
|
13
|
+
export class ClickMenuComponent {
|
|
14
|
+
constructor(menuService, overlay, viewContainerRef, overlayPositionBuilder, compLib) {
|
|
15
|
+
this.menuService = menuService;
|
|
16
|
+
this.overlay = overlay;
|
|
17
|
+
this.viewContainerRef = viewContainerRef;
|
|
18
|
+
this.overlayPositionBuilder = overlayPositionBuilder;
|
|
19
|
+
this.compLib = compLib;
|
|
20
|
+
this.overlayRef = null;
|
|
21
|
+
this.isSubmenu = false;
|
|
22
|
+
this.actionClick = new EventEmitter();
|
|
23
|
+
this.submenuOpened = new EventEmitter();
|
|
24
|
+
this.destroy$ = new Subject();
|
|
25
|
+
this.submenuOpenMap = new Map();
|
|
26
|
+
this.subActions = [];
|
|
27
|
+
this.hasCheckedChildren = false;
|
|
28
|
+
this.compLib = compLib ?? ComponentLibrary.PRIMENG;
|
|
29
|
+
if (this.compLib === ComponentLibrary.PRIMENG) {
|
|
30
|
+
this.icon = 'chevron-right';
|
|
31
|
+
}
|
|
32
|
+
else if (this.compLib === ComponentLibrary.MATERIAL) {
|
|
33
|
+
this.icon = 'chevron_right';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
ngOnInit() {
|
|
37
|
+
this.menuService
|
|
38
|
+
.getCloseSignal()
|
|
39
|
+
.pipe(takeUntil(this.destroy$))
|
|
40
|
+
.subscribe(() => {
|
|
41
|
+
this.closeMenu();
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
ngAfterViewChecked() {
|
|
45
|
+
if (this.isOpen && !this.hasCheckedChildren && this.submenuComponents.length > 0) {
|
|
46
|
+
this.hasCheckedChildren = true;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
ngOnChanges(changes) {
|
|
50
|
+
if (changes['triggerAction']) {
|
|
51
|
+
var trigger = changes['triggerAction'].currentValue;
|
|
52
|
+
var previousTrigger = changes['triggerAction'].previousValue;
|
|
53
|
+
this.subActions = trigger?.subActions ?? [];
|
|
54
|
+
if (this.isOpen && previousTrigger) {
|
|
55
|
+
var hasSubActionsChanged = this.hasSubActionsChanged(previousTrigger?.subActions, trigger?.subActions);
|
|
56
|
+
if (hasSubActionsChanged) {
|
|
57
|
+
this.refreshOverlay();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
hasSubActionsChanged(oldSubActions, newSubActions) {
|
|
63
|
+
const oldLength = oldSubActions?.length ?? 0;
|
|
64
|
+
const newLength = newSubActions?.length ?? 0;
|
|
65
|
+
if (oldLength !== newLength) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
if (oldLength > 0 && newLength > 0) {
|
|
69
|
+
for (let i = 0; i < newLength; i++) {
|
|
70
|
+
if (oldSubActions[i].code !== newSubActions[i].code) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
ngOnDestroy() {
|
|
78
|
+
this.destroy$.next();
|
|
79
|
+
this.destroy$.complete();
|
|
80
|
+
}
|
|
81
|
+
onActionClick(action) {
|
|
82
|
+
if (!action.disabled) {
|
|
83
|
+
this.actionClick.emit(action);
|
|
84
|
+
this.menuService.closeAllMenus();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
onMenuClick(event) {
|
|
88
|
+
event.stopPropagation();
|
|
89
|
+
}
|
|
90
|
+
onDocumentClick(event) {
|
|
91
|
+
this.menuService.closeAllMenus();
|
|
92
|
+
if (this.overlayRef) {
|
|
93
|
+
this.closeMenu();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
get isOpen() {
|
|
97
|
+
return !!this.overlayRef;
|
|
98
|
+
}
|
|
99
|
+
closeMenu() {
|
|
100
|
+
if (this.overlayRef) {
|
|
101
|
+
this.overlayRef.dispose();
|
|
102
|
+
this.overlayRef = null;
|
|
103
|
+
this.hasCheckedChildren = false;
|
|
104
|
+
}
|
|
105
|
+
if (this.submenuComponents && this.submenuComponents.length > 0) {
|
|
106
|
+
this.submenuComponents.forEach((submenu) => {
|
|
107
|
+
submenu.closeMenu();
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
refreshOverlay() {
|
|
112
|
+
if (!this.overlayRef) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
this.overlayRef.detach();
|
|
116
|
+
let portal = new TemplatePortal(this.menuTemplate, this.viewContainerRef);
|
|
117
|
+
this.overlayRef.attach(portal);
|
|
118
|
+
this.hasCheckedChildren = false;
|
|
119
|
+
}
|
|
120
|
+
openMenu(event) {
|
|
121
|
+
if (this.isOpen) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (this.isSubmenu) {
|
|
125
|
+
this.submenuOpened.emit(this.triggerAction);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
this.menuService.closeAllMenus();
|
|
129
|
+
}
|
|
130
|
+
let triggerElement = event.currentTarget;
|
|
131
|
+
var positions = this.isSubmenu
|
|
132
|
+
? getSubmenuPositions(this.menuOpenDirection)
|
|
133
|
+
: getMenuPositions(this.triggerAction?.descriptor?.menu?.openDirection);
|
|
134
|
+
let positionStrategy = this.overlayPositionBuilder
|
|
135
|
+
.flexibleConnectedTo(triggerElement)
|
|
136
|
+
.withFlexibleDimensions(false)
|
|
137
|
+
.withPush(true)
|
|
138
|
+
.withPositions(positions);
|
|
139
|
+
this.overlayRef = this.overlay.create({
|
|
140
|
+
positionStrategy,
|
|
141
|
+
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
142
|
+
hasBackdrop: false,
|
|
143
|
+
});
|
|
144
|
+
let portal = new TemplatePortal(this.menuTemplate, this.viewContainerRef);
|
|
145
|
+
this.overlayRef.attach(portal);
|
|
146
|
+
}
|
|
147
|
+
toggleMenu(event) {
|
|
148
|
+
if (!this.isOpen) {
|
|
149
|
+
this.openMenu(event);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
this.closeMenu();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
onSubmenuOpened(openedAction) {
|
|
156
|
+
if (!this.submenuComponents || this.submenuComponents.length === 0) {
|
|
157
|
+
setTimeout(() => {
|
|
158
|
+
this.onSubmenuOpened(openedAction);
|
|
159
|
+
}, 0);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
this.submenuComponents.forEach((submenu) => {
|
|
163
|
+
if (submenu.triggerAction.code !== openedAction.code && submenu.overlayRef) {
|
|
164
|
+
submenu.closeMenu();
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
closeSiblingSubmenus(exceptAction) {
|
|
169
|
+
this.submenuComponents?.forEach((submenu) => {
|
|
170
|
+
if (submenu.triggerAction.code !== exceptAction.code && submenu.isOpen) {
|
|
171
|
+
submenu.closeMenu();
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ClickMenuComponent, deps: [{ token: i1.UiMenuService }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i2.OverlayPositionBuilder }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
176
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: ClickMenuComponent, selector: "ui-tiered-menu", inputs: { triggerAction: "triggerAction", isSubmenu: "isSubmenu", menuOpenDirection: "menuOpenDirection" }, outputs: { actionClick: "actionClick", submenuOpened: "submenuOpened" }, host: { listeners: { "click": "onMenuClick($event)", "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "menuTemplate", first: true, predicate: ["menuTemplate"], descendants: true }, { propertyName: "submenuComponents", predicate: ["submenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (isSubmenu) {\r\n <div class=\"submenu hoverEffect\" [class.activeSubmenu]=\"isOpen\" (mouseenter)=\"openMenu($event)\">\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n <smart-icon [icon]=\"icon\" color=\"black\"></smart-icon>\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n}\r\n\r\n<ng-template #menuTemplate>\r\n <ul class=\"ui-tiered-menu sb4-menu-panel\">\r\n <li\r\n *ngFor=\"let action of subActions\"\r\n class=\"hoverEffect\"\r\n [class.disabled]=\"action.disabled\"\r\n (mouseenter)=\"closeSiblingSubmenus(action)\"\r\n >\r\n @if (action.subActions && action.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #submenu\r\n [triggerAction]=\"action\"\r\n [isSubmenu]=\"true\"\r\n [subActions]=\"action.subActions!\"\r\n [menuOpenDirection]=\"triggerAction.descriptor?.menu?.openDirection\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (submenuOpened)=\"onSubmenuOpened(submenu)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"action.descriptor!\"\r\n [code]=\"action.code\"\r\n [disabled]=\"!!action.disabled\"\r\n (actionClick)=\"!action.subActions?.length && onActionClick(action)\"\r\n ></ui-action-button>\r\n }\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #triggerTempalte>\r\n <ui-action-button\r\n [descriptor]=\"triggerAction.descriptor!\"\r\n [code]=\"triggerAction.code\"\r\n [disabled]=\"!!triggerAction.disabled\"\r\n (actionClick)=\"toggleMenu($event.event)\"\r\n [class.submenuTrigger]=\"isSubmenu\"\r\n >\r\n </ui-action-button>\r\n</ng-template>\r\n", styles: [":host{display:inline-block;position:relative}ul,.ui-tiered-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;width:fit-content;box-shadow:2px 2px 8px #0003;z-index:1000;border-radius:5px;padding:.1rem}.submenuTrigger,.ui-tiered-menu ::ng-deep button{background-color:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.hoverEffect:hover,.hoverEffect ::ng-deep button:hover{background-color:#f1f5f9}.hoverEffect.activeSubmenu,.hoverEffect.activeSubmenu ::ng-deep button{background-color:#f1f5f9}.ui-tiered-menu ::ng-deep ui-action-button,.ui-tiered-menu ::ng-deep ui-badge{width:100%}.ui-tiered-menu>li{position:relative}.submenu{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.submenu ::ng-deep ui-action-button{flex:1}.disabled{color:#aaa;cursor:not-allowed}.ui-tiered-menu ui-tiered-menu{width:100%}smart-icon{align-content:center}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i5.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: ClickMenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection"], outputs: ["actionClick", "submenuOpened"] }] }); }
|
|
177
|
+
}
|
|
178
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ClickMenuComponent, decorators: [{
|
|
179
|
+
type: Component,
|
|
180
|
+
args: [{ selector: 'ui-tiered-menu', template: "@if (isSubmenu) {\r\n <div class=\"submenu hoverEffect\" [class.activeSubmenu]=\"isOpen\" (mouseenter)=\"openMenu($event)\">\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n <smart-icon [icon]=\"icon\" color=\"black\"></smart-icon>\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n}\r\n\r\n<ng-template #menuTemplate>\r\n <ul class=\"ui-tiered-menu sb4-menu-panel\">\r\n <li\r\n *ngFor=\"let action of subActions\"\r\n class=\"hoverEffect\"\r\n [class.disabled]=\"action.disabled\"\r\n (mouseenter)=\"closeSiblingSubmenus(action)\"\r\n >\r\n @if (action.subActions && action.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #submenu\r\n [triggerAction]=\"action\"\r\n [isSubmenu]=\"true\"\r\n [subActions]=\"action.subActions!\"\r\n [menuOpenDirection]=\"triggerAction.descriptor?.menu?.openDirection\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (submenuOpened)=\"onSubmenuOpened(submenu)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"action.descriptor!\"\r\n [code]=\"action.code\"\r\n [disabled]=\"!!action.disabled\"\r\n (actionClick)=\"!action.subActions?.length && onActionClick(action)\"\r\n ></ui-action-button>\r\n }\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #triggerTempalte>\r\n <ui-action-button\r\n [descriptor]=\"triggerAction.descriptor!\"\r\n [code]=\"triggerAction.code\"\r\n [disabled]=\"!!triggerAction.disabled\"\r\n (actionClick)=\"toggleMenu($event.event)\"\r\n [class.submenuTrigger]=\"isSubmenu\"\r\n >\r\n </ui-action-button>\r\n</ng-template>\r\n", styles: [":host{display:inline-block;position:relative}ul,.ui-tiered-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;width:fit-content;box-shadow:2px 2px 8px #0003;z-index:1000;border-radius:5px;padding:.1rem}.submenuTrigger,.ui-tiered-menu ::ng-deep button{background-color:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.hoverEffect:hover,.hoverEffect ::ng-deep button:hover{background-color:#f1f5f9}.hoverEffect.activeSubmenu,.hoverEffect.activeSubmenu ::ng-deep button{background-color:#f1f5f9}.ui-tiered-menu ::ng-deep ui-action-button,.ui-tiered-menu ::ng-deep ui-badge{width:100%}.ui-tiered-menu>li{position:relative}.submenu{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.submenu ::ng-deep ui-action-button{flex:1}.disabled{color:#aaa;cursor:not-allowed}.ui-tiered-menu ui-tiered-menu{width:100%}smart-icon{align-content:center}\n"] }]
|
|
181
|
+
}], ctorParameters: () => [{ type: i1.UiMenuService }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i2.OverlayPositionBuilder }, { type: i6.ComponentLibrary, decorators: [{
|
|
182
|
+
type: Inject,
|
|
183
|
+
args: [COMPONENT_LIBRARY]
|
|
184
|
+
}, {
|
|
185
|
+
type: Optional
|
|
186
|
+
}] }], propDecorators: { submenuComponents: [{
|
|
187
|
+
type: ViewChildren,
|
|
188
|
+
args: ['submenu']
|
|
189
|
+
}], menuTemplate: [{
|
|
190
|
+
type: ViewChild,
|
|
191
|
+
args: ['menuTemplate']
|
|
192
|
+
}], triggerAction: [{
|
|
193
|
+
type: Input
|
|
194
|
+
}], isSubmenu: [{
|
|
195
|
+
type: Input
|
|
196
|
+
}], menuOpenDirection: [{
|
|
197
|
+
type: Input
|
|
198
|
+
}], actionClick: [{
|
|
199
|
+
type: Output
|
|
200
|
+
}], submenuOpened: [{
|
|
201
|
+
type: Output
|
|
202
|
+
}], onMenuClick: [{
|
|
203
|
+
type: HostListener,
|
|
204
|
+
args: ['click', ['$event']]
|
|
205
|
+
}], onDocumentClick: [{
|
|
206
|
+
type: HostListener,
|
|
207
|
+
args: ['document:click', ['$event']]
|
|
208
|
+
}] } });
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvbWVudS9jbGljay9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy9tZW51L2NsaWNrL21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsWUFBWSxHQUdiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7QUFPMUUsTUFBTSxPQUFPLGtCQUFrQjtJQW1CN0IsWUFDVSxXQUEwQixFQUMxQixPQUFnQixFQUNoQixnQkFBa0MsRUFDbEMsc0JBQThDLEVBQ1IsT0FBMEI7UUFKaEUsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFDMUIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFD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bGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ29ubmVjdGVkUG9zaXRpb24sXHJcbiAgT3ZlcmxheSxcclxuICBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxyXG4gIE92ZXJsYXlSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBNZW51T3BlbkRpcmVjdGlvbiwgVWlBY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hcGknO1xyXG5pbXBvcnQgeyBVaU1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXR5L2NvbXBvbmVudExpYnJhcnknO1xyXG5pbXBvcnQgeyBnZXRNZW51UG9zaXRpb25zLCBnZXRTdWJtZW51UG9zaXRpb25zIH0gZnJvbSAnLi4vbWVudS5jb25zdGFudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS10aWVyZWQtbWVudScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpY2tNZW51Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCB7XHJcbiAgQFZpZXdDaGlsZHJlbignc3VibWVudScpIHN1Ym1lbnVDb21wb25lbnRzITogUXVlcnlMaXN0PENsaWNrTWVudUNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVUZW1wbGF0ZScpIG1lbnVUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB0cmlnZ2VyQWN0aW9uITogVWlBY3Rpb247XHJcbiAgQElucHV0KCkgaXNTdWJtZW51OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWVudU9wZW5EaXJlY3Rpb24/OiBNZW51T3BlbkRpcmVjdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVaUFjdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgc3VibWVudU9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8VWlBY3Rpb24+KCk7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGljb24hOiBzdHJpbmc7XHJcbiAgc3VibWVudU9wZW5NYXAgPSBuZXcgTWFwPFVpQWN0aW9uLCBib29sZWFuPigpO1xyXG4gIHN1YkFjdGlvbnM6IFVpQWN0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIGhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IFVpTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlQb3NpdGlvbkJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29tcExpYj86IENvbXBvbmVudExpYnJhcnlcclxuICApIHtcclxuICAgIHRoaXMuY29tcExpYiA9IGNvbXBMaWIgPz8gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbi1yaWdodCc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5NQVRFUklBTCkge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbl9yaWdodCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudVNlcnZpY2VcclxuICAgICAgLmdldENsb3NlU2lnbmFsKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0cmlnZ2VyQWN0aW9uJ10pIHtcclxuICAgICAgdmFyIHRyaWdnZXIgPSBjaGFuZ2VzWyd0cmlnZ2VyQWN0aW9uJ10uY3VycmVudFZhbHVlIGFzIFVpQWN0aW9uO1xyXG4gICAgICB2YXIgcHJldmlvdXNUcmlnZ2VyID0gY2hhbmdlc1sndHJpZ2dlckFjdGlvbiddLnByZXZpb3VzVmFsdWUgYXMgVWlBY3Rpb247XHJcblxyXG4gICAgICB0aGlzLnN1YkFjdGlvbnMgPSB0cmlnZ2VyPy5zdWJBY3Rpb25zID8/IFtdO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHByZXZpb3VzVHJpZ2dlcikge1xyXG4gICAgICAgIHZhciBoYXNTdWJBY3Rpb25zQ2hhbmdlZCA9IHRoaXMuaGFzU3ViQWN0aW9uc0NoYW5nZWQoXHJcbiAgICAgICAgICBwcmV2aW91c1RyaWdnZXI/LnN1YkFjdGlvbnMsXHJcbiAgICAgICAgICB0cmlnZ2VyPy5zdWJBY3Rpb25zXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGhhc1N1YkFjdGlvbnNDaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hPdmVybGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc1N1YkFjdGlvbnNDaGFuZ2VkKFxyXG4gICAgb2xkU3ViQWN0aW9uczogVWlBY3Rpb25bXSB8IHVuZGVmaW5lZCxcclxuICAgIG5ld1N1YkFjdGlvbnM6IFVpQWN0aW9uW10gfCB1bmRlZmluZWRcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9sZExlbmd0aCA9IG9sZFN1YkFjdGlvbnM/Lmxlbmd0aCA/PyAwO1xyXG4gICAgY29uc3QgbmV3TGVuZ3RoID0gbmV3U3ViQWN0aW9ucz8ubGVuZ3RoID8/IDA7XHJcblxyXG4gICAgaWYgKG9sZExlbmd0aCAhPT0gbmV3TGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvbGRMZW5ndGggPiAwICYmIG5ld0xlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChvbGRTdWJBY3Rpb25zIVtpXS5jb2RlICE9PSBuZXdTdWJBY3Rpb25zIVtpXS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25BY3Rpb25DbGljayhhY3Rpb246IFVpQWN0aW9uKSB7XHJcbiAgICBpZiAoIWFjdGlvbi5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoYWN0aW9uKTtcclxuICAgICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25NZW51Q2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLm1lbnVTZXJ2aWNlLmNsb3NlQWxsTWVudXMoKTtcclxuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLm92ZXJsYXlSZWY7XHJcbiAgfVxyXG5cclxuICBjbG9zZU1lbnUoKSB7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc3VibWVudUNvbXBvbmVudHMgJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHMuZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaE92ZXJsYXkoKSB7XHJcbiAgICBpZiAoIXRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xyXG5cclxuICAgIGxldCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5tZW51VGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcblxyXG4gICAgdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9wZW5NZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzU3VibWVudSkge1xyXG4gICAgICB0aGlzLnN1Ym1lbnVPcGVuZWQuZW1pdCh0aGlzLnRyaWdnZXJBY3Rpb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRyaWdnZXJFbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIHZhciBwb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSB0aGlzLmlzU3VibWVudVxyXG4gICAgICA/IGdldFN1Ym1lbnVQb3NpdGlvbnModGhpcy5tZW51T3BlbkRpcmVjdGlvbilcclxuICAgICAgOiBnZXRNZW51UG9zaXRpb25zKHRoaXMudHJpZ2dlckFjdGlvbj8uZGVzY3JpcHRvcj8ubWVudT8ub3BlbkRpcmVjdGlvbik7XHJcblxyXG4gICAgbGV0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlQb3NpdGlvbkJ1aWxkZXJcclxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odHJpZ2dlckVsZW1lbnQpXHJcbiAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxyXG4gICAgICAud2l0aFB1c2godHJ1ZSlcclxuICAgICAgLndpdGhQb3NpdGlvbnMocG9zaXRpb25zKTtcclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneSxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcclxuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLm1lbnVUZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcclxuICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5vcGVuTWVudShldmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TdWJtZW51T3BlbmVkKG9wZW5lZEFjdGlvbjogVWlBY3Rpb24pIHtcclxuICAgIGlmICghdGhpcy5zdWJtZW51Q29tcG9uZW50cyB8fCB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm9uU3VibWVudU9wZW5lZChvcGVuZWRBY3Rpb24pO1xyXG4gICAgICB9LCAwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHMuZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICBpZiAoc3VibWVudS50cmlnZ2VyQWN0aW9uLmNvZGUgIT09IG9wZW5lZEFjdGlvbi5jb2RlICYmIHN1Ym1lbnUub3ZlcmxheVJlZikge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTaWJsaW5nU3VibWVudXMoZXhjZXB0QWN0aW9uOiBVaUFjdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJtZW51Q29tcG9uZW50cz8uZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICBpZiAoc3VibWVudS50cmlnZ2VyQWN0aW9uLmNvZGUgIT09IGV4Y2VwdEFjdGlvbi5jb2RlICYmIHN1Ym1lbnUuaXNPcGVuKSB7XHJcbiAgICAgICAgc3VibWVudS5jbG9zZU1lbnUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoaXNTdWJtZW51KSB7XHJcbiAgPGRpdiBjbGFzcz1cInN1Ym1lbnUgaG92ZXJFZmZlY3RcIiBbY2xhc3MuYWN0aXZlU3VibWVudV09XCJpc09wZW5cIiAobW91c2VlbnRlcik9XCJvcGVuTWVudSgkZXZlbnQpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJpZ2dlclRlbXBhbHRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8c21hcnQtaWNvbiBbaWNvbl09XCJpY29uXCIgY29sb3I9XCJibGFja1wiPjwvc21hcnQtaWNvbj5cclxuICA8L2Rpdj5cclxufSBAZWxzZSB7XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJUZW1wYWx0ZVwiPjwvbmctY29udGFpbmVyPlxyXG59XHJcblxyXG48bmctdGVtcGxhdGUgI21lbnVUZW1wbGF0ZT5cclxuICA8dWwgY2xhc3M9XCJ1aS10aWVyZWQtbWVudSBzYjQtbWVudS1wYW5lbFwiPlxyXG4gICAgPGxpXHJcbiAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygc3ViQWN0aW9uc1wiXHJcbiAgICAgIGNsYXNzPVwiaG92ZXJFZmZlY3RcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcclxuICAgICAgKG1vdXNlZW50ZXIpPVwiY2xvc2VTaWJsaW5nU3VibWVudXMoYWN0aW9uKVwiXHJcbiAgICA+XHJcbiAgICAgIEBpZiAoYWN0aW9uLnN1YkFjdGlvbnMgJiYgYWN0aW9uLnN1YkFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIDx1aS10aWVyZWQtbWVudVxyXG4gICAgICAgICAgI3N1Ym1lbnVcclxuICAgICAgICAgIFt0cmlnZ2VyQWN0aW9uXT1cImFjdGlvblwiXHJcbiAgICAgICAgICBbaXNTdWJtZW51XT1cInRydWVcIlxyXG4gICAgICAgICAgW3N1YkFjdGlvbnNdPVwiYWN0aW9uLnN1YkFjdGlvbnMhXCJcclxuICAgICAgICAgIFttZW51T3BlbkRpcmVjdGlvbl09XCJ0cmlnZ2VyQWN0aW9uLmRlc2NyaXB0b3I/Lm1lbnU/Lm9wZW5EaXJlY3Rpb25cIlxyXG4gICAgICAgICAgKGFjdGlvbkNsaWNrKT1cImFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAoc3VibWVudU9wZW5lZCk9XCJvblN1Ym1lbnVPcGVuZWQoc3VibWVudSlcIlxyXG4gICAgICAgID48L3VpLXRpZXJlZC1tZW51PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiYWN0aW9uLmRlc2NyaXB0b3IhXCJcclxuICAgICAgICAgIFtjb2RlXT1cImFjdGlvbi5jb2RlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhIWFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwiIWFjdGlvbi5zdWJBY3Rpb25zPy5sZW5ndGggJiYgb25BY3Rpb25DbGljayhhY3Rpb24pXCJcclxuICAgICAgICA+PC91aS1hY3Rpb24tYnV0dG9uPlxyXG4gICAgICB9XHJcbiAgICA8L2xpPlxyXG4gIDwvdWw+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RyaWdnZXJUZW1wYWx0ZT5cclxuICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgW2Rlc2NyaXB0b3JdPVwidHJpZ2dlckFjdGlvbi5kZXNjcmlwdG9yIVwiXHJcbiAgICBbY29kZV09XCJ0cmlnZ2VyQWN0aW9uLmNvZGVcIlxyXG4gICAgW2Rpc2FibGVkXT1cIiEhdHJpZ2dlckFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAoYWN0aW9uQ2xpY2spPVwidG9nZ2xlTWVudSgkZXZlbnQuZXZlbnQpXCJcclxuICAgIFtjbGFzcy5zdWJtZW51VHJpZ2dlcl09XCJpc1N1Ym1lbnVcIlxyXG4gID5cclxuICA8L3VpLWFjdGlvbi1idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
package/esm2022/lib/view-context/smart-ui-action/components/menu/hover/hover-menu.component.mjs
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostListener, Inject, Input, Optional, Output, ViewChild, ViewChildren, } from '@angular/core';
|
|
2
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import { TemplatePortal } from '@angular/cdk/portal';
|
|
4
|
+
import { COMPONENT_LIBRARY, ComponentLibrary } from '../../../../utility/componentLibrary';
|
|
5
|
+
import { getMenuPositions, getSubmenuPositions } from '../menu.constants';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../menu.service";
|
|
8
|
+
import * as i2 from "@angular/cdk/overlay";
|
|
9
|
+
import * as i3 from "@angular/common";
|
|
10
|
+
import * as i4 from "../../../../../smart-icon/smart-icon/smart-icon.component";
|
|
11
|
+
import * as i5 from "../../../ui-action-button/ui-action-button.component";
|
|
12
|
+
import * as i6 from "../../../../utility/componentLibrary";
|
|
13
|
+
export class HoverMenuComponent {
|
|
14
|
+
constructor(menuService, overlay, viewContainerRef, overlayPositionBuilder, compLib) {
|
|
15
|
+
this.menuService = menuService;
|
|
16
|
+
this.overlay = overlay;
|
|
17
|
+
this.viewContainerRef = viewContainerRef;
|
|
18
|
+
this.overlayPositionBuilder = overlayPositionBuilder;
|
|
19
|
+
this.compLib = compLib;
|
|
20
|
+
this.overlayRef = null;
|
|
21
|
+
this.isSubmenu = false;
|
|
22
|
+
this.actionClick = new EventEmitter();
|
|
23
|
+
this.submenuOpened = new EventEmitter();
|
|
24
|
+
this.destroy$ = new Subject();
|
|
25
|
+
this.submenuOpenMap = new Map();
|
|
26
|
+
this.subActions = [];
|
|
27
|
+
this.hasCheckedChildren = false;
|
|
28
|
+
this.compLib = compLib ?? ComponentLibrary.PRIMENG;
|
|
29
|
+
if (this.compLib === ComponentLibrary.PRIMENG) {
|
|
30
|
+
this.icon = 'chevron-right';
|
|
31
|
+
}
|
|
32
|
+
else if (this.compLib === ComponentLibrary.MATERIAL) {
|
|
33
|
+
this.icon = 'chevron_right';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
ngOnInit() {
|
|
37
|
+
this.menuService
|
|
38
|
+
.getCloseSignal()
|
|
39
|
+
.pipe(takeUntil(this.destroy$))
|
|
40
|
+
.subscribe(() => {
|
|
41
|
+
this.closeMenu();
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
ngAfterViewChecked() {
|
|
45
|
+
if (this.isOpen && !this.hasCheckedChildren && this.submenuComponents.length > 0) {
|
|
46
|
+
this.hasCheckedChildren = true;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
ngOnChanges(changes) {
|
|
50
|
+
if (changes['triggerAction']) {
|
|
51
|
+
const trigger = changes['triggerAction'].currentValue;
|
|
52
|
+
const previousTrigger = changes['triggerAction'].previousValue;
|
|
53
|
+
this.subActions = trigger?.subActions ?? [];
|
|
54
|
+
if (this.isOpen && previousTrigger) {
|
|
55
|
+
const hasSubActionsChanged = this.hasSubActionsChanged(previousTrigger?.subActions, trigger?.subActions);
|
|
56
|
+
if (hasSubActionsChanged) {
|
|
57
|
+
this.refreshOverlay();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
hasSubActionsChanged(oldSubActions, newSubActions) {
|
|
63
|
+
const oldLength = oldSubActions?.length ?? 0;
|
|
64
|
+
const newLength = newSubActions?.length ?? 0;
|
|
65
|
+
if (oldLength !== newLength) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
if (oldLength > 0 && newLength > 0) {
|
|
69
|
+
for (let i = 0; i < newLength; i++) {
|
|
70
|
+
if (oldSubActions[i].code !== newSubActions[i].code) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
ngOnDestroy() {
|
|
78
|
+
this.destroy$.next();
|
|
79
|
+
this.destroy$.complete();
|
|
80
|
+
}
|
|
81
|
+
onActionClick(action) {
|
|
82
|
+
if (!action.disabled) {
|
|
83
|
+
this.actionClick.emit(action);
|
|
84
|
+
this.menuService.closeAllMenus();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
onMenuClick(event) {
|
|
88
|
+
event.stopPropagation();
|
|
89
|
+
}
|
|
90
|
+
onDocumentClick(event) {
|
|
91
|
+
this.menuService.closeAllMenus();
|
|
92
|
+
if (this.overlayRef) {
|
|
93
|
+
this.closeMenu();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
get isOpen() {
|
|
97
|
+
return !!this.overlayRef;
|
|
98
|
+
}
|
|
99
|
+
closeMenu() {
|
|
100
|
+
if (this.overlayRef) {
|
|
101
|
+
this.overlayRef.dispose();
|
|
102
|
+
this.overlayRef = null;
|
|
103
|
+
this.hasCheckedChildren = false;
|
|
104
|
+
}
|
|
105
|
+
if (this.submenuComponents && this.submenuComponents.length > 0) {
|
|
106
|
+
this.submenuComponents.forEach((submenu) => {
|
|
107
|
+
submenu.closeMenu();
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
refreshOverlay() {
|
|
112
|
+
if (!this.overlayRef) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
this.overlayRef.detach();
|
|
116
|
+
let portal = new TemplatePortal(this.menuTemplate, this.viewContainerRef);
|
|
117
|
+
this.overlayRef.attach(portal);
|
|
118
|
+
this.hasCheckedChildren = false;
|
|
119
|
+
}
|
|
120
|
+
openMenu(event) {
|
|
121
|
+
if (this.isOpen) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (this.isSubmenu) {
|
|
125
|
+
this.submenuOpened.emit(this.triggerAction);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
this.menuService.closeAllMenus();
|
|
129
|
+
}
|
|
130
|
+
let triggerElement = event.currentTarget;
|
|
131
|
+
var positions = this.isSubmenu
|
|
132
|
+
? getSubmenuPositions(this.menuOpenDirection)
|
|
133
|
+
: getMenuPositions(this.triggerAction?.descriptor?.menu?.openDirection);
|
|
134
|
+
let positionStrategy = this.overlayPositionBuilder
|
|
135
|
+
.flexibleConnectedTo(triggerElement)
|
|
136
|
+
.withFlexibleDimensions(false)
|
|
137
|
+
.withPush(true)
|
|
138
|
+
.withPositions(positions);
|
|
139
|
+
this.overlayRef = this.overlay.create({
|
|
140
|
+
positionStrategy,
|
|
141
|
+
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
142
|
+
hasBackdrop: false,
|
|
143
|
+
});
|
|
144
|
+
let portal = new TemplatePortal(this.menuTemplate, this.viewContainerRef);
|
|
145
|
+
this.overlayRef.attach(portal);
|
|
146
|
+
}
|
|
147
|
+
toggleMenu(event) {
|
|
148
|
+
if (!this.isOpen) {
|
|
149
|
+
this.openMenu(event);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
this.closeMenu();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
onSubmenuOpened(openedAction) {
|
|
156
|
+
if (!this.submenuComponents || this.submenuComponents.length === 0) {
|
|
157
|
+
setTimeout(() => {
|
|
158
|
+
this.onSubmenuOpened(openedAction);
|
|
159
|
+
}, 0);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
this.submenuComponents.forEach((submenu) => {
|
|
163
|
+
if (submenu.triggerAction.code !== openedAction.code && submenu.overlayRef) {
|
|
164
|
+
submenu.closeMenu();
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
closeSiblingSubmenus(exceptAction) {
|
|
169
|
+
this.submenuComponents?.forEach((submenu) => {
|
|
170
|
+
if (submenu.triggerAction.code !== exceptAction.code && submenu.isOpen) {
|
|
171
|
+
submenu.closeMenu();
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HoverMenuComponent, deps: [{ token: i1.UiMenuService }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i2.OverlayPositionBuilder }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
176
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: HoverMenuComponent, selector: "ui-hover-menu", inputs: { triggerAction: "triggerAction", isSubmenu: "isSubmenu", menuOpenDirection: "menuOpenDirection" }, outputs: { actionClick: "actionClick", submenuOpened: "submenuOpened" }, host: { listeners: { "click": "onMenuClick($event)", "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "menuTemplate", first: true, predicate: ["menuTemplate"], descendants: true }, { propertyName: "submenuComponents", predicate: ["submenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (isSubmenu) {\r\n <div class=\"submenu hoverEffect\" [class.activeSubmenu]=\"isOpen\" (mouseenter)=\"openMenu($event)\">\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n <smart-icon [icon]=\"icon\" color=\"black\"></smart-icon>\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n}\r\n\r\n<ng-template #menuTemplate>\r\n <ul class=\"ui-hover-menu sb4-menu-panel\">\r\n <li\r\n *ngFor=\"let action of subActions\"\r\n class=\"hoverEffect\"\r\n [class.disabled]=\"action.disabled\"\r\n (mouseenter)=\"closeSiblingSubmenus(action)\"\r\n >\r\n @if (action.subActions && action.subActions.length > 0) {\r\n <ui-hover-menu\r\n #submenu\r\n [triggerAction]=\"action\"\r\n [isSubmenu]=\"true\"\r\n [subActions]=\"action.subActions!\"\r\n [menuOpenDirection]=\"triggerAction.descriptor?.menu?.openDirection\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (submenuOpened)=\"onSubmenuOpened(submenu)\"\r\n ></ui-hover-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"action.descriptor!\"\r\n [code]=\"action.code\"\r\n [disabled]=\"!!action.disabled\"\r\n (actionClick)=\"onActionClick(action)\"\r\n ></ui-action-button>\r\n }\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #triggerTempalte>\r\n <ui-action-button\r\n [descriptor]=\"triggerAction.descriptor!\"\r\n [code]=\"triggerAction.code\"\r\n [disabled]=\"!!triggerAction.disabled\"\r\n (mouseenter)=\"openMenu($event)\"\r\n (actionClick)=\"onActionClick(triggerAction)\"\r\n [class.submenuTrigger]=\"isSubmenu\"\r\n >\r\n </ui-action-button>\r\n</ng-template>\r\n", styles: [":host{display:inline-block;position:relative}ul,.ui-hover-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;width:fit-content;box-shadow:2px 2px 8px #0003;z-index:1000;border-radius:5px;padding:.1rem}.submenuTrigger,.ui-hover-menu ::ng-deep button{background-color:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.hoverEffect:hover,.hoverEffect ::ng-deep button:hover{background-color:#f1f5f9}.hoverEffect.activeSubmenu,.hoverEffect.activeSubmenu ::ng-deep button{background-color:#f1f5f9}.ui-hover-menu ::ng-deep ui-action-button,.ui-hover-menu ::ng-deep ui-badge{width:100%}.ui-hover-menu>li{position:relative}.submenu{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.submenu ::ng-deep ui-action-button{flex:1}.disabled{color:#aaa;cursor:not-allowed}.ui-hover-menu ui-hover-menu{width:100%}smart-icon{align-content:center}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i5.UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: HoverMenuComponent, selector: "ui-hover-menu", inputs: ["triggerAction", "isSubmenu", "menuOpenDirection"], outputs: ["actionClick", "submenuOpened"] }] }); }
|
|
177
|
+
}
|
|
178
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HoverMenuComponent, decorators: [{
|
|
179
|
+
type: Component,
|
|
180
|
+
args: [{ selector: 'ui-hover-menu', template: "@if (isSubmenu) {\r\n <div class=\"submenu hoverEffect\" [class.activeSubmenu]=\"isOpen\" (mouseenter)=\"openMenu($event)\">\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n <smart-icon [icon]=\"icon\" color=\"black\"></smart-icon>\r\n </div>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"triggerTempalte\"></ng-container>\r\n}\r\n\r\n<ng-template #menuTemplate>\r\n <ul class=\"ui-hover-menu sb4-menu-panel\">\r\n <li\r\n *ngFor=\"let action of subActions\"\r\n class=\"hoverEffect\"\r\n [class.disabled]=\"action.disabled\"\r\n (mouseenter)=\"closeSiblingSubmenus(action)\"\r\n >\r\n @if (action.subActions && action.subActions.length > 0) {\r\n <ui-hover-menu\r\n #submenu\r\n [triggerAction]=\"action\"\r\n [isSubmenu]=\"true\"\r\n [subActions]=\"action.subActions!\"\r\n [menuOpenDirection]=\"triggerAction.descriptor?.menu?.openDirection\"\r\n (actionClick)=\"actionClick.emit($event)\"\r\n (submenuOpened)=\"onSubmenuOpened(submenu)\"\r\n ></ui-hover-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"action.descriptor!\"\r\n [code]=\"action.code\"\r\n [disabled]=\"!!action.disabled\"\r\n (actionClick)=\"onActionClick(action)\"\r\n ></ui-action-button>\r\n }\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #triggerTempalte>\r\n <ui-action-button\r\n [descriptor]=\"triggerAction.descriptor!\"\r\n [code]=\"triggerAction.code\"\r\n [disabled]=\"!!triggerAction.disabled\"\r\n (mouseenter)=\"openMenu($event)\"\r\n (actionClick)=\"onActionClick(triggerAction)\"\r\n [class.submenuTrigger]=\"isSubmenu\"\r\n >\r\n </ui-action-button>\r\n</ng-template>\r\n", styles: [":host{display:inline-block;position:relative}ul,.ui-hover-menu{top:100%;left:0;list-style:none;padding-left:0;margin:0;background:#fff;width:fit-content;box-shadow:2px 2px 8px #0003;z-index:1000;border-radius:5px;padding:.1rem}.submenuTrigger,.ui-hover-menu ::ng-deep button{background-color:#fff;box-shadow:unset;border:unset;border-radius:unset;color:#000;width:100%;justify-content:flex-start}.hoverEffect:hover,.hoverEffect ::ng-deep button:hover{background-color:#f1f5f9}.hoverEffect.activeSubmenu,.hoverEffect.activeSubmenu ::ng-deep button{background-color:#f1f5f9}.ui-hover-menu ::ng-deep ui-action-button,.ui-hover-menu ::ng-deep ui-badge{width:100%}.ui-hover-menu>li{position:relative}.submenu{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.submenu ::ng-deep ui-action-button{flex:1}.disabled{color:#aaa;cursor:not-allowed}.ui-hover-menu ui-hover-menu{width:100%}smart-icon{align-content:center}\n"] }]
|
|
181
|
+
}], ctorParameters: () => [{ type: i1.UiMenuService }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i2.OverlayPositionBuilder }, { type: i6.ComponentLibrary, decorators: [{
|
|
182
|
+
type: Inject,
|
|
183
|
+
args: [COMPONENT_LIBRARY]
|
|
184
|
+
}, {
|
|
185
|
+
type: Optional
|
|
186
|
+
}] }], propDecorators: { submenuComponents: [{
|
|
187
|
+
type: ViewChildren,
|
|
188
|
+
args: ['submenu']
|
|
189
|
+
}], menuTemplate: [{
|
|
190
|
+
type: ViewChild,
|
|
191
|
+
args: ['menuTemplate']
|
|
192
|
+
}], triggerAction: [{
|
|
193
|
+
type: Input
|
|
194
|
+
}], isSubmenu: [{
|
|
195
|
+
type: Input
|
|
196
|
+
}], menuOpenDirection: [{
|
|
197
|
+
type: Input
|
|
198
|
+
}], actionClick: [{
|
|
199
|
+
type: Output
|
|
200
|
+
}], submenuOpened: [{
|
|
201
|
+
type: Output
|
|
202
|
+
}], onMenuClick: [{
|
|
203
|
+
type: HostListener,
|
|
204
|
+
args: ['click', ['$event']]
|
|
205
|
+
}], onDocumentClick: [{
|
|
206
|
+
type: HostListener,
|
|
207
|
+
args: ['document:click', ['$event']]
|
|
208
|
+
}] } });
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2NvbXBvbmVudHMvbWVudS9ob3Zlci9ob3Zlci1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vY29tcG9uZW50cy9tZW51L2hvdmVyL2hvdmVyLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFJTixTQUFTLEVBQ1QsWUFBWSxHQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7QUFPMUUsTUFBTSxPQUFPLGtCQUFrQjtJQW1CN0IsWUFDVSxXQUEwQixFQUMxQixPQUFnQixFQUNoQixnQkFBa0MsRUFDbEMsc0JBQThDLEVBQ1IsT0FBMEI7UUFKaEUsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFDMUIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLDJCQUFzQixHQUF0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ZnRlclZpZXdDaGVja2VkLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ29ubmVjdGVkUG9zaXRpb24sXHJcbiAgT3ZlcmxheSxcclxuICBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxyXG4gIE92ZXJsYXlSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBNZW51T3BlbkRpcmVjdGlvbiwgVWlBY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hcGknO1xyXG5pbXBvcnQgeyBVaU1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXR5L2NvbXBvbmVudExpYnJhcnknO1xyXG5pbXBvcnQgeyBnZXRNZW51UG9zaXRpb25zLCBnZXRTdWJtZW51UG9zaXRpb25zIH0gZnJvbSAnLi4vbWVudS5jb25zdGFudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1ob3Zlci1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaG92ZXItbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2hvdmVyLW1lbnUuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb3Zlck1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZHJlbignc3VibWVudScpIHN1Ym1lbnVDb21wb25lbnRzITogUXVlcnlMaXN0PEhvdmVyTWVudUNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVUZW1wbGF0ZScpIG1lbnVUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB0cmlnZ2VyQWN0aW9uITogVWlBY3Rpb247XHJcbiAgQElucHV0KCkgaXNTdWJtZW51OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWVudU9wZW5EaXJlY3Rpb24/OiBNZW51T3BlbkRpcmVjdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGFjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVaUFjdGlvbj4oKTtcclxuICBAT3V0cHV0KCkgc3VibWVudU9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8VWlBY3Rpb24+KCk7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGljb24hOiBzdHJpbmc7XHJcbiAgc3VibWVudU9wZW5NYXAgPSBuZXcgTWFwPFVpQWN0aW9uLCBib29sZWFuPigpO1xyXG4gIHN1YkFjdGlvbnM6IFVpQWN0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIGhhc0NoZWNrZWRDaGlsZHJlbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IFVpTWVudVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlQb3NpdGlvbkJ1aWxkZXI6IE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29tcExpYj86IENvbXBvbmVudExpYnJhcnlcclxuICApIHtcclxuICAgIHRoaXMuY29tcExpYiA9IGNvbXBMaWIgPz8gQ29tcG9uZW50TGlicmFyeS5QUklNRU5HO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IENvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbi1yaWdodCc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tcExpYiA9PT0gQ29tcG9uZW50TGlicmFyeS5NQVRFUklBTCkge1xyXG4gICAgICB0aGlzLmljb24gPSAnY2hldnJvbl9yaWdodCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudVNlcnZpY2VcclxuICAgICAgLmdldENsb3NlU2lnbmFsKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWyd0cmlnZ2VyQWN0aW9uJ10pIHtcclxuICAgICAgY29uc3QgdHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5jdXJyZW50VmFsdWUgYXMgVWlBY3Rpb247XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzVHJpZ2dlciA9IGNoYW5nZXNbJ3RyaWdnZXJBY3Rpb24nXS5wcmV2aW91c1ZhbHVlIGFzIFVpQWN0aW9uO1xyXG5cclxuICAgICAgdGhpcy5zdWJBY3Rpb25zID0gdHJpZ2dlcj8uc3ViQWN0aW9ucyA/PyBbXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzT3BlbiAmJiBwcmV2aW91c1RyaWdnZXIpIHtcclxuICAgICAgICBjb25zdCBoYXNTdWJBY3Rpb25zQ2hhbmdlZCA9IHRoaXMuaGFzU3ViQWN0aW9uc0NoYW5nZWQoXHJcbiAgICAgICAgICBwcmV2aW91c1RyaWdnZXI/LnN1YkFjdGlvbnMsXHJcbiAgICAgICAgICB0cmlnZ2VyPy5zdWJBY3Rpb25zXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGhhc1N1YkFjdGlvbnNDaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hPdmVybGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc1N1YkFjdGlvbnNDaGFuZ2VkKFxyXG4gICAgb2xkU3ViQWN0aW9uczogVWlBY3Rpb25bXSB8IHVuZGVmaW5lZCxcclxuICAgIG5ld1N1YkFjdGlvbnM6IFVpQWN0aW9uW10gfCB1bmRlZmluZWRcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9sZExlbmd0aCA9IG9sZFN1YkFjdGlvbnM/Lmxlbmd0aCA/PyAwO1xyXG4gICAgY29uc3QgbmV3TGVuZ3RoID0gbmV3U3ViQWN0aW9ucz8ubGVuZ3RoID8/IDA7XHJcblxyXG4gICAgaWYgKG9sZExlbmd0aCAhPT0gbmV3TGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvbGRMZW5ndGggPiAwICYmIG5ld0xlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdMZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChvbGRTdWJBY3Rpb25zIVtpXS5jb2RlICE9PSBuZXdTdWJBY3Rpb25zIVtpXS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25BY3Rpb25DbGljayhhY3Rpb246IFVpQWN0aW9uKSB7XHJcbiAgICBpZiAoIWFjdGlvbi5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoYWN0aW9uKTtcclxuICAgICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25NZW51Q2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLm1lbnVTZXJ2aWNlLmNsb3NlQWxsTWVudXMoKTtcclxuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLm92ZXJsYXlSZWY7XHJcbiAgfVxyXG5cclxuICBjbG9zZU1lbnUoKSB7XHJcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XHJcbiAgICAgIHRoaXMuaGFzQ2hlY2tlZENoaWxkcmVuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc3VibWVudUNvbXBvbmVudHMgJiYgdGhpcy5zdWJtZW51Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHMuZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaE92ZXJsYXkoKSB7XHJcbiAgICBpZiAoIXRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xyXG5cclxuICAgIGxldCBwb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5tZW51VGVtcGxhdGUsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XHJcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XHJcblxyXG4gICAgdGhpcy5oYXNDaGVja2VkQ2hpbGRyZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9wZW5NZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzU3VibWVudSkge1xyXG4gICAgICB0aGlzLnN1Ym1lbnVPcGVuZWQuZW1pdCh0aGlzLnRyaWdnZXJBY3Rpb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZW51U2VydmljZS5jbG9zZUFsbE1lbnVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRyaWdnZXJFbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIHZhciBwb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSB0aGlzLmlzU3VibWVudVxyXG4gICAgICA/IGdldFN1Ym1lbnVQb3NpdGlvbnModGhpcy5tZW51T3BlbkRpcmVjdGlvbilcclxuICAgICAgOiBnZXRNZW51UG9zaXRpb25zKHRoaXMudHJpZ2dlckFjdGlvbj8uZGVzY3JpcHRvcj8ubWVudT8ub3BlbkRpcmVjdGlvbik7XHJcblxyXG4gICAgbGV0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlQb3NpdGlvbkJ1aWxkZXJcclxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odHJpZ2dlckVsZW1lbnQpXHJcbiAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxyXG4gICAgICAud2l0aFB1c2godHJ1ZSlcclxuICAgICAgLndpdGhQb3NpdGlvbnMocG9zaXRpb25zKTtcclxuXHJcbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcclxuICAgICAgcG9zaXRpb25TdHJhdGVneSxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcclxuICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLm1lbnVUZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcclxuICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy5vcGVuTWVudShldmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TdWJtZW51T3BlbmVkKG9wZW5lZEFjdGlvbjogVWlBY3Rpb24pIHtcclxuICAgIGlmICghdGhpcy5zdWJtZW51Q29tcG9uZW50cyB8fCB0aGlzLnN1Ym1lbnVDb21wb25lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm9uU3VibWVudU9wZW5lZChvcGVuZWRBY3Rpb24pO1xyXG4gICAgICB9LCAwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3VibWVudUNvbXBvbmVudHMuZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICBpZiAoc3VibWVudS50cmlnZ2VyQWN0aW9uLmNvZGUgIT09IG9wZW5lZEFjdGlvbi5jb2RlICYmIHN1Ym1lbnUub3ZlcmxheVJlZikge1xyXG4gICAgICAgIHN1Ym1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTaWJsaW5nU3VibWVudXMoZXhjZXB0QWN0aW9uOiBVaUFjdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJtZW51Q29tcG9uZW50cz8uZm9yRWFjaCgoc3VibWVudSkgPT4ge1xyXG4gICAgICBpZiAoc3VibWVudS50cmlnZ2VyQWN0aW9uLmNvZGUgIT09IGV4Y2VwdEFjdGlvbi5jb2RlICYmIHN1Ym1lbnUuaXNPcGVuKSB7XHJcbiAgICAgICAgc3VibWVudS5jbG9zZU1lbnUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoaXNTdWJtZW51KSB7XHJcbiAgPGRpdiBjbGFzcz1cInN1Ym1lbnUgaG92ZXJFZmZlY3RcIiBbY2xhc3MuYWN0aXZlU3VibWVudV09XCJpc09wZW5cIiAobW91c2VlbnRlcik9XCJvcGVuTWVudSgkZXZlbnQpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJpZ2dlclRlbXBhbHRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8c21hcnQtaWNvbiBbaWNvbl09XCJpY29uXCIgY29sb3I9XCJibGFja1wiPjwvc21hcnQtaWNvbj5cclxuICA8L2Rpdj5cclxufSBAZWxzZSB7XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJUZW1wYWx0ZVwiPjwvbmctY29udGFpbmVyPlxyXG59XHJcblxyXG48bmctdGVtcGxhdGUgI21lbnVUZW1wbGF0ZT5cclxuICA8dWwgY2xhc3M9XCJ1aS1ob3Zlci1tZW51IHNiNC1tZW51LXBhbmVsXCI+XHJcbiAgICA8bGlcclxuICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBzdWJBY3Rpb25zXCJcclxuICAgICAgY2xhc3M9XCJob3ZlckVmZmVjdFwiXHJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWRcIlxyXG4gICAgICAobW91c2VlbnRlcik9XCJjbG9zZVNpYmxpbmdTdWJtZW51cyhhY3Rpb24pXCJcclxuICAgID5cclxuICAgICAgQGlmIChhY3Rpb24uc3ViQWN0aW9ucyAmJiBhY3Rpb24uc3ViQWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgPHVpLWhvdmVyLW1lbnVcclxuICAgICAgICAgICNzdWJtZW51XHJcbiAgICAgICAgICBbdHJpZ2dlckFjdGlvbl09XCJhY3Rpb25cIlxyXG4gICAgICAgICAgW2lzU3VibWVudV09XCJ0cnVlXCJcclxuICAgICAgICAgIFtzdWJBY3Rpb25zXT1cImFjdGlvbi5zdWJBY3Rpb25zIVwiXHJcbiAgICAgICAgICBbbWVudU9wZW5EaXJlY3Rpb25dPVwidHJpZ2dlckFjdGlvbi5kZXNjcmlwdG9yPy5tZW51Py5vcGVuRGlyZWN0aW9uXCJcclxuICAgICAgICAgIChhY3Rpb25DbGljayk9XCJhY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgKHN1Ym1lbnVPcGVuZWQpPVwib25TdWJtZW51T3BlbmVkKHN1Ym1lbnUpXCJcclxuICAgICAgICA+PC91aS1ob3Zlci1tZW51PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiYWN0aW9uLmRlc2NyaXB0b3IhXCJcclxuICAgICAgICAgIFtjb2RlXT1cImFjdGlvbi5jb2RlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhIWFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwib25BY3Rpb25DbGljayhhY3Rpb24pXCJcclxuICAgICAgICA+PC91aS1hY3Rpb24tYnV0dG9uPlxyXG4gICAgICB9XHJcbiAgICA8L2xpPlxyXG4gIDwvdWw+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RyaWdnZXJUZW1wYWx0ZT5cclxuICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgW2Rlc2NyaXB0b3JdPVwidHJpZ2dlckFjdGlvbi5kZXNjcmlwdG9yIVwiXHJcbiAgICBbY29kZV09XCJ0cmlnZ2VyQWN0aW9uLmNvZGVcIlxyXG4gICAgW2Rpc2FibGVkXT1cIiEhdHJpZ2dlckFjdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAobW91c2VlbnRlcik9XCJvcGVuTWVudSgkZXZlbnQpXCJcclxuICAgIChhY3Rpb25DbGljayk9XCJvbkFjdGlvbkNsaWNrKHRyaWdnZXJBY3Rpb24pXCJcclxuICAgIFtjbGFzcy5zdWJtZW51VHJpZ2dlcl09XCJpc1N1Ym1lbnVcIlxyXG4gID5cclxuICA8L3VpLWFjdGlvbi1idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|