shared-ui-test-1 1.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/constants/breadcrumbs.const.d.ts +1 -0
- package/constants/query-design-custom-class.constant.d.ts +1 -0
- package/core/directive/authorize.directive.d.ts +14 -0
- package/core/interfaces/filters.api.interface.d.ts +32 -0
- package/core/models/menu-elements-dto.d.ts +21 -0
- package/core/services/local-storage.service.d.ts +34 -0
- package/core/services/user-management.service.d.ts +39 -0
- package/core/site/services/support-util.service.d.ts +18 -0
- package/core/token/client-injection-token.d.ts +2 -0
- package/core/utils/sql-to-filter-datatype-converter.d.ts +2 -0
- package/core/utils/type-checks.utils.d.ts +10 -0
- package/core/utils/uuid-generator.utils.d.ts +1 -0
- package/directives/let.directive.d.ts +25 -0
- package/directives/remove-cancel-button.directive.d.ts +10 -0
- package/enums/action-types.enum.d.ts +16 -0
- package/enums/sort-direction.enum.d.ts +4 -0
- package/enums/source-types.enum.d.ts +4 -0
- package/enums/tooltips-prop.enum.d.ts +31 -0
- package/esm2022/constants/breadcrumbs.const.mjs +2 -0
- package/esm2022/constants/query-design-custom-class.constant.mjs +2 -0
- package/esm2022/core/directive/authorize.directive.mjs +37 -0
- package/esm2022/core/interfaces/filters.api.interface.mjs +12 -0
- package/esm2022/core/models/menu-elements-dto.mjs +2 -0
- package/esm2022/core/services/local-storage.service.mjs +55 -0
- package/esm2022/core/services/user-management.service.mjs +97 -0
- package/esm2022/core/site/services/support-util.service.mjs +55 -0
- package/esm2022/core/token/client-injection-token.mjs +3 -0
- package/esm2022/core/utils/sql-to-filter-datatype-converter.mjs +37 -0
- package/esm2022/core/utils/type-checks.utils.mjs +34 -0
- package/esm2022/core/utils/uuid-generator.utils.mjs +8 -0
- package/esm2022/directives/let.directive.mjs +48 -0
- package/esm2022/directives/remove-cancel-button.directive.mjs +23 -0
- package/esm2022/enums/action-types.enum.mjs +18 -0
- package/esm2022/enums/sort-direction.enum.mjs +6 -0
- package/esm2022/enums/source-types.enum.mjs +6 -0
- package/esm2022/enums/tooltips-prop.enum.mjs +33 -0
- package/esm2022/modules/dynamic-cards/directives/flip-card.directive.mjs +44 -0
- package/esm2022/modules/dynamic-cards/dynamic-card/card-list-container/card-list-container.component.mjs +20 -0
- package/esm2022/modules/dynamic-cards/dynamic-card/dynamic-card/dynamic-card.component.mjs +19 -0
- package/esm2022/modules/dynamic-cards/dynamic-card/dynamic-card-back/dynamic-card-back.component.mjs +16 -0
- package/esm2022/modules/dynamic-cards/dynamic-card/dynamic-card-footer/dynamic-card-footer.component.mjs +21 -0
- package/esm2022/modules/dynamic-cards/dynamic-card/dynamic-card-front/dynamic-card-front.component.mjs +18 -0
- package/esm2022/modules/dynamic-cards/dynamic-cards.module.mjs +60 -0
- package/esm2022/modules/dynamic-cards/interface/card-list.interface.mjs +2 -0
- package/esm2022/modules/dynamic-cards/interface/card.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-button-control/dynamic-form-button-control.component.mjs +27 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-checkbox-control/dynamic-form-checkbox-control.component.mjs +19 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-control-label/dynamic-form-control-label.component.mjs +14 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-counter-control/dynamic-form-counter-control.component.mjs +43 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-datepicker-control/dynamic-form-datepicker-control.component.mjs +48 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-field-control/dynamic-form-field-control.component.mjs +96 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-field-control/dynamic-form-field.matcher.mjs +9 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-input-control/dynamic-form-input-control.component.mjs +22 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-ng-select-control/dynamic-form-ng-select-control.component.mjs +27 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-radio-group/dynamic-form-radio-group.component.mjs +31 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-radio-group/enum/radio-group-orientation.enum.mjs +6 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-select-control/dynamic-form-select-control.component.mjs +29 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-switch-control/dynamic-form-switch-control.component.mjs +18 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-text-area-control/dynamic-form-text-area-control.component.mjs +22 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-ui-control/dynamic-form-ui-control-list/dynamic-form-ui-control-list.component.mjs +74 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-ui-control/dynamic-form-ui-control.component.mjs +30 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form/base-form-actions/base-form-actions.component.mjs +47 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form/base-form-actions/enums/base-form-action-types.mjs +7 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form/base-form-actions/interfaces/base-form-action.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form/dynamic-form-ui.component.mjs +64 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form-array/dynamic-form-ui-array.component.mjs +26 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form-group/dynamic-form-group.component.mjs +26 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form-layout/dynamic-form-layout-item/dynamic-form-layout-item.component.mjs +65 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form-layout/dynamic-form-layout.component.mjs +33 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/enums/form-field-css-class.enum.mjs +9 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/components/errors-block/errors-block.component.mjs +25 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/dynamic-form-ui.module.mjs +117 -0
- package/esm2022/modules/dynamic-forms/dynamic-form-UI/providers/ui-form-control-map.provider.mjs +47 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/components/dynamic-form-array.component.mjs +16 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/components/dynamic-form-component.mjs +82 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/components/dynamic-form-control-container.component.mjs +189 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/components/dynamic-form-control.component.mjs +112 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/components/dynamic-form-layout.component.mjs +34 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/constants/form-errors.constant.mjs +34 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/constants/matchers/matchers.constant.mjs +27 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/constants/reg-exp-error.constant.mjs +10 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/directives/dynamic-id.directive.mjs +24 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/directives/dynamic-list.directive.mjs +26 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/directives/dynamic-template.directive.mjs +29 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/dynamic-form-core.module.mjs +49 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/enums/autocomplete.enum.mjs +6 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/enums/control-types.enum.mjs +22 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/enums/form-control-events.enum.mjs +8 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/enums/form-hooks.enum.mjs +7 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/enums/input-types.enum.mjs +20 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/enums/matcher-types.enum.mjs +10 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/enums/template-directive-alignment.mjs +6 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/enums/textarea-wrap.enum.mjs +6 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/index.mjs +39 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/components/form-control/dynamic-form-control-event.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/components/form-control/dynamic-form-control.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/dynamic-form/dynamic-form-model.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/layout/form-control-layout.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/layout/form-layout-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/layout/form-layout.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/matchers/form-control-matcher.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-array/form-array-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-button-control/button-control-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-check-control/check-control-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-control/form-control-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-control/form-control-relation.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-date-control/date-control-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-group/form-group-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-input-control/form-input-control-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-number-control/form-number-control-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-option/form-option-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-option-control/form-option-control-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/button-control-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/checkbox-control-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/datepicker-control-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/input-control-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/radio-group-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/select-control-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/switch-control-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/textarea-control-model-config.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-value-control/form-value-control.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/interfaces/validators/validators.interface.mjs +2 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-array/dynamic-form-array.model.mjs +51 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-array/form-array-group/dynamic-form-array-group.model.mjs +15 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-button-control/dynamic-button-control.model.mjs +19 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-check-control/dynamic-check-control.model.mjs +19 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-control/dynamic-form-control.model.mjs +23 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-date-control/dynamic-date-control.model.mjs +11 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-group/dynamic-form-group.model.mjs +37 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-input-control/dynamic-input-control.model.mjs +20 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-number-control/dynamic-number-control.model.mjs +15 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-option/form-option.model.mjs +15 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-option-control/dynamic-option-control.model.mjs +52 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-static-control/static-control.model.mjs +7 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/button/dynamic-button.model.mjs +13 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/checkbox/dynamic-checkbox.model.mjs +12 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/counter/dynamic-counter.model.mjs +11 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/datepicker/dynamic-datepicker.model.mjs +18 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/input/dynamic-input.model.mjs +13 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/radio/dynamic-radio-group.model.mjs +13 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/select/dynamic-select.model.mjs +18 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/switch/dynamic-switch.model.mjs +11 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/textarea/dynamic-textarea.model.mjs +14 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/form-value-control/form-value-control.model.mjs +25 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/layout/enums/FormLayoutControlTypes.enum.mjs +7 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/layout/layout-control.model.mjs +8 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/models/ng-select-control/dynamic-ng-select.model.mjs +19 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/pipes/find-dynamic-control-model/find-dynamic-control-model.pipe.mjs +38 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/pipes/get-error-from-key-value.pipe.mjs +20 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/service/dynamic-form-component.service.mjs +37 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/service/dynamic-form-layout.service.mjs +35 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/service/dynamic-form-validation.service.mjs +35 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/service/dynamic-form.service.mjs +239 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/tokens/dynamic-matchers.token.mjs +3 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/tokens/form-control-map.token.mjs +3 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms-core/tokens/validators.token.mjs +3 -0
- package/esm2022/modules/dynamic-forms/dynamic-forms.module.mjs +32 -0
- package/esm2022/modules/material/mat-cdk-module.mjs +17 -0
- package/esm2022/modules/material/material.module.mjs +201 -0
- package/esm2022/modules/query-builder/components/query-design/query-design.component.mjs +103 -0
- package/esm2022/modules/query-builder/components/query-design/rule-line/components/alphanumeric-control/alphanumeric-control.component.mjs +150 -0
- package/esm2022/modules/query-builder/components/query-design/rule-line/components/boolean-control/boolean-control.component.mjs +102 -0
- package/esm2022/modules/query-builder/components/query-design/rule-line/components/date-control/date-control.component.mjs +76 -0
- package/esm2022/modules/query-builder/components/query-design/rule-line/components/numeric-control/numeric-control.component.mjs +168 -0
- package/esm2022/modules/query-builder/components/query-design/rule-line/constants/operators-sets.mjs +108 -0
- package/esm2022/modules/query-builder/components/query-design/rule-line/helpers/condition-operators.mapper.mjs +8 -0
- package/esm2022/modules/query-builder/components/query-design/rule-line/helpers/control-values-mapper.mjs +78 -0
- package/esm2022/modules/query-builder/components/query-design/rule-line/rule-line.component.mjs +234 -0
- package/esm2022/modules/query-builder/directive/auto-complete-position.directive.mjs +30 -0
- package/esm2022/modules/query-builder/interfaces/query-builder.interface.mjs +39 -0
- package/esm2022/modules/query-builder/interfaces/select-custom-css-object.mjs +2 -0
- package/esm2022/modules/query-builder/query-builder.module.mjs +66 -0
- package/esm2022/modules/ui-kit/components/accordion/accordion-content/accordion-content.component.mjs +16 -0
- package/esm2022/modules/ui-kit/components/accordion/accordion-trigger.directive.mjs +30 -0
- package/esm2022/modules/ui-kit/components/accordion/accordion.directive.mjs +19 -0
- package/esm2022/modules/ui-kit/components/banner/banner.component.mjs +53 -0
- package/esm2022/modules/ui-kit/components/banner/banner.service.mjs +64 -0
- package/esm2022/modules/ui-kit/components/breadcrumbs/breadcrumbs.component.mjs +25 -0
- package/esm2022/modules/ui-kit/components/breadcrumbs/model/breadCrumbItem.mjs +2 -0
- package/esm2022/modules/ui-kit/components/breadcrumbs/service/breadcrumb.service.mjs +63 -0
- package/esm2022/modules/ui-kit/components/breadcrumbs/utils/crumb-service.enum.mjs +8 -0
- package/esm2022/modules/ui-kit/components/buttons/button-control/button-control.component.mjs +46 -0
- package/esm2022/modules/ui-kit/components/buttons/buttons-list/buttons-list.component.mjs +11 -0
- package/esm2022/modules/ui-kit/components/buttons/circle-button/circle-button.component.mjs +37 -0
- package/esm2022/modules/ui-kit/components/card-container/card-container.component.mjs +11 -0
- package/esm2022/modules/ui-kit/components/common-breadcrumbs/common-breadcrumbs.component.mjs +30 -0
- package/esm2022/modules/ui-kit/components/common-breadcrumbs/interface/breadcrumb.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/components/common-breadcrumbs/service/breadcrumb.service.mjs +65 -0
- package/esm2022/modules/ui-kit/components/data-pagination/data-pagination.component.mjs +155 -0
- package/esm2022/modules/ui-kit/components/data-table/api-classes/filter-manager.mjs +50 -0
- package/esm2022/modules/ui-kit/components/data-table/api-classes/grid-api.mjs +73 -0
- package/esm2022/modules/ui-kit/components/data-table/constants/change-type.enum.mjs +8 -0
- package/esm2022/modules/ui-kit/components/data-table/constants/column-id.mjs +13 -0
- package/esm2022/modules/ui-kit/components/data-table/constants/row.mjs +4 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col/base-data-col/base-data-col.component.mjs +93 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col/data-col/data-col.component.mjs +17 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col/data-col-action-button/data-col-action-button.component.mjs +27 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col/data-col-boolean/data-col-boolean.component.mjs +20 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col/data-col-multivalue/data-col-multivalue.component.mjs +18 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col/data-col-nested/data-col-nested.component.mjs +31 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col/data-col-reference/data-col-reference.component.mjs +96 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col/data-col-view/data-col-view.component.mjs +75 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col-disp/data-col-disp.component.mjs +248 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col-filter/data-col-filter.component.mjs +323 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col-filter/filter-value-helpers/col-filter-between-value.mjs +68 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col-filter/filter-value-helpers/col-filter-contains-value.mjs +25 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col-filter/filter-value-helpers/col-filter-in-value.mjs +64 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col-filter/filter-value-helpers/col-filter-slider-value.mjs +42 -0
- package/esm2022/modules/ui-kit/components/data-table/data-col-filter/filter-value-helpers/filter-value-executor-provider.mjs +42 -0
- package/esm2022/modules/ui-kit/components/data-table/data-column-filter/data-column-filter.component.mjs +69 -0
- package/esm2022/modules/ui-kit/components/data-table/data-row/data-row.component.mjs +251 -0
- package/esm2022/modules/ui-kit/components/data-table/data-table/data-table.component.mjs +1534 -0
- package/esm2022/modules/ui-kit/components/data-table/data-table-actions/data-table-actions.component.mjs +153 -0
- package/esm2022/modules/ui-kit/components/data-table/data-table-body/data-table-body.component.mjs +205 -0
- package/esm2022/modules/ui-kit/components/data-table/data-table-check-rows/data-table-check-rows.component.mjs +61 -0
- package/esm2022/modules/ui-kit/components/data-table/data-table-row-actions/const/data-table-actions.enum.mjs +8 -0
- package/esm2022/modules/ui-kit/components/data-table/data-table-row-actions/data-table-row-actions.component.mjs +120 -0
- package/esm2022/modules/ui-kit/components/data-table/enums/col-filter-types.mjs +17 -0
- package/esm2022/modules/ui-kit/components/data-table/header-row/header-row.component.mjs +14 -0
- package/esm2022/modules/ui-kit/components/data-table/interfaces/data-table-component.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/components/data-table/interfaces/filter-value-executor.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/components/data-table/services/data-table-context.service.mjs +26 -0
- package/esm2022/modules/ui-kit/components/data-table-wrap/data-table-wrap.component.mjs +38 -0
- package/esm2022/modules/ui-kit/components/excel-table/excel-table.component.mjs +164 -0
- package/esm2022/modules/ui-kit/components/excel-table/interface/excel-table.interface.mjs +44 -0
- package/esm2022/modules/ui-kit/components/form/base-form-control/base-form-control.component.mjs +41 -0
- package/esm2022/modules/ui-kit/components/form/checkbox-form-control/checkbox-form-control.component.mjs +21 -0
- package/esm2022/modules/ui-kit/components/form/counter-form-control/counter-form-control.component.mjs +66 -0
- package/esm2022/modules/ui-kit/components/form/form-container/form-container.component.mjs +133 -0
- package/esm2022/modules/ui-kit/components/form/form-group-container/form-group-container.component.mjs +11 -0
- package/esm2022/modules/ui-kit/components/form/input-form-control/input-form-control.component.mjs +20 -0
- package/esm2022/modules/ui-kit/components/form/multivalue-form-control/custom-input/custom-input.component.mjs +35 -0
- package/esm2022/modules/ui-kit/components/form/multivalue-form-control/custom-input/old-new-value.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/components/form/multivalue-form-control/multivalue-form-control.component.mjs +66 -0
- package/esm2022/modules/ui-kit/components/form/radio-form-control/radio-form-control.component.mjs +19 -0
- package/esm2022/modules/ui-kit/components/form/select-form-control/select-form-control.component.mjs +78 -0
- package/esm2022/modules/ui-kit/components/form/selection-group-container/selection-group-container.component.mjs +18 -0
- package/esm2022/modules/ui-kit/components/form/textarea-form-control/textarea-form-control.component.mjs +20 -0
- package/esm2022/modules/ui-kit/components/icon/expand-collapse-icon/expand-collapse-icon.component.mjs +26 -0
- package/esm2022/modules/ui-kit/components/icon/icon/icon.component.mjs +35 -0
- package/esm2022/modules/ui-kit/components/icon/text-icon/text-icon.component.mjs +22 -0
- package/esm2022/modules/ui-kit/components/layouts/form-layout/form-layout.component.mjs +56 -0
- package/esm2022/modules/ui-kit/components/layouts/primary-layout/primary-layout.component.mjs +11 -0
- package/esm2022/modules/ui-kit/components/loader/loader.component.mjs +27 -0
- package/esm2022/modules/ui-kit/components/mat-actions-button/mat-actions-button.mjs +34 -0
- package/esm2022/modules/ui-kit/components/modals/common-confirm-modal/common-confirm-modal.component.mjs +53 -0
- package/esm2022/modules/ui-kit/components/modals/confirm-modal/confirm-modal.component.mjs +37 -0
- package/esm2022/modules/ui-kit/components/modals/delete-modal/delete-modal.component.mjs +41 -0
- package/esm2022/modules/ui-kit/components/modals/enums/confirmation-modal.enum.mjs +13 -0
- package/esm2022/modules/ui-kit/components/snackbar/snackbar.component.mjs +21 -0
- package/esm2022/modules/ui-kit/components/tabs/constants/index.mjs +2 -0
- package/esm2022/modules/ui-kit/components/tabs/interfaces/index.mjs +2 -0
- package/esm2022/modules/ui-kit/components/tabs/tab-group/tab-group.component.mjs +77 -0
- package/esm2022/modules/ui-kit/components/tabs/tab.directive.mjs +60 -0
- package/esm2022/modules/ui-kit/components/tree-view/tree-view.component.mjs +374 -0
- package/esm2022/modules/ui-kit/constants/data-table.constants.mjs +7 -0
- package/esm2022/modules/ui-kit/constants/snackbar.constants.mjs +4 -0
- package/esm2022/modules/ui-kit/enums/coderefs-prop.enum.mjs +26 -0
- package/esm2022/modules/ui-kit/enums/color-schemes.enum.mjs +13 -0
- package/esm2022/modules/ui-kit/enums/column-disable-mode.enum.mjs +7 -0
- package/esm2022/modules/ui-kit/enums/column-types.enum.mjs +10 -0
- package/esm2022/modules/ui-kit/enums/component-sizes.enum.mjs +6 -0
- package/esm2022/modules/ui-kit/enums/form-item-type.mjs +7 -0
- package/esm2022/modules/ui-kit/enums/form-types.enum.mjs +7 -0
- package/esm2022/modules/ui-kit/enums/form-url-params.enum.mjs +6 -0
- package/esm2022/modules/ui-kit/enums/icons.enum.mjs +24 -0
- package/esm2022/modules/ui-kit/enums/position.enum.mjs +6 -0
- package/esm2022/modules/ui-kit/enums/select-option.enum.mjs +10 -0
- package/esm2022/modules/ui-kit/enums/snackbar.enum.mjs +8 -0
- package/esm2022/modules/ui-kit/enums/url-param-action.enum.mjs +6 -0
- package/esm2022/modules/ui-kit/enums/viewType.enum.mjs +7 -0
- package/esm2022/modules/ui-kit/interfaces/api.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/interfaces/confirm-modal-data.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/interfaces/constants.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/interfaces/data-table.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/interfaces/form.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/interfaces/generic.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/interfaces/list-item.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/interfaces/mat-action-buttons.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/interfaces/row-selection-info.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/interfaces/select.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/interfaces/snackbar.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/interfaces/tree-view.interface.mjs +2 -0
- package/esm2022/modules/ui-kit/pipes/column-filter.pipe.mjs +21 -0
- package/esm2022/modules/ui-kit/pipes/filter-by-prop.pipe.mjs +27 -0
- package/esm2022/modules/ui-kit/pipes/first-letter-text.pipe.mjs +17 -0
- package/esm2022/modules/ui-kit/pipes/keys.pipe.mjs +17 -0
- package/esm2022/modules/ui-kit/pipes/paginate.pipe.mjs +29 -0
- package/esm2022/modules/ui-kit/pipes/search.pipe.mjs +50 -0
- package/esm2022/modules/ui-kit/services/data-table.service.mjs +202 -0
- package/esm2022/modules/ui-kit/services/form.service.mjs +91 -0
- package/esm2022/modules/ui-kit/services/mappers/form-data-table-mapper.service.mjs +19 -0
- package/esm2022/modules/ui-kit/services/snackbar.service.mjs +43 -0
- package/esm2022/modules/ui-kit/services/url.service.mjs +17 -0
- package/esm2022/modules/ui-kit/types/basic.type.mjs +2 -0
- package/esm2022/modules/ui-kit/types/function.type.mjs +2 -0
- package/esm2022/modules/ui-kit/types/select.type.mjs +2 -0
- package/esm2022/modules/ui-kit/ui-kit.module.mjs +370 -0
- package/esm2022/public-api.mjs +85 -0
- package/esm2022/shared-pipes/pipes/search.pipe.mjs +48 -0
- package/esm2022/shared-ui-test-1.mjs +5 -0
- package/esm2022/shared.module.mjs +57 -0
- package/fesm2022/shared-ui-test-1.mjs +10516 -0
- package/fesm2022/shared-ui-test-1.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/modules/dynamic-cards/directives/flip-card.directive.d.ts +15 -0
- package/modules/dynamic-cards/dynamic-card/card-list-container/card-list-container.component.d.ts +10 -0
- package/modules/dynamic-cards/dynamic-card/dynamic-card/dynamic-card.component.d.ts +7 -0
- package/modules/dynamic-cards/dynamic-card/dynamic-card-back/dynamic-card-back.component.d.ts +7 -0
- package/modules/dynamic-cards/dynamic-card/dynamic-card-footer/dynamic-card-footer.component.d.ts +10 -0
- package/modules/dynamic-cards/dynamic-card/dynamic-card-front/dynamic-card-front.component.d.ts +8 -0
- package/modules/dynamic-cards/dynamic-cards.module.d.ts +18 -0
- package/modules/dynamic-cards/interface/card-list.interface.d.ts +9 -0
- package/modules/dynamic-cards/interface/card.interface.d.ts +12 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-button-control/dynamic-form-button-control.component.d.ts +11 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-checkbox-control/dynamic-form-checkbox-control.component.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-control-label/dynamic-form-control-label.component.d.ts +7 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-counter-control/dynamic-form-counter-control.component.d.ts +13 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-datepicker-control/dynamic-form-datepicker-control.component.d.ts +13 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-field-control/dynamic-form-field-control.component.d.ts +34 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-field-control/dynamic-form-field.matcher.d.ts +8 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-input-control/dynamic-form-input-control.component.d.ts +8 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-ng-select-control/dynamic-form-ng-select-control.component.d.ts +11 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-radio-group/dynamic-form-radio-group.component.d.ts +12 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-radio-group/enum/radio-group-orientation.enum.d.ts +4 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-select-control/dynamic-form-select-control.component.d.ts +10 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-switch-control/dynamic-form-switch-control.component.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-text-area-control/dynamic-form-text-area-control.component.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-ui-control/dynamic-form-ui-control-list/dynamic-form-ui-control-list.component.d.ts +26 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/controls/dynamic-form-ui-control/dynamic-form-ui-control.component.d.ts +14 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form/base-form-actions/base-form-actions.component.d.ts +19 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form/base-form-actions/enums/base-form-action-types.d.ts +5 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form/base-form-actions/interfaces/base-form-action.interface.d.ts +5 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form/dynamic-form-ui.component.d.ts +26 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form-array/dynamic-form-ui-array.component.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form-group/dynamic-form-group.component.d.ts +11 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form-layout/dynamic-form-layout-item/dynamic-form-layout-item.component.d.ts +23 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/dynamic-form-layout/dynamic-form-layout.component.d.ts +21 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/enums/form-field-css-class.enum.d.ts +7 -0
- package/modules/dynamic-forms/dynamic-form-UI/components/errors-block/errors-block.component.d.ts +11 -0
- package/modules/dynamic-forms/dynamic-form-UI/dynamic-form-ui.module.d.ts +32 -0
- package/modules/dynamic-forms/dynamic-form-UI/providers/ui-form-control-map.provider.d.ts +6 -0
- package/modules/dynamic-forms/dynamic-forms-core/components/dynamic-form-array.component.d.ts +10 -0
- package/modules/dynamic-forms/dynamic-forms-core/components/dynamic-form-component.d.ts +26 -0
- package/modules/dynamic-forms/dynamic-forms-core/components/dynamic-form-control-container.component.d.ts +57 -0
- package/modules/dynamic-forms/dynamic-forms-core/components/dynamic-form-control.component.d.ts +42 -0
- package/modules/dynamic-forms/dynamic-forms-core/components/dynamic-form-layout.component.d.ts +28 -0
- package/modules/dynamic-forms/dynamic-forms-core/constants/form-errors.constant.d.ts +6 -0
- package/modules/dynamic-forms/dynamic-forms-core/constants/matchers/matchers.constant.d.ts +6 -0
- package/modules/dynamic-forms/dynamic-forms-core/constants/reg-exp-error.constant.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-forms-core/directives/dynamic-id.directive.d.ts +11 -0
- package/modules/dynamic-forms/dynamic-forms-core/directives/dynamic-list.directive.d.ts +11 -0
- package/modules/dynamic-forms/dynamic-forms-core/directives/dynamic-template.directive.d.ts +13 -0
- package/modules/dynamic-forms/dynamic-forms-core/dynamic-form-core.module.d.ts +12 -0
- package/modules/dynamic-forms/dynamic-forms-core/enums/autocomplete.enum.d.ts +4 -0
- package/modules/dynamic-forms/dynamic-forms-core/enums/control-types.enum.d.ts +20 -0
- package/modules/dynamic-forms/dynamic-forms-core/enums/form-control-events.enum.d.ts +6 -0
- package/modules/dynamic-forms/dynamic-forms-core/enums/form-hooks.enum.d.ts +5 -0
- package/modules/dynamic-forms/dynamic-forms-core/enums/input-types.enum.d.ts +18 -0
- package/modules/dynamic-forms/dynamic-forms-core/enums/matcher-types.enum.d.ts +8 -0
- package/modules/dynamic-forms/dynamic-forms-core/enums/template-directive-alignment.d.ts +4 -0
- package/modules/dynamic-forms/dynamic-forms-core/enums/textarea-wrap.enum.d.ts +4 -0
- package/modules/dynamic-forms/dynamic-forms-core/index.d.ts +38 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/components/form-control/dynamic-form-control-event.interface.d.ts +15 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/components/form-control/dynamic-form-control.interface.d.ts +19 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/dynamic-form/dynamic-form-model.interface.d.ts +4 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/layout/form-control-layout.interface.d.ts +3 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/layout/form-layout-config.interface.d.ts +6 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/layout/form-layout.interface.d.ts +2 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/matchers/form-control-matcher.interface.d.ts +8 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-array/form-array-model-config.interface.d.ts +7 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-button-control/button-control-model-config.interface.d.ts +4 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-check-control/check-control-model-config.interface.d.ts +4 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-control/form-control-model-config.interface.d.ts +16 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-control/form-control-relation.interface.d.ts +8 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-date-control/date-control-model-config.interface.d.ts +8 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-group/form-group-model-config.interface.d.ts +6 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-input-control/form-input-control-config.interface.d.ts +14 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-number-control/form-number-control-config.interface.d.ts +7 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-option/form-option-config.interface.d.ts +5 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-option-control/form-option-control-config.interface.d.ts +6 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/button-control-model-config.interface.d.ts +6 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/checkbox-control-model-config.interface.d.ts +5 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/datepicker-control-model-config.interface.d.ts +11 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/input-control-model-config.interface.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/radio-group-model-config.interface.d.ts +4 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/select-control-model-config.interface.d.ts +8 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/switch-control-model-config.interface.d.ts +5 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-ui-models/textarea-control-model-config.interface.d.ts +6 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/models/form-value-control/form-value-control.interface.d.ts +10 -0
- package/modules/dynamic-forms/dynamic-forms-core/interfaces/validators/validators.interface.d.ts +5 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-array/dynamic-form-array.model.d.ts +19 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-array/form-array-group/dynamic-form-array-group.model.d.ts +12 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-button-control/dynamic-button-control.model.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-check-control/dynamic-check-control.model.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-control/dynamic-form-control.model.d.ts +24 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-date-control/dynamic-date-control.model.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-group/dynamic-form-group.model.d.ts +17 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-input-control/dynamic-input-control.model.d.ts +16 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-number-control/dynamic-number-control.model.d.ts +12 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-option/form-option.model.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-option-control/dynamic-option-control.model.d.ts +19 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-static-control/static-control.model.d.ts +7 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/button/dynamic-button.model.d.ts +10 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/checkbox/dynamic-checkbox.model.d.ts +8 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/counter/dynamic-counter.model.d.ts +7 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/datepicker/dynamic-datepicker.model.d.ts +15 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/input/dynamic-input.model.d.ts +10 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/radio/dynamic-radio-group.model.d.ts +8 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/select/dynamic-select.model.d.ts +11 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/switch/dynamic-switch.model.d.ts +8 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-ui-models/textarea/dynamic-textarea.model.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/form-value-control/form-value-control.model.d.ts +17 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/layout/enums/FormLayoutControlTypes.enum.d.ts +5 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/layout/layout-control.model.d.ts +9 -0
- package/modules/dynamic-forms/dynamic-forms-core/models/ng-select-control/dynamic-ng-select.model.d.ts +12 -0
- package/modules/dynamic-forms/dynamic-forms-core/pipes/find-dynamic-control-model/find-dynamic-control-model.pipe.d.ts +20 -0
- package/modules/dynamic-forms/dynamic-forms-core/pipes/get-error-from-key-value.pipe.d.ts +8 -0
- package/modules/dynamic-forms/dynamic-forms-core/service/dynamic-form-component.service.d.ts +14 -0
- package/modules/dynamic-forms/dynamic-forms-core/service/dynamic-form-layout.service.d.ts +14 -0
- package/modules/dynamic-forms/dynamic-forms-core/service/dynamic-form-validation.service.d.ts +11 -0
- package/modules/dynamic-forms/dynamic-forms-core/service/dynamic-form.service.d.ts +30 -0
- package/modules/dynamic-forms/dynamic-forms-core/tokens/dynamic-matchers.token.d.ts +3 -0
- package/modules/dynamic-forms/dynamic-forms-core/tokens/form-control-map.token.d.ts +3 -0
- package/modules/dynamic-forms/dynamic-forms-core/tokens/validators.token.d.ts +3 -0
- package/modules/dynamic-forms/dynamic-forms.module.d.ts +9 -0
- package/modules/material/mat-cdk-module.d.ts +7 -0
- package/modules/material/material.module.d.ts +50 -0
- package/modules/query-builder/components/query-design/query-design.component.d.ts +35 -0
- package/modules/query-builder/components/query-design/rule-line/components/alphanumeric-control/alphanumeric-control.component.d.ts +46 -0
- package/modules/query-builder/components/query-design/rule-line/components/boolean-control/boolean-control.component.d.ts +29 -0
- package/modules/query-builder/components/query-design/rule-line/components/date-control/date-control.component.d.ts +21 -0
- package/modules/query-builder/components/query-design/rule-line/components/numeric-control/numeric-control.component.d.ts +46 -0
- package/modules/query-builder/components/query-design/rule-line/constants/operators-sets.d.ts +12 -0
- package/modules/query-builder/components/query-design/rule-line/helpers/condition-operators.mapper.d.ts +6 -0
- package/modules/query-builder/components/query-design/rule-line/helpers/control-values-mapper.d.ts +7 -0
- package/modules/query-builder/components/query-design/rule-line/rule-line.component.d.ts +64 -0
- package/modules/query-builder/directive/auto-complete-position.directive.d.ts +11 -0
- package/modules/query-builder/interfaces/query-builder.interface.d.ts +61 -0
- package/modules/query-builder/interfaces/select-custom-css-object.d.ts +7 -0
- package/modules/query-builder/query-builder.module.d.ts +18 -0
- package/modules/ui-kit/components/accordion/accordion-content/accordion-content.component.d.ts +8 -0
- package/modules/ui-kit/components/accordion/accordion-trigger.directive.d.ts +10 -0
- package/modules/ui-kit/components/accordion/accordion.directive.d.ts +7 -0
- package/modules/ui-kit/components/banner/banner.component.d.ts +14 -0
- package/modules/ui-kit/components/banner/banner.service.d.ts +27 -0
- package/modules/ui-kit/components/breadcrumbs/breadcrumbs.component.d.ts +15 -0
- package/modules/ui-kit/components/breadcrumbs/model/breadCrumbItem.d.ts +4 -0
- package/modules/ui-kit/components/breadcrumbs/service/breadcrumb.service.d.ts +19 -0
- package/modules/ui-kit/components/breadcrumbs/utils/crumb-service.enum.d.ts +6 -0
- package/modules/ui-kit/components/buttons/button-control/button-control.component.d.ts +16 -0
- package/modules/ui-kit/components/buttons/buttons-list/buttons-list.component.d.ts +5 -0
- package/modules/ui-kit/components/buttons/circle-button/circle-button.component.d.ts +20 -0
- package/modules/ui-kit/components/card-container/card-container.component.d.ts +5 -0
- package/modules/ui-kit/components/common-breadcrumbs/common-breadcrumbs.component.d.ts +20 -0
- package/modules/ui-kit/components/common-breadcrumbs/interface/breadcrumb.interface.d.ts +6 -0
- package/modules/ui-kit/components/common-breadcrumbs/service/breadcrumb.service.d.ts +21 -0
- package/modules/ui-kit/components/data-pagination/data-pagination.component.d.ts +54 -0
- package/modules/ui-kit/components/data-table/api-classes/filter-manager.d.ts +13 -0
- package/modules/ui-kit/components/data-table/api-classes/grid-api.d.ts +31 -0
- package/modules/ui-kit/components/data-table/constants/change-type.enum.d.ts +6 -0
- package/modules/ui-kit/components/data-table/constants/column-id.d.ts +2 -0
- package/modules/ui-kit/components/data-table/constants/row.d.ts +2 -0
- package/modules/ui-kit/components/data-table/data-col/base-data-col/base-data-col.component.d.ts +28 -0
- package/modules/ui-kit/components/data-table/data-col/data-col/data-col.component.d.ts +7 -0
- package/modules/ui-kit/components/data-table/data-col/data-col-action-button/data-col-action-button.component.d.ts +12 -0
- package/modules/ui-kit/components/data-table/data-col/data-col-boolean/data-col-boolean.component.d.ts +8 -0
- package/modules/ui-kit/components/data-table/data-col/data-col-multivalue/data-col-multivalue.component.d.ts +8 -0
- package/modules/ui-kit/components/data-table/data-col/data-col-nested/data-col-nested.component.d.ts +13 -0
- package/modules/ui-kit/components/data-table/data-col/data-col-reference/data-col-reference.component.d.ts +29 -0
- package/modules/ui-kit/components/data-table/data-col/data-col-view/data-col-view.component.d.ts +27 -0
- package/modules/ui-kit/components/data-table/data-col-disp/data-col-disp.component.d.ts +60 -0
- package/modules/ui-kit/components/data-table/data-col-filter/data-col-filter.component.d.ts +85 -0
- package/modules/ui-kit/components/data-table/data-col-filter/filter-value-helpers/col-filter-between-value.d.ts +12 -0
- package/modules/ui-kit/components/data-table/data-col-filter/filter-value-helpers/col-filter-contains-value.d.ts +9 -0
- package/modules/ui-kit/components/data-table/data-col-filter/filter-value-helpers/col-filter-in-value.d.ts +13 -0
- package/modules/ui-kit/components/data-table/data-col-filter/filter-value-helpers/col-filter-slider-value.d.ts +10 -0
- package/modules/ui-kit/components/data-table/data-col-filter/filter-value-helpers/filter-value-executor-provider.d.ts +11 -0
- package/modules/ui-kit/components/data-table/data-column-filter/data-column-filter.component.d.ts +29 -0
- package/modules/ui-kit/components/data-table/data-row/data-row.component.d.ts +81 -0
- package/modules/ui-kit/components/data-table/data-table/data-table.component.d.ts +302 -0
- package/modules/ui-kit/components/data-table/data-table-actions/data-table-actions.component.d.ts +53 -0
- package/modules/ui-kit/components/data-table/data-table-body/data-table-body.component.d.ts +75 -0
- package/modules/ui-kit/components/data-table/data-table-check-rows/data-table-check-rows.component.d.ts +25 -0
- package/modules/ui-kit/components/data-table/data-table-row-actions/const/data-table-actions.enum.d.ts +6 -0
- package/modules/ui-kit/components/data-table/data-table-row-actions/data-table-row-actions.component.d.ts +42 -0
- package/modules/ui-kit/components/data-table/enums/col-filter-types.d.ts +14 -0
- package/modules/ui-kit/components/data-table/header-row/header-row.component.d.ts +7 -0
- package/modules/ui-kit/components/data-table/interfaces/data-table-component.interface.d.ts +28 -0
- package/modules/ui-kit/components/data-table/interfaces/filter-value-executor.interface.d.ts +12 -0
- package/modules/ui-kit/components/data-table/services/data-table-context.service.d.ts +12 -0
- package/modules/ui-kit/components/data-table-wrap/data-table-wrap.component.d.ts +13 -0
- package/modules/ui-kit/components/excel-table/excel-table.component.d.ts +28 -0
- package/modules/ui-kit/components/excel-table/interface/excel-table.interface.d.ts +29 -0
- package/modules/ui-kit/components/form/base-form-control/base-form-control.component.d.ts +17 -0
- package/modules/ui-kit/components/form/checkbox-form-control/checkbox-form-control.component.d.ts +8 -0
- package/modules/ui-kit/components/form/counter-form-control/counter-form-control.component.d.ts +21 -0
- package/modules/ui-kit/components/form/form-container/form-container.component.d.ts +45 -0
- package/modules/ui-kit/components/form/form-group-container/form-group-container.component.d.ts +5 -0
- package/modules/ui-kit/components/form/input-form-control/input-form-control.component.d.ts +8 -0
- package/modules/ui-kit/components/form/multivalue-form-control/custom-input/custom-input.component.d.ts +15 -0
- package/modules/ui-kit/components/form/multivalue-form-control/custom-input/old-new-value.interface.d.ts +4 -0
- package/modules/ui-kit/components/form/multivalue-form-control/multivalue-form-control.component.d.ts +26 -0
- package/modules/ui-kit/components/form/radio-form-control/radio-form-control.component.d.ts +8 -0
- package/modules/ui-kit/components/form/select-form-control/select-form-control.component.d.ts +32 -0
- package/modules/ui-kit/components/form/selection-group-container/selection-group-container.component.d.ts +7 -0
- package/modules/ui-kit/components/form/textarea-form-control/textarea-form-control.component.d.ts +8 -0
- package/modules/ui-kit/components/icon/expand-collapse-icon/expand-collapse-icon.component.d.ts +11 -0
- package/modules/ui-kit/components/icon/icon/icon.component.d.ts +14 -0
- package/modules/ui-kit/components/icon/text-icon/text-icon.component.d.ts +10 -0
- package/modules/ui-kit/components/layouts/form-layout/form-layout.component.d.ts +29 -0
- package/modules/ui-kit/components/layouts/primary-layout/primary-layout.component.d.ts +5 -0
- package/modules/ui-kit/components/loader/loader.component.d.ts +12 -0
- package/modules/ui-kit/components/mat-actions-button/mat-actions-button.d.ts +14 -0
- package/modules/ui-kit/components/modals/common-confirm-modal/common-confirm-modal.component.d.ts +17 -0
- package/modules/ui-kit/components/modals/confirm-modal/confirm-modal.component.d.ts +13 -0
- package/modules/ui-kit/components/modals/delete-modal/delete-modal.component.d.ts +17 -0
- package/modules/ui-kit/components/modals/enums/confirmation-modal.enum.d.ts +11 -0
- package/modules/ui-kit/components/snackbar/snackbar.component.d.ts +10 -0
- package/modules/ui-kit/components/tabs/constants/index.d.ts +1 -0
- package/modules/ui-kit/components/tabs/interfaces/index.d.ts +3 -0
- package/modules/ui-kit/components/tabs/tab-group/tab-group.component.d.ts +25 -0
- package/modules/ui-kit/components/tabs/tab.directive.d.ts +16 -0
- package/modules/ui-kit/components/tree-view/tree-view.component.d.ts +67 -0
- package/modules/ui-kit/constants/data-table.constants.d.ts +6 -0
- package/modules/ui-kit/constants/snackbar.constants.d.ts +3 -0
- package/modules/ui-kit/enums/coderefs-prop.enum.d.ts +24 -0
- package/modules/ui-kit/enums/color-schemes.enum.d.ts +11 -0
- package/modules/ui-kit/enums/column-disable-mode.enum.d.ts +5 -0
- package/modules/ui-kit/enums/column-types.enum.d.ts +8 -0
- package/modules/ui-kit/enums/component-sizes.enum.d.ts +4 -0
- package/modules/ui-kit/enums/form-item-type.d.ts +5 -0
- package/modules/ui-kit/enums/form-types.enum.d.ts +5 -0
- package/modules/ui-kit/enums/form-url-params.enum.d.ts +4 -0
- package/modules/ui-kit/enums/icons.enum.d.ts +22 -0
- package/modules/ui-kit/enums/position.enum.d.ts +4 -0
- package/modules/ui-kit/enums/select-option.enum.d.ts +8 -0
- package/modules/ui-kit/enums/snackbar.enum.d.ts +6 -0
- package/modules/ui-kit/enums/url-param-action.enum.d.ts +4 -0
- package/modules/ui-kit/enums/viewType.enum.d.ts +5 -0
- package/modules/ui-kit/interfaces/api.interface.d.ts +45 -0
- package/modules/ui-kit/interfaces/confirm-modal-data.interface.d.ts +7 -0
- package/modules/ui-kit/interfaces/constants.interface.d.ts +4 -0
- package/modules/ui-kit/interfaces/data-table.interface.d.ts +253 -0
- package/modules/ui-kit/interfaces/form.interface.d.ts +21 -0
- package/modules/ui-kit/interfaces/generic.interface.d.ts +7 -0
- package/modules/ui-kit/interfaces/list-item.interface.d.ts +5 -0
- package/modules/ui-kit/interfaces/mat-action-buttons.interface.d.ts +14 -0
- package/modules/ui-kit/interfaces/row-selection-info.interface.d.ts +7 -0
- package/modules/ui-kit/interfaces/select.interface.d.ts +8 -0
- package/modules/ui-kit/interfaces/snackbar.interface.d.ts +4 -0
- package/modules/ui-kit/interfaces/tree-view.interface.d.ts +49 -0
- package/modules/ui-kit/pipes/column-filter.pipe.d.ts +12 -0
- package/modules/ui-kit/pipes/filter-by-prop.pipe.d.ts +9 -0
- package/modules/ui-kit/pipes/first-letter-text.pipe.d.ts +7 -0
- package/modules/ui-kit/pipes/keys.pipe.d.ts +7 -0
- package/modules/ui-kit/pipes/paginate.pipe.d.ts +12 -0
- package/modules/ui-kit/pipes/search.pipe.d.ts +16 -0
- package/modules/ui-kit/services/data-table.service.d.ts +37 -0
- package/modules/ui-kit/services/form.service.d.ts +26 -0
- package/modules/ui-kit/services/mappers/form-data-table-mapper.service.d.ts +8 -0
- package/modules/ui-kit/services/snackbar.service.d.ts +15 -0
- package/modules/ui-kit/services/url.service.d.ts +7 -0
- package/modules/ui-kit/types/basic.type.d.ts +2 -0
- package/modules/ui-kit/types/function.type.d.ts +20 -0
- package/modules/ui-kit/types/select.type.d.ts +2 -0
- package/modules/ui-kit/ui-kit.module.d.ts +79 -0
- package/package.json +45 -0
- package/public-api.d.ts +84 -0
- package/shared-pipes/pipes/search.pipe.d.ts +15 -0
- package/shared.module.d.ts +13 -0
package/esm2022/modules/ui-kit/components/data-table/data-col-filter/data-col-filter.component.mjs
ADDED
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup } from '@angular/forms';
|
|
3
|
+
import { cloneDeep, isFunction } from 'lodash';
|
|
4
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
5
|
+
import { debounceTime, finalize, first, shareReplay, takeUntil, distinctUntilChanged } from 'rxjs/operators';
|
|
6
|
+
import { DataTableColumnFilterInputTypes, DataTableColumnFilterTypes } from '../../data-table/enums/col-filter-types';
|
|
7
|
+
import moment from 'moment';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "../../data-table/data-col-filter/filter-value-helpers/filter-value-executor-provider";
|
|
10
|
+
import * as i2 from "@angular/common";
|
|
11
|
+
import * as i3 from "@angular/material/input";
|
|
12
|
+
import * as i4 from "@angular/material/form-field";
|
|
13
|
+
import * as i5 from "@angular/material/button";
|
|
14
|
+
import * as i6 from "@angular/material/card";
|
|
15
|
+
import * as i7 from "@angular/material/checkbox";
|
|
16
|
+
import * as i8 from "@angular/material/datepicker";
|
|
17
|
+
import * as i9 from "@angular/material/icon";
|
|
18
|
+
import * as i10 from "@angular/material/menu";
|
|
19
|
+
import * as i11 from "@angular/material/progress-spinner";
|
|
20
|
+
import * as i12 from "@angular/material/radio";
|
|
21
|
+
import * as i13 from "@angular/forms";
|
|
22
|
+
import * as i14 from "@ng-select/ng-select";
|
|
23
|
+
import * as i15 from "@angular-slider/ngx-slider";
|
|
24
|
+
import * as i16 from "@angular/flex-layout/flex";
|
|
25
|
+
import * as i17 from "@angular/flex-layout/extended";
|
|
26
|
+
import * as i18 from "@ng-bootstrap/ng-bootstrap";
|
|
27
|
+
import * as i19 from "../../../pipes/filter-by-prop.pipe";
|
|
28
|
+
export class DataColFilterComponent {
|
|
29
|
+
constructor(filterValueExecutorProvider, cd) {
|
|
30
|
+
this.filterValueExecutorProvider = filterValueExecutorProvider;
|
|
31
|
+
this.cd = cd;
|
|
32
|
+
this.isClearFilter$ = new BehaviorSubject(false);
|
|
33
|
+
this.isUpdatedFilterDesign = false;
|
|
34
|
+
this.selectableItems$ = new BehaviorSubject(null);
|
|
35
|
+
this.searchText = new FormControl();
|
|
36
|
+
this.selectAllCtrl = new FormControl(false);
|
|
37
|
+
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
|
|
38
|
+
this.onFilterClicked = new EventEmitter();
|
|
39
|
+
this.dateRangeFormGroup = new FormGroup({
|
|
40
|
+
startDate: new FormControl(''),
|
|
41
|
+
endDate: new FormControl(''),
|
|
42
|
+
});
|
|
43
|
+
this.dateRangeValue = '';
|
|
44
|
+
this.sliderValueOpt = {
|
|
45
|
+
maxScore: 100,
|
|
46
|
+
minScore: 0,
|
|
47
|
+
};
|
|
48
|
+
this.searchCtrl = new FormControl();
|
|
49
|
+
this.FILTER_TYPES = DataTableColumnFilterTypes;
|
|
50
|
+
this.FILTER_INPUT_TYPES = DataTableColumnFilterInputTypes;
|
|
51
|
+
this.sliderDefaultOptions = {
|
|
52
|
+
floor: 0,
|
|
53
|
+
ceil: 100,
|
|
54
|
+
};
|
|
55
|
+
this.isLoading$ = new BehaviorSubject(false);
|
|
56
|
+
this.selectableItems = [];
|
|
57
|
+
this.clearSubs$ = new Subject();
|
|
58
|
+
this.searchObject$ = new Subject();
|
|
59
|
+
this.setSearchWatcher$();
|
|
60
|
+
}
|
|
61
|
+
get getCheckBoxsValue() {
|
|
62
|
+
return Array.isArray(this.filterWorkingValue) ? this.filterWorkingValue.join(' ') : this.filterWorkingValue[0];
|
|
63
|
+
}
|
|
64
|
+
get isIndeterminate() {
|
|
65
|
+
return this.filterWorkingValue.length > 0 && this.filterWorkingValue.length !== this.selectableItems.length;
|
|
66
|
+
}
|
|
67
|
+
get isAllSelected() {
|
|
68
|
+
return this.filterWorkingValue.length > 0 && this.filterWorkingValue.length === this.selectableItems.length;
|
|
69
|
+
}
|
|
70
|
+
get isClearEnabled() {
|
|
71
|
+
return !!(this.dateRangeFormGroup.get('startDate').value || this.dateRangeFormGroup.get('endDate').value);
|
|
72
|
+
}
|
|
73
|
+
get isSearchBoxHide() {
|
|
74
|
+
return !!this.filterOption?.isSearchBoxHide;
|
|
75
|
+
}
|
|
76
|
+
ngOnDestroy() {
|
|
77
|
+
this.clearSubs$.next(null);
|
|
78
|
+
this.clearSubs$.complete();
|
|
79
|
+
this.isLoading$.next(false);
|
|
80
|
+
this.isLoading$.complete();
|
|
81
|
+
}
|
|
82
|
+
ngOnInit() {
|
|
83
|
+
this.filterValue = new FormControl('');
|
|
84
|
+
this.isClearFilter$.pipe(distinctUntilChanged()).subscribe(res => {
|
|
85
|
+
if (res) {
|
|
86
|
+
this.clearFilter();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
if (this.filterOption && (this.filterOption.type === DataTableColumnFilterInputTypes.REFERENCE)) {
|
|
90
|
+
this.loadDefaultReferenceItems();
|
|
91
|
+
this.loadReferenceData();
|
|
92
|
+
}
|
|
93
|
+
this.filterValueMaker = this.filterValueExecutorProvider
|
|
94
|
+
.getFilterValueExecutorProvider(this.filterOption && this.filterOption.type || this.FILTER_TYPES.CONTAINS);
|
|
95
|
+
this.filterValueMaker.setInitValues(this);
|
|
96
|
+
}
|
|
97
|
+
ngOnChanges(changes) {
|
|
98
|
+
if (changes.filterParam && this.filterValue) {
|
|
99
|
+
this.filterValue.setValue(this.filterParam ? this.filterParam.filterValue : '');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
selectAllCheckbox() {
|
|
103
|
+
if (this.selectAllCtrl.value) {
|
|
104
|
+
this.filterWorkingValue = this.selectableItems$.getValue().map(x => x.value);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this.filterWorkingValue = [];
|
|
108
|
+
}
|
|
109
|
+
this.emitFilterParam(this.filterWorkingValue);
|
|
110
|
+
}
|
|
111
|
+
columnFilterClicked() {
|
|
112
|
+
this.emitFilterParam();
|
|
113
|
+
this.ngbPopover.close();
|
|
114
|
+
}
|
|
115
|
+
columnFilterResetClicked() {
|
|
116
|
+
this.filterValueMaker.resetValue(this);
|
|
117
|
+
this.emitFilterParam();
|
|
118
|
+
this.ngbPopover.close();
|
|
119
|
+
}
|
|
120
|
+
matMenuOpend() {
|
|
121
|
+
this.previousSelectableItems = cloneDeep(this.selectableItems);
|
|
122
|
+
this.selectableItems = [];
|
|
123
|
+
this.selectableItems$.next(this.selectableItems);
|
|
124
|
+
if (this.searchText.value) {
|
|
125
|
+
this.searchText.setValue('');
|
|
126
|
+
}
|
|
127
|
+
if (this.filterOption.selectableItems) {
|
|
128
|
+
this.selectableItems = this.filterOption.selectableItems;
|
|
129
|
+
this.selectableItems$.next(this.filterOption.selectableItems);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
this.isLoading$.next(true);
|
|
133
|
+
if (this.filterOption && isFunction(this.filterOption.getSelectableFn$)) {
|
|
134
|
+
this.filterOption.getSelectableFn$('')
|
|
135
|
+
.pipe(first(), shareReplay(), takeUntil(this.clearSubs$), finalize(() => this.isLoading$.next(false)))
|
|
136
|
+
.subscribe((res) => {
|
|
137
|
+
const currntSelectedItems = this.getCurrentSelectedItems();
|
|
138
|
+
this.selectableItems = [...res];
|
|
139
|
+
this.removePreviousSelectedItems(currntSelectedItems, res);
|
|
140
|
+
this.selectableItems$.next(currntSelectedItems.concat(res));
|
|
141
|
+
});
|
|
142
|
+
this.getSelectableItems();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
dateRangeClick(ev) {
|
|
146
|
+
this.dateRangeValue = ev.value;
|
|
147
|
+
const val = +ev.value;
|
|
148
|
+
const raw = { days: 1, weeks: 7, months: 30, years: 365 };
|
|
149
|
+
const days = (val * raw[this.filterOption.dateRangeItems?.unit ?? 'days']) - 1;
|
|
150
|
+
this.dateRangeFormGroup.setValue({ startDate: new Date(), endDate: moment().add(days, 'days').toDate() });
|
|
151
|
+
}
|
|
152
|
+
clearSelection() {
|
|
153
|
+
this.filterValueMaker.resetValue(this);
|
|
154
|
+
this.emitFilterParam();
|
|
155
|
+
this.selectAllCtrl.reset();
|
|
156
|
+
}
|
|
157
|
+
clearDateFilter() {
|
|
158
|
+
this.dateRangeFormGroup.reset({}, { emitEvent: false });
|
|
159
|
+
this.filterValueMaker.resetValue(this);
|
|
160
|
+
this.emitFilterParam();
|
|
161
|
+
this.dateRangeValue = '';
|
|
162
|
+
}
|
|
163
|
+
closePopup() {
|
|
164
|
+
this.ngbPopover.close();
|
|
165
|
+
}
|
|
166
|
+
clearSearch() {
|
|
167
|
+
this.searchText.setValue('');
|
|
168
|
+
}
|
|
169
|
+
changeContainsValue() {
|
|
170
|
+
this.filterWorkingValue = this.filterValue.value;
|
|
171
|
+
}
|
|
172
|
+
searchValueChanged() {
|
|
173
|
+
this.searchObject$.next(this.filterValue.value);
|
|
174
|
+
}
|
|
175
|
+
setCheckedValuesToFilter(item) {
|
|
176
|
+
if (!item) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
this.filterWorkingValue = this.filterValueMaker.setFilterValue(this.filterOption, this.filterWorkingValue, item);
|
|
180
|
+
this.emitFilterParam(this.filterWorkingValue);
|
|
181
|
+
}
|
|
182
|
+
referenceValueChanged() {
|
|
183
|
+
this.emitFilterParam(this.filterValue.value);
|
|
184
|
+
}
|
|
185
|
+
sliderValueChanged() {
|
|
186
|
+
if (!this.filterWorkingValue) {
|
|
187
|
+
this.filterWorkingValue = {};
|
|
188
|
+
}
|
|
189
|
+
this.filterWorkingValue['maxScore'] = this.sliderValueOpt.maxScore;
|
|
190
|
+
this.filterWorkingValue['minScore'] = this.sliderValueOpt.minScore;
|
|
191
|
+
this.emitFilterParam();
|
|
192
|
+
}
|
|
193
|
+
setDateValue(formName) {
|
|
194
|
+
if (!this.filterWorkingValue) {
|
|
195
|
+
this.filterWorkingValue = {};
|
|
196
|
+
}
|
|
197
|
+
this.filterWorkingValue[formName] = this.dateRangeFormGroup.controls[formName].value;
|
|
198
|
+
if (this.isUpdatedFilterDesign && (this.filterWorkingValue[formName] ||
|
|
199
|
+
this.filterWorkingValue[formName])) {
|
|
200
|
+
this.emitFilterParam(this.populateDateRnage());
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
isItemChecked(item) {
|
|
204
|
+
return this.filterValueMaker.isCheckedFilterValue(this.filterOption, this.filterWorkingValue, item);
|
|
205
|
+
}
|
|
206
|
+
isFormInvalid() {
|
|
207
|
+
return this.filterValueMaker.isFormInvalid(this);
|
|
208
|
+
}
|
|
209
|
+
getFilterValue() {
|
|
210
|
+
return this.filterValueMaker.getFilterValue(this.filterWorkingValue, this.isUpdatedFilterDesign);
|
|
211
|
+
}
|
|
212
|
+
emitFilterParam(filterValue) {
|
|
213
|
+
this.onFilterClicked.emit({
|
|
214
|
+
filterColumn: this.columnName,
|
|
215
|
+
filterValue: filterValue ? filterValue : this.getFilterValue(),
|
|
216
|
+
columnName: this.columnName.prop,
|
|
217
|
+
filterType: this.filterOption && this.filterOption.type || this.FILTER_TYPES.CONTAINS,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
getSelectableItems() {
|
|
221
|
+
this.searchText.valueChanges.pipe(debounceTime(500))
|
|
222
|
+
.subscribe(() => {
|
|
223
|
+
const existingObj = this.getCurrentSelectedItems();
|
|
224
|
+
this.isLoading$.next(true);
|
|
225
|
+
this.filterOption.getSelectableFn$(this.searchText.value, true)
|
|
226
|
+
.pipe(first(), shareReplay(), takeUntil(this.clearSubs$), finalize(() => this.isLoading$.next(false)))
|
|
227
|
+
.subscribe((response) => {
|
|
228
|
+
this.removePreviousSelectedItems(existingObj, response);
|
|
229
|
+
this.selectableItems = existingObj.concat(response);
|
|
230
|
+
this.selectableItems$.next(existingObj.concat(response));
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
clearFilter() {
|
|
235
|
+
this.filterValueMaker.resetValue(this);
|
|
236
|
+
this.dateRangeFormGroup.reset();
|
|
237
|
+
this.isClearFilter$.next(false);
|
|
238
|
+
}
|
|
239
|
+
getCurrentSelectedItems() {
|
|
240
|
+
const existingValues = this.filterWorkingValue;
|
|
241
|
+
return existingValues.map(item => {
|
|
242
|
+
const label = this.previousSelectableItems.find(x => x[this.filterOption.bindProp] === item)?.[this.filterOption.displayProp];
|
|
243
|
+
return { [this.filterOption.bindProp]: item, [this.filterOption.displayProp]: label || '' };
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
removePreviousSelectedItems(previousItems, currentItems) {
|
|
247
|
+
previousItems.forEach(x => {
|
|
248
|
+
const position = currentItems.findIndex(item => item[this.filterOption.bindProp] === x[this.filterOption.bindProp]);
|
|
249
|
+
if (position !== -1) {
|
|
250
|
+
currentItems.splice(position, 1);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
populateDateRnage() {
|
|
255
|
+
const dateRanges = [];
|
|
256
|
+
dateRanges[0] = this.formatDate(this.filterWorkingValue.startDate);
|
|
257
|
+
dateRanges[1] = this.formatDate(this.filterWorkingValue.endDate);
|
|
258
|
+
return dateRanges;
|
|
259
|
+
}
|
|
260
|
+
formatDate(date) {
|
|
261
|
+
if (!date) {
|
|
262
|
+
return '';
|
|
263
|
+
}
|
|
264
|
+
return `${new Date(date).getFullYear()}-${new Date(date).getMonth() + 1}-${new Date(date).getDate()}`;
|
|
265
|
+
}
|
|
266
|
+
loadReferenceData() {
|
|
267
|
+
this.filterValue.setValue(null);
|
|
268
|
+
if (this.filterOption.selectableItems && this.filterOption.selectableItems.length) {
|
|
269
|
+
this.selectableItems$.next(this.filterOption.selectableItems);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (isFunction(this.filterOption.getSelectableFn$)) {
|
|
273
|
+
this.filterOption.getSelectableFn$().pipe(takeUntil(this.clearSubs$))
|
|
274
|
+
.subscribe((res) => {
|
|
275
|
+
if (res && res.length > 0) {
|
|
276
|
+
this.selectableItems$.next(res);
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
setSearchWatcher$() {
|
|
282
|
+
this.searchObject$.pipe(debounceTime(500), takeUntil(this.clearSubs$))
|
|
283
|
+
.subscribe((searchStr) => {
|
|
284
|
+
this.onFilterClicked.emit({
|
|
285
|
+
filterColumn: this.columnName,
|
|
286
|
+
filterValue: searchStr,
|
|
287
|
+
columnName: this.columnName.prop,
|
|
288
|
+
filterType: this.filterOption && this.filterOption.type || this.FILTER_TYPES.CONTAINS,
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
loadDefaultReferenceItems() {
|
|
293
|
+
this.selectableItems$.next([
|
|
294
|
+
{ [this.filterOption.displayProp]: 'SELECT', [this.filterOption.bindProp]: '' },
|
|
295
|
+
{ [this.filterOption.displayProp]: 'True', [this.filterOption.bindProp]: true },
|
|
296
|
+
{ [this.filterOption.displayProp]: 'False', [this.filterOption.bindProp]: false },
|
|
297
|
+
]);
|
|
298
|
+
}
|
|
299
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataColFilterComponent, deps: [{ token: i1.FilterValueExecutorProvider }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
300
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DataColFilterComponent, selector: "app-data-col-filter", inputs: { isClearFilter$: "isClearFilter$", isUpdatedFilterDesign: "isUpdatedFilterDesign", columnName: "columnName", filterParam: "filterParam", numberOfTableRefresh: "numberOfTableRefresh", filterOption: "filterOption" }, outputs: { onFilterClicked: "onFilterClicked" }, viewQueries: [{ propertyName: "ngbPopover", first: true, predicate: ["ngbPopover"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"isUpdatedFilterDesign\">\n <ng-container [ngSwitch]=\"filterOption?.type\">\n <ng-container *ngSwitchCase=\"FILTER_INPUT_TYPES.TEXT\">\n <mat-form-field\n class=\"apollo-text-field table-header-apollo-text-field text-search\"\n [floatLabel]=\"'auto'\"\n >\n <input\n (ngModelChange)=\"searchValueChanged()\"\n matInput\n type=\"text\"\n placeholder=\"Search {{ columnName.header }}\"\n name=\"search\"\n [formControl]=\"searchCtrl\"\n (ngModelChange)=\"changeContainsValue()\"\n />\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase=\"FILTER_INPUT_TYPES.REFERENCE\">\n <ng-select\n class=\"apollo-text-field table-header-apollo-text-field\"\n (change)=\"referenceValueChanged()\"\n [appendTo]=\"'mat-card'\"\n [items]=\"(selectableItems$ | async) || []\"\n [bindValue]=\"filterOption.bindProp\"\n [bindLabel]=\"filterOption.displayProp\"\n [multiple]=\"false\"\n placeholder=\"{{ columnName.header }}\"\n [formControl]=\"filterValue\"\n >\n </ng-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"FILTER_INPUT_TYPES.CHECKBOX\">\n <button\n (menuOpened)=\"matMenuOpend()\"\n mat-raised-button\n [matMenuTriggerFor]=\"actions\"\n class=\"dropdown-toggle odp-secondary-button\"\n >\n <span>{{ columnName.header || columnName.prop | titlecase }}</span>\n <mat-menu\n #actions=\"matMenu\"\n focusFirstItem=\"false\"\n class=\"odb-mat-menu-panel custom-panel filter-panel\"\n >\n <div class=\"custom-panel-padding\">\n <span\n class=\"filter-search-container\"\n (click)=\"$event.stopPropagation()\"\n >\n <input\n *ngIf=\"!isSearchBoxHide\"\n required\n matInput\n type=\"text\"\n placeholder=\"Search {{ columnName.header }}\"\n name=\"search\"\n [formControl]=\"searchText\"\n />\n <span\n class=\"clear-filter-search\"\n *ngIf=\"searchText.value\"\n (click)=\"clearSearch()\"\n >✕</span\n >\n </span>\n <span\n (click)=\"clearSelection()\"\n class=\"clear-all\"\n >Clear all</span\n >\n <mat-spinner\n *ngIf=\"isLoading$ | async\"\n class=\"mr-1\"\n [diameter]=\"16\"\n ></mat-spinner>\n <div\n class=\"custom-mat-menu-item\"\n class=\"my-1\"\n >\n <span>\n <mat-checkbox\n class=\"bold-text\"\n [indeterminate]=\"isIndeterminate\"\n [checked]=\"isAllSelected\"\n [formControl]=\"selectAllCtrl\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"selectAllCheckbox()\"\n >Select All</mat-checkbox\n >\n </span>\n </div>\n <div\n class=\"custom-mat-menu-item\"\n *ngFor=\"\n let item of (selectableItems$ | async) ||\n filterOption.selectableItems ||\n []\n \"\n class=\"my-1\"\n >\n <span>\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n [checked]=\"isItemChecked(item)\"\n (change)=\"setCheckedValuesToFilter(item)\"\n [title]=\"item[filterOption.displayProp]\"\n >{{ item[filterOption.displayProp] }}</mat-checkbox\n >\n </span>\n </div>\n </div>\n </mat-menu>\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"FILTER_INPUT_TYPES.DATE_RANGE\">\n <ng-container *ngTemplateOutlet=\"dateRangeTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"FILTER_INPUT_TYPES.SLIDER\">\n <ng-container *ngIf=\"filterOption.filterTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n filterOption.filterTemplate;\n context: {\n $implicit: {\n filterOption: filterOption,\n thOptions: filterOption.thOptions\n }\n }\n \"\n >\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!filterOption.filterTemplate\">\n <div class=\"custom-slider custom-slider-alignment\">\n <ngx-slider (userChangeEnd)=\"sliderValueChanged()\" [(value)]=\"sliderValueOpt.minScore\"\n [(highValue)]=\"sliderValueOpt.maxScore\" [options]=\"sliderDefaultOptions\">\n </ngx-slider>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"!isUpdatedFilterDesign\">\n <a #ngbPopover=\"ngbPopover\" [ngbPopover]=\"popTemplate\" [placement]=\"'bottom'\" [autoClose]=\"false\">\n <i class=\"fas fa-filter filter-icon\"></i>\n </a>\n <ng-template #popTemplate>\n <div class=\"card-width table-col-filter-panel\">\n <mat-icon (click)=\"closePopup()\" class=\"mat-icon material-icons close-icon\">close</mat-icon>\n <div class=\"card-form\">\n <mat-form-field *ngIf=\"!filterOption?.type || filterOption.type == FILTER_TYPES.CONTAINS\"\n class=\"card-full-width apollo-text-field\" [floatLabel]=\"'always'\">\n <mat-label>Filter By {{ columnName.header }}</mat-label>\n <input matInput placeholder=\"Enter {{ columnName.header }}\" [formControl]=\"filterValue\"\n (ngModelChange)=\"changeContainsValue()\">\n </mat-form-field>\n\n <mat-label *ngIf=\"filterOption?.type && filterOption?.type != FILTER_TYPES.CONTAINS\">Filter By\n {{columnName.header }}</mat-label>\n <div *ngIf=\"filterOption?.type === FILTER_TYPES.IN\">\n <section class=\"search\">\n <form ngForm>\n <div class=\"searchbar-wrapper\">\n <i class=\"svg-icon fa-solid fa-magnifying-glass\"></i>\n <input required matInput type=\"text\" placeholder=\"Search \"\n name=\"search\" />\n </div>\n </form>\n </section>\n <div [ngClass]=\"{ 'multi-select-section': filterOption.selectableItems?.length>6 }\">\n <div *ngFor=\"let item of filterOption.selectableItems | filterByProp: filterOption.displayProp: ''\"\n class=\"my-1\">\n <span>\n <mat-checkbox [checked]=\"isItemChecked(item)\"\n (change)=\"setCheckedValuesToFilter(item)\">\n {{item[filterOption.displayProp]}}</mat-checkbox>\n </span>\n </div>\n </div>\n </div>\n <div *ngIf=\"filterOption?.type === FILTER_TYPES.BETWEEN\" class=\"filter-item\" fxLayout=\"row\"\n [formGroup]=\"dateRangeFormGroup\">\n <div class=\"apollo-text-field date-picker-field\" fxLayout=\"row\">\n <input [readonly]=\"true\" matInput required (ngModelChange)=\"setDateValue('startDate')\"\n class=\"input-element\" [matDatepicker]=\"picker1\" [placeholder]=\"'Start Date'\"\n formControlName=\"startDate\">\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"\n class=\"datepicker-toggle\"></mat-datepicker-toggle>\n <mat-datepicker #picker1></mat-datepicker>\n\n </div>\n <div class=\"apollo-text-field date-picker-field\" fxLayout=\"row\">\n <input [readonly]=\"true\" matInput required (ngModelChange)=\"setDateValue('endDate')\"\n class=\"input-element\" [matDatepicker]=\"picker2\" [placeholder]=\"'End Date'\"\n formControlName=\"endDate\">\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"\n class=\"datepicker-toggle\"></mat-datepicker-toggle>\n <mat-datepicker #picker2></mat-datepicker>\n </div>\n </div>\n <div *ngIf=\"filterOption?.type === FILTER_INPUT_TYPES.CHECKBOX\" class=\"filter-item\" fxLayout=\"row\">\n <button (menuOpened)=\"matMenuOpend()\" mat-raised-button [matMenuTriggerFor]=\"actions\"\n class=\"dropdown-toggle odp-secondary-button\">\n <span>{{getCheckBoxsValue?? columnName.header || columnName.prop | titlecase }}</span>\n <mat-menu #actions=\"matMenu\" focusFirstItem=\"false\" class=\"odb-mat-menu-panel custom-panel filter-panel\">\n <div class=\"custom-panel-padding\">\n <span class=\"filter-search-container\" (click)=\"$event.stopPropagation()\">\n <input *ngIf=\"!isSearchBoxHide\" required matInput type=\"text\"\n placeholder=\"Search {{ columnName.header }}\" name=\"search\" [formControl]=\"searchText\" />\n <span class=\"clear-filter-search\" *ngIf=\"searchText.value\" (click)=\"clearSearch()\">✕</span>\n </span>\n <span (click)=\"clearSelection()\" class=\"clear-all\">Clear all</span>\n <mat-spinner *ngIf=\"isLoading$ | async\" class=\"mr-1\" [diameter]=\"16\"></mat-spinner>\n <div class=\"custom-mat-menu-item\" class=\"my-1\">\n <span>\n <mat-checkbox class=\"bold-text\" [indeterminate]=\"isIndeterminate\" [checked]=\"isAllSelected\"\n [formControl]=\"selectAllCtrl\" (click)=\"$event.stopPropagation()\"\n (change)=\"selectAllCheckbox()\">Select All</mat-checkbox>\n </span>\n </div>\n <div class=\"custom-mat-menu-item\" *ngFor=\"\n let item of (selectableItems$ | async) ||\n filterOption.selectableItems ||\n []\n \" class=\"my-1\">\n <span>\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"isItemChecked(item)\"\n (change)=\"setCheckedValuesToFilter(item)\" [title]=\"item[filterOption.displayProp]\">{{\n item[filterOption.displayProp] }}</mat-checkbox>\n </span>\n </div>\n </div>\n </mat-menu>\n </button>\n </div>\n </div>\n <mat-card-actions>\n <button [disabled]=\"isFormInvalid()\" (click)=\"columnFilterClicked()\" mat-button color=\"primary\"><i\n class=\"fa-solid fa-magnifying-glass\"></i> Search</button>\n <button (click)=\"columnFilterResetClicked()\" mat-button color=\"primary\"><i class=\"fas fa-redo\"></i>\n Clear</button>\n </mat-card-actions>\n </div>\n </ng-template>\n</ng-container>\n<ng-template #dateRangeTemplate>\n <button mat-raised-button [matMenuTriggerFor]=\"actions\" class=\"dropdown-toggle odp-secondary-button\">\n <span>{{ (columnName.header || columnName.prop) | titlecase}}</span>\n <mat-menu #actions=\"matMenu\" focusFirstItem=\"false\" class=\"date-range-panel\">\n <div class=\"filter-item\" fxLayout=\"row\" [formGroup]=\"dateRangeFormGroup\">\n <div class=\"apollo-text-field custom-date-picker-field\" fxLayout=\"row\">\n <input [readonly]=\"true\" (click)=\"picker1.open(); $event.stopPropagation();\" [max]=\"dateRangeFormGroup.controls['endDate'].value\" matInput required\n (ngModelChange)=\"setDateValue('startDate')\" class=\"custom-date-field\" [matDatepicker]=\"picker1\"\n [placeholder]=\"'From Date'\" formControlName=\"startDate\">\n <mat-datepicker-toggle matSuffix [for]=\"picker1\" class=\"datepicker-toggle\"></mat-datepicker-toggle>\n <mat-datepicker #picker1></mat-datepicker>\n\n </div>\n <div class=\"apollo-text-field custom-date-picker-field\" fxLayout=\"row\">\n <input (click)=\"picker2.open(); $event.stopPropagation();\" [readonly]=\"true\" matInput required (ngModelChange)=\"setDateValue('endDate')\"\n class=\"custom-date-field\" [min]=\"dateRangeFormGroup.controls['startDate'].value\"\n [matDatepicker]=\"picker2\" [placeholder]=\"'To Date'\" formControlName=\"endDate\">\n <mat-datepicker-toggle matSuffix [for]=\"picker2\" class=\"datepicker-toggle\"></mat-datepicker-toggle>\n <mat-datepicker #picker2></mat-datepicker>\n </div>\n <button title=\"Clear all\" [disabled]=\"!isClearEnabled\" class=\"date-clear\" (click)=\"clearDateFilter()\" mat-stroked-button color=\"primary\">\n <em class=\"fas fa-broom\"></em>\n </button>\n </div>\n <div *ngIf=\"filterOption.dateRangeItems\">\n <mat-radio-group name=\"fontStyle\" aria-label=\"Font Style\" [value]=\"dateRangeValue\"\n (change)=\"dateRangeClick($event)\">\n <mat-radio-button *ngFor=\"let item of filterOption.dateRangeItems.items\" value=\"{{ item }}\">\n {{ item }} {{ filterOption.dateRangeItems.unit }} \n </mat-radio-button>\n </mat-radio-group>\n </div>\n </mat-menu>\n </button>\n</ng-template>\n", styles: [":host ::ng-deep .mat-mdc-text-field-wrapper{margin-left:0!important}.apollo-text-field .mat-input-element{padding:10px;font-size:14px;border:1px solid #d4d4d4;border-radius:3px}.apollo-text-field .mat-form-field-wrapper{margin:0;padding:0;font-size:16px;color:#4d4d4d}.apollo-mat-label{font-size:18px;color:#4d4d4d;padding-bottom:15px}.apollo-mat-label .apollo-text-field .mat-input-element,.apollo-text-field .apollo-mat-label .mat-input-element{padding:10px;font-size:14px;border:1px solid #d4d4d4;border-radius:3px}.apollo-text-field .mat-form-field-underline{display:none}.apollo-text-field .mat-input-element:focus{border:1px solid #0768fd}.apollo-text-field .error-text{margin-top:10px}.mat-card.table-col-filter-panel{box-shadow:0 16px 24px #00000029;border-radius:4px;border:1px solid #d9d9d9}.mat-card.table-col-filter-panel .mat-card-actions i{vertical-align:baseline}.mat-card.table-col-filter-panel .mat-form-field-label{color:#000;font-size:17px}.mat-card.table-col-filter-panel .mat-card-content{margin-bottom:0;color:#000;font-size:17px}.date-picker-field{width:140px}.input-element{font:inherit;background:0 0;border:none;outline:0;padding:0;margin:0;width:130px!important;max-width:100%;vertical-align:bottom;text-align:inherit}.datepicker-toggle{right:40px;position:relative;margin-top:-7px}.multi-select-section{height:180px;overflow-y:auto}.custom-mat-menu-item{cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;text-align:left;text-decoration:none;max-width:100%;position:relative;height:40px;line-height:40px;font-family:Proxima-Nova-Regular,arial,sans-serif;font-size:14px;padding:0 20px;border:1px solid #f8f9fa}.custom-mat-menu-item:hover{background-color:#ecf3ff;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;text-align:left;text-decoration:none;max-width:100%;position:relative;height:40px;line-height:40px;font-family:Proxima-Nova-Regular,arial,sans-serif;font-size:14px;padding:0 20px;border:1px solid #f8f9fa}.disabled{pointer-events:none;background-color:#f8f9fa}.action-icon{margin-left:20px}.clear-all{color:#0768fd;font-weight:700;font-size:14px;float:right;padding:7px;cursor:pointer}.filter-icon{padding-right:6px}.custom-date-picker-field{width:130px}.custom-date-field{height:32px;padding:0 5px;width:125px}.date-clear{height:32px;line-height:32px;min-width:auto;padding:0 7px!important}.custom-panel-padding{padding:5px}.filter-search-container{position:relative}.clear-filter-search{position:absolute;right:6px;top:0%;cursor:pointer;font-size:14px;font-weight:600}.icon-container{display:flex;flex-direction:row;justify-content:space-between;width:100%}.card-width{max-width:300px}.card-form{min-width:150px;max-width:300px;width:100%}.card-full-width{width:100%}.close-icon{position:absolute;top:5px;right:-3px;font-size:16px;color:#4d4d4d;z-index:9999;opacity:.7}:host ::ng-deep .mdc-label{margin-bottom:0!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i8.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i8.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i8.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i12.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i12.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i13.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i13.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i13.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i13.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i13.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i13.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i14.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i15.SliderComponent, selector: "ngx-slider", inputs: ["value", "highValue", "options", "manualRefresh", "triggerFocus"], outputs: ["valueChange", "highValueChange", "userChangeStart", "userChange", "userChangeEnd"] }, { kind: "directive", type: i16.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i17.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i18.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i19.FilterByPropPipe, name: "filterByProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
301
|
+
}
|
|
302
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataColFilterComponent, decorators: [{
|
|
303
|
+
type: Component,
|
|
304
|
+
args: [{ selector: 'app-data-col-filter', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"isUpdatedFilterDesign\">\n <ng-container [ngSwitch]=\"filterOption?.type\">\n <ng-container *ngSwitchCase=\"FILTER_INPUT_TYPES.TEXT\">\n <mat-form-field\n class=\"apollo-text-field table-header-apollo-text-field text-search\"\n [floatLabel]=\"'auto'\"\n >\n <input\n (ngModelChange)=\"searchValueChanged()\"\n matInput\n type=\"text\"\n placeholder=\"Search {{ columnName.header }}\"\n name=\"search\"\n [formControl]=\"searchCtrl\"\n (ngModelChange)=\"changeContainsValue()\"\n />\n </mat-form-field>\n </ng-container>\n <ng-container *ngSwitchCase=\"FILTER_INPUT_TYPES.REFERENCE\">\n <ng-select\n class=\"apollo-text-field table-header-apollo-text-field\"\n (change)=\"referenceValueChanged()\"\n [appendTo]=\"'mat-card'\"\n [items]=\"(selectableItems$ | async) || []\"\n [bindValue]=\"filterOption.bindProp\"\n [bindLabel]=\"filterOption.displayProp\"\n [multiple]=\"false\"\n placeholder=\"{{ columnName.header }}\"\n [formControl]=\"filterValue\"\n >\n </ng-select>\n </ng-container>\n <ng-container *ngSwitchCase=\"FILTER_INPUT_TYPES.CHECKBOX\">\n <button\n (menuOpened)=\"matMenuOpend()\"\n mat-raised-button\n [matMenuTriggerFor]=\"actions\"\n class=\"dropdown-toggle odp-secondary-button\"\n >\n <span>{{ columnName.header || columnName.prop | titlecase }}</span>\n <mat-menu\n #actions=\"matMenu\"\n focusFirstItem=\"false\"\n class=\"odb-mat-menu-panel custom-panel filter-panel\"\n >\n <div class=\"custom-panel-padding\">\n <span\n class=\"filter-search-container\"\n (click)=\"$event.stopPropagation()\"\n >\n <input\n *ngIf=\"!isSearchBoxHide\"\n required\n matInput\n type=\"text\"\n placeholder=\"Search {{ columnName.header }}\"\n name=\"search\"\n [formControl]=\"searchText\"\n />\n <span\n class=\"clear-filter-search\"\n *ngIf=\"searchText.value\"\n (click)=\"clearSearch()\"\n >✕</span\n >\n </span>\n <span\n (click)=\"clearSelection()\"\n class=\"clear-all\"\n >Clear all</span\n >\n <mat-spinner\n *ngIf=\"isLoading$ | async\"\n class=\"mr-1\"\n [diameter]=\"16\"\n ></mat-spinner>\n <div\n class=\"custom-mat-menu-item\"\n class=\"my-1\"\n >\n <span>\n <mat-checkbox\n class=\"bold-text\"\n [indeterminate]=\"isIndeterminate\"\n [checked]=\"isAllSelected\"\n [formControl]=\"selectAllCtrl\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"selectAllCheckbox()\"\n >Select All</mat-checkbox\n >\n </span>\n </div>\n <div\n class=\"custom-mat-menu-item\"\n *ngFor=\"\n let item of (selectableItems$ | async) ||\n filterOption.selectableItems ||\n []\n \"\n class=\"my-1\"\n >\n <span>\n <mat-checkbox\n (click)=\"$event.stopPropagation()\"\n [checked]=\"isItemChecked(item)\"\n (change)=\"setCheckedValuesToFilter(item)\"\n [title]=\"item[filterOption.displayProp]\"\n >{{ item[filterOption.displayProp] }}</mat-checkbox\n >\n </span>\n </div>\n </div>\n </mat-menu>\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"FILTER_INPUT_TYPES.DATE_RANGE\">\n <ng-container *ngTemplateOutlet=\"dateRangeTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"FILTER_INPUT_TYPES.SLIDER\">\n <ng-container *ngIf=\"filterOption.filterTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n filterOption.filterTemplate;\n context: {\n $implicit: {\n filterOption: filterOption,\n thOptions: filterOption.thOptions\n }\n }\n \"\n >\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!filterOption.filterTemplate\">\n <div class=\"custom-slider custom-slider-alignment\">\n <ngx-slider (userChangeEnd)=\"sliderValueChanged()\" [(value)]=\"sliderValueOpt.minScore\"\n [(highValue)]=\"sliderValueOpt.maxScore\" [options]=\"sliderDefaultOptions\">\n </ngx-slider>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"!isUpdatedFilterDesign\">\n <a #ngbPopover=\"ngbPopover\" [ngbPopover]=\"popTemplate\" [placement]=\"'bottom'\" [autoClose]=\"false\">\n <i class=\"fas fa-filter filter-icon\"></i>\n </a>\n <ng-template #popTemplate>\n <div class=\"card-width table-col-filter-panel\">\n <mat-icon (click)=\"closePopup()\" class=\"mat-icon material-icons close-icon\">close</mat-icon>\n <div class=\"card-form\">\n <mat-form-field *ngIf=\"!filterOption?.type || filterOption.type == FILTER_TYPES.CONTAINS\"\n class=\"card-full-width apollo-text-field\" [floatLabel]=\"'always'\">\n <mat-label>Filter By {{ columnName.header }}</mat-label>\n <input matInput placeholder=\"Enter {{ columnName.header }}\" [formControl]=\"filterValue\"\n (ngModelChange)=\"changeContainsValue()\">\n </mat-form-field>\n\n <mat-label *ngIf=\"filterOption?.type && filterOption?.type != FILTER_TYPES.CONTAINS\">Filter By\n {{columnName.header }}</mat-label>\n <div *ngIf=\"filterOption?.type === FILTER_TYPES.IN\">\n <section class=\"search\">\n <form ngForm>\n <div class=\"searchbar-wrapper\">\n <i class=\"svg-icon fa-solid fa-magnifying-glass\"></i>\n <input required matInput type=\"text\" placeholder=\"Search \"\n name=\"search\" />\n </div>\n </form>\n </section>\n <div [ngClass]=\"{ 'multi-select-section': filterOption.selectableItems?.length>6 }\">\n <div *ngFor=\"let item of filterOption.selectableItems | filterByProp: filterOption.displayProp: ''\"\n class=\"my-1\">\n <span>\n <mat-checkbox [checked]=\"isItemChecked(item)\"\n (change)=\"setCheckedValuesToFilter(item)\">\n {{item[filterOption.displayProp]}}</mat-checkbox>\n </span>\n </div>\n </div>\n </div>\n <div *ngIf=\"filterOption?.type === FILTER_TYPES.BETWEEN\" class=\"filter-item\" fxLayout=\"row\"\n [formGroup]=\"dateRangeFormGroup\">\n <div class=\"apollo-text-field date-picker-field\" fxLayout=\"row\">\n <input [readonly]=\"true\" matInput required (ngModelChange)=\"setDateValue('startDate')\"\n class=\"input-element\" [matDatepicker]=\"picker1\" [placeholder]=\"'Start Date'\"\n formControlName=\"startDate\">\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"\n class=\"datepicker-toggle\"></mat-datepicker-toggle>\n <mat-datepicker #picker1></mat-datepicker>\n\n </div>\n <div class=\"apollo-text-field date-picker-field\" fxLayout=\"row\">\n <input [readonly]=\"true\" matInput required (ngModelChange)=\"setDateValue('endDate')\"\n class=\"input-element\" [matDatepicker]=\"picker2\" [placeholder]=\"'End Date'\"\n formControlName=\"endDate\">\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"\n class=\"datepicker-toggle\"></mat-datepicker-toggle>\n <mat-datepicker #picker2></mat-datepicker>\n </div>\n </div>\n <div *ngIf=\"filterOption?.type === FILTER_INPUT_TYPES.CHECKBOX\" class=\"filter-item\" fxLayout=\"row\">\n <button (menuOpened)=\"matMenuOpend()\" mat-raised-button [matMenuTriggerFor]=\"actions\"\n class=\"dropdown-toggle odp-secondary-button\">\n <span>{{getCheckBoxsValue?? columnName.header || columnName.prop | titlecase }}</span>\n <mat-menu #actions=\"matMenu\" focusFirstItem=\"false\" class=\"odb-mat-menu-panel custom-panel filter-panel\">\n <div class=\"custom-panel-padding\">\n <span class=\"filter-search-container\" (click)=\"$event.stopPropagation()\">\n <input *ngIf=\"!isSearchBoxHide\" required matInput type=\"text\"\n placeholder=\"Search {{ columnName.header }}\" name=\"search\" [formControl]=\"searchText\" />\n <span class=\"clear-filter-search\" *ngIf=\"searchText.value\" (click)=\"clearSearch()\">✕</span>\n </span>\n <span (click)=\"clearSelection()\" class=\"clear-all\">Clear all</span>\n <mat-spinner *ngIf=\"isLoading$ | async\" class=\"mr-1\" [diameter]=\"16\"></mat-spinner>\n <div class=\"custom-mat-menu-item\" class=\"my-1\">\n <span>\n <mat-checkbox class=\"bold-text\" [indeterminate]=\"isIndeterminate\" [checked]=\"isAllSelected\"\n [formControl]=\"selectAllCtrl\" (click)=\"$event.stopPropagation()\"\n (change)=\"selectAllCheckbox()\">Select All</mat-checkbox>\n </span>\n </div>\n <div class=\"custom-mat-menu-item\" *ngFor=\"\n let item of (selectableItems$ | async) ||\n filterOption.selectableItems ||\n []\n \" class=\"my-1\">\n <span>\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"isItemChecked(item)\"\n (change)=\"setCheckedValuesToFilter(item)\" [title]=\"item[filterOption.displayProp]\">{{\n item[filterOption.displayProp] }}</mat-checkbox>\n </span>\n </div>\n </div>\n </mat-menu>\n </button>\n </div>\n </div>\n <mat-card-actions>\n <button [disabled]=\"isFormInvalid()\" (click)=\"columnFilterClicked()\" mat-button color=\"primary\"><i\n class=\"fa-solid fa-magnifying-glass\"></i> Search</button>\n <button (click)=\"columnFilterResetClicked()\" mat-button color=\"primary\"><i class=\"fas fa-redo\"></i>\n Clear</button>\n </mat-card-actions>\n </div>\n </ng-template>\n</ng-container>\n<ng-template #dateRangeTemplate>\n <button mat-raised-button [matMenuTriggerFor]=\"actions\" class=\"dropdown-toggle odp-secondary-button\">\n <span>{{ (columnName.header || columnName.prop) | titlecase}}</span>\n <mat-menu #actions=\"matMenu\" focusFirstItem=\"false\" class=\"date-range-panel\">\n <div class=\"filter-item\" fxLayout=\"row\" [formGroup]=\"dateRangeFormGroup\">\n <div class=\"apollo-text-field custom-date-picker-field\" fxLayout=\"row\">\n <input [readonly]=\"true\" (click)=\"picker1.open(); $event.stopPropagation();\" [max]=\"dateRangeFormGroup.controls['endDate'].value\" matInput required\n (ngModelChange)=\"setDateValue('startDate')\" class=\"custom-date-field\" [matDatepicker]=\"picker1\"\n [placeholder]=\"'From Date'\" formControlName=\"startDate\">\n <mat-datepicker-toggle matSuffix [for]=\"picker1\" class=\"datepicker-toggle\"></mat-datepicker-toggle>\n <mat-datepicker #picker1></mat-datepicker>\n\n </div>\n <div class=\"apollo-text-field custom-date-picker-field\" fxLayout=\"row\">\n <input (click)=\"picker2.open(); $event.stopPropagation();\" [readonly]=\"true\" matInput required (ngModelChange)=\"setDateValue('endDate')\"\n class=\"custom-date-field\" [min]=\"dateRangeFormGroup.controls['startDate'].value\"\n [matDatepicker]=\"picker2\" [placeholder]=\"'To Date'\" formControlName=\"endDate\">\n <mat-datepicker-toggle matSuffix [for]=\"picker2\" class=\"datepicker-toggle\"></mat-datepicker-toggle>\n <mat-datepicker #picker2></mat-datepicker>\n </div>\n <button title=\"Clear all\" [disabled]=\"!isClearEnabled\" class=\"date-clear\" (click)=\"clearDateFilter()\" mat-stroked-button color=\"primary\">\n <em class=\"fas fa-broom\"></em>\n </button>\n </div>\n <div *ngIf=\"filterOption.dateRangeItems\">\n <mat-radio-group name=\"fontStyle\" aria-label=\"Font Style\" [value]=\"dateRangeValue\"\n (change)=\"dateRangeClick($event)\">\n <mat-radio-button *ngFor=\"let item of filterOption.dateRangeItems.items\" value=\"{{ item }}\">\n {{ item }} {{ filterOption.dateRangeItems.unit }} \n </mat-radio-button>\n </mat-radio-group>\n </div>\n </mat-menu>\n </button>\n</ng-template>\n", styles: [":host ::ng-deep .mat-mdc-text-field-wrapper{margin-left:0!important}.apollo-text-field .mat-input-element{padding:10px;font-size:14px;border:1px solid #d4d4d4;border-radius:3px}.apollo-text-field .mat-form-field-wrapper{margin:0;padding:0;font-size:16px;color:#4d4d4d}.apollo-mat-label{font-size:18px;color:#4d4d4d;padding-bottom:15px}.apollo-mat-label .apollo-text-field .mat-input-element,.apollo-text-field .apollo-mat-label .mat-input-element{padding:10px;font-size:14px;border:1px solid #d4d4d4;border-radius:3px}.apollo-text-field .mat-form-field-underline{display:none}.apollo-text-field .mat-input-element:focus{border:1px solid #0768fd}.apollo-text-field .error-text{margin-top:10px}.mat-card.table-col-filter-panel{box-shadow:0 16px 24px #00000029;border-radius:4px;border:1px solid #d9d9d9}.mat-card.table-col-filter-panel .mat-card-actions i{vertical-align:baseline}.mat-card.table-col-filter-panel .mat-form-field-label{color:#000;font-size:17px}.mat-card.table-col-filter-panel .mat-card-content{margin-bottom:0;color:#000;font-size:17px}.date-picker-field{width:140px}.input-element{font:inherit;background:0 0;border:none;outline:0;padding:0;margin:0;width:130px!important;max-width:100%;vertical-align:bottom;text-align:inherit}.datepicker-toggle{right:40px;position:relative;margin-top:-7px}.multi-select-section{height:180px;overflow-y:auto}.custom-mat-menu-item{cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;text-align:left;text-decoration:none;max-width:100%;position:relative;height:40px;line-height:40px;font-family:Proxima-Nova-Regular,arial,sans-serif;font-size:14px;padding:0 20px;border:1px solid #f8f9fa}.custom-mat-menu-item:hover{background-color:#ecf3ff;cursor:pointer;outline:0;border:none;-webkit-tap-highlight-color:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;text-align:left;text-decoration:none;max-width:100%;position:relative;height:40px;line-height:40px;font-family:Proxima-Nova-Regular,arial,sans-serif;font-size:14px;padding:0 20px;border:1px solid #f8f9fa}.disabled{pointer-events:none;background-color:#f8f9fa}.action-icon{margin-left:20px}.clear-all{color:#0768fd;font-weight:700;font-size:14px;float:right;padding:7px;cursor:pointer}.filter-icon{padding-right:6px}.custom-date-picker-field{width:130px}.custom-date-field{height:32px;padding:0 5px;width:125px}.date-clear{height:32px;line-height:32px;min-width:auto;padding:0 7px!important}.custom-panel-padding{padding:5px}.filter-search-container{position:relative}.clear-filter-search{position:absolute;right:6px;top:0%;cursor:pointer;font-size:14px;font-weight:600}.icon-container{display:flex;flex-direction:row;justify-content:space-between;width:100%}.card-width{max-width:300px}.card-form{min-width:150px;max-width:300px;width:100%}.card-full-width{width:100%}.close-icon{position:absolute;top:5px;right:-3px;font-size:16px;color:#4d4d4d;z-index:9999;opacity:.7}:host ::ng-deep .mdc-label{margin-bottom:0!important}\n"] }]
|
|
305
|
+
}], ctorParameters: () => [{ type: i1.FilterValueExecutorProvider }, { type: i0.ChangeDetectorRef }], propDecorators: { isClearFilter$: [{
|
|
306
|
+
type: Input
|
|
307
|
+
}], isUpdatedFilterDesign: [{
|
|
308
|
+
type: Input
|
|
309
|
+
}], columnName: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}], filterParam: [{
|
|
312
|
+
type: Input
|
|
313
|
+
}], numberOfTableRefresh: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}], filterOption: [{
|
|
316
|
+
type: Input
|
|
317
|
+
}], onFilterClicked: [{
|
|
318
|
+
type: Output
|
|
319
|
+
}], ngbPopover: [{
|
|
320
|
+
type: ViewChild,
|
|
321
|
+
args: ['ngbPopover']
|
|
322
|
+
}] } });
|
|
323
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1jb2wtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvbW9kdWxlcy91aS1raXQvY29tcG9uZW50cy9kYXRhLXRhYmxlL2RhdGEtY29sLWZpbHRlci9kYXRhLWNvbC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9tb2R1bGVzL3VpLWtpdC9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS1jb2wtZmlsdGVyL2RhdGEtY29sLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUVsRSxNQUFNLEVBQWlCLFNBQVMsRUFDekMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzdHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXRILE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUTVCLE1BQU0sT0FBTyxzQkFBc0I7SUF1Q2pDLFlBQ1UsMkJBQXdELEVBQ3hELEVBQXFCO1FBRHJCLGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FBNkI7UUFDeEQsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUF4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Q0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0EvVFUsc0JBQXNCO21HQUF0QixzQkFBc0IsMmNDekJuQyxzc2NBeVJBOzs0RkRoUWEsc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNFLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNO2dJQUcvQixjQUFjO3NCQUE3QixLQUFLO2dCQUNVLHFCQUFxQjtzQkFBcEMsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1Usb0JBQW9CO3NCQUFuQyxLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBS1csZUFBZTtzQkFBL0IsTUFBTTtnQkFvQjBCLFVBQVU7c0JBQTFDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci1zbGlkZXIvbmd4LXNsaWRlcic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdiUG9wb3ZlciB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNGdW5jdGlvbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmluYWxpemUsIGZpcnN0LCBzaGFyZVJlcGxheSwgdGFrZVVudGlsLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElLZXlWYWx1ZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvdWkta2l0L2ludGVyZmFjZXMvZ2VuZXJpYy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUZpbHRlck9wdGlvbiwgSUZpbHRlclBhcmFtIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9hcGkuaW50ZXJmYWNlJztcbmltcG9ydCB7IElEYXRhVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2RhdGEtdGFibGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlclZhbHVlRXhlY3V0b3JQcm92aWRlciB9IGZyb20gJy4uLy4uL2RhdGEtdGFibGUvZGF0YS1jb2wtZmlsdGVyL2ZpbHRlci12YWx1ZS1oZWxwZXJzL2ZpbHRlci12YWx1ZS1leGVjdXRvci1wcm92aWRlcic7XG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW5GaWx0ZXJJbnB1dFR5cGVzLCBEYXRhVGFibGVDb2x1bW5GaWx0ZXJUeXBlcyB9IGZyb20gJy4uLy4uL2RhdGEtdGFibGUvZW51bXMvY29sLWZpbHRlci10eXBlcyc7XG5pbXBvcnQgeyBJRGF0YVRhYmxlQ29sdW1uRmlsdGVyVmFsdWUgfSBmcm9tICcuLi8uLi9kYXRhLXRhYmxlL2ludGVyZmFjZXMvZmlsdGVyLXZhbHVlLWV4ZWN1dG9yLmludGVyZmFjZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1kYXRhLWNvbC1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1jb2wtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS1jb2wtZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhQ29sRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHB1YmxpYyBpc0NsZWFyRmlsdGVyJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIEBJbnB1dCgpIHB1YmxpYyBpc1VwZGF0ZWRGaWx0ZXJEZXNpZ24gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGNvbHVtbk5hbWU6IElEYXRhVGFibGVDb2x1bW47XG4gIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXJQYXJhbTogSUZpbHRlclBhcmFtO1xuICBASW5wdXQoKSBwdWJsaWMgbnVtYmVyT2ZUYWJsZVJlZnJlc2g6IG51bWJlcjtcbiAgQElucHV0KCkgcHVibGljIGZpbHRlck9wdGlvbjogSUZpbHRlck9wdGlvbjtcbiAgcHVibGljIHNlbGVjdGFibGVJdGVtcyQ6IEJlaGF2aW9yU3ViamVjdDxJS2V5VmFsdWVbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElLZXlWYWx1ZVtdPihudWxsKTtcbiAgcHVibGljIHNlYXJjaFRleHQ6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIHB1YmxpYyBzZWxlY3RBbGxDdHJsOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChmYWxzZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICBAT3V0cHV0KCkgcHVibGljIG9uRmlsdGVyQ2xpY2tlZDogRXZlbnRFbWl0dGVyPElGaWx0ZXJQYXJhbT4gPSBuZXcgRXZlbnRFbWl0dGVyPElGaWx0ZXJQYXJhbT4oKTtcblxuICBwdWJsaWMgZGF0ZVJhbmdlRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnREYXRlOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIGVuZERhdGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gIH0pO1xuICBwdWJsaWMgZGF0ZVJhbmdlVmFsdWUgPSAnJztcbiAgcHVibGljIHNsaWRlclZhbHVlT3B0ID0ge1xuICAgIG1heFNjb3JlOiAxMDAsXG4gICAgbWluU2NvcmU6IDAsXG4gIH07XG4gIHB1YmxpYyBmaWx0ZXJWYWx1ZTogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBzZWFyY2hDdHJsOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBwdWJsaWMgRklMVEVSX1RZUEVTID0gRGF0YVRhYmxlQ29sdW1uRmlsdGVyVHlwZXM7XG4gIHB1YmxpYyBGSUxURVJfSU5QVVRfVFlQRVMgPSBEYXRhVGFibGVDb2x1bW5GaWx0ZXJJbnB1dFR5cGVzO1xuICBwdWJsaWMgc2xpZGVyRGVmYXVsdE9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgZmxvb3I6IDAsXG4gICAgY2VpbDogMTAwLFxuICB9O1xuICBwdWJsaWMgaXNMb2FkaW5nJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIEBWaWV3Q2hpbGQoJ25nYlBvcG92ZXInKSBwcml2YXRlIG5nYlBvcG92ZXI6IE5nYlBvcG92ZXJcbiAgcHJpdmF0ZSBmaWx0ZXJWYWx1ZU1ha2VyOiBJRGF0YVRhYmxlQ29sdW1uRmlsdGVyVmFsdWU7XG4gIHByaXZhdGUgZmlsdGVyV29ya2luZ1ZhbHVlOiBJS2V5VmFsdWU7XG4gIHByaXZhdGUgc2VsZWN0YWJsZUl0ZW1zOiBJS2V5VmFsdWVbXSA9IFtdO1xuICBwcml2YXRlIHByZXZpb3VzU2VsZWN0YWJsZUl0ZW1zOiBJS2V5VmFsdWVbXTtcbiAgcHJpdmF0ZSBjbGVhclN1YnMkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBzZWFyY2hPYmplY3QkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmlsdGVyVmFsdWVFeGVjdXRvclByb3ZpZGVyOiBGaWx0ZXJWYWx1ZUV4ZWN1dG9yUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIHRoaXMuc2V0U2VhcmNoV2F0Y2hlciQoKTtcbiAgfVxuXG4gIGdldCBnZXRDaGVja0JveHNWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuZmlsdGVyV29ya2luZ1ZhbHVlKSA/ICB0aGlzLmZpbHRlcldvcmtpbmdWYWx1ZS5qb2luKCcgJykgOiB0aGlzLmZpbHRlcldvcmtpbmdWYWx1ZVswXTtcbiAgfVxuICBcbiAgZ2V0IGlzSW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKDxzdHJpbmdbXT50aGlzLmZpbHRlcldvcmtpbmdWYWx1ZSkubGVuZ3RoID4gMCAmJiAoPHN0cmluZ1tdPnRoaXMuZmlsdGVyV29ya2luZ1ZhbHVlKS5sZW5ndGggIT09IHRoaXMuc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcldvcmtpbmdWYWx1ZS5sZW5ndGggPiAwICYmIHRoaXMuZmlsdGVyV29ya2luZ1ZhbHVlLmxlbmd0aCA9PT0gdGhpcy5zZWxlY3RhYmxlSXRlbXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzQ2xlYXJFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmRhdGVSYW5nZUZvcm1Hcm91cC5nZXQoJ3N0YXJ0RGF0ZScpLnZhbHVlIHx8IHRoaXMuZGF0ZVJhbmdlRm9ybUdyb3VwLmdldCgnZW5kRGF0ZScpLnZhbHVlKTtcbiAgfVxuXG4gIGdldCBpc1NlYXJjaEJveEhpZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5maWx0ZXJPcHRpb24/LmlzU2VhcmNoQm94SGlkZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyU3VicyQubmV4dChudWxsKTtcbiAgICB0aGlzLmNsZWFyU3VicyQuY29tcGxldGUoKTtcbiAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5pc0xvYWRpbmckLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJWYWx1ZSA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gICAgdGhpcy5pc0NsZWFyRmlsdGVyJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLmNsZWFyRmlsdGVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuZmlsdGVyT3B0aW9uICYmICh0aGlzLmZpbHRlck9wdGlvbi50eXBlID09PSBEYXRhVGFibGVDb2x1bW5GaWx0ZXJJbnB1dFR5cGVzLlJFRkVSRU5DRSkpIHtcbiAgICAgIHRoaXMubG9hZERlZmF1bHRSZWZlcmVuY2VJdGVtcygpO1xuICAgICAgdGhpcy5sb2FkUmVmZXJlbmNlRGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlclZhbHVlTWFrZXIgPSB0aGlzLmZpbHRlclZhbHVlRXhlY3V0b3JQcm92aWRlclxuICAgICAgLmdldEZpbHRlclZhbHVlRXhlY3V0b3JQcm92aWRlcih0aGlzLmZpbHRlck9wdGlvbiAmJiB0aGlzLmZpbHRlck9wdGlvbi50eXBlIHx8IHRoaXMuRklMVEVSX1RZUEVTLkNPTlRBSU5TKTtcbiAgICB0aGlzLmZpbHRlclZhbHVlTWFrZXIuc2V0SW5pdFZhbHVlcyh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuZmlsdGVyUGFyYW0gJiYgdGhpcy5maWx0ZXJWYWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJWYWx1ZS5zZXRWYWx1ZSh0aGlzLmZpbHRlclBhcmFtID8gdGhpcy5maWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZSA6ICcnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsQ2hlY2tib3goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0QWxsQ3RybC52YWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJXb3JraW5nVmFsdWUgPSB0aGlzLnNlbGVjdGFibGVJdGVtcyQuZ2V0VmFsdWUoKS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJXb3JraW5nVmFsdWUgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5lbWl0RmlsdGVyUGFyYW0oPHN0cmluZ1tdPnRoaXMuZmlsdGVyV29ya2luZ1ZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjb2x1bW5GaWx0ZXJDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuZW1pdEZpbHRlclBhcmFtKCk7XG4gICAgdGhpcy5uZ2JQb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgY29sdW1uRmlsdGVyUmVzZXRDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyVmFsdWVNYWtlci5yZXNldFZhbHVlKHRoaXMpO1xuICAgIHRoaXMuZW1pdEZpbHRlclBhcmFtKCk7XG4gICAgdGhpcy5uZ2JQb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgbWF0TWVudU9wZW5kKCk6IHZvaWQge1xuICAgIHRoaXMucHJldmlvdXNTZWxlY3RhYmxlSXRlbXMgPSBjbG9uZURlZXAodGhpcy5zZWxlY3RhYmxlSXRlbXMpO1xuICAgIHRoaXMuc2VsZWN0YWJsZUl0ZW1zID0gW107XG4gICAgdGhpcy5zZWxlY3RhYmxlSXRlbXMkLm5leHQodGhpcy5zZWxlY3RhYmxlSXRlbXMpO1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQudmFsdWUpIHtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dC5zZXRWYWx1ZSgnJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlck9wdGlvbi5zZWxlY3RhYmxlSXRlbXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0YWJsZUl0ZW1zID0gdGhpcy5maWx0ZXJPcHRpb24uc2VsZWN0YWJsZUl0ZW1zO1xuICAgICAgdGhpcy5zZWxlY3RhYmxlSXRlbXMkLm5leHQodGhpcy5maWx0ZXJPcHRpb24uc2VsZWN0YWJsZUl0ZW1zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgaWYgKHRoaXMuZmlsdGVyT3B0aW9uICYmIGlzRnVuY3Rpb24odGhpcy5maWx0ZXJPcHRpb24uZ2V0U2VsZWN0YWJsZUZuJCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9uLmdldFNlbGVjdGFibGVGbiQoJycpXG4gICAgICAgIC5waXBlKGZpcnN0KCksIHNoYXJlUmVwbGF5KCksIHRha2VVbnRpbCh0aGlzLmNsZWFyU3VicyQpLCBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSkpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IElLZXlWYWx1ZTxhbnk+W10pID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJybnRTZWxlY3RlZEl0ZW1zID0gdGhpcy5nZXRDdXJyZW50U2VsZWN0ZWRJdGVtcygpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZUl0ZW1zID0gWy4uLnJlc107XG4gICAgICAgICAgdGhpcy5yZW1vdmVQcmV2aW91c1NlbGVjdGVkSXRlbXMoY3Vycm50U2VsZWN0ZWRJdGVtcywgcmVzKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGFibGVJdGVtcyQubmV4dChjdXJybnRTZWxlY3RlZEl0ZW1zLmNvbmNhdChyZXMpKTtcbiAgICAgICAgfSk7XG4gICAgICB0aGlzLmdldFNlbGVjdGFibGVJdGVtcygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkYXRlUmFuZ2VDbGljayhldjogYW55KSB7XG4gICAgdGhpcy5kYXRlUmFuZ2VWYWx1ZSA9IGV2LnZhbHVlO1xuICAgIGNvbnN0IHZhbCA9ICtldi52YWx1ZTtcbiAgICBjb25zdCByYXcgPSB7IGRheXM6IDEsIHdlZWtzOiA3LCBtb250aHM6IDMwLCB5ZWFyczogMzY1IH07XG4gICAgY29uc3QgZGF5cyA9ICh2YWwgKiByYXdbdGhpcy5maWx0ZXJPcHRpb24uZGF0ZVJhbmdlSXRlbXM/LnVuaXQgPz8gJ2RheXMnXSkgLSAxO1xuICAgIHRoaXMuZGF0ZVJhbmdlRm9ybUdyb3VwLnNldFZhbHVlKHsgc3RhcnREYXRlOiBuZXcgRGF0ZSgpIGFzIGFueSwgZW5kRGF0ZTogbW9tZW50KCkuYWRkKGRheXMsICdkYXlzJykudG9EYXRlKCkgYXMgYW55IH0pO1xuICB9XG5cblxuICBwdWJsaWMgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJWYWx1ZU1ha2VyLnJlc2V0VmFsdWUodGhpcyk7XG4gICAgdGhpcy5lbWl0RmlsdGVyUGFyYW0oKTtcbiAgICB0aGlzLnNlbGVjdEFsbEN0cmwucmVzZXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhckRhdGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlUmFuZ2VGb3JtR3JvdXAucmVzZXQoe30sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmZpbHRlclZhbHVlTWFrZXIucmVzZXRWYWx1ZSh0aGlzKTtcbiAgICB0aGlzLmVtaXRGaWx0ZXJQYXJhbSgpO1xuICAgIHRoaXMuZGF0ZVJhbmdlVmFsdWUgPSAnJztcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZVBvcHVwKCk6IHZvaWQge1xuICAgIHRoaXMubmdiUG9wb3Zlci5jbG9zZSgpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyU2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGV4dC5zZXRWYWx1ZSgnJyk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlQ29udGFpbnNWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcldvcmtpbmdWYWx1ZSA9IHRoaXMuZmlsdGVyVmFsdWUudmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoVmFsdWVDaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoT2JqZWN0JC5uZXh0KHRoaXMuZmlsdGVyVmFsdWUudmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldENoZWNrZWRWYWx1ZXNUb0ZpbHRlcihpdGVtOiBJS2V5VmFsdWUpOiB2b2lkIHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJXb3JraW5nVmFsdWUgPSB0aGlzLmZpbHRlclZhbHVlTWFrZXIuc2V0RmlsdGVyVmFsdWUodGhpcy5maWx0ZXJPcHRpb24sIHRoaXMuZmlsdGVyV29ya2luZ1ZhbHVlLCBpdGVtKTtcbiAgICB0aGlzLmVtaXRGaWx0ZXJQYXJhbSg8c3RyaW5nW10+dGhpcy5maWx0ZXJXb3JraW5nVmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHJlZmVyZW5jZVZhbHVlQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmVtaXRGaWx0ZXJQYXJhbSh0aGlzLmZpbHRlclZhbHVlLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzbGlkZXJWYWx1ZUNoYW5nZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpbHRlcldvcmtpbmdWYWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJXb3JraW5nVmFsdWUgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJXb3JraW5nVmFsdWVbJ21heFNjb3JlJ10gPSB0aGlzLnNsaWRlclZhbHVlT3B0Lm1heFNjb3JlO1xuICAgIHRoaXMuZmlsdGVyV29ya2luZ1ZhbHVlWydtaW5TY29yZSddID0gdGhpcy5zbGlkZXJWYWx1ZU9wdC5taW5TY29yZTtcbiAgICB0aGlzLmVtaXRGaWx0ZXJQYXJhbSgpO1xuXG4gIH1cblxuICBwdWJsaWMgc2V0RGF0ZVZhbHVlKGZvcm1OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyV29ya2luZ1ZhbHVlKSB7XG4gICAgICB0aGlzLmZpbHRlcldvcmtpbmdWYWx1ZSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmZpbHRlcldvcmtpbmdWYWx1ZVtmb3JtTmFtZV0gPSB0aGlzLmRhdGVSYW5nZUZvcm1Hcm91cC5jb250cm9sc1tmb3JtTmFtZV0udmFsdWU7XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVkRmlsdGVyRGVzaWduICYmICh0aGlzLmZpbHRlcldvcmtpbmdWYWx1ZVtmb3JtTmFtZV0gfHxcbiAgICAgIHRoaXMuZmlsdGVyV29ya2luZ1ZhbHVlW2Zvcm1OYW1lXSkpIHtcbiAgICAgIHRoaXMuZW1pdEZpbHRlclBhcmFtKHRoaXMucG9wdWxhdGVEYXRlUm5hZ2UoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzSXRlbUNoZWNrZWQoaXRlbTogSUtleVZhbHVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyVmFsdWVNYWtlci5pc0NoZWNrZWRGaWx0ZXJWYWx1ZSh0aGlzLmZpbHRlck9wdGlvbiwgdGhpcy5maWx0ZXJXb3JraW5nVmFsdWUsIGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIGlzRm9ybUludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyVmFsdWVNYWtlci5pc0Zvcm1JbnZhbGlkKHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJWYWx1ZSgpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyVmFsdWVNYWtlci5nZXRGaWx0ZXJWYWx1ZSh0aGlzLmZpbHRlcldvcmtpbmdWYWx1ZSwgdGhpcy5pc1VwZGF0ZWRGaWx0ZXJEZXNpZ24pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RmlsdGVyUGFyYW0oZmlsdGVyVmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMub25GaWx0ZXJDbGlja2VkLmVtaXQoe1xuICAgICAgZmlsdGVyQ29sdW1uOiB0aGlzLmNvbHVtbk5hbWUsXG4gICAgICBmaWx0ZXJWYWx1ZTogZmlsdGVyVmFsdWUgPyBmaWx0ZXJWYWx1ZSA6IHRoaXMuZ2V0RmlsdGVyVmFsdWUoKSxcbiAgICAgIGNvbHVtbk5hbWU6IHRoaXMuY29sdW1uTmFtZS5wcm9wLFxuICAgICAgZmlsdGVyVHlwZTogdGhpcy5maWx0ZXJPcHRpb24gJiYgdGhpcy5maWx0ZXJPcHRpb24udHlwZSB8fCB0aGlzLkZJTFRFUl9UWVBFUy5DT05UQUlOUyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0YWJsZUl0ZW1zKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGV4dC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNTAwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ09iaiA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9uLmdldFNlbGVjdGFibGVGbiQodGhpcy5zZWFyY2hUZXh0LnZhbHVlLCB0cnVlKVxuICAgICAgICAgIC5waXBlKGZpcnN0KCksIHNoYXJlUmVwbGF5KCksIHRha2VVbnRpbCh0aGlzLmNsZWFyU3VicyQpLCBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSkpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBJS2V5VmFsdWU8YW55PltdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVByZXZpb3VzU2VsZWN0ZWRJdGVtcyhleGlzdGluZ09iaiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RhYmxlSXRlbXMgPSBleGlzdGluZ09iai5jb25jYXQocmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RhYmxlSXRlbXMkLm5leHQoZXhpc3RpbmdPYmouY29uY2F0KHJlc3BvbnNlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJGaWx0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJWYWx1ZU1ha2VyLnJlc2V0VmFsdWUodGhpcyk7XG4gICAgdGhpcy5kYXRlUmFuZ2VGb3JtR3JvdXAucmVzZXQoKTtcbiAgICB0aGlzLmlzQ2xlYXJGaWx0ZXIkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50U2VsZWN0ZWRJdGVtcygpOiBJS2V5VmFsdWVbXSB7XG4gICAgY29uc3QgZXhpc3RpbmdWYWx1ZXMgPSA8W10+IHRoaXMuZmlsdGVyV29ya2luZ1ZhbHVlO1xuICAgIHJldHVybiBleGlzdGluZ1ZhbHVlcy5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMucHJldmlvdXNTZWxlY3RhYmxlSXRlbXMuZmluZCh4ID0+IHhbdGhpcy5maWx0ZXJPcHRpb24uYmluZFByb3BdID09PSBpdGVtKT8uW3RoaXMuZmlsdGVyT3B0aW9uLmRpc3BsYXlQcm9wXTtcbiAgICAgIHJldHVybiA8SUtleVZhbHVlPnsgW3RoaXMuZmlsdGVyT3B0aW9uLmJpbmRQcm9wXTogaXRlbSwgW3RoaXMuZmlsdGVyT3B0aW9uLmRpc3BsYXlQcm9wXTogbGFiZWwgfHwgJycgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUHJldmlvdXNTZWxlY3RlZEl0ZW1zKHByZXZpb3VzSXRlbXM6IElLZXlWYWx1ZVtdLCBjdXJyZW50SXRlbXM6IElLZXlWYWx1ZVtdKTogdm9pZCB7XG4gICAgcHJldmlvdXNJdGVtcy5mb3JFYWNoKHggPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBjdXJyZW50SXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbVt0aGlzLmZpbHRlck9wdGlvbi5iaW5kUHJvcF0gPT09IHhbdGhpcy5maWx0ZXJPcHRpb24uYmluZFByb3BdKTtcbiAgICAgIGlmIChwb3NpdGlvbiAhPT0gLSAxKSB7XG4gICAgICAgIGN1cnJlbnRJdGVtcy5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZURhdGVSbmFnZSgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZGF0ZVJhbmdlczogc3RyaW5nW10gPSBbXTtcbiAgICBkYXRlUmFuZ2VzWzBdID0gdGhpcy5mb3JtYXREYXRlKHRoaXMuZmlsdGVyV29ya2luZ1ZhbHVlLnN0YXJ0RGF0ZSk7XG4gICAgZGF0ZVJhbmdlc1sxXSA9IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmZpbHRlcldvcmtpbmdWYWx1ZS5lbmREYXRlKTtcbiAgICByZXR1cm4gZGF0ZVJhbmdlcztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShkYXRlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bmV3IERhdGUoZGF0ZSkuZ2V0RnVsbFllYXIoKX0tJHtuZXcgRGF0ZShkYXRlKS5nZXRNb250aCgpICsgMX0tJHtuZXcgRGF0ZShkYXRlKS5nZXREYXRlKCl9YDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFJlZmVyZW5jZURhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJWYWx1ZS5zZXRWYWx1ZShudWxsKTtcbiAgICBpZiAodGhpcy5maWx0ZXJPcHRpb24uc2VsZWN0YWJsZUl0ZW1zICYmIHRoaXMuZmlsdGVyT3B0aW9uLnNlbGVjdGFibGVJdGVtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0YWJsZUl0ZW1zJC5uZXh0KHRoaXMuZmlsdGVyT3B0aW9uLnNlbGVjdGFibGVJdGVtcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKHRoaXMuZmlsdGVyT3B0aW9uLmdldFNlbGVjdGFibGVGbiQpKSB7XG4gICAgICB0aGlzLmZpbHRlck9wdGlvbi5nZXRTZWxlY3RhYmxlRm4kKCkucGlwZSh0YWtlVW50aWwodGhpcy5jbGVhclN1YnMkKSlcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBJS2V5VmFsdWU8YW55PltdKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RhYmxlSXRlbXMkLm5leHQocmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0U2VhcmNoV2F0Y2hlciQoKTogdm9pZCB7XG4gICAgIHRoaXMuc2VhcmNoT2JqZWN0JC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWwodGhpcy5jbGVhclN1YnMkKSlcbiAgICAgLnN1YnNjcmliZSgoc2VhcmNoU3RyOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMub25GaWx0ZXJDbGlja2VkLmVtaXQoe1xuICAgICAgICBmaWx0ZXJDb2x1bW46IHRoaXMuY29sdW1uTmFtZSxcbiAgICAgICAgZmlsdGVyVmFsdWU6IHNlYXJjaFN0cixcbiAgICAgICAgY29sdW1uTmFtZTogdGhpcy5jb2x1bW5OYW1lLnByb3AsXG4gICAgICAgIGZpbHRlclR5cGU6IHRoaXMuZmlsdGVyT3B0aW9uICYmIHRoaXMuZmlsdGVyT3B0aW9uLnR5cGUgfHwgdGhpcy5GSUxURVJfVFlQRVMuQ09OVEFJTlMsXG4gICAgICB9KTtcbiAgICAgfSk7XG4gIH1cbiAgXG4gIHByaXZhdGUgbG9hZERlZmF1bHRSZWZlcmVuY2VJdGVtcygpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGFibGVJdGVtcyQubmV4dChbXG4gICAgICB7IFt0aGlzLmZpbHRlck9wdGlvbi5kaXNwbGF5UHJvcF06ICdTRUxFQ1QnLCBbdGhpcy5maWx0ZXJPcHRpb24uYmluZFByb3BdOiAnJyB9LFxuICAgICAgeyBbdGhpcy5maWx0ZXJPcHRpb24uZGlzcGxheVByb3BdOiAnVHJ1ZScsIFt0aGlzLmZpbHRlck9wdGlvbi5iaW5kUHJvcF06IHRydWUgfSxcbiAgICAgIHsgW3RoaXMuZmlsdGVyT3B0aW9uLmRpc3BsYXlQcm9wXTogJ0ZhbHNlJywgW3RoaXMuZmlsdGVyT3B0aW9uLmJpbmRQcm9wXTogZmFsc2UgfSxcbiAgICBdKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVXBkYXRlZEZpbHRlckRlc2lnblwiPlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWx0ZXJPcHRpb24/LnR5cGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJGSUxURVJfSU5QVVRfVFlQRVMuVEVYVFwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgIGNsYXNzPVwiYXBvbGxvLXRleHQtZmllbGQgdGFibGUtaGVhZGVyLWFwb2xsby10ZXh0LWZpZWxkIHRleHQtc2VhcmNoXCJcbiAgICAgICAgW2Zsb2F0TGFiZWxdPVwiJ2F1dG8nXCJcbiAgICAgID5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoVmFsdWVDaGFuZ2VkKClcIlxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHt7IGNvbHVtbk5hbWUuaGVhZGVyIH19XCJcbiAgICAgICAgICBuYW1lPVwic2VhcmNoXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQ3RybFwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ29udGFpbnNWYWx1ZSgpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiRklMVEVSX0lOUFVUX1RZUEVTLlJFRkVSRU5DRVwiPlxuICAgICAgPG5nLXNlbGVjdFxuICAgICAgICBjbGFzcz1cImFwb2xsby10ZXh0LWZpZWxkIHRhYmxlLWhlYWRlci1hcG9sbG8tdGV4dC1maWVsZFwiXG4gICAgICAgIChjaGFuZ2UpPVwicmVmZXJlbmNlVmFsdWVDaGFuZ2VkKClcIlxuICAgICAgICBbYXBwZW5kVG9dPVwiJ21hdC1jYXJkJ1wiXG4gICAgICAgIFtpdGVtc109XCIoc2VsZWN0YWJsZUl0ZW1zJCB8IGFzeW5jKSB8fCBbXVwiXG4gICAgICAgIFtiaW5kVmFsdWVdPVwiZmlsdGVyT3B0aW9uLmJpbmRQcm9wXCJcbiAgICAgICAgW2JpbmRMYWJlbF09XCJmaWx0ZXJPcHRpb24uZGlzcGxheVByb3BcIlxuICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7IGNvbHVtbk5hbWUuaGVhZGVyIH19XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpbHRlclZhbHVlXCJcbiAgICAgID5cbiAgICAgIDwvbmctc2VsZWN0PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIkZJTFRFUl9JTlBVVF9UWVBFUy5DSEVDS0JPWFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAobWVudU9wZW5lZCk9XCJtYXRNZW51T3BlbmQoKVwiXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJhY3Rpb25zXCJcbiAgICAgICAgY2xhc3M9XCJkcm9wZG93bi10b2dnbGUgb2RwLXNlY29uZGFyeS1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj57eyBjb2x1bW5OYW1lLmhlYWRlciB8fCBjb2x1bW5OYW1lLnByb3AgfCB0aXRsZWNhc2UgfX08L3NwYW4+XG4gICAgICAgIDxtYXQtbWVudVxuICAgICAgICAgICNhY3Rpb25zPVwibWF0TWVudVwiXG4gICAgICAgICAgZm9jdXNGaXJzdEl0ZW09XCJmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJvZGItbWF0LW1lbnUtcGFuZWwgY3VzdG9tLXBhbmVsIGZpbHRlci1wYW5lbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXBhbmVsLXBhZGRpbmdcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXNlYXJjaC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNTZWFyY2hCb3hIaWRlXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHt7IGNvbHVtbk5hbWUuaGVhZGVyIH19XCJcbiAgICAgICAgICAgICAgICBuYW1lPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjbGVhci1maWx0ZXItc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlYXJjaFRleHQudmFsdWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICA+JiN4MjcxNTs8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyU2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNsZWFyLWFsbFwiXG4gICAgICAgICAgICAgID5DbGVhciBhbGw8L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtc3Bpbm5lclxuICAgICAgICAgICAgICAqbmdJZj1cImlzTG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwibXItMVwiXG4gICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIxNlwiXG4gICAgICAgICAgICA+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tbWF0LW1lbnUtaXRlbVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibXktMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9sZC10ZXh0XCJcbiAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWxlY3RBbGxDdHJsXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RBbGxDaGVja2JveCgpXCJcbiAgICAgICAgICAgICAgICAgID5TZWxlY3QgQWxsPC9tYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1tYXQtbWVudS1pdGVtXCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgKHNlbGVjdGFibGVJdGVtcyQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgICAgIGZpbHRlck9wdGlvbi5zZWxlY3RhYmxlSXRlbXMgfHxcbiAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibXktMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNJdGVtQ2hlY2tlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldENoZWNrZWRWYWx1ZXNUb0ZpbHRlcihpdGVtKVwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbVtmaWx0ZXJPcHRpb24uZGlzcGxheVByb3BdXCJcbiAgICAgICAgICAgICAgICAgID57eyBpdGVtW2ZpbHRlck9wdGlvbi5kaXNwbGF5UHJvcF0gfX08L21hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJGSUxURVJfSU5QVVRfVFlQRVMuREFURV9SQU5HRVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRhdGVSYW5nZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiRklMVEVSX0lOUFVUX1RZUEVTLlNMSURFUlwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlck9wdGlvbi5maWx0ZXJUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGZpbHRlck9wdGlvbi5maWx0ZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiB7XG4gICAgICAgICAgICAgICAgZmlsdGVyT3B0aW9uOiBmaWx0ZXJPcHRpb24sXG4gICAgICAgICAgICAgICAgdGhPcHRpb25zOiBmaWx0ZXJPcHRpb24udGhPcHRpb25zXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlsdGVyT3B0aW9uLmZpbHRlclRlbXBsYXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tc2xpZGVyIGN1c3RvbS1zbGlkZXItYWxpZ25tZW50XCI+XG4gICAgICAgICAgPG5neC1zbGlkZXIgKHVzZXJDaGFuZ2VFbmQpPVwic2xpZGVyVmFsdWVDaGFuZ2VkKClcIiBbKHZhbHVlKV09XCJzbGlkZXJWYWx1ZU9wdC5taW5TY29yZVwiXG4gICAgICAgICAgICBbKGhpZ2hWYWx1ZSldPVwic2xpZGVyVmFsdWVPcHQubWF4U2NvcmVcIiBbb3B0aW9uc109XCJzbGlkZXJEZWZhdWx0T3B0aW9uc1wiPlxuICAgICAgICAgIDwvbmd4LXNsaWRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVXBkYXRlZEZpbHRlckRlc2lnblwiPlxuICA8YSAjbmdiUG9wb3Zlcj1cIm5nYlBvcG92ZXJcIiBbbmdiUG9wb3Zlcl09XCJwb3BUZW1wbGF0ZVwiIFtwbGFjZW1lbnRdPVwiJ2JvdHRvbSdcIiBbYXV0b0Nsb3NlXT1cImZhbHNlXCI+XG4gICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWx0ZXIgZmlsdGVyLWljb25cIj48L2k+XG4gIDwvYT5cbiAgPG5nLXRlbXBsYXRlICNwb3BUZW1wbGF0ZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXdpZHRoIHRhYmxlLWNvbC1maWx0ZXItcGFuZWxcIj5cbiAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJjbG9zZVBvcHVwKClcIiBjbGFzcz1cIm1hdC1pY29uIG1hdGVyaWFsLWljb25zIGNsb3NlLWljb25cIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvcm1cIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIiFmaWx0ZXJPcHRpb24/LnR5cGUgfHwgZmlsdGVyT3B0aW9uLnR5cGUgPT0gRklMVEVSX1RZUEVTLkNPTlRBSU5TXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtZnVsbC13aWR0aCBhcG9sbG8tdGV4dC1maWVsZFwiIFtmbG9hdExhYmVsXT1cIidhbHdheXMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5GaWx0ZXIgQnkge3sgY29sdW1uTmFtZS5oZWFkZXIgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciB7eyBjb2x1bW5OYW1lLmhlYWRlciB9fVwiIFtmb3JtQ29udHJvbF09XCJmaWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNvbnRhaW5zVmFsdWUoKVwiPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cImZpbHRlck9wdGlvbj8udHlwZSAmJiBmaWx0ZXJPcHRpb24/LnR5cGUgIT0gRklMVEVSX1RZUEVTLkNPTlRBSU5TXCI+RmlsdGVyIEJ5XG4gICAgICAgICAgICAgICAgICAgICAge3tjb2x1bW5OYW1lLmhlYWRlciB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlck9wdGlvbj8udHlwZSA9PT0gRklMVEVSX1RZUEVTLklOXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gbmdGb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaGJhci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJzdmctaWNvbiBmYS1zb2xpZCBmYS1tYWduaWZ5aW5nLWdsYXNzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJzZWFyY2hcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdtdWx0aS1zZWxlY3Qtc2VjdGlvbic6IGZpbHRlck9wdGlvbi5zZWxlY3RhYmxlSXRlbXM/Lmxlbmd0aD42IH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJPcHRpb24uc2VsZWN0YWJsZUl0ZW1zIHwgZmlsdGVyQnlQcm9wOiBmaWx0ZXJPcHRpb24uZGlzcGxheVByb3A6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbY2hlY2tlZF09XCJpc0l0ZW1DaGVja2VkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRDaGVja2VkVmFsdWVzVG9GaWx0ZXIoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtW2ZpbHRlck9wdGlvbi5kaXNwbGF5UHJvcF19fTwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlck9wdGlvbj8udHlwZSA9PT0gRklMVEVSX1RZUEVTLkJFVFdFRU5cIiBjbGFzcz1cImZpbHRlci1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZGF0ZVJhbmdlRm9ybUdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwb2xsby10ZXh0LWZpZWxkIGRhdGUtcGlja2VyLWZpZWxkXCIgZnhMYXlvdXQ9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtyZWFkb25seV09XCJ0cnVlXCIgbWF0SW5wdXQgcmVxdWlyZWQgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RGF0ZVZhbHVlKCdzdGFydERhdGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWVsZW1lbnRcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXIxXCIgW3BsYWNlaG9sZGVyXT1cIidTdGFydCBEYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdGFydERhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci10b2dnbGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXIxPjwvbWF0LWRhdGVwaWNrZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBvbGxvLXRleHQtZmllbGQgZGF0ZS1waWNrZXItZmllbGRcIiBmeExheW91dD1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW3JlYWRvbmx5XT1cInRydWVcIiBtYXRJbnB1dCByZXF1aXJlZCAobmdNb2RlbENoYW5nZSk9XCJzZXREYXRlVmFsdWUoJ2VuZERhdGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWVsZW1lbnRcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXIyXCIgW3BsYWNlaG9sZGVyXT1cIidFbmQgRGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5kRGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlcjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRlcGlja2VyLXRvZ2dsZVwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcjI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJPcHRpb24/LnR5cGUgPT09IEZJTFRFUl9JTlBVVF9UWVBFUy5DSEVDS0JPWFwiIGNsYXNzPVwiZmlsdGVyLWl0ZW1cIiBmeExheW91dD1cInJvd1wiPlxuICAgICAgICAgIDxidXR0b24gKG1lbnVPcGVuZWQpPVwibWF0TWVudU9wZW5kKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYWN0aW9uc1wiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXRvZ2dsZSBvZHAtc2Vjb25kYXJ5LWJ1dHRvblwiPlxuICAgICAgICAgICAgPHNwYW4+e3tnZXRDaGVja0JveHNWYWx1ZT8/IGNvbHVtbk5hbWUuaGVhZGVyIHx8IGNvbHVtbk5hbWUucHJvcCB8IHRpdGxlY2FzZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxtYXQtbWVudSAjYWN0aW9ucz1cIm1hdE1lbnVcIiBmb2N1c0ZpcnN0SXRlbT1cImZhbHNlXCIgY2xhc3M9XCJvZGItbWF0LW1lbnUtcGFuZWwgY3VzdG9tLXBhbmVsIGZpbHRlci1wYW5lbFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXBhbmVsLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1zZWFyY2gtY29udGFpbmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWlzU2VhcmNoQm94SGlkZVwiIHJlcXVpcmVkIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2gge3sgY29sdW1uTmFtZS5oZWFkZXIgfX1cIiBuYW1lPVwic2VhcmNoXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaFRleHRcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbGVhci1maWx0ZXItc2VhcmNoXCIgKm5nSWY9XCJzZWFyY2hUZXh0LnZhbHVlXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIj4mI3gyNzE1Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNsZWFyU2VsZWN0aW9uKClcIiBjbGFzcz1cImNsZWFyLWFsbFwiPkNsZWFyIGFsbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc0xvYWRpbmckIHwgYXN5bmNcIiBjbGFzcz1cIm1yLTFcIiBbZGlhbWV0ZXJdPVwiMTZcIj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tbWF0LW1lbnUtaXRlbVwiIGNsYXNzPVwibXktMVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJib2xkLXRleHRcIiBbaW5kZXRlcm1pbmF0ZV09XCJpc0luZGV0ZXJtaW5hdGVcIiBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VsZWN0QWxsQ3RybFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0QWxsQ2hlY2tib3goKVwiPlNlbGVjdCBBbGw8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLW1hdC1tZW51LWl0ZW1cIiAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiAoc2VsZWN0YWJsZUl0ZW1zJCB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgICAgZmlsdGVyT3B0aW9uLnNlbGVjdGFibGVJdGVtcyB8fFxuICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgXCIgY2xhc3M9XCJteS0xXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2NoZWNrZWRdPVwiaXNJdGVtQ2hlY2tlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRDaGVja2VkVmFsdWVzVG9GaWx0ZXIoaXRlbSlcIiBbdGl0bGVdPVwiaXRlbVtmaWx0ZXJPcHRpb24uZGlzcGxheVByb3BdXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtW2ZpbHRlck9wdGlvbi5kaXNwbGF5UHJvcF0gfX08L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG1hdC1jYXJkLWFjdGlvbnM+XG4gICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzRm9ybUludmFsaWQoKVwiIChjbGljayk9XCJjb2x1bW5GaWx0ZXJDbGlja2VkKClcIiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPjxpXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYS1zb2xpZCBmYS1tYWduaWZ5aW5nLWdsYXNzXCI+PC9pPiBTZWFyY2g8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY29sdW1uRmlsdGVyUmVzZXRDbGlja2VkKClcIiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPjxpIGNsYXNzPVwiZmFzIGZhLXJlZG9cIj48L2k+XG4gICAgICAgICAgICAgICAgICBDbGVhcjwvYnV0dG9uPlxuICAgICAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cbiAgICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI2RhdGVSYW5nZVRlbXBsYXRlPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFjdGlvbnNcIiBjbGFzcz1cImRyb3Bkb3duLXRvZ2dsZSBvZHAtc2Vjb25kYXJ5LWJ1dHRvblwiPlxuICAgICAgICA8c3Bhbj57eyAoY29sdW1uTmFtZS5oZWFkZXIgfHwgY29sdW1uTmFtZS5wcm9wKSB8IHRpdGxlY2FzZX19PC9zcGFuPlxuICAgICAgICA8bWF0LW1lbnUgI2FjdGlvbnM9XCJtYXRNZW51XCIgZm9jdXNGaXJzdEl0ZW09XCJmYWxzZVwiIGNsYXNzPVwiZGF0ZS1yYW5nZS1wYW5lbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBbZm9ybUdyb3VwXT1cImRhdGVSYW5nZUZvcm1Hcm91cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcG9sbG8tdGV4dC1maWVsZCBjdXN0b20tZGF0ZS1waWNrZXItZmllbGRcIiBmeExheW91dD1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW3JlYWRvbmx5XT1cInRydWVcIiAoY2xpY2spPVwicGlja2VyMS5vcGVuKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiBbbWF4XT1cImRhdGVSYW5nZUZvcm1Hcm91cC5jb250cm9sc1snZW5kRGF0ZSddLnZhbHVlXCIgbWF0SW5wdXQgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldERhdGVWYWx1ZSgnc3RhcnREYXRlJylcIiBjbGFzcz1cImN1c3RvbS1kYXRlLWZpZWxkXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Zyb20gRGF0ZSdcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGFydERhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXIxXCIgY2xhc3M9XCJkYXRlcGlja2VyLXRvZ2dsZVwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcjE+PC9tYXQtZGF0ZXBpY2tlcj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcG9sbG8tdGV4dC1maWVsZCBjdXN0b20tZGF0ZS1waWNrZXItZmllbGRcIiBmeExheW91dD1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKGNsaWNrKT1cInBpY2tlcjIub3BlbigpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgW3JlYWRvbmx5XT1cInRydWVcIiBtYXRJbnB1dCByZXF1aXJlZCAobmdNb2RlbENoYW5nZSk9XCJzZXREYXRlVmFsdWUoJ2VuZERhdGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1kYXRlLWZpZWxkXCIgW21pbl09XCJkYXRlUmFuZ2VGb3JtR3JvdXAuY29udHJvbHNbJ3N0YXJ0RGF0ZSddLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlcjJcIiBbcGxhY2Vob2xkZXJdPVwiJ1RvIERhdGUnXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5kRGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlcjJcIiBjbGFzcz1cImRhdGVwaWNrZXItdG9nZ2xlXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyMj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJDbGVhciBhbGxcIiBbZGlzYWJsZWRdPVwiIWlzQ2xlYXJFbmFibGVkXCIgY2xhc3M9XCJkYXRlLWNsZWFyXCIgKGNsaWNrKT1cImNsZWFyRGF0ZUZpbHRlcigpXCIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJmYXMgZmEtYnJvb21cIj48L2VtPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlck9wdGlvbi5kYXRlUmFuZ2VJdGVtc1wiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBuYW1lPVwiZm9udFN0eWxlXCIgYXJpYS1sYWJlbD1cIkZvbnQgU3R5bGVcIiBbdmFsdWVdPVwiZGF0ZVJhbmdlVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImRhdGVSYW5nZUNsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyT3B0aW9uLmRhdGVSYW5nZUl0ZW1zLml0ZW1zXCIgdmFsdWU9XCJ7eyBpdGVtIH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgaXRlbSB9fSB7eyBmaWx0ZXJPcHRpb24uZGF0ZVJhbmdlSXRlbXMudW5pdCB9fSAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LW1lbnU+XG4gICAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
|