@mediusinc/mng-commons 6.0.0-rc.5 → 6.0.0-rc.6
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/core/components/notification/notification-wrapper.component.d.ts +4 -4
- package/core/error/error.model.d.ts +4 -4
- package/core/helpers/notification.d.ts +2 -2
- package/core/provide.d.ts +3 -3
- package/core/styles/style-constants.d.ts +9 -8
- package/core/styles/style.model.d.ts +2 -1
- package/fesm2022/mediusinc-mng-commons-core.mjs +91 -104
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form-api.mjs +8 -9
- package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +149 -49
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-DTSBP9WQ.mjs +31 -0
- package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-DTSBP9WQ.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-JZpyiDIL.mjs +2118 -0
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-JZpyiDIL.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-table.mjs +1 -2154
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +97 -49
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +326 -290
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
- package/form/api/index.d.ts +1 -0
- package/form/api/models/empty-value.model.d.ts +7 -0
- package/form/components/autocomplete/autocomplete.component.d.ts +1 -2
- package/form/components/date-range/date-range.component.d.ts +4 -3
- package/form/components/dropdown/dropdown.component.d.ts +3 -2
- package/form/components/number-range/number-range.component.d.ts +3 -2
- package/form/directives/input-empty-value.directive.d.ts +40 -0
- package/form/directives/input-trim.directive.d.ts +3 -5
- package/form/index.d.ts +1 -0
- package/i18n/en.json +57 -8
- package/i18n/sl.json +1 -3
- package/package.json +16 -42
- package/provide.d.ts +2 -2
- package/table/components/column-toggle/column-toggle.component.d.ts +12 -0
- package/table/components/filter/filter-form/filter-form.component.d.ts +2 -2
- package/table/components/table/table.component.d.ts +0 -1
- package/table/helpers/filters.d.ts +3 -2
- package/table/helpers/notification.d.ts +2 -2
- package/table/services/table-metadata.service.d.ts +3 -3
- package/tableview/action/components/action/action.component.d.ts +1 -0
- package/tableview/action/components/editor/action-editor.component.d.ts +1 -1
- package/tableview/action/components/table/action-table.component.d.ts +2 -1
- package/tableview/action/helpers/notification.d.ts +3 -3
- package/tableview/action/models/execution/action-context.model.d.ts +2 -2
- package/tableview/action/services/action-executor.service.d.ts +1 -1
- package/tableview/api/action/models/execution/action-context.model.d.ts +2 -2
- package/tableview/api/editor/descriptors/editor.descriptor.d.ts +5 -0
- package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +14 -10
- package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +10 -0
- package/tableview/api/editor/descriptors/field.descriptor.d.ts +36 -9
- package/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.d.ts +1 -1
- package/tableview/api/editor/models/field-action-context.model.d.ts +1 -1
- package/tableview/api/editor/models/field.model.d.ts +1 -2
- package/tableview/api/editor/models/form-editor.interface.d.ts +2 -2
- package/tableview/api/editor/models/formly-custom-field.model.d.ts +1 -1
- package/tableview/api/editor/models/formly-field.model.d.ts +2 -2
- package/tableview/editor/components/editor/form-editor.component.d.ts +2 -2
- package/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.d.ts +1 -1
- package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +2 -1
- package/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +4 -6
- package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +0 -2
- package/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +2 -2
- package/tableview/editor/components/formly/fields/formly-field-type.abstract.component.d.ts +8 -15
- package/tableview/editor/components/formly/fields/formly-group-type.abstract.component.d.ts +7 -0
- package/tableview/editor/components/formly/fields/formly-type.abstract.component.d.ts +20 -0
- package/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +11 -4
- package/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +2 -1
- package/tableview/editor/helpers/formly-config.d.ts +1 -1
- package/tableview/editor/helpers/notification.d.ts +3 -3
- package/tableview/editor/models/formly-config.model.d.ts +10 -1
- package/tableview/editor/models/formly.model.d.ts +23 -0
- package/tableview/editor/services/form-editor.service.d.ts +2 -2
- package/tableview/tableview/router/tableview-route-builder.d.ts +10 -3
- package/tableview/tableview/services/tableview-feature-config.token.d.ts +1 -1
- package/version-info.json +3 -3
- package/esm2022/core/action/action-data.model.mjs +0 -2
- package/esm2022/core/action/action-parameters.model.mjs +0 -2
- package/esm2022/core/components/notification/notification-wrapper.component.mjs +0 -50
- package/esm2022/core/data-list/data-list-params-helpers.mjs +0 -465
- package/esm2022/core/data-list/data-list.model.mjs +0 -2
- package/esm2022/core/data-list/filter-match.model.mjs +0 -105
- package/esm2022/core/data-list/filter-metadata.model.mjs +0 -2
- package/esm2022/core/data-providers/base.data-provider.mjs +0 -16
- package/esm2022/core/data-providers/lookup.data-provider.mjs +0 -2
- package/esm2022/core/descriptors/action.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/column.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/editor.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/enum.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/filter.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/lookup.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/model.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/table.descriptor.mjs +0 -2
- package/esm2022/core/descriptors/tableview.descriptor.mjs +0 -2
- package/esm2022/core/directives/component.directive.mjs +0 -75
- package/esm2022/core/directives/rerender.directive.mjs +0 -25
- package/esm2022/core/directives/template.directive.mjs +0 -29
- package/esm2022/core/enum/enum-helpers.mjs +0 -90
- package/esm2022/core/enum/enum.model.mjs +0 -2
- package/esm2022/core/error/error-handler.mjs +0 -20
- package/esm2022/core/error/error-helpers.mjs +0 -273
- package/esm2022/core/error/error.model.mjs +0 -33
- package/esm2022/core/helpers/coercion.mjs +0 -55
- package/esm2022/core/helpers/date.mjs +0 -119
- package/esm2022/core/helpers/notification.mjs +0 -21
- package/esm2022/core/helpers/number.mjs +0 -19
- package/esm2022/core/helpers/object.mjs +0 -152
- package/esm2022/core/helpers/route.mjs +0 -58
- package/esm2022/core/helpers/string.mjs +0 -57
- package/esm2022/core/helpers/templates.mjs +0 -4
- package/esm2022/core/helpers/type-helpers.mjs +0 -2
- package/esm2022/core/i18n/i18n-common.mjs +0 -24
- package/esm2022/core/i18n/i18n-error.mjs +0 -29
- package/esm2022/core/i18n/i18n-type.mjs +0 -46
- package/esm2022/core/index.mjs +0 -107
- package/esm2022/core/log/log-publisher-console.service.mjs +0 -40
- package/esm2022/core/log/log.model.mjs +0 -10
- package/esm2022/core/log/logger.service.mjs +0 -131
- package/esm2022/core/mediusinc-mng-commons-core.mjs +0 -5
- package/esm2022/core/models/class-attribute.model.mjs +0 -2
- package/esm2022/core/models/class-service.model.mjs +0 -2
- package/esm2022/core/models/getter.model.mjs +0 -2
- package/esm2022/core/models/i18n.model.mjs +0 -2
- package/esm2022/core/models/menu.model.mjs +0 -2
- package/esm2022/core/models/user.model.mjs +0 -2
- package/esm2022/core/models/version.model.mjs +0 -2
- package/esm2022/core/pipes/boolean.pipe.mjs +0 -34
- package/esm2022/core/pipes/class-map.pipe.mjs +0 -23
- package/esm2022/core/pipes/enum.pipe.mjs +0 -38
- package/esm2022/core/pipes/enumerate-async.pipe.mjs +0 -36
- package/esm2022/core/pipes/enumerate.pipe.mjs +0 -49
- package/esm2022/core/pipes/getter.pipe.mjs +0 -21
- package/esm2022/core/pipes/i18n-property.pipe.mjs +0 -19
- package/esm2022/core/pipes/json-path.pipe.mjs +0 -25
- package/esm2022/core/pipes/parametrize.pipe.mjs +0 -86
- package/esm2022/core/pipes/template.pipe.mjs +0 -25
- package/esm2022/core/provide.mjs +0 -79
- package/esm2022/core/reactivity/effect.mjs +0 -22
- package/esm2022/core/reflect/type-enum-decorator.mjs +0 -12
- package/esm2022/core/reflect/type-enum-metadata.mjs +0 -62
- package/esm2022/core/registry/registry.model.mjs +0 -2
- package/esm2022/core/registry/type-registry.mjs +0 -106
- package/esm2022/core/router/route-builder.mjs +0 -431
- package/esm2022/core/router/router.model.mjs +0 -2
- package/esm2022/core/router/routes-builder.mjs +0 -52
- package/esm2022/core/rxjs/map-data-list-result-operator.mjs +0 -22
- package/esm2022/core/security/permission-helpers.mjs +0 -14
- package/esm2022/core/security/permission.guard.mjs +0 -15
- package/esm2022/core/security/permission.service.mjs +0 -101
- package/esm2022/core/security/permissions.model.mjs +0 -93
- package/esm2022/core/services/commons-configuration.service.mjs +0 -189
- package/esm2022/core/services/commons-init.service.mjs +0 -111
- package/esm2022/core/services/commons-router.service.mjs +0 -181
- package/esm2022/core/services/commons-storage.service.mjs +0 -31
- package/esm2022/core/services/commons.service.mjs +0 -324
- package/esm2022/core/services/providers/commons-init.provider.mjs +0 -4
- package/esm2022/core/services/tokens/browser-storage.token.mjs +0 -3
- package/esm2022/core/services/tokens/commons-init.token.mjs +0 -3
- package/esm2022/core/services/tokens/log-publisher.token.mjs +0 -3
- package/esm2022/core/services/tokens/module-config.token.mjs +0 -3
- package/esm2022/core/styles/style-constants.mjs +0 -11
- package/esm2022/core/styles/style.model.mjs +0 -20
- package/esm2022/filter/descriptors/filter-generic.descriptor.mjs +0 -31
- package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +0 -168
- package/esm2022/filter/descriptors/filter.descriptor.mjs +0 -421
- package/esm2022/filter/index.mjs +0 -8
- package/esm2022/filter/mediusinc-mng-commons-filter.mjs +0 -5
- package/esm2022/filter/models/filter-generic-property.model.mjs +0 -2
- package/esm2022/filter/models/filter.model.mjs +0 -20
- package/esm2022/form/api/data-providers/lookup-data-provider.factory.mjs +0 -15
- package/esm2022/form/api/data-providers/lookup.data-provider.mjs +0 -15
- package/esm2022/form/api/descriptors/action-button.descriptor.mjs +0 -56
- package/esm2022/form/api/descriptors/button-style.builder.mjs +0 -153
- package/esm2022/form/api/index.mjs +0 -10
- package/esm2022/form/api/mediusinc-mng-commons-form-api.mjs +0 -5
- package/esm2022/form/api/models/button.model.mjs +0 -2
- package/esm2022/form/api/models/trim.model.mjs +0 -2
- package/esm2022/form/components/autocomplete/autocomplete.component.mjs +0 -436
- package/esm2022/form/components/date-range/date-range.component.mjs +0 -147
- package/esm2022/form/components/dropdown/dropdown.component.mjs +0 -372
- package/esm2022/form/components/number-range/number-range.component.mjs +0 -123
- package/esm2022/form/directives/input-trim.directive.mjs +0 -50
- package/esm2022/form/index.mjs +0 -8
- package/esm2022/form/mediusinc-mng-commons-form.mjs +0 -5
- package/esm2022/index.mjs +0 -2
- package/esm2022/mediusinc-mng-commons.mjs +0 -5
- package/esm2022/model/class/data-providers/base-from-class-data-provider.factory.mjs +0 -5
- package/esm2022/model/class/descriptors/model-class.descriptor.mjs +0 -28
- package/esm2022/model/class/descriptors/type-class.descriptor.mjs +0 -6
- package/esm2022/model/class/helpers/model.mjs +0 -53
- package/esm2022/model/class/index.mjs +0 -8
- package/esm2022/model/class/mediusinc-mng-commons-model-class.mjs +0 -5
- package/esm2022/model/data-providers/base-from-type-data-provider.factory.mjs +0 -13
- package/esm2022/model/descriptors/enum.descriptor.mjs +0 -28
- package/esm2022/model/descriptors/model.descriptor.mjs +0 -53
- package/esm2022/model/descriptors/type.descriptor.mjs +0 -7
- package/esm2022/model/helpers/i18n.mjs +0 -47
- package/esm2022/model/index.mjs +0 -9
- package/esm2022/model/mediusinc-mng-commons-model.mjs +0 -5
- package/esm2022/provide.mjs +0 -6
- package/esm2022/table/api/class/class-table-attribute-converter.mjs +0 -80
- package/esm2022/table/api/class/class-table-attribute.model.mjs +0 -2
- package/esm2022/table/api/class/class-table-data-provider.factory.mjs +0 -5
- package/esm2022/table/api/class/class-table-descriptor-helpers.mjs +0 -99
- package/esm2022/table/api/class/class-table-descriptor.factory.mjs +0 -21
- package/esm2022/table/api/class/index.mjs +0 -6
- package/esm2022/table/api/class/mediusinc-mng-commons-table-api-class.mjs +0 -5
- package/esm2022/table/api/data-providers/table-data-provider.factory.mjs +0 -15
- package/esm2022/table/api/data-providers/table.data-provider.mjs +0 -33
- package/esm2022/table/api/descriptors/column.descriptor.mjs +0 -475
- package/esm2022/table/api/descriptors/sort.descriptor.mjs +0 -67
- package/esm2022/table/api/descriptors/table-descriptor.factory.mjs +0 -22
- package/esm2022/table/api/descriptors/table.descriptor.mjs +0 -1116
- package/esm2022/table/api/helpers/column-converter.mjs +0 -25
- package/esm2022/table/api/helpers/table-data-provider-descriptor-convert.mjs +0 -7
- package/esm2022/table/api/index.mjs +0 -19
- package/esm2022/table/api/mediusinc-mng-commons-table-api.mjs +0 -5
- package/esm2022/table/api/models/column-value.model.mjs +0 -2
- package/esm2022/table/api/models/column.model.mjs +0 -21
- package/esm2022/table/api/models/row-expandable-component.model.mjs +0 -2
- package/esm2022/table/api/models/table-columns.model.mjs +0 -2
- package/esm2022/table/api/models/table-event.model.mjs +0 -2
- package/esm2022/table/api/models/table.model.mjs +0 -21
- package/esm2022/table/components/column-filter/column-filter.component.mjs +0 -389
- package/esm2022/table/components/column-value/column-value.component.mjs +0 -78
- package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +0 -55
- package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +0 -226
- package/esm2022/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.mjs +0 -219
- package/esm2022/table/components/table/table.component.mjs +0 -319
- package/esm2022/table/helpers/filters.mjs +0 -312
- package/esm2022/table/helpers/notification.mjs +0 -21
- package/esm2022/table/helpers/table-layout-prefs.mjs +0 -10
- package/esm2022/table/helpers/table.mjs +0 -24
- package/esm2022/table/index.mjs +0 -24
- package/esm2022/table/mediusinc-mng-commons-table.mjs +0 -5
- package/esm2022/table/models/column-preferences.model.mjs +0 -2
- package/esm2022/table/models/filter.model.mjs +0 -2
- package/esm2022/table/pipes/filter-value.pipe.mjs +0 -77
- package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +0 -27
- package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +0 -25
- package/esm2022/table/provide.mjs +0 -19
- package/esm2022/table/services/table-data.service.mjs +0 -194
- package/esm2022/table/services/table-feature-config.token.mjs +0 -3
- package/esm2022/table/services/table-metadata.service.mjs +0 -136
- package/esm2022/table/services/table-preferences.service.mjs +0 -142
- package/esm2022/tableview/action/components/action/action.component.mjs +0 -277
- package/esm2022/tableview/action/components/editor/action-editor.component.mjs +0 -86
- package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +0 -428
- package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +0 -35
- package/esm2022/tableview/action/components/route/action-route.component.mjs +0 -146
- package/esm2022/tableview/action/components/table/action-table.component.mjs +0 -102
- package/esm2022/tableview/action/guards/unsaved-changes.guard.mjs +0 -4
- package/esm2022/tableview/action/helpers/action-execution.mjs +0 -25
- package/esm2022/tableview/action/helpers/i18n.mjs +0 -102
- package/esm2022/tableview/action/helpers/notification.mjs +0 -78
- package/esm2022/tableview/action/helpers/styles.mjs +0 -32
- package/esm2022/tableview/action/models/action-editor-dialog-data.model.mjs +0 -2
- package/esm2022/tableview/action/models/can-component-deactivate.model.mjs +0 -2
- package/esm2022/tableview/action/models/execution/action-context.model.mjs +0 -64
- package/esm2022/tableview/action/models/execution/action-instance.model.mjs +0 -169
- package/esm2022/tableview/action/services/action-error-mapper.service.mjs +0 -20
- package/esm2022/tableview/action/services/action-executor.service.mjs +0 -772
- package/esm2022/tableview/action/services/component-action-executor.service.mjs +0 -19
- package/esm2022/tableview/action/services/data-provider-executor.service.mjs +0 -41
- package/esm2022/tableview/action/services/navigation.service.mjs +0 -53
- package/esm2022/tableview/action/services/providers/provide-action-executor.mjs +0 -9
- package/esm2022/tableview/action/services/providers/provide-view-container.mjs +0 -17
- package/esm2022/tableview/action/services/root-action-executor.service.mjs +0 -18
- package/esm2022/tableview/action/services/tokens/action-editor.token.mjs +0 -3
- package/esm2022/tableview/action/services/view-container.service.mjs +0 -40
- package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +0 -28
- package/esm2022/tableview/api/action/descriptors/action-editor-descriptor.factory.mjs +0 -30
- package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +0 -223
- package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +0 -32
- package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +0 -74
- package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +0 -302
- package/esm2022/tableview/api/action/descriptors/editor-action-descriptor.factory.mjs +0 -21
- package/esm2022/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.mjs +0 -21
- package/esm2022/tableview/api/action/descriptors/table-action-descriptor.factory.mjs +0 -37
- package/esm2022/tableview/api/action/descriptors/table-action-editor-descriptor.factory.mjs +0 -40
- package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +0 -100
- package/esm2022/tableview/api/action/models/action-component.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/action-confirmation.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +0 -2
- package/esm2022/tableview/api/action/models/action-editor.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/action-error.model.mjs +0 -14
- package/esm2022/tableview/api/action/models/action.type.mjs +0 -26
- package/esm2022/tableview/api/action/models/execution/action-context-validation.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/execution/action-context.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/execution/action-execution-error.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/execution/action-instance-state.model.mjs +0 -32
- package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/execution/view-container.model.mjs +0 -2
- package/esm2022/tableview/api/action/models/tableview-action-default-categories.model.mjs +0 -11
- package/esm2022/tableview/api/action/services/data-provider-executor.service.mjs +0 -28
- package/esm2022/tableview/api/action/services/tokens/data-language-dropdown.token.mjs +0 -3
- package/esm2022/tableview/api/class/editor/class-editor-attribute-converter.mjs +0 -85
- package/esm2022/tableview/api/class/editor/class-editor-attribute.model.mjs +0 -2
- package/esm2022/tableview/api/class/editor/class-editor-data-provider.factory.mjs +0 -5
- package/esm2022/tableview/api/class/editor/class-editor-descriptor-helpers.mjs +0 -95
- package/esm2022/tableview/api/class/editor/class-editor-descriptor.factory.mjs +0 -21
- package/esm2022/tableview/api/class/index.mjs +0 -13
- package/esm2022/tableview/api/class/mediusinc-mng-commons-tableview-api-class.mjs +0 -5
- package/esm2022/tableview/api/class/tableview/class-tableview-attribute-converter.mjs +0 -35
- package/esm2022/tableview/api/class/tableview/class-tableview-attribute.model.mjs +0 -2
- package/esm2022/tableview/api/class/tableview/class-tableview-data-provider.factory.mjs +0 -5
- package/esm2022/tableview/api/class/tableview/class-tableview-descriptor-helpers.mjs +0 -111
- package/esm2022/tableview/api/class/tableview/class-tableview-descriptor.factory.mjs +0 -26
- package/esm2022/tableview/api/editor/data-providers/editor-data-provider.factory.mjs +0 -15
- package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +0 -114
- package/esm2022/tableview/api/editor/descriptors/editor-descriptor.factory.mjs +0 -15
- package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +0 -437
- package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +0 -51
- package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +0 -314
- package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +0 -103
- package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +0 -211
- package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +0 -142
- package/esm2022/tableview/api/editor/descriptors/field-validation.descriptor.mjs +0 -25
- package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +0 -402
- package/esm2022/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.mjs +0 -51
- package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/editor.model.mjs +0 -9
- package/esm2022/tableview/api/editor/models/field-action-context.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/field-image-preview.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/field-validation.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/field.model.mjs +0 -57
- package/esm2022/tableview/api/editor/models/form-editor.event.mjs +0 -28
- package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +0 -2
- package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +0 -70
- package/esm2022/tableview/api/editor/models/formly-field.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/formly-options.model.mjs +0 -2
- package/esm2022/tableview/api/editor/models/radio.model.mjs +0 -2
- package/esm2022/tableview/api/index.mjs +0 -76
- package/esm2022/tableview/api/mediusinc-mng-commons-tableview-api.mjs +0 -5
- package/esm2022/tableview/api/tableview/data-providers/tableview-data-provider.factory.mjs +0 -18
- package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +0 -84
- package/esm2022/tableview/api/tableview/descriptors/tableview-descriptor.factory.mjs +0 -34
- package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +0 -377
- package/esm2022/tableview/api/tableview/helpers/files-export.mjs +0 -34
- package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +0 -26
- package/esm2022/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.mjs +0 -7
- package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +0 -324
- package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +0 -319
- package/esm2022/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.mjs +0 -2
- package/esm2022/tableview/api/tableview/models/tableview-descriptor-helper.type.mjs +0 -2
- package/esm2022/tableview/api/tableview/models/tableview-input.model.mjs +0 -2
- package/esm2022/tableview/api/tableview/models/tableview-route.model.mjs +0 -2
- package/esm2022/tableview/editor/components/editor/auto-save-status/auto-save-status.component.mjs +0 -82
- package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +0 -480
- package/esm2022/tableview/editor/components/formly/constants.mjs +0 -2
- package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +0 -66
- package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +0 -47
- package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +0 -39
- package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +0 -165
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +0 -42
- package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +0 -34
- package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +0 -211
- package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +0 -23
- package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +0 -195
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +0 -239
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +0 -205
- package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +0 -28
- package/esm2022/tableview/editor/components/formly/fields/formly-field-type.abstract.component.mjs +0 -46
- package/esm2022/tableview/editor/components/formly/pipes/formly-field-label.pipe.mjs +0 -19
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +0 -33
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +0 -59
- package/esm2022/tableview/editor/helpers/editor-autosave.mjs +0 -49
- package/esm2022/tableview/editor/helpers/editor-field.mjs +0 -39
- package/esm2022/tableview/editor/helpers/editor-formly.mjs +0 -388
- package/esm2022/tableview/editor/helpers/editor-validators.mjs +0 -25
- package/esm2022/tableview/editor/helpers/field-create.mjs +0 -21
- package/esm2022/tableview/editor/helpers/formly-config.mjs +0 -260
- package/esm2022/tableview/editor/helpers/notification.mjs +0 -11
- package/esm2022/tableview/editor/models/editor-auto-save-preview.model.mjs +0 -2
- package/esm2022/tableview/editor/models/formly-config.model.mjs +0 -2
- package/esm2022/tableview/editor/services/form-editor.service.mjs +0 -96
- package/esm2022/tableview/editor/services/formly-config.provider.mjs +0 -31
- package/esm2022/tableview/index.mjs +0 -67
- package/esm2022/tableview/mediusinc-mng-commons-tableview.mjs +0 -5
- package/esm2022/tableview/provide.mjs +0 -105
- package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +0 -15
- package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +0 -59
- package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +0 -175
- package/esm2022/tableview/tableview/services/tableview-feature-config.token.mjs +0 -3
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
import { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, booleanAttribute, computed, contentChildren, inject, input, signal, viewChild } from '@angular/core';
|
|
3
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
5
|
-
import { Button } from 'primeng/button';
|
|
6
|
-
import { CheckboxModule } from 'primeng/checkbox';
|
|
7
|
-
import { InputGroupModule } from 'primeng/inputgroup';
|
|
8
|
-
import { InputGroupAddonModule } from 'primeng/inputgroupaddon';
|
|
9
|
-
import { InputTextModule } from 'primeng/inputtext';
|
|
10
|
-
import { OverlayPanel, OverlayPanelModule } from 'primeng/overlaypanel';
|
|
11
|
-
import { PaginatorModule } from 'primeng/paginator';
|
|
12
|
-
import { Table } from 'primeng/table';
|
|
13
|
-
import { TagModule } from 'primeng/tag';
|
|
14
|
-
import { ToggleButtonModule } from 'primeng/togglebutton';
|
|
15
|
-
import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, skip } from 'rxjs';
|
|
16
|
-
import { FilterMatchMode, TemplateDirective, findTemplateByName } from '@mediusinc/mng-commons/core';
|
|
17
|
-
import { filterSetMetadataOnChange, filterSetMetadataOnDisplayChange } from '../../../helpers/filters';
|
|
18
|
-
import { TableDataService } from '../../../services/table-data.service';
|
|
19
|
-
import { COMMONS_TABLE_FEATURE_CONFIG_IT } from '../../../services/table-feature-config.token';
|
|
20
|
-
import { TableFilterActiveTagComponent } from '../filter-active-tag/filter-active-tag.component';
|
|
21
|
-
import { TableFilterFormComponent } from '../filter-form/filter-form.component';
|
|
22
|
-
import * as i0 from "@angular/core";
|
|
23
|
-
import * as i1 from "primeng/overlaypanel";
|
|
24
|
-
import * as i2 from "@ngx-translate/core";
|
|
25
|
-
import * as i3 from "primeng/inputtext";
|
|
26
|
-
import * as i4 from "@angular/forms";
|
|
27
|
-
import * as i5 from "primeng/togglebutton";
|
|
28
|
-
export class TableFilterOverlayWithTagComponent {
|
|
29
|
-
static { this.SEARCH_WORD_LIMIT_MAX = 4; }
|
|
30
|
-
constructor() {
|
|
31
|
-
this.primeTable = inject(Table);
|
|
32
|
-
this.tableData = inject((TableDataService));
|
|
33
|
-
this.tableConfig = inject(COMMONS_TABLE_FEATURE_CONFIG_IT, { optional: true });
|
|
34
|
-
this.metadata = input.required();
|
|
35
|
-
this.genericFilterDescriptor = input();
|
|
36
|
-
this.model = input.required();
|
|
37
|
-
this.enableSearch = input(false, { transform: booleanAttribute });
|
|
38
|
-
this.search = input();
|
|
39
|
-
this.searchLimitWordMax = input(undefined);
|
|
40
|
-
this.enableCaseSensitive = input(true, { transform: booleanAttribute });
|
|
41
|
-
this.filterOverlay = viewChild.required(OverlayPanel);
|
|
42
|
-
this.filterFormComponent = viewChild(TableFilterFormComponent);
|
|
43
|
-
this.templates = contentChildren(TemplateDirective);
|
|
44
|
-
this.titleTemplate = computed(() => findTemplateByName([...this.templates()], 'title'));
|
|
45
|
-
this.filters = computed(() => {
|
|
46
|
-
return this.getInitialFilters(this.tableData.filterMeta(), this.metadata());
|
|
47
|
-
});
|
|
48
|
-
this.showFilterButton = computed(() => this.metadata().length > 0);
|
|
49
|
-
this.activeFilters = computed(() => {
|
|
50
|
-
const filterEntry = this.filters();
|
|
51
|
-
return this.metadata()
|
|
52
|
-
.filter(d => {
|
|
53
|
-
const filter = filterEntry[d.descriptor.property];
|
|
54
|
-
return (filter &&
|
|
55
|
-
filter.matchMode !== undefined &&
|
|
56
|
-
filter.displayMatchMode !== undefined &&
|
|
57
|
-
(filter.matchMode === FilterMatchMode.Exists ||
|
|
58
|
-
filter.matchMode === FilterMatchMode.DoesNotExist ||
|
|
59
|
-
(filter.value !== undefined && filter.displayValue !== undefined)));
|
|
60
|
-
})
|
|
61
|
-
.map(d => filterEntry[d.descriptor.property]);
|
|
62
|
-
});
|
|
63
|
-
this.activeFilterProperties = computed(() => this.activeFilters().map(f => f.metadata.descriptor.property));
|
|
64
|
-
this.filterEdit = signal(undefined);
|
|
65
|
-
// global search model
|
|
66
|
-
this.searchValue = computed(() => this.search()?.value);
|
|
67
|
-
this.searchCaseSensitive = computed(() => this.search()?.caseSensitive);
|
|
68
|
-
this.searchWordLimitMaxError = signal(false);
|
|
69
|
-
this.searchWordLimitMaxCmp = computed(() => {
|
|
70
|
-
const inputLimit = this.searchLimitWordMax();
|
|
71
|
-
if (inputLimit !== undefined) {
|
|
72
|
-
return inputLimit;
|
|
73
|
-
}
|
|
74
|
-
return this.tableConfig?.searchLimitMaxWords !== undefined ? this.tableConfig?.searchLimitMaxWords : TableFilterOverlayWithTagComponent.SEARCH_WORD_LIMIT_MAX;
|
|
75
|
-
});
|
|
76
|
-
this.searchValueSubject = new BehaviorSubject(undefined);
|
|
77
|
-
this.searchCaseSensitiveSubject = new BehaviorSubject(undefined);
|
|
78
|
-
// UI utilities
|
|
79
|
-
this.clickedOnFilterEvent = undefined;
|
|
80
|
-
combineLatest([this.searchValueSubject.pipe(debounceTime(500), distinctUntilChanged()), this.searchCaseSensitiveSubject])
|
|
81
|
-
// NOTE: skip is used to ignore propagating the initial value of the subjects
|
|
82
|
-
.pipe(skip(1), takeUntilDestroyed())
|
|
83
|
-
.subscribe(([value, caseSensitive]) => {
|
|
84
|
-
this.updatePrimeTableGlobalFilter(value == null ? (this.search()?.value ?? '') : value, caseSensitive == null ? (this.search()?.caseSensitive ?? undefined) : caseSensitive);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
onFilterFormApply(event) {
|
|
88
|
-
const filterMetadata = this.metadata().find(d => d.descriptor.property === event.property);
|
|
89
|
-
if (!filterMetadata) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
const filterData = {
|
|
93
|
-
...filterSetMetadataOnDisplayChange({ caseSensitive: event.caseSensitive }, event.matchMode, event.value, filterMetadata.descriptor.filterType, filterMetadata.dateConfig),
|
|
94
|
-
metadata: filterMetadata
|
|
95
|
-
};
|
|
96
|
-
this.updatePrimeTableFilter(filterData);
|
|
97
|
-
// this keeps the UI updated properly before closing the overlay
|
|
98
|
-
this.filterEdit.set(filterData);
|
|
99
|
-
// Resetting the form is done in the onOverlayHide callback because resetting the
|
|
100
|
-
// values here renders empty inputs for a split second before closing the overlay
|
|
101
|
-
this.filterOverlay().hide();
|
|
102
|
-
}
|
|
103
|
-
onFilterRemove(event) {
|
|
104
|
-
this.updatePrimeTableFilter({
|
|
105
|
-
...this.filters()[event.filter.metadata.descriptor.property],
|
|
106
|
-
matchMode: undefined,
|
|
107
|
-
displayMatchMode: undefined,
|
|
108
|
-
value: undefined,
|
|
109
|
-
displayValue: undefined
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
onFilterEdit(event) {
|
|
113
|
-
this.onFilterAddOrEdit(event.filter, event.event);
|
|
114
|
-
}
|
|
115
|
-
onFilterAdd(event) {
|
|
116
|
-
this.onFilterAddOrEdit(undefined, event);
|
|
117
|
-
}
|
|
118
|
-
onSearchChange(value) {
|
|
119
|
-
const searchWordLimitMax = this.searchWordLimitMaxCmp();
|
|
120
|
-
if (searchWordLimitMax !== null) {
|
|
121
|
-
const wordCount = value.split(/\s+/).filter(word => word.length > 0).length;
|
|
122
|
-
this.searchWordLimitMaxError.set(wordCount > searchWordLimitMax);
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
this.searchWordLimitMaxError.set(false);
|
|
126
|
-
}
|
|
127
|
-
if (!this.searchWordLimitMaxError()) {
|
|
128
|
-
this.searchValueSubject.next(value);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
onSearchCaseSensitiveChange(value) {
|
|
132
|
-
this.searchCaseSensitiveSubject.next(value);
|
|
133
|
-
}
|
|
134
|
-
onOverlayHide() {
|
|
135
|
-
// resetting the form is done here for a smoother animation
|
|
136
|
-
if (this.filterFormComponent !== undefined) {
|
|
137
|
-
this.filterFormComponent()?.resetForm();
|
|
138
|
-
}
|
|
139
|
-
if (this.clickedOnFilterEvent) {
|
|
140
|
-
// show the overlay again if the user clicked another filter
|
|
141
|
-
setTimeout(() => {
|
|
142
|
-
this.filterEdit.set(this.clickedOnFilterEvent?.filter);
|
|
143
|
-
this.filterOverlay().show(this.clickedOnFilterEvent?.event);
|
|
144
|
-
this.clickedOnFilterEvent = undefined;
|
|
145
|
-
}, 0);
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
// clean state
|
|
150
|
-
this.filterEdit.set(undefined);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
onFilterAddOrEdit(filter, event) {
|
|
154
|
-
// If user clicks on the same filter or add that is already open, close the overlay
|
|
155
|
-
if (this.filterOverlay().overlayVisible && this.filterEdit()?.metadata.descriptor.property === filter?.metadata.descriptor.property) {
|
|
156
|
-
this.filterOverlay().hide();
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
if (this.filterOverlay().overlayVisible) {
|
|
160
|
-
// In case the user clicks another filter, 're-showing' the overlay in
|
|
161
|
-
// the new position is done in the onOverlayHide callback
|
|
162
|
-
this.clickedOnFilterEvent = { event, filter };
|
|
163
|
-
this.filterOverlay().hide();
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
this.filterEdit.set(filter);
|
|
167
|
-
this.filterOverlay().show(event);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
getInitialFilters(filtersInit, metadata) {
|
|
171
|
-
const filtersResult = {};
|
|
172
|
-
if (filtersInit) {
|
|
173
|
-
for (const property in filtersInit) {
|
|
174
|
-
const filterInit = filtersInit[property];
|
|
175
|
-
const filterMetadata = metadata.find(m => m.descriptor.property === property);
|
|
176
|
-
if (!filterMetadata) {
|
|
177
|
-
continue;
|
|
178
|
-
}
|
|
179
|
-
filtersResult[property] = {
|
|
180
|
-
...filterSetMetadataOnChange(filterInit, filterInit.matchMode, filterInit.value, filterMetadata.descriptor.filterType, filterMetadata.dateConfig),
|
|
181
|
-
metadata: filterMetadata
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
return filtersResult;
|
|
186
|
-
}
|
|
187
|
-
updatePrimeTableFilter(filter) {
|
|
188
|
-
this.primeTable.filters[filter.metadata.descriptor.property] = { ...filter };
|
|
189
|
-
this.primeTable._filter();
|
|
190
|
-
}
|
|
191
|
-
updatePrimeTableGlobalFilter(searchQuery, caseSensitive = false) {
|
|
192
|
-
// match mode needs to be set for inline search
|
|
193
|
-
this.primeTable.filters['global'] = { ...{ value: searchQuery, matchMode: 'contains', caseSensitive: caseSensitive } };
|
|
194
|
-
this.primeTable._filter();
|
|
195
|
-
}
|
|
196
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TableFilterOverlayWithTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
197
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: TableFilterOverlayWithTagComponent, isStandalone: true, selector: "mng-table-filter-overlay-with-tag", inputs: { metadata: { classPropertyName: "metadata", publicName: "metadata", isSignal: true, isRequired: true, transformFunction: null }, genericFilterDescriptor: { classPropertyName: "genericFilterDescriptor", publicName: "genericFilterDescriptor", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, enableSearch: { classPropertyName: "enableSearch", publicName: "enableSearch", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, searchLimitWordMax: { classPropertyName: "searchLimitWordMax", publicName: "searchLimitWordMax", isSignal: true, isRequired: false, transformFunction: null }, enableCaseSensitive: { classPropertyName: "enableCaseSensitive", publicName: "enableCaseSensitive", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "templates", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: "filterOverlay", first: true, predicate: OverlayPanel, descendants: true, isSignal: true }, { propertyName: "filterFormComponent", first: true, predicate: TableFilterFormComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex align-items-center flex-grow-1\">\n @if (titleTemplate()) {\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n }\n @if (showFilterButton()) {\n <p-button\n icon=\"pi pi-filter\"\n rounded=\"true\"\n [severity]=\"activeFilters().length > 0 ? 'primary' : 'secondary'\"\n size=\"small\"\n (click)=\"onFilterAdd($event)\"\n [styleClass]=\"'my-1 mr-2' + (titleTemplate() ? ' ml-3' : '')\">\n </p-button>\n }\n @if (enableSearch()) {\n <div class=\"col-4\" [ngClass]=\"{'ml-3': !showFilterButton() && titleTemplate()}\">\n <span class=\"p-input-icon-left w-full\">\n <i class=\"pi pi-search\"></i>\n <input\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"onSearchChange($event)\"\n name=\"globalSearch\"\n type=\"text\"\n pInputText\n class=\"search-input w-full\"\n [ngClass]=\"{'ng-invalid': searchWordLimitMaxError()}\"\n [attr.placeholder]=\"'mngFilter.search.input' | translate\"\n [placeholder]=\"'mngFilter.search.input' | translate\" />\n @if (enableCaseSensitive()) {\n <span class=\"toggle-button-input\">\n <p-toggleButton\n styleClass=\"ml-1 p-1 p-button-sm\"\n [ngModel]=\"searchCaseSensitive()\"\n (ngModelChange)=\"onSearchCaseSensitiveChange($event)\"\n onLabel=\"Aa\"\n offLabel=\"Aa\" />\n </span>\n }\n </span>\n @if (searchWordLimitMaxError()) {\n <small class=\"p-error block\">\n {{ 'mngFilter.search.maxWordsExceededMessage' | translate }}\n </small>\n }\n </div>\n }\n</div>\n@if (activeFilters().length > 0) {\n <div class=\"flex align-items-center flex-wrap mt-2\">\n @for (filter of activeFilters(); track filter.metadata.descriptor.property) {\n <mng-table-filter-active-tag [model]=\"model()\" [filter]=\"filter\" (edit)=\"onFilterEdit($event)\" (remove)=\"onFilterRemove($event)\" />\n }\n </div>\n}\n<p-overlayPanel #op [showCloseIcon]=\"true\" (onHide)=\"onOverlayHide()\" appendTo=\"body\">\n <mng-table-filter-form\n [model]=\"model()\"\n [metadata]=\"metadata()\"\n [genericDescriptor]=\"genericFilterDescriptor()\"\n [filter]=\"filterEdit()\"\n [disabledProperties]=\"activeFilterProperties()\"\n [propertySearch]=\"genericFilterDescriptor()?.propertySearch\"\n [overlay]=\"op\"\n [enableCaseSensitive]=\"enableCaseSensitive()\"\n (apply)=\"onFilterFormApply($event)\" />\n</p-overlayPanel>\n", styles: [".toggle-button-input{position:absolute;right:.35rem;top:50%;transform:translateY(-50%)}\n"], dependencies: [{ kind: "ngmodule", type: OverlayPanelModule }, { kind: "component", type: i1.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: TableFilterFormComponent, selector: "mng-table-filter-form", inputs: ["title", "metadata", "genericDescriptor", "model", "filter", "overlay", "disabledProperties", "enableCaseSensitive", "propertySearch"], outputs: ["apply"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: TableFilterActiveTagComponent, selector: "mng-table-filter-active-tag", inputs: ["model", "filter"], outputs: ["edit", "remove"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ToggleButtonModule }, { kind: "component", type: i5.ToggleButton, selector: "p-toggleButton", inputs: ["onLabel", "offLabel", "onIcon", "offIcon", "ariaLabel", "ariaLabelledBy", "disabled", "style", "styleClass", "inputId", "tabindex", "iconPos", "autofocus"], outputs: ["onChange"] }, { kind: "ngmodule", type: InputGroupModule }, { kind: "ngmodule", type: InputGroupAddonModule }, { kind: "ngmodule", type: CheckboxModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
198
|
-
}
|
|
199
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TableFilterOverlayWithTagComponent, decorators: [{
|
|
200
|
-
type: Component,
|
|
201
|
-
args: [{ standalone: true, selector: 'mng-table-filter-overlay-with-tag', imports: [
|
|
202
|
-
OverlayPanelModule,
|
|
203
|
-
TranslateModule,
|
|
204
|
-
TagModule,
|
|
205
|
-
TableFilterFormComponent,
|
|
206
|
-
Button,
|
|
207
|
-
TableFilterActiveTagComponent,
|
|
208
|
-
NgTemplateOutlet,
|
|
209
|
-
InputTextModule,
|
|
210
|
-
PaginatorModule,
|
|
211
|
-
NgClass,
|
|
212
|
-
ToggleButtonModule,
|
|
213
|
-
InputGroupModule,
|
|
214
|
-
InputGroupAddonModule,
|
|
215
|
-
CheckboxModule,
|
|
216
|
-
NgStyle
|
|
217
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex align-items-center flex-grow-1\">\n @if (titleTemplate()) {\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n }\n @if (showFilterButton()) {\n <p-button\n icon=\"pi pi-filter\"\n rounded=\"true\"\n [severity]=\"activeFilters().length > 0 ? 'primary' : 'secondary'\"\n size=\"small\"\n (click)=\"onFilterAdd($event)\"\n [styleClass]=\"'my-1 mr-2' + (titleTemplate() ? ' ml-3' : '')\">\n </p-button>\n }\n @if (enableSearch()) {\n <div class=\"col-4\" [ngClass]=\"{'ml-3': !showFilterButton() && titleTemplate()}\">\n <span class=\"p-input-icon-left w-full\">\n <i class=\"pi pi-search\"></i>\n <input\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"onSearchChange($event)\"\n name=\"globalSearch\"\n type=\"text\"\n pInputText\n class=\"search-input w-full\"\n [ngClass]=\"{'ng-invalid': searchWordLimitMaxError()}\"\n [attr.placeholder]=\"'mngFilter.search.input' | translate\"\n [placeholder]=\"'mngFilter.search.input' | translate\" />\n @if (enableCaseSensitive()) {\n <span class=\"toggle-button-input\">\n <p-toggleButton\n styleClass=\"ml-1 p-1 p-button-sm\"\n [ngModel]=\"searchCaseSensitive()\"\n (ngModelChange)=\"onSearchCaseSensitiveChange($event)\"\n onLabel=\"Aa\"\n offLabel=\"Aa\" />\n </span>\n }\n </span>\n @if (searchWordLimitMaxError()) {\n <small class=\"p-error block\">\n {{ 'mngFilter.search.maxWordsExceededMessage' | translate }}\n </small>\n }\n </div>\n }\n</div>\n@if (activeFilters().length > 0) {\n <div class=\"flex align-items-center flex-wrap mt-2\">\n @for (filter of activeFilters(); track filter.metadata.descriptor.property) {\n <mng-table-filter-active-tag [model]=\"model()\" [filter]=\"filter\" (edit)=\"onFilterEdit($event)\" (remove)=\"onFilterRemove($event)\" />\n }\n </div>\n}\n<p-overlayPanel #op [showCloseIcon]=\"true\" (onHide)=\"onOverlayHide()\" appendTo=\"body\">\n <mng-table-filter-form\n [model]=\"model()\"\n [metadata]=\"metadata()\"\n [genericDescriptor]=\"genericFilterDescriptor()\"\n [filter]=\"filterEdit()\"\n [disabledProperties]=\"activeFilterProperties()\"\n [propertySearch]=\"genericFilterDescriptor()?.propertySearch\"\n [overlay]=\"op\"\n [enableCaseSensitive]=\"enableCaseSensitive()\"\n (apply)=\"onFilterFormApply($event)\" />\n</p-overlayPanel>\n", styles: [".toggle-button-input{position:absolute;right:.35rem;top:50%;transform:translateY(-50%)}\n"] }]
|
|
218
|
-
}], ctorParameters: () => [] });
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLW92ZXJsYXktd2l0aC10YWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci1vdmVybGF5LXdpdGgtdGFnL2ZpbHRlci1vdmVybGF5LXdpdGgtdGFnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxlL3NyYy9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItb3ZlcmxheS13aXRoLXRhZy9maWx0ZXItb3ZlcmxheS13aXRoLXRhZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ25FLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQXVCLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JLLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRTlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdEUsT0FBTyxFQUFDLGVB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Q0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUMsRUFBQyxDQUFDO1FBQ25ILElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDOUIsQ0FBQzsrR0EvTVEsa0NBQWtDO21HQUFsQyxrQ0FBa0MsaW5DQWtCUixpQkFBaUIsNEZBSFQsWUFBWSxzR0FDZix3QkFBd0IsZ0VDcEVwRSx5N0ZBa0VBLGtKRGhDUSxrQkFBa0Isa1dBQ2xCLGVBQWUsMkZBQ2YsU0FBUywrQkFDVCx3QkFBd0IsdU9BQ3hCLE1BQU0sc1ZBQ04sNkJBQTZCLGtJQUM3QixnQkFBZ0IsbUpBQ2hCLGVBQWUsd0hBQ2YsZUFBZSwrbUJBQ2YsT0FBTyxtRkFDUCxrQkFBa0Isc1NBQ2xCLGdCQUFnQiw4QkFDaEIscUJBQXFCLDhCQUNyQixjQUFjOzs0RkFLVCxrQ0FBa0M7a0JBeEI5QyxTQUFTO2lDQUNNLElBQUksWUFDTixtQ0FBbUMsV0FHcEM7d0JBQ0wsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLFNBQVM7d0JBQ1Qsd0JBQXdCO3dCQUN4QixNQUFNO3dCQUNOLDZCQUE2Qjt3QkFDN0IsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsT0FBTzt3QkFDUCxrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixjQUFjO3dCQUNkLE9BQU87cUJBQ1YsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge05nQ2xhc3MsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFNpZ25hbCwgVGVtcGxhdGVSZWYsIGJvb2xlYW5BdHRyaWJ1dGUsIGNvbXB1dGVkLCBjb250ZW50Q2hpbGRyZW4sIGluamVjdCwgaW5wdXQsIHNpZ25hbCwgdmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QnV0dG9ufSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge0NoZWNrYm94TW9kdWxlfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcbmltcG9ydCB7SW5wdXRHcm91cE1vZHVsZX0gZnJvbSAncHJpbWVuZy9pbnB1dGdyb3VwJztcbmltcG9ydCB7SW5wdXRHcm91cEFkZG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XG5pbXBvcnQge0lucHV0VGV4dE1vZHVsZX0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHtPdmVybGF5UGFuZWwsIE92ZXJsYXlQYW5lbE1vZHVsZX0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xuaW1wb3J0IHtQYWdpbmF0b3JNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcbmltcG9ydCB7VGFibGV9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHtUYWdNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdGFnJztcbmltcG9ydCB7VG9nZ2xlQnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL3RvZ2dsZWJ1dHRvbic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc2tpcH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Q29tbW9uc0ZpbHRlck1ldGFkYXRhLCBGaWx0ZXJNYXRjaE1vZGUsIFRlbXBsYXRlRGlyZWN0aXZlLCBmaW5kVGVtcGxhdGVCeU5hbWV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckdlbmVyaWNEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5pbXBvcnQge01vZGVsRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5cbmltcG9ydCB7ZmlsdGVyU2V0TWV0YWRhdGFPbkNoYW5nZSwgZmlsdGVyU2V0TWV0YWRhdGFPbkRpc3BsYXlDaGFuZ2V9IGZyb20gJy4uLy4uLy4uL2hlbHBlcnMvZmlsdGVycyc7XG5pbXBvcnQge0ZpbHRlckFjdGl2ZVRhZ0V2ZW50LCBGaWx0ZXJGb3JtRW1pdEV2ZW50LCBGaWx0ZXJNZXRhZGF0YSwgRmlsdGVyU3RhdGV9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHtUYWJsZURhdGFTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90YWJsZS1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHtDT01NT05TX1RBQkxFX0ZFQVRVUkVfQ09ORklHX0lUfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90YWJsZS1mZWF0dXJlLWNvbmZpZy50b2tlbic7XG5pbXBvcnQge1RhYmxlRmlsdGVyQWN0aXZlVGFnQ29tcG9uZW50fSBmcm9tICcuLi9maWx0ZXItYWN0aXZlLXRhZy9maWx0ZXItYWN0aXZlLXRhZy5jb21wb25lbnQnO1xuaW1wb3J0IHtUYWJsZUZpbHRlckZvcm1Db21wb25lbnR9IGZyb20gJy4uL2ZpbHRlci1mb3JtL2ZpbHRlci1mb3JtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGUtZmlsdGVyLW92ZXJsYXktd2l0aC10YWcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItb3ZlcmxheS13aXRoLXRhZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLW92ZXJsYXktd2l0aC10YWcuY29tcG9uZW50LnNjc3MnXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE92ZXJsYXlQYW5lbE1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBUYWdNb2R1bGUsXG4gICAgICAgIFRhYmxlRmlsdGVyRm9ybUNvbXBvbmVudCxcbiAgICAgICAgQnV0dG9uLFxuICAgICAgICBUYWJsZUZpbHRlckFjdGl2ZVRhZ0NvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgSW5wdXRUZXh0TW9kdWxlLFxuICAgICAgICBQYWdpbmF0b3JNb2R1bGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIFRvZ2dsZUJ1dHRvbk1vZHVsZSxcbiAgICAgICAgSW5wdXRHcm91cE1vZHVsZSxcbiAgICAgICAgSW5wdXRHcm91cEFkZG9uTW9kdWxlLFxuICAgICAgICBDaGVja2JveE1vZHVsZSxcbiAgICAgICAgTmdTdHlsZVxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVGaWx0ZXJPdmVybGF5V2l0aFRhZ0NvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU0VBUkNIX1dPUkRfTElNSVRfTUFYID0gNDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJpbWVUYWJsZSA9IGluamVjdChUYWJsZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0YWJsZURhdGEgPSBpbmplY3QoVGFibGVEYXRhU2VydmljZTxhbnk+KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlQ29uZmlnID0gaW5qZWN0KENPTU1PTlNfVEFCTEVfRkVBVFVSRV9DT05GSUdfSVQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gICAgcHVibGljIG1ldGFkYXRhID0gaW5wdXQucmVxdWlyZWQ8RmlsdGVyTWV0YWRhdGFbXT4oKTtcbiAgICBwdWJsaWMgZ2VuZXJpY0ZpbHRlckRlc2NyaXB0b3IgPSBpbnB1dDxGaWx0ZXJHZW5lcmljRGVzY3JpcHRvcj4oKTtcbiAgICBwdWJsaWMgbW9kZWwgPSBpbnB1dC5yZXF1aXJlZDxNb2RlbERlc2NyaXB0b3I8YW55Pj4oKTtcbiAgICBwdWJsaWMgZW5hYmxlU2VhcmNoID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgc2VhcmNoID0gaW5wdXQ8e3ZhbHVlOiBzdHJpbmc7IGNhc2VTZW5zaXRpdmU6IGJvb2xlYW59IHwgdW5kZWZpbmVkPigpO1xuICAgIHB1YmxpYyBzZWFyY2hMaW1pdFdvcmRNYXggPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBlbmFibGVDYXNlU2Vuc2l0aXZlID0gaW5wdXQodHJ1ZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuXG4gICAgcHJpdmF0ZSBmaWx0ZXJPdmVybGF5ID0gdmlld0NoaWxkLnJlcXVpcmVkKE92ZXJsYXlQYW5lbCk7XG4gICAgcHJpdmF0ZSBmaWx0ZXJGb3JtQ29tcG9uZW50ID0gdmlld0NoaWxkKFRhYmxlRmlsdGVyRm9ybUNvbXBvbmVudCk7XG5cbiAgICBwdWJsaWMgdGVtcGxhdGVzID0gY29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKTtcbiAgICBwdWJsaWMgdGl0bGVUZW1wbGF0ZTogU2lnbmFsPFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPiA9IGNvbXB1dGVkKCgpID0+IGZpbmRUZW1wbGF0ZUJ5TmFtZShbLi4udGhpcy50ZW1wbGF0ZXMoKV0sICd0aXRsZScpKTtcblxuICAgIHB1YmxpYyBmaWx0ZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRJbml0aWFsRmlsdGVycyh0aGlzLnRhYmxlRGF0YS5maWx0ZXJNZXRhKCksIHRoaXMubWV0YWRhdGEoKSk7XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgc2hvd0ZpbHRlckJ1dHRvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWV0YWRhdGEoKS5sZW5ndGggPiAwKTtcblxuICAgIHB1YmxpYyBhY3RpdmVGaWx0ZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJFbnRyeSA9IHRoaXMuZmlsdGVycygpO1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRhZGF0YSgpXG4gICAgICAgICAgICAuZmlsdGVyKGQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlckVudHJ5W2QuZGVzY3JpcHRvci5wcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyICYmXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlci5tYXRjaE1vZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZGlzcGxheU1hdGNoTW9kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIChmaWx0ZXIubWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVyLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyLmRpc3BsYXlWYWx1ZSAhPT0gdW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoZCA9PiBmaWx0ZXJFbnRyeVtkLmRlc2NyaXB0b3IucHJvcGVydHldISk7XG4gICAgfSk7XG4gICAgcHVibGljIGFjdGl2ZUZpbHRlclByb3BlcnRpZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFjdGl2ZUZpbHRlcnMoKS5tYXAoZiA9PiBmLm1ldGFkYXRhLmRlc2NyaXB0b3IucHJvcGVydHkpKTtcbiAgICBwdWJsaWMgZmlsdGVyRWRpdCA9IHNpZ25hbDxGaWx0ZXJTdGF0ZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIC8vIGdsb2JhbCBzZWFyY2ggbW9kZWxcbiAgICBwdWJsaWMgc2VhcmNoVmFsdWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlYXJjaCgpPy52YWx1ZSk7XG4gICAgcHVibGljIHNlYXJjaENhc2VTZW5zaXRpdmUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlYXJjaCgpPy5jYXNlU2Vuc2l0aXZlKTtcbiAgICBwdWJsaWMgc2VhcmNoV29yZExpbWl0TWF4RXJyb3IgPSBzaWduYWwoZmFsc2UpO1xuICAgIHByaXZhdGUgc2VhcmNoV29yZExpbWl0TWF4Q21wID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dExpbWl0ID0gdGhpcy5zZWFyY2hMaW1pdFdvcmRNYXgoKTtcbiAgICAgICAgaWYgKGlucHV0TGltaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0TGltaXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb25maWc/LnNlYXJjaExpbWl0TWF4V29yZHMgIT09IHVuZGVmaW5lZCA/IHRoaXMudGFibGVDb25maWc/LnNlYXJjaExpbWl0TWF4V29yZHMgOiBUYWJsZUZpbHRlck92ZXJsYXlXaXRoVGFnQ29tcG9uZW50LlNFQVJDSF9XT1JEX0xJTUlUX01BWDtcbiAgICB9KTtcbiAgICBwcml2YXRlIHNlYXJjaFZhbHVlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHByaXZhdGUgc2VhcmNoQ2FzZVNlbnNpdGl2ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICAvLyBVSSB1dGlsaXRpZXNcbiAgICBwcml2YXRlIGNsaWNrZWRPbkZpbHRlckV2ZW50OiB7ZXZlbnQ/OiBFdmVudDsgZmlsdGVyPzogRmlsdGVyU3RhdGV9IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuc2VhcmNoVmFsdWVTdWJqZWN0LnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLCB0aGlzLnNlYXJjaENhc2VTZW5zaXRpdmVTdWJqZWN0XSlcbiAgICAgICAgICAgIC8vIE5PVEU6IHNraXAgaXMgdXNlZCB0byBpZ25vcmUgcHJvcGFnYXRpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHN1YmplY3RzXG4gICAgICAgICAgICAucGlwZShza2lwKDEpLCB0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFt2YWx1ZSwgY2FzZVNlbnNpdGl2ZV0pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVByaW1lVGFibGVHbG9iYWxGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID09IG51bGwgPyAodGhpcy5zZWFyY2goKT8udmFsdWUgPz8gJycpIDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgPT0gbnVsbCA/ICh0aGlzLnNlYXJjaCgpPy5jYXNlU2Vuc2l0aXZlID8/IHVuZGVmaW5lZCkgOiBjYXNlU2Vuc2l0aXZlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRmlsdGVyRm9ybUFwcGx5KGV2ZW50OiBGaWx0ZXJGb3JtRW1pdEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlck1ldGFkYXRhID0gdGhpcy5tZXRhZGF0YSgpLmZpbmQoZCA9PiBkLmRlc2NyaXB0b3IucHJvcGVydHkgPT09IGV2ZW50LnByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFmaWx0ZXJNZXRhZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YTogRmlsdGVyU3RhdGUgPSB7XG4gICAgICAgICAgICAuLi5maWx0ZXJTZXRNZXRhZGF0YU9uRGlzcGxheUNoYW5nZShcbiAgICAgICAgICAgICAgICB7Y2FzZVNlbnNpdGl2ZTogZXZlbnQuY2FzZVNlbnNpdGl2ZX0sXG4gICAgICAgICAgICAgICAgZXZlbnQubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgIGV2ZW50LnZhbHVlLFxuICAgICAgICAgICAgICAgIGZpbHRlck1ldGFkYXRhLmRlc2NyaXB0b3IuZmlsdGVyVHlwZSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJNZXRhZGF0YS5kYXRlQ29uZmlnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbWV0YWRhdGE6IGZpbHRlck1ldGFkYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy51cGRhdGVQcmltZVRhYmxlRmlsdGVyKGZpbHRlckRhdGEpO1xuXG4gICAgICAgIC8vIHRoaXMga2VlcHMgdGhlIFVJIHVwZGF0ZWQgcHJvcGVybHkgYmVmb3JlIGNsb3NpbmcgdGhlIG92ZXJsYXlcbiAgICAgICAgdGhpcy5maWx0ZXJFZGl0LnNldChmaWx0ZXJEYXRhKTtcblxuICAgICAgICAvLyBSZXNldHRpbmcgdGhlIGZvcm0gaXMgZG9uZSBpbiB0aGUgb25PdmVybGF5SGlkZSBjYWxsYmFjayBiZWNhdXNlIHJlc2V0dGluZyB0aGVcbiAgICAgICAgLy8gdmFsdWVzIGhlcmUgcmVuZGVycyBlbXB0eSBpbnB1dHMgZm9yIGEgc3BsaXQgc2Vjb25kIGJlZm9yZSBjbG9zaW5nIHRoZSBvdmVybGF5XG4gICAgICAgIHRoaXMuZmlsdGVyT3ZlcmxheSgpLmhpZGUoKTtcbiAgICB9XG5cbiAgICBvbkZpbHRlclJlbW92ZShldmVudDogRmlsdGVyQWN0aXZlVGFnRXZlbnQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQcmltZVRhYmxlRmlsdGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuZmlsdGVycygpW2V2ZW50LmZpbHRlci5tZXRhZGF0YS5kZXNjcmlwdG9yLnByb3BlcnR5XSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGlzcGxheU1hdGNoTW9kZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRmlsdGVyRWRpdChldmVudDogRmlsdGVyQWN0aXZlVGFnRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkZpbHRlckFkZE9yRWRpdChldmVudC5maWx0ZXIsIGV2ZW50LmV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkZpbHRlckFkZChldmVudDogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkZpbHRlckFkZE9yRWRpdCh1bmRlZmluZWQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblNlYXJjaENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFdvcmRMaW1pdE1heCA9IHRoaXMuc2VhcmNoV29yZExpbWl0TWF4Q21wKCk7XG4gICAgICAgIGlmIChzZWFyY2hXb3JkTGltaXRNYXggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmRDb3VudCA9IHZhbHVlLnNwbGl0KC9cXHMrLykuZmlsdGVyKHdvcmQgPT4gd29yZC5sZW5ndGggPiAwKS5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFdvcmRMaW1pdE1heEVycm9yLnNldCh3b3JkQ291bnQgPiBzZWFyY2hXb3JkTGltaXRNYXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hXb3JkTGltaXRNYXhFcnJvci5zZXQoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFdvcmRMaW1pdE1heEVycm9yKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWVTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TZWFyY2hDYXNlU2Vuc2l0aXZlQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoQ2FzZVNlbnNpdGl2ZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgb25PdmVybGF5SGlkZSgpIHtcbiAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBmb3JtIGlzIGRvbmUgaGVyZSBmb3IgYSBzbW9vdGhlciBhbmltYXRpb25cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyRm9ybUNvbXBvbmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Db21wb25lbnQoKT8ucmVzZXRGb3JtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jbGlja2VkT25GaWx0ZXJFdmVudCkge1xuICAgICAgICAgICAgLy8gc2hvdyB0aGUgb3ZlcmxheSBhZ2FpbiBpZiB0aGUgdXNlciBjbGlja2VkIGFub3RoZXIgZmlsdGVyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckVkaXQuc2V0KHRoaXMuY2xpY2tlZE9uRmlsdGVyRXZlbnQ/LmZpbHRlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJPdmVybGF5KCkuc2hvdyh0aGlzLmNsaWNrZWRPbkZpbHRlckV2ZW50Py5ldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja2VkT25GaWx0ZXJFdmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY2xlYW4gc3RhdGVcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRWRpdC5zZXQodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25GaWx0ZXJBZGRPckVkaXQoZmlsdGVyPzogRmlsdGVyU3RhdGUsIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgLy8gSWYgdXNlciBjbGlja3Mgb24gdGhlIHNhbWUgZmlsdGVyIG9yIGFkZCB0aGF0IGlzIGFscmVhZHkgb3BlbiwgY2xvc2UgdGhlIG92ZXJsYXlcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyT3ZlcmxheSgpLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuZmlsdGVyRWRpdCgpPy5tZXRhZGF0YS5kZXNjcmlwdG9yLnByb3BlcnR5ID09PSBmaWx0ZXI/Lm1ldGFkYXRhLmRlc2NyaXB0b3IucHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyT3ZlcmxheSgpLmhpZGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlck92ZXJsYXkoKS5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgLy8gSW4gY2FzZSB0aGUgdXNlciBjbGlja3MgYW5vdGhlciBmaWx0ZXIsICdyZS1zaG93aW5nJyB0aGUgb3ZlcmxheSBpblxuICAgICAgICAgICAgLy8gdGhlIG5ldyBwb3NpdGlvbiBpcyBkb25lIGluIHRoZSBvbk92ZXJsYXlIaWRlIGNhbGxiYWNrXG4gICAgICAgICAgICB0aGlzLmNsaWNrZWRPbkZpbHRlckV2ZW50ID0ge2V2ZW50LCBmaWx0ZXJ9O1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJPdmVybGF5KCkuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJFZGl0LnNldChmaWx0ZXIpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJPdmVybGF5KCkuc2hvdyhldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluaXRpYWxGaWx0ZXJzKGZpbHRlcnNJbml0OiBSZWNvcmQ8c3RyaW5nLCBDb21tb25zRmlsdGVyTWV0YWRhdGE+IHwgdW5kZWZpbmVkLCBtZXRhZGF0YTogRmlsdGVyTWV0YWRhdGFbXSkge1xuICAgICAgICBjb25zdCBmaWx0ZXJzUmVzdWx0OiB7W3A6IHN0cmluZ106IEZpbHRlclN0YXRlfSA9IHt9O1xuXG4gICAgICAgIGlmIChmaWx0ZXJzSW5pdCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBmaWx0ZXJzSW5pdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckluaXQgPSBmaWx0ZXJzSW5pdFtwcm9wZXJ0eV07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJNZXRhZGF0YSA9IG1ldGFkYXRhLmZpbmQobSA9PiBtLmRlc2NyaXB0b3IucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlck1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZpbHRlcnNSZXN1bHRbcHJvcGVydHldID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5maWx0ZXJTZXRNZXRhZGF0YU9uQ2hhbmdlKGZpbHRlckluaXQsIGZpbHRlckluaXQubWF0Y2hNb2RlLCBmaWx0ZXJJbml0LnZhbHVlLCBmaWx0ZXJNZXRhZGF0YS5kZXNjcmlwdG9yLmZpbHRlclR5cGUsIGZpbHRlck1ldGFkYXRhLmRhdGVDb25maWcpLFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogZmlsdGVyTWV0YWRhdGFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcnNSZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcmltZVRhYmxlRmlsdGVyKGZpbHRlcjogRmlsdGVyU3RhdGUpIHtcbiAgICAgICAgdGhpcy5wcmltZVRhYmxlLmZpbHRlcnNbZmlsdGVyLm1ldGFkYXRhLmRlc2NyaXB0b3IucHJvcGVydHldID0gey4uLmZpbHRlcn07XG4gICAgICAgIHRoaXMucHJpbWVUYWJsZS5fZmlsdGVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcmltZVRhYmxlR2xvYmFsRmlsdGVyKHNlYXJjaFF1ZXJ5OiBzdHJpbmcgfCBudWxsLCBjYXNlU2Vuc2l0aXZlID0gZmFsc2UpIHtcbiAgICAgICAgLy8gbWF0Y2ggbW9kZSBuZWVkcyB0byBiZSBzZXQgZm9yIGlubGluZSBzZWFyY2hcbiAgICAgICAgdGhpcy5wcmltZVRhYmxlLmZpbHRlcnNbJ2dsb2JhbCddID0gey4uLnt2YWx1ZTogc2VhcmNoUXVlcnksIG1hdGNoTW9kZTogJ2NvbnRhaW5zJywgY2FzZVNlbnNpdGl2ZTogY2FzZVNlbnNpdGl2ZX19O1xuICAgICAgICB0aGlzLnByaW1lVGFibGUuX2ZpbHRlcigpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWdyb3ctMVwiPlxuICAgIEBpZiAodGl0bGVUZW1wbGF0ZSgpKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aXRsZVRlbXBsYXRlKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGlmIChzaG93RmlsdGVyQnV0dG9uKCkpIHtcbiAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICBpY29uPVwicGkgcGktZmlsdGVyXCJcbiAgICAgICAgICAgIHJvdW5kZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzZXZlcml0eV09XCJhY3RpdmVGaWx0ZXJzKCkubGVuZ3RoID4gMCA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25GaWx0ZXJBZGQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbc3R5bGVDbGFzc109XCInbXktMSBtci0yJyArICh0aXRsZVRlbXBsYXRlKCkgPyAnIG1sLTMnIDogJycpXCI+XG4gICAgICAgIDwvcC1idXR0b24+XG4gICAgfVxuICAgIEBpZiAoZW5hYmxlU2VhcmNoKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCIgW25nQ2xhc3NdPVwieydtbC0zJzogIXNob3dGaWx0ZXJCdXR0b24oKSAmJiB0aXRsZVRlbXBsYXRlKCl9XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXQtaWNvbi1sZWZ0IHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2hWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJnbG9iYWxTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXQgdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyduZy1pbnZhbGlkJzogc2VhcmNoV29yZExpbWl0TWF4RXJyb3IoKX1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCInbW5nRmlsdGVyLnNlYXJjaC5pbnB1dCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ21uZ0ZpbHRlci5zZWFyY2guaW5wdXQnIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICBAaWYgKGVuYWJsZUNhc2VTZW5zaXRpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS1idXR0b24taW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRvZ2dsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJtbC0xIHAtMSBwLWJ1dHRvbi1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoQ2FzZVNlbnNpdGl2ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENhc2VTZW5zaXRpdmVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25MYWJlbD1cIkFhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZMYWJlbD1cIkFhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoc2VhcmNoV29yZExpbWl0TWF4RXJyb3IoKSkge1xuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInAtZXJyb3IgYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ21uZ0ZpbHRlci5zZWFyY2gubWF4V29yZHNFeGNlZWRlZE1lc3NhZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG5AaWYgKGFjdGl2ZUZpbHRlcnMoKS5sZW5ndGggPiAwKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBtdC0yXCI+XG4gICAgICAgIEBmb3IgKGZpbHRlciBvZiBhY3RpdmVGaWx0ZXJzKCk7IHRyYWNrIGZpbHRlci5tZXRhZGF0YS5kZXNjcmlwdG9yLnByb3BlcnR5KSB7XG4gICAgICAgICAgICA8bW5nLXRhYmxlLWZpbHRlci1hY3RpdmUtdGFnIFttb2RlbF09XCJtb2RlbCgpXCIgW2ZpbHRlcl09XCJmaWx0ZXJcIiAoZWRpdCk9XCJvbkZpbHRlckVkaXQoJGV2ZW50KVwiIChyZW1vdmUpPVwib25GaWx0ZXJSZW1vdmUoJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbn1cbjxwLW92ZXJsYXlQYW5lbCAjb3AgW3Nob3dDbG9zZUljb25dPVwidHJ1ZVwiIChvbkhpZGUpPVwib25PdmVybGF5SGlkZSgpXCIgYXBwZW5kVG89XCJib2R5XCI+XG4gICAgPG1uZy10YWJsZS1maWx0ZXItZm9ybVxuICAgICAgICBbbW9kZWxdPVwibW9kZWwoKVwiXG4gICAgICAgIFttZXRhZGF0YV09XCJtZXRhZGF0YSgpXCJcbiAgICAgICAgW2dlbmVyaWNEZXNjcmlwdG9yXT1cImdlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yKClcIlxuICAgICAgICBbZmlsdGVyXT1cImZpbHRlckVkaXQoKVwiXG4gICAgICAgIFtkaXNhYmxlZFByb3BlcnRpZXNdPVwiYWN0aXZlRmlsdGVyUHJvcGVydGllcygpXCJcbiAgICAgICAgW3Byb3BlcnR5U2VhcmNoXT1cImdlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yKCk/LnByb3BlcnR5U2VhcmNoXCJcbiAgICAgICAgW292ZXJsYXldPVwib3BcIlxuICAgICAgICBbZW5hYmxlQ2FzZVNlbnNpdGl2ZV09XCJlbmFibGVDYXNlU2Vuc2l0aXZlKClcIlxuICAgICAgICAoYXBwbHkpPVwib25GaWx0ZXJGb3JtQXBwbHkoJGV2ZW50KVwiIC8+XG48L3Atb3ZlcmxheVBhbmVsPlxuIl19
|