@elderbyte/ngx-starter 18.15.2 → 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/elderbyte-ngx-starter.mjs +1097 -1125
- package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/common/forms/elder-form-field-control-base.directive.d.ts +1 -1
- package/lib/common/forms/elder-from-field-base.d.ts +1 -1
- package/lib/common/forms/elder-from-field-customizable-base.d.ts +1 -1
- package/lib/common/forms/elder-from-field-entity-base.d.ts +1 -1
- package/lib/common/forms/elder-from-field-multi-entity-base.d.ts +1 -1
- package/lib/common/forms/form-field-base.component.d.ts +1 -1
- package/lib/common/forms/multi-model-base.component.d.ts +1 -1
- package/lib/common/forms/template-composite-control.d.ts +1 -1
- package/lib/common/forms/value-accessor-base.d.ts +1 -1
- package/lib/common/reactive-map.d.ts +1 -1
- package/lib/components/data-view/base/elder-data-view-base.d.ts +1 -1
- package/lib/components/forms/directives/base/elder-class-hostbinding-base.d.ts +1 -1
- package/lib/components/iframes/typed-event-message.d.ts +1 -1
- package/lib/components/panels/elder-panel.module.d.ts +5 -7
- package/lib/components/select/elder-select-base.d.ts +1 -1
- package/lib/components/select/multi/elder-multi-select-base.d.ts +1 -1
- package/lib/components/select/multi/elder-multi-select-form-field.d.ts +1 -1
- package/lib/components/select/single/elder-select-form-field.d.ts +1 -1
- package/package.json +6 -8
- package/src/lib/components/errors/exception-detail/elder-exception-detail.component.scss +2 -3
- package/src/lib/components/shell/header/elder-app-header/elder-app-header.component.scss +3 -0
- package/esm2022/elderbyte-ngx-starter.mjs +0 -5
- package/esm2022/lib/common/arrays.mjs +0 -29
- package/esm2022/lib/common/async/public_api.mjs +0 -2
- package/esm2022/lib/common/async/refreshing-entity.mjs +0 -88
- package/esm2022/lib/common/csv/csv-serializer.mjs +0 -55
- package/esm2022/lib/common/csv/csv-spec.mjs +0 -99
- package/esm2022/lib/common/csv/public_api.mjs +0 -3
- package/esm2022/lib/common/data/continuable-listing.mjs +0 -10
- package/esm2022/lib/common/data/data-context/data-context-active-page.mjs +0 -131
- package/esm2022/lib/common/data/data-context/data-context-auto-starter.mjs +0 -78
- package/esm2022/lib/common/data/data-context/data-context-base.mjs +0 -339
- package/esm2022/lib/common/data/data-context/data-context-builder.mjs +0 -245
- package/esm2022/lib/common/data/data-context/data-context-continuable-base.mjs +0 -67
- package/esm2022/lib/common/data/data-context/data-context-continuable-paged.mjs +0 -142
- package/esm2022/lib/common/data/data-context/data-context-continuable-token.mjs +0 -146
- package/esm2022/lib/common/data/data-context/data-context-life-cycle-binding.mjs +0 -32
- package/esm2022/lib/common/data/data-context/data-context-simple.mjs +0 -61
- package/esm2022/lib/common/data/data-context/data-context-source-event-binding.mjs +0 -63
- package/esm2022/lib/common/data/data-context/data-context-status.mjs +0 -46
- package/esm2022/lib/common/data/data-context/data-context.mjs +0 -30
- package/esm2022/lib/common/data/data-context/indexed-entities.mjs +0 -153
- package/esm2022/lib/common/data/data-context/mat-table-data-context-binding.mjs +0 -145
- package/esm2022/lib/common/data/data-context/public_api.mjs +0 -15
- package/esm2022/lib/common/data/datasource/data-source-adapter.mjs +0 -59
- package/esm2022/lib/common/data/datasource/data-source-base.mjs +0 -38
- package/esm2022/lib/common/data/datasource/data-source-change-event.mjs +0 -34
- package/esm2022/lib/common/data/datasource/data-source-processor.mjs +0 -198
- package/esm2022/lib/common/data/datasource/data-source.mjs +0 -23
- package/esm2022/lib/common/data/datasource/entity-id-util.mjs +0 -11
- package/esm2022/lib/common/data/datasource/fetcher/delegate-data-source.mjs +0 -127
- package/esm2022/lib/common/data/datasource/local/local-list-data-source.mjs +0 -153
- package/esm2022/lib/common/data/datasource/local/local-paged-data-source.mjs +0 -75
- package/esm2022/lib/common/data/datasource/patch/deep-partial-patcher.mjs +0 -58
- package/esm2022/lib/common/data/datasource/public_api.mjs +0 -10
- package/esm2022/lib/common/data/datasource/rest/public_api.mjs +0 -2
- package/esm2022/lib/common/data/datasource/rest/rest-client.mjs +0 -290
- package/esm2022/lib/common/data/entity-set-patch.mjs +0 -161
- package/esm2022/lib/common/data/field-comparator.mjs +0 -108
- package/esm2022/lib/common/data/filters/filter-commons.mjs +0 -12
- package/esm2022/lib/common/data/filters/filter-context.mjs +0 -135
- package/esm2022/lib/common/data/filters/filter-value.mjs +0 -2
- package/esm2022/lib/common/data/filters/filter.mjs +0 -104
- package/esm2022/lib/common/data/http-params-builder.mjs +0 -116
- package/esm2022/lib/common/data/page.mjs +0 -58
- package/esm2022/lib/common/data/public_api.mjs +0 -12
- package/esm2022/lib/common/data/required-filter-evaluator.mjs +0 -71
- package/esm2022/lib/common/data/sort-context.mjs +0 -73
- package/esm2022/lib/common/data/sort.mjs +0 -11
- package/esm2022/lib/common/data/token-chunk-request.mjs +0 -8
- package/esm2022/lib/common/enums/elder-enum-translation.service.mjs +0 -84
- package/esm2022/lib/common/enums/public_api.mjs +0 -2
- package/esm2022/lib/common/errors/exception-detail.mjs +0 -2
- package/esm2022/lib/common/errors/public_api.mjs +0 -3
- package/esm2022/lib/common/errors/standard-error-detail.mjs +0 -2
- package/esm2022/lib/common/exceptions/public_api.mjs +0 -2
- package/esm2022/lib/common/exceptions/unreachable-case-error.mjs +0 -8
- package/esm2022/lib/common/format/bytes-format.mjs +0 -15
- package/esm2022/lib/common/format/bytes-per-second-format.mjs +0 -41
- package/esm2022/lib/common/format/curency-format-util.mjs +0 -43
- package/esm2022/lib/common/format/duration-format-util.mjs +0 -44
- package/esm2022/lib/common/format/iso-interval-format-util.mjs +0 -111
- package/esm2022/lib/common/format/public_api.mjs +0 -6
- package/esm2022/lib/common/forms/elder-entity-value-accessor.mjs +0 -22
- package/esm2022/lib/common/forms/elder-form-field-control-base.directive.mjs +0 -188
- package/esm2022/lib/common/forms/elder-from-field-base.mjs +0 -94
- package/esm2022/lib/common/forms/elder-from-field-customizable-base.mjs +0 -52
- package/esm2022/lib/common/forms/elder-from-field-entity-base.mjs +0 -39
- package/esm2022/lib/common/forms/elder-from-field-multi-entity-base.mjs +0 -47
- package/esm2022/lib/common/forms/elder-multi-entity-value-accessor.mjs +0 -22
- package/esm2022/lib/common/forms/form-field-base.component.mjs +0 -111
- package/esm2022/lib/common/forms/multi-model-base.component.mjs +0 -32
- package/esm2022/lib/common/forms/public_api.mjs +0 -12
- package/esm2022/lib/common/forms/template-composite-control.mjs +0 -136
- package/esm2022/lib/common/forms/value-accessor-base.mjs +0 -146
- package/esm2022/lib/common/forms/view-providers.mjs +0 -30
- package/esm2022/lib/common/http/http-client-builder.service.mjs +0 -14
- package/esm2022/lib/common/http/http-client-pristine.mjs +0 -21
- package/esm2022/lib/common/http/public_api.mjs +0 -5
- package/esm2022/lib/common/http/transfer/data-transfer-base.mjs +0 -77
- package/esm2022/lib/common/http/transfer/data-transfer-factory.mjs +0 -106
- package/esm2022/lib/common/http/transfer/data-transfer-progress-aggregate.mjs +0 -60
- package/esm2022/lib/common/http/transfer/data-transfer-progress.mjs +0 -17
- package/esm2022/lib/common/http/transfer/data-transfer-state.mjs +0 -82
- package/esm2022/lib/common/http/transfer/data-transfer-status.mjs +0 -24
- package/esm2022/lib/common/http/transfer/data-transfer.mjs +0 -2
- package/esm2022/lib/common/http/transfer/http-data-transfer.mjs +0 -132
- package/esm2022/lib/common/http/transfer/public_api.mjs +0 -7
- package/esm2022/lib/common/http/upload/file-upload-client.mjs +0 -42
- package/esm2022/lib/common/i18n/entity/elder-multi-translate-loader.mjs +0 -53
- package/esm2022/lib/common/i18n/entity/impl/i18n-base.mjs +0 -6
- package/esm2022/lib/common/i18n/entity/impl/i18n-text.mjs +0 -16
- package/esm2022/lib/common/i18n/entity/impl/translated.mjs +0 -15
- package/esm2022/lib/common/i18n/entity/language-tag.mjs +0 -12
- package/esm2022/lib/common/i18n/entity/locale.mjs +0 -12
- package/esm2022/lib/common/i18n/entity/localisation-picker.mjs +0 -30
- package/esm2022/lib/common/i18n/entity/localized.mjs +0 -2
- package/esm2022/lib/common/i18n/entity/public_api.mjs +0 -10
- package/esm2022/lib/common/i18n/entity/translated-converter.mjs +0 -18
- package/esm2022/lib/common/i18n/entity/translated.mjs +0 -2
- package/esm2022/lib/common/i18n/public_api.mjs +0 -2
- package/esm2022/lib/common/json-map.mjs +0 -17
- package/esm2022/lib/common/objects.mjs +0 -43
- package/esm2022/lib/common/public_api.mjs +0 -23
- package/esm2022/lib/common/reactive-map.mjs +0 -69
- package/esm2022/lib/common/rxjs/operators/lazy-sample.mjs +0 -34
- package/esm2022/lib/common/rxjs/public_api.mjs +0 -2
- package/esm2022/lib/common/selection/public_api.mjs +0 -2
- package/esm2022/lib/common/selection/selection-model.mjs +0 -213
- package/esm2022/lib/common/sets.mjs +0 -45
- package/esm2022/lib/common/suggestion-provider.mjs +0 -12
- package/esm2022/lib/common/templates/template-slot-manager.mjs +0 -135
- package/esm2022/lib/common/theme-sizes.mjs +0 -2
- package/esm2022/lib/common/time/date-util.mjs +0 -91
- package/esm2022/lib/common/time/interval-coerce.mjs +0 -30
- package/esm2022/lib/common/time/interval.mjs +0 -442
- package/esm2022/lib/common/time/period-duration.mjs +0 -133
- package/esm2022/lib/common/time/public_api.mjs +0 -8
- package/esm2022/lib/common/time/temporal-plain-date-interval.mjs +0 -34
- package/esm2022/lib/common/time/temporal-util.mjs +0 -205
- package/esm2022/lib/common/time/time-util.mjs +0 -38
- package/esm2022/lib/common/url/elder-router.service.mjs +0 -54
- package/esm2022/lib/common/url/elder-url-fragment-params.service.mjs +0 -117
- package/esm2022/lib/common/url/public_api.mjs +0 -4
- package/esm2022/lib/common/url/url-query-params.mjs +0 -133
- package/esm2022/lib/common/utils/batcher.mjs +0 -35
- package/esm2022/lib/common/utils/collection-util.mjs +0 -111
- package/esm2022/lib/common/utils/filter-util.mjs +0 -133
- package/esm2022/lib/common/utils/focus-util.mjs +0 -23
- package/esm2022/lib/common/utils/input-utils.mjs +0 -6
- package/esm2022/lib/common/utils/next-number-util.mjs +0 -89
- package/esm2022/lib/common/utils/ng-zone-utils.mjs +0 -16
- package/esm2022/lib/common/utils/parse-util.mjs +0 -17
- package/esm2022/lib/common/utils/property-path-util.mjs +0 -28
- package/esm2022/lib/common/utils/public_api.mjs +0 -14
- package/esm2022/lib/common/utils/query-list-binding.mjs +0 -68
- package/esm2022/lib/common/utils/signal-input.mjs +0 -3
- package/esm2022/lib/common/utils/sort-util.mjs +0 -42
- package/esm2022/lib/common/utils/url-builder.mjs +0 -275
- package/esm2022/lib/common/utils/uuid-util.mjs +0 -28
- package/esm2022/lib/common/utils/value-wrapper.mjs +0 -19
- package/esm2022/lib/components/access-denied/elder-access-denied.component.mjs +0 -15
- package/esm2022/lib/components/access-denied/elder-access-denied.module.mjs +0 -20
- package/esm2022/lib/components/auditing/audited-entity/elder-audited-entity.component.mjs +0 -50
- package/esm2022/lib/components/auditing/elder-audit.module.mjs +0 -40
- package/esm2022/lib/components/auditing/i-audited-entity.mjs +0 -3
- package/esm2022/lib/components/badge/elder-badge/elder-badge.component.mjs +0 -162
- package/esm2022/lib/components/badge/elder-badge.directive.mjs +0 -124
- package/esm2022/lib/components/badge/elder-badge.module.mjs +0 -58
- package/esm2022/lib/components/button-group/elder-button-group/elder-button-group.component.mjs +0 -13
- package/esm2022/lib/components/button-group/elder-button-group.module.mjs +0 -21
- package/esm2022/lib/components/card-organizer/card-organizer/elder-card-organizer.component.mjs +0 -118
- package/esm2022/lib/components/card-organizer/card-organizer/elder-stack-card.directive.mjs +0 -18
- package/esm2022/lib/components/card-organizer/card-organizer-data.mjs +0 -93
- package/esm2022/lib/components/card-organizer/card-stack/elder-card-stack.component.mjs +0 -220
- package/esm2022/lib/components/card-organizer/card-stack.mjs +0 -176
- package/esm2022/lib/components/card-organizer/elder-card-organizer.module.mjs +0 -62
- package/esm2022/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.mjs +0 -17
- package/esm2022/lib/components/cards/elder-card/elder-card.component.mjs +0 -167
- package/esm2022/lib/components/cards/elder-card/elder-card.module.mjs +0 -71
- package/esm2022/lib/components/chips/elder-chip-label.directive.mjs +0 -171
- package/esm2022/lib/components/chips/elder-chips.module.mjs +0 -45
- package/esm2022/lib/components/connectivity/elder-connectivity.module.mjs +0 -57
- package/esm2022/lib/components/connectivity/elder-connectivity.service.mjs +0 -61
- package/esm2022/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.mjs +0 -46
- package/esm2022/lib/components/connectivity/public_api.mjs +0 -3
- package/esm2022/lib/components/containers/elder-containers.module.mjs +0 -18
- package/esm2022/lib/components/containers/elder-scroll-container/elder-scroll-container.component.mjs +0 -24
- package/esm2022/lib/components/containers/public_api.mjs +0 -2
- package/esm2022/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +0 -77
- package/esm2022/lib/components/csv/elder-csv-stream-exporter-builder.mjs +0 -38
- package/esm2022/lib/components/csv/elder-csv-stream-exporter-builder.service.mjs +0 -38
- package/esm2022/lib/components/csv/elder-csv-stream-exporter.mjs +0 -114
- package/esm2022/lib/components/csv/elder-csv.module.mjs +0 -24
- package/esm2022/lib/components/currency/elder-currency.module.mjs +0 -18
- package/esm2022/lib/components/currency/elder-currency.pipe.mjs +0 -37
- package/esm2022/lib/components/currency/model/currency-code.mjs +0 -38
- package/esm2022/lib/components/currency/model/currency-unit-registry.mjs +0 -30
- package/esm2022/lib/components/currency/model/currency-unit.mjs +0 -10
- package/esm2022/lib/components/currency/model/currency.mjs +0 -15
- package/esm2022/lib/components/currency/public_api.mjs +0 -7
- package/esm2022/lib/components/data-transfer/elder-data-transfer.module.mjs +0 -91
- package/esm2022/lib/components/data-transfer/elder-data-transfer.service.mjs +0 -93
- package/esm2022/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.mjs +0 -102
- package/esm2022/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.mjs +0 -34
- package/esm2022/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.mjs +0 -57
- package/esm2022/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.mjs +0 -34
- package/esm2022/lib/components/data-view/base/data-view-options-provider-binding.mjs +0 -69
- package/esm2022/lib/components/data-view/base/elder-data-view-base.mjs +0 -265
- package/esm2022/lib/components/data-view/base/elder-data-view-options-provider.mjs +0 -44
- package/esm2022/lib/components/data-view/base/elder-data-view-options.mjs +0 -45
- package/esm2022/lib/components/data-view/base/elder-data-view.mjs +0 -3
- package/esm2022/lib/components/data-view/base/public_api.mjs +0 -6
- package/esm2022/lib/components/data-view/common/composite-sort/composite-sort-context.mjs +0 -30
- package/esm2022/lib/components/data-view/common/composite-sort/composite-sort-dc.directive.mjs +0 -55
- package/esm2022/lib/components/data-view/common/composite-sort/composite-sort.mjs +0 -68
- package/esm2022/lib/components/data-view/common/composite-sort/elder-composite-sort/elder-composite-sort.component.mjs +0 -101
- package/esm2022/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.mjs +0 -45
- package/esm2022/lib/components/data-view/common/elder-data-common.module.mjs +0 -125
- package/esm2022/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.mjs +0 -140
- package/esm2022/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.mjs +0 -100
- package/esm2022/lib/components/data-view/common/selection/data-context-selection.directive.mjs +0 -103
- package/esm2022/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.mjs +0 -36
- package/esm2022/lib/components/data-view/common/selection/master-selection-state.mjs +0 -10
- package/esm2022/lib/components/data-view/elder-data-view-interaction-mode.mjs +0 -2
- package/esm2022/lib/components/data-view/grid/elder-grid/elder-grid.component.mjs +0 -345
- package/esm2022/lib/components/data-view/grid/elder-grid.module.mjs +0 -91
- package/esm2022/lib/components/data-view/master-detail/elder-detail-dialog/elder-detail-dialog.component.mjs +0 -75
- package/esm2022/lib/components/data-view/master-detail/elder-detail.directive.mjs +0 -50
- package/esm2022/lib/components/data-view/master-detail/elder-master-activation.directive.mjs +0 -79
- package/esm2022/lib/components/data-view/master-detail/elder-master-detail-mode.mjs +0 -2
- package/esm2022/lib/components/data-view/master-detail/elder-master-detail-provider.mjs +0 -20
- package/esm2022/lib/components/data-view/master-detail/elder-master-detail.component.mjs +0 -119
- package/esm2022/lib/components/data-view/master-detail/elder-master-detail.module.mjs +0 -116
- package/esm2022/lib/components/data-view/master-detail/elder-master-detail.service.mjs +0 -89
- package/esm2022/lib/components/data-view/master-detail/elder-master.directive.mjs +0 -23
- package/esm2022/lib/components/data-view/master-detail/master-detail-activation-event.mjs +0 -12
- package/esm2022/lib/components/data-view/public_api.mjs +0 -7
- package/esm2022/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.mjs +0 -18
- package/esm2022/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.module.mjs +0 -104
- package/esm2022/lib/components/data-view/table/activation/activation-event-source.mjs +0 -7
- package/esm2022/lib/components/data-view/table/activation/elder-activation-context.mjs +0 -2
- package/esm2022/lib/components/data-view/table/activation/elder-delete-active.directive.mjs +0 -114
- package/esm2022/lib/components/data-view/table/activation/elder-table-activation-options.mjs +0 -2
- package/esm2022/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +0 -315
- package/esm2022/lib/components/data-view/table/activation/item-activation-event.mjs +0 -8
- package/esm2022/lib/components/data-view/table/activation/item-activation-options.mjs +0 -7
- package/esm2022/lib/components/data-view/table/activation/public_api.mjs +0 -8
- package/esm2022/lib/components/data-view/table/elder-center-cell.directive.mjs +0 -23
- package/esm2022/lib/components/data-view/table/elder-number-cell.directive.mjs +0 -30
- package/esm2022/lib/components/data-view/table/elder-paginator-intl.mjs +0 -73
- package/esm2022/lib/components/data-view/table/elder-table/elder-table-toolbar.directive.mjs +0 -21
- package/esm2022/lib/components/data-view/table/elder-table/elder-table.component.mjs +0 -338
- package/esm2022/lib/components/data-view/table/elder-table-column.directive.mjs +0 -18
- package/esm2022/lib/components/data-view/table/elder-table-extension.directive.mjs +0 -92
- package/esm2022/lib/components/data-view/table/elder-table-root.directive.mjs +0 -26
- package/esm2022/lib/components/data-view/table/elder-table-row.directive.mjs +0 -156
- package/esm2022/lib/components/data-view/table/elder-table-sort.directive.mjs +0 -23
- package/esm2022/lib/components/data-view/table/elder-table.module.mjs +0 -184
- package/esm2022/lib/components/data-view/table/model/elder-column-layout.mjs +0 -110
- package/esm2022/lib/components/data-view/table/model/elder-table-model-cdk-table-binding.mjs +0 -85
- package/esm2022/lib/components/data-view/table/model/elder-table-model-provider.mjs +0 -40
- package/esm2022/lib/components/data-view/table/model/elder-table-model-query-group.mjs +0 -89
- package/esm2022/lib/components/data-view/table/model/elder-table-model.mjs +0 -167
- package/esm2022/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.mjs +0 -37
- package/esm2022/lib/components/dialogs/elder-dialog-config.mjs +0 -3
- package/esm2022/lib/components/dialogs/elder-dialog.module.mjs +0 -87
- package/esm2022/lib/components/dialogs/elder-dialog.service.mjs +0 -199
- package/esm2022/lib/components/dialogs/question-dialog/elder-question-dialog.component.mjs +0 -57
- package/esm2022/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.mjs +0 -43
- package/esm2022/lib/components/dialogs/selection-dialog/elder-selection-dialog.directive.mjs +0 -47
- package/esm2022/lib/components/errors/elder-error.module.mjs +0 -39
- package/esm2022/lib/components/errors/error-util.mjs +0 -94
- package/esm2022/lib/components/errors/exception-detail/elder-exception-detail.component.mjs +0 -77
- package/esm2022/lib/components/expand-toggle-button/elder-expand-toggle-button.component.mjs +0 -55
- package/esm2022/lib/components/expand-toggle-button/elder-expand-toggle-button.module.mjs +0 -35
- package/esm2022/lib/components/files/blob-url.mjs +0 -10
- package/esm2022/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +0 -224
- package/esm2022/lib/components/files/drag-n-drop/elder-drop-zone/elder-drop-zone.component.mjs +0 -44
- package/esm2022/lib/components/files/drag-n-drop/global-drag-drop.service.mjs +0 -84
- package/esm2022/lib/components/files/elder-file-drop-zone.directive.mjs +0 -145
- package/esm2022/lib/components/files/elder-file-select-input.mjs +0 -119
- package/esm2022/lib/components/files/elder-file-select.directive.mjs +0 -167
- package/esm2022/lib/components/files/elder-file.module.mjs +0 -85
- package/esm2022/lib/components/files/file-select/file-select.component.mjs +0 -54
- package/esm2022/lib/components/files/file-system-api.mjs +0 -100
- package/esm2022/lib/components/files/file-upload/file-upload.component.mjs +0 -80
- package/esm2022/lib/components/files/listing/file-entry.mjs +0 -92
- package/esm2022/lib/components/files/listing/file-listing-rx.mjs +0 -64
- package/esm2022/lib/components/files/listing/file-listing-system-handle.mjs +0 -35
- package/esm2022/lib/components/files/listing/file-listing-webkit.mjs +0 -76
- package/esm2022/lib/components/forms/clipboard/elder-clipboard.service.mjs +0 -51
- package/esm2022/lib/components/forms/directives/base/elder-class-hostbinding-base.mjs +0 -34
- package/esm2022/lib/components/forms/directives/checkbox/elder-single-state-checkbox-controller.mjs +0 -97
- package/esm2022/lib/components/forms/directives/checkbox/elder-single-state-checkbox.directive.mjs +0 -50
- package/esm2022/lib/components/forms/directives/checkbox/elder-triple-state-checkbox-controller.mjs +0 -102
- package/esm2022/lib/components/forms/directives/checkbox/elder-triple-state-checkbox.directive.mjs +0 -50
- package/esm2022/lib/components/forms/directives/elder-clipboard-put.directive.mjs +0 -38
- package/esm2022/lib/components/forms/directives/elder-delayed-focus.directive.mjs +0 -43
- package/esm2022/lib/components/forms/directives/elder-form-field-dense.directive.mjs +0 -83
- package/esm2022/lib/components/forms/directives/elder-form-field-label.directive.mjs +0 -84
- package/esm2022/lib/components/forms/directives/elder-form-field-no-hint.directive.mjs +0 -42
- package/esm2022/lib/components/forms/directives/elder-form-field-no-spinner.directive.mjs +0 -35
- package/esm2022/lib/components/forms/directives/elder-forms-directives.module.mjs +0 -142
- package/esm2022/lib/components/forms/directives/elder-initial-value.directive.mjs +0 -67
- package/esm2022/lib/components/forms/directives/elder-input-pattern.directive.mjs +0 -78
- package/esm2022/lib/components/forms/directives/elder-key-event.directive.mjs +0 -112
- package/esm2022/lib/components/forms/directives/elder-next-focusable.directive.mjs +0 -102
- package/esm2022/lib/components/forms/directives/elder-plug-parent-form.directive.mjs +0 -37
- package/esm2022/lib/components/forms/directives/elder-stop-event-propagation.directive.mjs +0 -30
- package/esm2022/lib/components/forms/directives/elder-tab-focus-trap.directive.mjs +0 -161
- package/esm2022/lib/components/forms/directives/elder-touched.directive.mjs +0 -28
- package/esm2022/lib/components/forms/directives/validation/elder-validation-error.directive.mjs +0 -88
- package/esm2022/lib/components/forms/directives/validation/strategies/common-validation-message-strategy.mjs +0 -47
- package/esm2022/lib/components/forms/directives/validation/strategies/dynamic-validation-message-strategy.mjs +0 -48
- package/esm2022/lib/components/forms/directives/validation/strategies/fallback-validation-message-strategy.mjs +0 -6
- package/esm2022/lib/components/forms/directives/validation/validation-message-renderer.service.mjs +0 -53
- package/esm2022/lib/components/forms/directives/validation/validation-message-strategy.mjs +0 -2
- package/esm2022/lib/components/forms/directives/validation/validators/elder-max.validator.mjs +0 -36
- package/esm2022/lib/components/forms/directives/validation/validators/elder-min.validator.mjs +0 -36
- package/esm2022/lib/components/forms/directives/validation/validators/elder-multiple-of.validator.mjs +0 -112
- package/esm2022/lib/components/forms/directives/validation/validators/elder-required-ignore-zero.validator.mjs +0 -69
- package/esm2022/lib/components/forms/elder-forms.module.mjs +0 -22
- package/esm2022/lib/components/forms/public_api.mjs +0 -6
- package/esm2022/lib/components/forms/search/domain/context/search-context.mjs +0 -73
- package/esm2022/lib/components/forms/search/domain/context/search-context.service.mjs +0 -42
- package/esm2022/lib/components/forms/search/domain/input/input-value.mjs +0 -2
- package/esm2022/lib/components/forms/search/domain/input/search-input-state.mjs +0 -88
- package/esm2022/lib/components/forms/search/domain/input/search-input.mjs +0 -2
- package/esm2022/lib/components/forms/search/domain/input/simple-search-input.mjs +0 -50
- package/esm2022/lib/components/forms/search/domain/url/elder-search-url.directive.mjs +0 -92
- package/esm2022/lib/components/forms/search/domain/url/elder-search-url.service.mjs +0 -166
- package/esm2022/lib/components/forms/search/domain/url/search-query-params-parser.mjs +0 -81
- package/esm2022/lib/components/forms/search/elder-search-context.directive.mjs +0 -256
- package/esm2022/lib/components/forms/search/elder-search-input.directive.mjs +0 -258
- package/esm2022/lib/components/forms/search/elder-search.module.mjs +0 -115
- package/esm2022/lib/components/forms/search/filter/default-input-filter-converter.mjs +0 -45
- package/esm2022/lib/components/forms/search/filter/input-filter-converter.mjs +0 -2
- package/esm2022/lib/components/forms/search/search-box/elder-search-box.component.mjs +0 -131
- package/esm2022/lib/components/forms/search/search-box/elder-search-panel.component.mjs +0 -24
- package/esm2022/lib/components/global-search/elder-global-search.component.mjs +0 -136
- package/esm2022/lib/components/global-search/elder-global-search.module.mjs +0 -47
- package/esm2022/lib/components/global-search/elder-global-search.service.mjs +0 -95
- package/esm2022/lib/components/graph/elder-progress-bar/elder-progress-bar.component.mjs +0 -90
- package/esm2022/lib/components/graph/elder-progress-bar/elder-progress-bar.module.mjs +0 -19
- package/esm2022/lib/components/graph/elder-progress-bar/sub-bar.mjs +0 -7
- package/esm2022/lib/components/graph/public_api.mjs +0 -2
- package/esm2022/lib/components/headers/elder-header/elder-header.component.mjs +0 -29
- package/esm2022/lib/components/headers/elder-header.module.mjs +0 -42
- package/esm2022/lib/components/http-support/elder-http-client.service.mjs +0 -63
- package/esm2022/lib/components/http-support/public_api.mjs +0 -2
- package/esm2022/lib/components/i18n/entities/elder-i18n-entities.module.mjs +0 -125
- package/esm2022/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.mjs +0 -157
- package/esm2022/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.mjs +0 -39
- package/esm2022/lib/components/i18n/entities/elder-localized-input-dialog.service.mjs +0 -30
- package/esm2022/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.mjs +0 -177
- package/esm2022/lib/components/i18n/entities/elder-localized-text-column.directive.mjs +0 -31
- package/esm2022/lib/components/i18n/entities/elder-localized-texts.directive.mjs +0 -56
- package/esm2022/lib/components/i18n/entities/picker/i18n-pick-async.pipe.mjs +0 -40
- package/esm2022/lib/components/i18n/entities/picker/i18n-pick.pipe.mjs +0 -31
- package/esm2022/lib/components/i18n/entities/picker/localisation-picker.service.mjs +0 -74
- package/esm2022/lib/components/i18n/language/elder-language-config.mjs +0 -3
- package/esm2022/lib/components/i18n/language/elder-language-interceptor.mjs +0 -70
- package/esm2022/lib/components/i18n/language/elder-language.module.mjs +0 -73
- package/esm2022/lib/components/i18n/language/elder-language.service.mjs +0 -120
- package/esm2022/lib/components/i18n/language/language-switcher/elder-language-switcher.component.mjs +0 -79
- package/esm2022/lib/components/i18n/locales/elder-locales-de-ch.module.mjs +0 -53
- package/esm2022/lib/components/i18n/public_api.mjs +0 -4
- package/esm2022/lib/components/iframes/data-view/data-view-iframe/data-view-iframe.component.mjs +0 -129
- package/esm2022/lib/components/iframes/data-view/data-view-iframe-adapter.directive.mjs +0 -141
- package/esm2022/lib/components/iframes/elder-iframe.module.mjs +0 -106
- package/esm2022/lib/components/iframes/iframe-close.directive.mjs +0 -41
- package/esm2022/lib/components/iframes/iframe-dialog/iframe-dialog.component.mjs +0 -51
- package/esm2022/lib/components/iframes/iframe-host/iframe-host.component.mjs +0 -144
- package/esm2022/lib/components/iframes/iframe-messages.mjs +0 -5
- package/esm2022/lib/components/iframes/iframe-side-content/iframe-side-content.component.mjs +0 -80
- package/esm2022/lib/components/iframes/iframe.service.mjs +0 -54
- package/esm2022/lib/components/iframes/typed-event-message.mjs +0 -42
- package/esm2022/lib/components/infinitescroll/elder-infinite-autocomplete.directive.mjs +0 -65
- package/esm2022/lib/components/infinitescroll/elder-infinite-scroll.directive.mjs +0 -166
- package/esm2022/lib/components/infinitescroll/elder-infinite-scroll.module.mjs +0 -20
- package/esm2022/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected.mjs +0 -9
- package/esm2022/lib/components/input/autocomplete/elder-autocomplete/elder-suggestion-panel.component.mjs +0 -233
- package/esm2022/lib/components/input/autocomplete/elder-autocomplete-many.directive.mjs +0 -202
- package/esm2022/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +0 -120
- package/esm2022/lib/components/input/autocomplete/elder-autocomplete.module.mjs +0 -61
- package/esm2022/lib/components/input/autocomplete/many/word-position-finder.mjs +0 -58
- package/esm2022/lib/components/input/public_api.mjs +0 -2
- package/esm2022/lib/components/labels/elder-labels.module.mjs +0 -50
- package/esm2022/lib/components/labels/labels-input/labels-input.component.mjs +0 -239
- package/esm2022/lib/components/measures/dimensions/dimensions-input/elder-dimensions-input.component.mjs +0 -268
- package/esm2022/lib/components/measures/dimensions/validation/elder-required-dimensions.validator.mjs +0 -92
- package/esm2022/lib/components/measures/directives/elder-unit-select.directive.mjs +0 -65
- package/esm2022/lib/components/measures/elder-measures.module.mjs +0 -130
- package/esm2022/lib/components/measures/elder-quantity-transform.pipe.mjs +0 -31
- package/esm2022/lib/components/measures/elder-quantity.pipe.mjs +0 -43
- package/esm2022/lib/components/measures/elder-unit.service.mjs +0 -113
- package/esm2022/lib/components/measures/model/dimensions.mjs +0 -17
- package/esm2022/lib/components/measures/model/quantity.mjs +0 -12
- package/esm2022/lib/components/measures/model/unit-dimension.mjs +0 -14
- package/esm2022/lib/components/measures/model/unit-registry.mjs +0 -81
- package/esm2022/lib/components/measures/model/unit.mjs +0 -143
- package/esm2022/lib/components/measures/public_api.mjs +0 -8
- package/esm2022/lib/components/measures/quantity-input/quantity-form-field/elder-quantity-form-field.component.mjs +0 -44
- package/esm2022/lib/components/measures/quantity-input/quantity-input-control/elder-quantity-input-control.component.mjs +0 -173
- package/esm2022/lib/components/measures/quantity-input/validation/elder-quantity-range.validator.mjs +0 -84
- package/esm2022/lib/components/measures/quantity-input/validation/elder-required-quantity.validator.mjs +0 -73
- package/esm2022/lib/components/measures/util/elder-quantity.service.mjs +0 -341
- package/esm2022/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.mjs +0 -184
- package/esm2022/lib/components/navigation/bread-crumbs/elder-bread-crumbs.module.mjs +0 -59
- package/esm2022/lib/components/navigation/bread-crumbs/path/path.mjs +0 -37
- package/esm2022/lib/components/navigation/nav/elder-nav.module.mjs +0 -60
- package/esm2022/lib/components/navigation/nav/nav-group/elder-nav-group.component.mjs +0 -121
- package/esm2022/lib/components/navigation/nav/nav-link/elder-nav-link.component.mjs +0 -174
- package/esm2022/lib/components/navigation/nav/nav-list/elder-nav-list.component.mjs +0 -68
- package/esm2022/lib/components/navigation/public_api.mjs +0 -4
- package/esm2022/lib/components/navigation/toolbar/elder-toolbar-column.directive.mjs +0 -48
- package/esm2022/lib/components/navigation/toolbar/elder-toolbar.module.mjs +0 -83
- package/esm2022/lib/components/navigation/toolbar/elder-toolbar.service.mjs +0 -68
- package/esm2022/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.mjs +0 -71
- package/esm2022/lib/components/navigation/toolbar/toolbar-column-position.mjs +0 -2
- package/esm2022/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.mjs +0 -39
- package/esm2022/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.service.mjs +0 -86
- package/esm2022/lib/components/overlays/elder-overlay-origin.directive.mjs +0 -44
- package/esm2022/lib/components/overlays/elder-overlay-ref.mjs +0 -41
- package/esm2022/lib/components/overlays/elder-overlay-trigger.directive.mjs +0 -73
- package/esm2022/lib/components/overlays/elder-overlay.component.mjs +0 -232
- package/esm2022/lib/components/overlays/elder-overlay.module.mjs +0 -35
- package/esm2022/lib/components/page/exit-guard/page-exit-guard.module.mjs +0 -20
- package/esm2022/lib/components/page/exit-guard/page-exit-guard.service.mjs +0 -129
- package/esm2022/lib/components/page/exit-guard/page-exit-lock/page-exit-lock.component.mjs +0 -25
- package/esm2022/lib/components/page/exit-guard/page-exit-lock-indicator/page-exit-lock-indicator.component.mjs +0 -29
- package/esm2022/lib/components/page/exit-guard/page-exit-lock-overview/page-exit-lock-overview.component.mjs +0 -26
- package/esm2022/lib/components/page/public_api.mjs +0 -2
- package/esm2022/lib/components/panels/card-panel/elder-card-panel.component.mjs +0 -12
- package/esm2022/lib/components/panels/elder-dialog-panel/elder-dialog-panel.component.mjs +0 -12
- package/esm2022/lib/components/panels/elder-panel.module.mjs +0 -60
- package/esm2022/lib/components/panels/flat/elder-panel.component.mjs +0 -26
- package/esm2022/lib/components/panels/toggle-panel/elder-toggle-panel-trigger.directive.mjs +0 -70
- package/esm2022/lib/components/panels/toggle-panel/elder-toggle-panel.component.mjs +0 -74
- package/esm2022/lib/components/public_api.mjs +0 -43
- package/esm2022/lib/components/scrollbar/elder-scrollbar.directive.mjs +0 -63
- package/esm2022/lib/components/scrollbar/elder-scrollbar.module.mjs +0 -17
- package/esm2022/lib/components/select/auto/elder-auto-select-first.directive.mjs +0 -95
- package/esm2022/lib/components/select/auto/elder-auto-select-first.service.mjs +0 -38
- package/esm2022/lib/components/select/auto/elder-auto-select-suggest-first.directive.mjs +0 -64
- package/esm2022/lib/components/select/auto/elder-select-first-util.mjs +0 -55
- package/esm2022/lib/components/select/elder-select-base.mjs +0 -333
- package/esm2022/lib/components/select/elder-select-chip.directive.mjs +0 -48
- package/esm2022/lib/components/select/elder-select-on-tab.directive.mjs +0 -139
- package/esm2022/lib/components/select/elder-select-value.directive.mjs +0 -18
- package/esm2022/lib/components/select/elder-select.module.mjs +0 -229
- package/esm2022/lib/components/select/filter/elder-chip-filter-style-resolver.mjs +0 -74
- package/esm2022/lib/components/select/filter/elder-chips-include-exclude.directive.mjs +0 -148
- package/esm2022/lib/components/select/filter/elder-filter-chip-template/elder-filter-chip-template.component.mjs +0 -51
- package/esm2022/lib/components/select/filter/include-exclude-model-filter-adapter.mjs +0 -61
- package/esm2022/lib/components/select/filter/include-exclude-selection-model.mjs +0 -160
- package/esm2022/lib/components/select/multi/elder-chip-select-option/elder-select-option.component.mjs +0 -16
- package/esm2022/lib/components/select/multi/elder-multi-select-base.mjs +0 -386
- package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/chip-options-provider.mjs +0 -87
- package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component.mjs +0 -263
- package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/select-option-chip-spec.mjs +0 -15
- package/esm2022/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +0 -274
- package/esm2022/lib/components/select/multi/elder-multi-select-chips/select-chip-spec.mjs +0 -15
- package/esm2022/lib/components/select/multi/elder-multi-select-form-field.mjs +0 -86
- package/esm2022/lib/components/select/multi/elder-mutli-select-all-directive.mjs +0 -34
- package/esm2022/lib/components/select/multi/elder-search-include-exclude.directive.mjs +0 -146
- package/esm2022/lib/components/select/multi/public_api.mjs +0 -5
- package/esm2022/lib/components/select/popup/selection-model-popup-trigger-adapter.directive.mjs +0 -89
- package/esm2022/lib/components/select/popup/selection-model-popup.directive.mjs +0 -126
- package/esm2022/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.mjs +0 -58
- package/esm2022/lib/components/select/public_api.mjs +0 -5
- package/esm2022/lib/components/select/single/elder-clear-select.directive.mjs +0 -60
- package/esm2022/lib/components/select/single/elder-select/elder-select.component.mjs +0 -444
- package/esm2022/lib/components/select/single/elder-select-form-field.mjs +0 -45
- package/esm2022/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.mjs +0 -148
- package/esm2022/lib/components/select-chip-list/elder-chip-list-select.module.mjs +0 -46
- package/esm2022/lib/components/shell/drawers/drawer-outlet-binding.mjs +0 -64
- package/esm2022/lib/components/shell/drawers/elder-route-outlet-drawer.service.mjs +0 -119
- package/esm2022/lib/components/shell/drawers/elder-router-outlet.service.mjs +0 -128
- package/esm2022/lib/components/shell/elder-shell-slot.directive.mjs +0 -47
- package/esm2022/lib/components/shell/elder-shell.module.mjs +0 -101
- package/esm2022/lib/components/shell/elder-shell.service.mjs +0 -142
- package/esm2022/lib/components/shell/header/elder-app-header/elder-app-header.component.mjs +0 -75
- package/esm2022/lib/components/shell/shell/elder-shell.component.mjs +0 -238
- package/esm2022/lib/components/shell/shell-content-slot.mjs +0 -2
- package/esm2022/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.mjs +0 -137
- package/esm2022/lib/components/tabs/elder-tab/elder-tab.directive.mjs +0 -26
- package/esm2022/lib/components/tabs/elder-tab-group-routing/elder-tab-group-routing.directive.mjs +0 -257
- package/esm2022/lib/components/tabs/elder-tab.module.mjs +0 -21
- package/esm2022/lib/components/theme/elder-theme-applier.directive.mjs +0 -62
- package/esm2022/lib/components/theme/elder-theme-preference.service.mjs +0 -73
- package/esm2022/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.mjs +0 -74
- package/esm2022/lib/components/theme/elder-theme.directive.mjs +0 -64
- package/esm2022/lib/components/theme/elder-theme.module.mjs +0 -68
- package/esm2022/lib/components/theme/elder-theme.service.mjs +0 -121
- package/esm2022/lib/components/theme/known-elder-themes.mjs +0 -6
- package/esm2022/lib/components/theme/public_api.mjs +0 -2
- package/esm2022/lib/components/theme/theme-spec.mjs +0 -11
- package/esm2022/lib/components/time/date-adapters/custom-date-adapter.mjs +0 -43
- package/esm2022/lib/components/time/date-formats/locale-date-formats.mjs +0 -28
- package/esm2022/lib/components/time/duration/duration-bucket.mjs +0 -68
- package/esm2022/lib/components/time/duration/duration-format.mjs +0 -271
- package/esm2022/lib/components/time/duration/elder-duration-input/elder-duration-input.component.mjs +0 -110
- package/esm2022/lib/components/time/duration/iso-duration-str.mjs +0 -2
- package/esm2022/lib/components/time/elder-date-switcher/elder-date-switcher.component.mjs +0 -96
- package/esm2022/lib/components/time/elder-date-time-input/elder-date-time-input.component.mjs +0 -98
- package/esm2022/lib/components/time/elder-interval-input/elder-interval-input.component.mjs +0 -217
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-anchor-controller.mjs +0 -21
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-calendar-controller.mjs +0 -24
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-controller.mjs +0 -43
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-form-controller.mjs +0 -69
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-select-controller.mjs +0 -117
- package/esm2022/lib/components/time/elder-interval-picker/controller/interval-shift-controller.mjs +0 -44
- package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker.component.mjs +0 -198
- package/esm2022/lib/components/time/elder-interval-picker/interval-picker-binding/elder-interval-picker-binding.directive.mjs +0 -41
- package/esm2022/lib/components/time/elder-interval-picker/interval-picker-toggle/elder-interval-picker-toggle.component.mjs +0 -144
- package/esm2022/lib/components/time/elder-interval-picker/manager/interval-picker-state-manager.mjs +0 -93
- package/esm2022/lib/components/time/elder-interval-picker/model/anchor-state.mjs +0 -54
- package/esm2022/lib/components/time/elder-interval-picker/model/interval-state.mjs +0 -37
- package/esm2022/lib/components/time/elder-interval-picker/model/smart-shift-state.mjs +0 -10
- package/esm2022/lib/components/time/elder-interval-picker/presenter/interval-picker-presenter.mjs +0 -96
- package/esm2022/lib/components/time/elder-interval-picker/util/interval-picker-util.mjs +0 -194
- package/esm2022/lib/components/time/elder-local-date-input/elder-local-date-input.component.mjs +0 -268
- package/esm2022/lib/components/time/elder-local-time-input/elder-local-time-input.component.mjs +0 -85
- package/esm2022/lib/components/time/elder-time.module.mjs +0 -154
- package/esm2022/lib/components/time/period/elder-period-input/elder-period-input.component.mjs +0 -118
- package/esm2022/lib/components/time/period/period-bucket.mjs +0 -31
- package/esm2022/lib/components/time/period/period-format.mjs +0 -89
- package/esm2022/lib/components/time/pipes/to-iso-date-string.pipe.mjs +0 -39
- package/esm2022/lib/components/time/public_api.mjs +0 -8
- package/esm2022/lib/components/toasts/elder-toast.module.mjs +0 -36
- package/esm2022/lib/components/toasts/elder-toast.service.mjs +0 -170
- package/esm2022/lib/components/toasts/standard-toast/standard-toast.component.mjs +0 -80
- package/esm2022/lib/components/toasts/toast-type.mjs +0 -7
- package/esm2022/lib/components/toasts/toast.mjs +0 -2
- package/esm2022/lib/components/url-fragment/elder-url-fragment.mjs +0 -9
- package/esm2022/lib/components/url-fragment/elder-url-fragment.module.mjs +0 -52
- package/esm2022/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.mjs +0 -95
- package/esm2022/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.mjs +0 -64
- package/esm2022/lib/components/viewers/elder-viewers.module.mjs +0 -18
- package/esm2022/lib/features/event-source/fetch/public_api.mjs +0 -3
- package/esm2022/lib/features/event-source/fetch/reactive-fetch-event-source.mjs +0 -219
- package/esm2022/lib/features/event-source/fetch/reactive-fetch-event-source.service.mjs +0 -53
- package/esm2022/lib/features/event-source/public_api.mjs +0 -3
- package/esm2022/lib/features/event-source/standard/elder-event-source.service.mjs +0 -56
- package/esm2022/lib/features/event-source/standard/public_api.mjs +0 -3
- package/esm2022/lib/features/event-source/standard/reactive-event-source.mjs +0 -199
- package/esm2022/lib/features/kafent/access-token-provider.mjs +0 -20
- package/esm2022/lib/features/kafent/kafent-config.mjs +0 -24
- package/esm2022/lib/features/kafent/kafent-event-stream.mjs +0 -25
- package/esm2022/lib/features/kafent/kafent-event.mjs +0 -3
- package/esm2022/lib/features/kafent/kafent-event.service.mjs +0 -115
- package/esm2022/lib/features/kafent/kafent-live-event-request.mjs +0 -2
- package/esm2022/lib/features/kafent/kafent.module.mjs +0 -58
- package/esm2022/lib/features/kafent/sse/kafent-event-stream-sse.service.mjs +0 -131
- package/esm2022/lib/features/kafent/sse/kafent-topic-sse.mjs +0 -97
- package/esm2022/lib/features/public_api.mjs +0 -3
- package/esm2022/lib/pipes/bytes.pipe.mjs +0 -27
- package/esm2022/lib/pipes/elder-pipes.module.mjs +0 -114
- package/esm2022/lib/pipes/elder-repeat.pipe.mjs +0 -24
- package/esm2022/lib/pipes/elder-round.pipe.mjs +0 -36
- package/esm2022/lib/pipes/elder-safe-url.pipe.mjs +0 -21
- package/esm2022/lib/pipes/elder-truncate.pipe.mjs +0 -41
- package/esm2022/lib/pipes/iso-duration.pipe.mjs +0 -41
- package/esm2022/lib/pipes/iso-interval-parse.pipe.mjs +0 -49
- package/esm2022/lib/pipes/iso-interval.pipe.mjs +0 -62
- package/esm2022/lib/pipes/public_api.mjs +0 -2
- package/esm2022/lib/pipes/time-ago.pipe.mjs +0 -110
- package/esm2022/lib/pipes/time-duration.pipe.mjs +0 -101
- package/esm2022/lib/pipes/weight.pipe.mjs +0 -60
- package/esm2022/public_api.mjs +0 -8
- package/lib/components/panels/flat/elder-panel.component.d.ts +0 -15
- package/src/lib/components/panels/flat/elder-panel.component.scss +0 -3
package/esm2022/lib/components/measures/quantity-input/validation/elder-quantity-range.validator.mjs
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
3
|
-
import { NG_VALIDATORS } from '@angular/forms';
|
|
4
|
-
import { coerceNumberProperty } from '@angular/cdk/coercion';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
7
|
-
export class ElderQuantityRangeValidator {
|
|
8
|
-
constructor() {
|
|
9
|
-
/***************************************************************************
|
|
10
|
-
* *
|
|
11
|
-
* Fields *
|
|
12
|
-
* *
|
|
13
|
-
**************************************************************************/
|
|
14
|
-
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
15
|
-
}
|
|
16
|
-
/***************************************************************************
|
|
17
|
-
* *
|
|
18
|
-
* Properties *
|
|
19
|
-
* *
|
|
20
|
-
**************************************************************************/
|
|
21
|
-
// TODO Maybe support minQuantity / maxQuantity
|
|
22
|
-
/**
|
|
23
|
-
* Minimum number allowed.
|
|
24
|
-
*/
|
|
25
|
-
set min(value) {
|
|
26
|
-
this._min = coerceNumberProperty(value);
|
|
27
|
-
}
|
|
28
|
-
get min() {
|
|
29
|
-
return this._min;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Maximum number allowed.
|
|
33
|
-
*/
|
|
34
|
-
set max(value) {
|
|
35
|
-
this._max = coerceNumberProperty(value);
|
|
36
|
-
}
|
|
37
|
-
get max() {
|
|
38
|
-
return this._max;
|
|
39
|
-
}
|
|
40
|
-
/***************************************************************************
|
|
41
|
-
* *
|
|
42
|
-
* Public API *
|
|
43
|
-
* *
|
|
44
|
-
**************************************************************************/
|
|
45
|
-
validate(c) {
|
|
46
|
-
let result = {};
|
|
47
|
-
const qty = c.value;
|
|
48
|
-
if (this._min != null && !this.isAtLeast(qty, this._min)) {
|
|
49
|
-
result = Object.assign(result, { min: { min: this._min, actual: qty?.value } });
|
|
50
|
-
}
|
|
51
|
-
if (this._max != null && !this.isAtMost(qty, this._max)) {
|
|
52
|
-
result = Object.assign(result, { max: { max: this._max, actual: qty?.value } });
|
|
53
|
-
}
|
|
54
|
-
return result;
|
|
55
|
-
}
|
|
56
|
-
/***************************************************************************
|
|
57
|
-
* *
|
|
58
|
-
* Private Methods *
|
|
59
|
-
* *
|
|
60
|
-
**************************************************************************/
|
|
61
|
-
isAtLeast(quantity, minValue) {
|
|
62
|
-
return quantity?.value >= minValue;
|
|
63
|
-
}
|
|
64
|
-
isAtMost(quantity, maxValue) {
|
|
65
|
-
return quantity?.value <= maxValue;
|
|
66
|
-
}
|
|
67
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderQuantityRangeValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
68
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ElderQuantityRangeValidator, isStandalone: true, selector: "elder-quantity-input[min][formControl],elder-quantity-input[min][formControlName],elder-quantity-input[min][ngModel],elder-quantity-input[max][formControl],elder-quantity-input[max][formControlName],elder-quantity-input[max][ngModel]", inputs: { min: "min", max: "max" }, providers: [{ provide: NG_VALIDATORS, useExisting: ElderQuantityRangeValidator, multi: true }], ngImport: i0 }); }
|
|
69
|
-
}
|
|
70
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderQuantityRangeValidator, decorators: [{
|
|
71
|
-
type: Directive,
|
|
72
|
-
args: [{
|
|
73
|
-
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
74
|
-
selector: 'elder-quantity-input[min][formControl],elder-quantity-input[min][formControlName],elder-quantity-input[min][ngModel],' +
|
|
75
|
-
'elder-quantity-input[max][formControl],elder-quantity-input[max][formControlName],elder-quantity-input[max][ngModel]',
|
|
76
|
-
providers: [{ provide: NG_VALIDATORS, useExisting: ElderQuantityRangeValidator, multi: true }],
|
|
77
|
-
standalone: true,
|
|
78
|
-
}]
|
|
79
|
-
}], propDecorators: { min: [{
|
|
80
|
-
type: Input
|
|
81
|
-
}], max: [{
|
|
82
|
-
type: Input
|
|
83
|
-
}] } });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItcXVhbnRpdHktcmFuZ2UudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9tZWFzdXJlcy9xdWFudGl0eS1pbnB1dC92YWxpZGF0aW9uL2VsZGVyLXF1YW50aXR5LXJhbmdlLnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDcEQsT0FBTyxFQUFtQixhQUFhLEVBQStCLE1BQU0sZ0JBQWdCLENBQUE7QUFFNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFlLE1BQU0sdUJBQXVCLENBQUE7O0FBVXpFLGtFQUFrRTtBQUNsRSxNQUFNLE9BQU8sMkJBQTJCO0lBVHhDO1FBVUU7Ozs7b0ZBSTRFO1FBRTNELFFBQUcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7S0FzRXRFO0lBakVDOzs7O2dGQUk0RTtJQUU1RSwrQ0FBK0M7SUFFL0M7O09BRUc7SUFDSCxJQUNXLEdBQUcsQ0FBQyxLQUFrQjtRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxJQUFXLEdBQUc7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUE7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDVyxHQUFHLENBQUMsS0FBa0I7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBRUQsSUFBVyxHQUFHO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQ2xCLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsUUFBUSxDQUFDLENBQWtCO1FBQ2hDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUNmLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFpQixDQUFBO1FBRS9CLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6RCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNqRixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2pGLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFcEUsU0FBUyxDQUFDLFFBQWtCLEVBQUUsUUFBZ0I7UUFDcEQsT0FBTyxRQUFRLEVBQUUsS0FBSyxJQUFJLFFBQVEsQ0FBQTtJQUNwQyxDQUFDO0lBRU8sUUFBUSxDQUFDLFFBQWtCLEVBQUUsUUFBZ0I7UUFDbkQsT0FBTyxRQUFRLEVBQUUsS0FBSyxJQUFJLFFBQVEsQ0FBQTtJQUNwQyxDQUFDOytHQTVFVSwyQkFBMkI7bUdBQTNCLDJCQUEyQiw0VEFKM0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzs7NEZBSW5GLDJCQUEyQjtrQkFUdkMsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFDTix1SEFBdUg7d0JBQ3ZILHNIQUFzSDtvQkFDeEgsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsNkJBQTZCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO29CQUM5RixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBMEJZLEdBQUc7c0JBRGIsS0FBSztnQkFhSyxHQUFHO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IExvZ2dlckZhY3RvcnkgfSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcidcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgTkdfVkFMSURBVE9SUywgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBRdWFudGl0eSB9IGZyb20gJy4uLy4uL21vZGVsL3F1YW50aXR5J1xuaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6XG4gICAgJ2VsZGVyLXF1YW50aXR5LWlucHV0W21pbl1bZm9ybUNvbnRyb2xdLGVsZGVyLXF1YW50aXR5LWlucHV0W21pbl1bZm9ybUNvbnRyb2xOYW1lXSxlbGRlci1xdWFudGl0eS1pbnB1dFttaW5dW25nTW9kZWxdLCcgK1xuICAgICdlbGRlci1xdWFudGl0eS1pbnB1dFttYXhdW2Zvcm1Db250cm9sXSxlbGRlci1xdWFudGl0eS1pbnB1dFttYXhdW2Zvcm1Db250cm9sTmFtZV0sZWxkZXItcXVhbnRpdHktaW5wdXRbbWF4XVtuZ01vZGVsXScsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IEVsZGVyUXVhbnRpdHlSYW5nZVZhbGlkYXRvciwgbXVsdGk6IHRydWUgfV0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgRWxkZXJRdWFudGl0eVJhbmdlVmFsaWRhdG9yIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG5cbiAgcHJpdmF0ZSBfbWluOiBudW1iZXJcbiAgcHJpdmF0ZSBfbWF4OiBudW1iZXJcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvLyBUT0RPIE1heWJlIHN1cHBvcnQgbWluUXVhbnRpdHkgLyBtYXhRdWFudGl0eVxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBhbGxvd2VkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW4odmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fbWluID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpXG4gIH1cblxuICBwdWJsaWMgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9taW5cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBhbGxvd2VkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXgodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fbWF4ID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpXG4gIH1cblxuICBwdWJsaWMgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgYW55IHtcbiAgICBsZXQgcmVzdWx0ID0ge31cbiAgICBjb25zdCBxdHkgPSBjLnZhbHVlIGFzIFF1YW50aXR5XG5cbiAgICBpZiAodGhpcy5fbWluICE9IG51bGwgJiYgIXRoaXMuaXNBdExlYXN0KHF0eSwgdGhpcy5fbWluKSkge1xuICAgICAgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgbWluOiB7IG1pbjogdGhpcy5fbWluLCBhY3R1YWw6IHF0eT8udmFsdWUgfSB9KVxuICAgIH1cbiAgICBpZiAodGhpcy5fbWF4ICE9IG51bGwgJiYgIXRoaXMuaXNBdE1vc3QocXR5LCB0aGlzLl9tYXgpKSB7XG4gICAgICByZXN1bHQgPSBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBtYXg6IHsgbWF4OiB0aGlzLl9tYXgsIGFjdHVhbDogcXR5Py52YWx1ZSB9IH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgTWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBpc0F0TGVhc3QocXVhbnRpdHk6IFF1YW50aXR5LCBtaW5WYWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHF1YW50aXR5Py52YWx1ZSA+PSBtaW5WYWx1ZVxuICB9XG5cbiAgcHJpdmF0ZSBpc0F0TW9zdChxdWFudGl0eTogUXVhbnRpdHksIG1heFZhbHVlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcXVhbnRpdHk/LnZhbHVlIDw9IG1heFZhbHVlXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { NG_VALIDATORS } from '@angular/forms';
|
|
3
|
-
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
4
|
-
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class ElderRequiredQuantityValidator {
|
|
7
|
-
constructor() {
|
|
8
|
-
/***************************************************************************
|
|
9
|
-
* *
|
|
10
|
-
* Fields *
|
|
11
|
-
* *
|
|
12
|
-
**************************************************************************/
|
|
13
|
-
this.log = LoggerFactory.getLogger(this.constructor.name);
|
|
14
|
-
this._requiredIgnoreZero = false;
|
|
15
|
-
}
|
|
16
|
-
/***************************************************************************
|
|
17
|
-
* *
|
|
18
|
-
* Properties *
|
|
19
|
-
* *
|
|
20
|
-
**************************************************************************/
|
|
21
|
-
set requiredIgnoreZero(value) {
|
|
22
|
-
this._requiredIgnoreZero = coerceBooleanProperty(value);
|
|
23
|
-
}
|
|
24
|
-
get requiredIgnoreZero() {
|
|
25
|
-
return this._requiredIgnoreZero;
|
|
26
|
-
}
|
|
27
|
-
set required(value) {
|
|
28
|
-
this._required = coerceBooleanProperty(value);
|
|
29
|
-
}
|
|
30
|
-
get required() {
|
|
31
|
-
return this._required;
|
|
32
|
-
}
|
|
33
|
-
/***************************************************************************
|
|
34
|
-
* *
|
|
35
|
-
* Public API *
|
|
36
|
-
* *
|
|
37
|
-
**************************************************************************/
|
|
38
|
-
validate(c) {
|
|
39
|
-
let result = {};
|
|
40
|
-
if (this.required && !this.isQuantityDefined(c.value)) {
|
|
41
|
-
result = Object.assign(result, { required: { valid: false } });
|
|
42
|
-
}
|
|
43
|
-
// this.log.info('"' + c.value + '" --> validate result: ' + JSON.stringify(result), c);
|
|
44
|
-
return result;
|
|
45
|
-
}
|
|
46
|
-
/***************************************************************************
|
|
47
|
-
* *
|
|
48
|
-
* Private Methods *
|
|
49
|
-
* *
|
|
50
|
-
**************************************************************************/
|
|
51
|
-
isQuantityDefined(qty) {
|
|
52
|
-
if (qty?.value != null && qty?.unit != null) {
|
|
53
|
-
return !(this._requiredIgnoreZero && qty.value === 0);
|
|
54
|
-
}
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderRequiredQuantityValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
58
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ElderRequiredQuantityValidator, isStandalone: true, selector: "elder-quantity-input[required][formControl],elder-quantity-input[required][formControlName],elder-quantity-input[required][ngModel]", inputs: { requiredIgnoreZero: "requiredIgnoreZero", required: "required" }, providers: [{ provide: NG_VALIDATORS, useExisting: ElderRequiredQuantityValidator, multi: true }], ngImport: i0 }); }
|
|
59
|
-
}
|
|
60
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderRequiredQuantityValidator, decorators: [{
|
|
61
|
-
type: Directive,
|
|
62
|
-
args: [{
|
|
63
|
-
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
64
|
-
selector: 'elder-quantity-input[required][formControl],elder-quantity-input[required][formControlName],elder-quantity-input[required][ngModel]',
|
|
65
|
-
providers: [{ provide: NG_VALIDATORS, useExisting: ElderRequiredQuantityValidator, multi: true }],
|
|
66
|
-
standalone: true,
|
|
67
|
-
}]
|
|
68
|
-
}], propDecorators: { requiredIgnoreZero: [{
|
|
69
|
-
type: Input
|
|
70
|
-
}], required: [{
|
|
71
|
-
type: Input
|
|
72
|
-
}] } });
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItcmVxdWlyZWQtcXVhbnRpdHkudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9tZWFzdXJlcy9xdWFudGl0eS1pbnB1dC92YWxpZGF0aW9uL2VsZGVyLXJlcXVpcmVkLXF1YW50aXR5LnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNoRCxPQUFPLEVBQW1CLGFBQWEsRUFBK0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDcEQsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBOztBQVUzRSxNQUFNLE9BQU8sOEJBQThCO0lBUDNDO1FBUUU7Ozs7b0ZBSTRFO1FBRTNELFFBQUcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7UUFHN0Qsd0JBQW1CLEdBQVksS0FBSyxDQUFBO0tBc0Q3QztJQXBEQzs7OztnRkFJNEU7SUFFNUUsSUFDVyxrQkFBa0IsQ0FBQyxLQUFtQjtRQUMvQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVELElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUNXLFFBQVEsQ0FBQyxLQUFtQjtRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBO0lBQ3ZCLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsUUFBUSxDQUFDLENBQWtCO1FBQ2hDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUVmLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2hFLENBQUM7UUFDRCx3RkFBd0Y7UUFDeEYsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRXBFLGlCQUFpQixDQUFDLEdBQWE7UUFDckMsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzVDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ3ZELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7K0dBL0RVLDhCQUE4QjttR0FBOUIsOEJBQThCLDhQQUg5QixDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsOEJBQThCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDOzs0RkFHdEYsOEJBQThCO2tCQVAxQyxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUNOLHFJQUFxSTtvQkFDdkksU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO29CQUNqRyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBb0JZLGtCQUFrQjtzQkFENUIsS0FBSztnQkFVSyxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgTG9nZ2VyRmFjdG9yeSB9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJ1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXG5pbXBvcnQgeyBRdWFudGl0eSB9IGZyb20gJy4uLy4uL21vZGVsL3F1YW50aXR5J1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6XG4gICAgJ2VsZGVyLXF1YW50aXR5LWlucHV0W3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sZWxkZXItcXVhbnRpdHktaW5wdXRbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sZWxkZXItcXVhbnRpdHktaW5wdXRbcmVxdWlyZWRdW25nTW9kZWxdJyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogRWxkZXJSZXF1aXJlZFF1YW50aXR5VmFsaWRhdG9yLCBtdWx0aTogdHJ1ZSB9XSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJSZXF1aXJlZFF1YW50aXR5VmFsaWRhdG9yIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG5cbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW5cbiAgcHJpdmF0ZSBfcmVxdWlyZWRJZ25vcmVaZXJvOiBib29sZWFuID0gZmFsc2VcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkSWdub3JlWmVybyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fcmVxdWlyZWRJZ25vcmVaZXJvID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKVxuICB9XG5cbiAgcHVibGljIGdldCByZXF1aXJlZElnbm9yZVplcm8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkSWdub3JlWmVyb1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpXG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZFxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBhbnkge1xuICAgIGxldCByZXN1bHQgPSB7fVxuXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuaXNRdWFudGl0eURlZmluZWQoYy52YWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IHJlcXVpcmVkOiB7IHZhbGlkOiBmYWxzZSB9IH0pXG4gICAgfVxuICAgIC8vIHRoaXMubG9nLmluZm8oJ1wiJyArIGMudmFsdWUgKyAnXCIgLS0+IHZhbGlkYXRlIHJlc3VsdDogJyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCksIGMpO1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIE1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgaXNRdWFudGl0eURlZmluZWQocXR5OiBRdWFudGl0eSk6IGJvb2xlYW4ge1xuICAgIGlmIChxdHk/LnZhbHVlICE9IG51bGwgJiYgcXR5Py51bml0ICE9IG51bGwpIHtcbiAgICAgIHJldHVybiAhKHRoaXMuX3JlcXVpcmVkSWdub3JlWmVybyAmJiBxdHkudmFsdWUgPT09IDApXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXX0=
|
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
import { Quantity } from '../model/quantity';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { Dimensions } from '../model/dimensions';
|
|
4
|
-
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
5
|
-
import { formatNumber } from '@angular/common';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "../elder-unit.service";
|
|
8
|
-
export class ElderQuantityService {
|
|
9
|
-
static { this.EMPTY_STRING = ''; }
|
|
10
|
-
static { this.SPACE_STRING = ' '; }
|
|
11
|
-
static { this.DEFAULT_DIGITS = '1.0-1'; }
|
|
12
|
-
/***************************************************************************
|
|
13
|
-
* *
|
|
14
|
-
* Builder support *
|
|
15
|
-
* *
|
|
16
|
-
**************************************************************************/
|
|
17
|
-
createArea(length, width) {
|
|
18
|
-
return this.createDimensions(length, width, Quantity.zero(length.unit));
|
|
19
|
-
}
|
|
20
|
-
createDimensions(length, width, height) {
|
|
21
|
-
return Dimensions.from(length.unit, length.value, this.convertToUnit(width, length.unit).value, this.convertToUnit(height, length.unit).value);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Returns a copy of the maximum (longest) edge of the dimensions.
|
|
25
|
-
*
|
|
26
|
-
* @param dimensions
|
|
27
|
-
*/
|
|
28
|
-
getMaxEdge(dimensions) {
|
|
29
|
-
if (!dimensions) {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
return Quantity.from(dimensions.unit, Math.max(dimensions.width, dimensions.length, dimensions.height));
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/***************************************************************************
|
|
37
|
-
* *
|
|
38
|
-
* Constructor *
|
|
39
|
-
* *
|
|
40
|
-
**************************************************************************/
|
|
41
|
-
constructor(unitService) {
|
|
42
|
-
this.unitService = unitService;
|
|
43
|
-
/***************************************************************************
|
|
44
|
-
* *
|
|
45
|
-
* Fields *
|
|
46
|
-
* *
|
|
47
|
-
**************************************************************************/
|
|
48
|
-
this.logger = LoggerFactory.getLogger(this.constructor.name);
|
|
49
|
-
this.QUANTITY_CACHE_SIZE = 500;
|
|
50
|
-
this.QUANTITY_CACHE = new Map();
|
|
51
|
-
}
|
|
52
|
-
/***************************************************************************
|
|
53
|
-
* *
|
|
54
|
-
* Public API *
|
|
55
|
-
* *
|
|
56
|
-
**************************************************************************/
|
|
57
|
-
withUnit(quantity, unit) {
|
|
58
|
-
return Quantity.from(unit, quantity.value);
|
|
59
|
-
}
|
|
60
|
-
withValue(quantity, value) {
|
|
61
|
-
return Quantity.from(quantity.unit, value);
|
|
62
|
-
}
|
|
63
|
-
cacheLookup(lookup) {
|
|
64
|
-
return this.QUANTITY_CACHE.get(this.getQuantityIdentifier(lookup));
|
|
65
|
-
}
|
|
66
|
-
cacheUpdate(key, value) {
|
|
67
|
-
if (this.QUANTITY_CACHE.size >= this.QUANTITY_CACHE_SIZE) {
|
|
68
|
-
this.QUANTITY_CACHE.clear();
|
|
69
|
-
}
|
|
70
|
-
this.QUANTITY_CACHE.set(this.getQuantityIdentifier(key), value);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Multiplies a quantity with a multiplier and returns a quantity.
|
|
74
|
-
*
|
|
75
|
-
* Example:
|
|
76
|
-
* Quantity(10,'kg') * 3 = Quantity(30000,'g')
|
|
77
|
-
*
|
|
78
|
-
* @param quantity
|
|
79
|
-
* @param multiplier
|
|
80
|
-
*/
|
|
81
|
-
multiply(quantity, multiplier) {
|
|
82
|
-
if (!quantity || !multiplier) {
|
|
83
|
-
return null;
|
|
84
|
-
}
|
|
85
|
-
return Quantity.from(quantity.unit, quantity.value * multiplier);
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Divides a quantity by another quantity and returns a scalar.
|
|
89
|
-
*
|
|
90
|
-
* Examples:
|
|
91
|
-
* Quantity(10,'kg') / Quantity(5,'kg') = 2
|
|
92
|
-
* Quantity(10,'kg') / Quantity(5,'g') = 2000
|
|
93
|
-
*
|
|
94
|
-
* @param dividend
|
|
95
|
-
* @param divisor
|
|
96
|
-
*/
|
|
97
|
-
divideByQuantity(dividend, divisor) {
|
|
98
|
-
if (!dividend || !divisor) {
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
const dividendNormal = this.toBaseUnitValue(dividend);
|
|
102
|
-
const divisorNormal = this.toBaseUnitValue(divisor);
|
|
103
|
-
return dividendNormal / divisorNormal;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Sums up Quantities and returns a Quantity.
|
|
107
|
-
*
|
|
108
|
-
* Example:
|
|
109
|
-
* Quantity(10,'kg') + Quantity(5,'kg') + Quantity(5,'g') = Quantity(15005, 'g')
|
|
110
|
-
*
|
|
111
|
-
* @param quantities
|
|
112
|
-
*/
|
|
113
|
-
sum(quantities) {
|
|
114
|
-
if (!quantities || quantities.length === 0) {
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
const targetUnit = quantities[0].unit;
|
|
118
|
-
return Quantity.from(targetUnit, quantities.reduce((total, add) => {
|
|
119
|
-
return total + this.convertToUnit(add, targetUnit).value;
|
|
120
|
-
}, 0));
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Subtracts a quantity from another quantity and returns a quantity.
|
|
124
|
-
*
|
|
125
|
-
* Example:
|
|
126
|
-
* Quantity(10,'kg') - Quantity(5,'g') = Quantity(9995, 'g')
|
|
127
|
-
*
|
|
128
|
-
* @param minuend
|
|
129
|
-
* @param subtrahend
|
|
130
|
-
*/
|
|
131
|
-
subtract(minuend, subtrahend) {
|
|
132
|
-
if (!minuend || !subtrahend) {
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
return Quantity.from(minuend.unit, minuend.value - this.convertToUnit(subtrahend, minuend.unit).value);
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Subtracts a quantity from another quantity and returns a quantity.
|
|
139
|
-
*
|
|
140
|
-
* Example:
|
|
141
|
-
* Quantity(10,'kg') + Quantity(500,'g') = Quantity(10.5, 'kg')
|
|
142
|
-
*
|
|
143
|
-
* @param left
|
|
144
|
-
* @param right
|
|
145
|
-
*/
|
|
146
|
-
add(left, right) {
|
|
147
|
-
if (!left || !right) {
|
|
148
|
-
return null;
|
|
149
|
-
}
|
|
150
|
-
return Quantity.from(left.unit, left.value - this.convertToUnit(right, left.unit).value);
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Returns the max quantity of an array of quantities.
|
|
154
|
-
*
|
|
155
|
-
* Example:
|
|
156
|
-
* Quantity(10, 'm'), Quantity(2500, 'cm'), Quantity(0.003, 'km') = Quantity(2500, 'cm')
|
|
157
|
-
*
|
|
158
|
-
* @param quantities
|
|
159
|
-
*/
|
|
160
|
-
max(quantities) {
|
|
161
|
-
if (!quantities || quantities.length == 0) {
|
|
162
|
-
return null;
|
|
163
|
-
}
|
|
164
|
-
const helpers = quantities.map((quantity) => ({
|
|
165
|
-
original: quantity,
|
|
166
|
-
baseValue: this.toBaseUnitValue(quantity),
|
|
167
|
-
}));
|
|
168
|
-
helpers.sort((a, b) => b.baseValue - a.baseValue);
|
|
169
|
-
return helpers[0].original;
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Transforms a quantity to another quantity of the same dimension by target-SI
|
|
173
|
-
*
|
|
174
|
-
* @param quantity
|
|
175
|
-
* @param targetUnit
|
|
176
|
-
*/
|
|
177
|
-
convertToUnit(quantity, targetUnit) {
|
|
178
|
-
if (!quantity || !targetUnit) {
|
|
179
|
-
return null;
|
|
180
|
-
}
|
|
181
|
-
if (quantity.unit === targetUnit) {
|
|
182
|
-
return Quantity.from(quantity.unit, quantity.value);
|
|
183
|
-
}
|
|
184
|
-
const targetBaseFactor = this.unitService.getToBaseFactor(targetUnit);
|
|
185
|
-
if (targetBaseFactor > 0) {
|
|
186
|
-
return Quantity.from(targetUnit, this.toBaseUnitValue(quantity) / targetBaseFactor);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
this.logger.warn('Failed to convert quantity to target unit:' + targetUnit + '. Quantity: ', quantity);
|
|
190
|
-
return quantity;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
toBaseUnitValue(quantity) {
|
|
194
|
-
const targetBaseFactor = this.unitService.getToBaseFactor(quantity.unit);
|
|
195
|
-
return quantity.value * targetBaseFactor;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Returns a quantity in a normalized form.
|
|
199
|
-
* A cache is used to reduce calculations.
|
|
200
|
-
*
|
|
201
|
-
* 8500 kg -> 8.5 t
|
|
202
|
-
* 9000000 mm -> 9 km
|
|
203
|
-
* 1215 m -> 1.2 km
|
|
204
|
-
*
|
|
205
|
-
* @param quantity
|
|
206
|
-
*/
|
|
207
|
-
normalize(quantity) {
|
|
208
|
-
// Check cache
|
|
209
|
-
const cachedItem = this.cacheLookup(quantity);
|
|
210
|
-
// Value is in cache
|
|
211
|
-
if (cachedItem) {
|
|
212
|
-
return cachedItem;
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
const targetQuantity = this.normalizeInternal(quantity);
|
|
216
|
-
// Update cache
|
|
217
|
-
this.cacheUpdate(quantity, targetQuantity);
|
|
218
|
-
return targetQuantity;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
transformQuantity(quantity, normalize = true, targetUnit) {
|
|
222
|
-
if (!quantity) {
|
|
223
|
-
return null;
|
|
224
|
-
}
|
|
225
|
-
if (normalize) {
|
|
226
|
-
return this.normalize(quantity);
|
|
227
|
-
}
|
|
228
|
-
else if (targetUnit) {
|
|
229
|
-
return this.convertToUnit(quantity, targetUnit);
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
return quantity;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
formatQuantity(quantity, locale, normalize, targetUnit, digitsInfo) {
|
|
236
|
-
digitsInfo ||= ElderQuantityService.DEFAULT_DIGITS;
|
|
237
|
-
if (!quantity) {
|
|
238
|
-
return ElderQuantityService.EMPTY_STRING;
|
|
239
|
-
}
|
|
240
|
-
const userOptions = ElderQuantityService.determineUserOptions(normalize, targetUnit, digitsInfo);
|
|
241
|
-
const quantityToDisplay = this.transformQuantity(quantity, userOptions.normalize, userOptions.targetUnit);
|
|
242
|
-
const number = this.strToNumber(quantityToDisplay.value);
|
|
243
|
-
const suffix = this.determineSuffix(userOptions, quantityToDisplay);
|
|
244
|
-
return formatNumber(number, locale, userOptions.digitsInfo) + suffix;
|
|
245
|
-
}
|
|
246
|
-
/***************************************************************************
|
|
247
|
-
* *
|
|
248
|
-
* Private Methods *
|
|
249
|
-
* *
|
|
250
|
-
**************************************************************************/
|
|
251
|
-
normalizeInternal(quantity) {
|
|
252
|
-
// Given quantity value in base unit
|
|
253
|
-
const dimension = this.unitService.getUnitDimension(quantity.unit);
|
|
254
|
-
if (!dimension) {
|
|
255
|
-
return quantity;
|
|
256
|
-
}
|
|
257
|
-
const baseValue = this.toBaseUnitValue(quantity);
|
|
258
|
-
let suitableUnit;
|
|
259
|
-
const dimensionUnits = this.unitService.getUnitInfosByDimension(dimension);
|
|
260
|
-
if (dimensionUnits) {
|
|
261
|
-
const factorSortedUnits = dimensionUnits.sort((a, b) => b.toBaseFactor - a.toBaseFactor);
|
|
262
|
-
for (const unitInfo of factorSortedUnits) {
|
|
263
|
-
const signedBaseValue = baseValue < 0 ? baseValue * -1 : baseValue;
|
|
264
|
-
if (unitInfo.toBaseFactor <= signedBaseValue) {
|
|
265
|
-
suitableUnit = unitInfo;
|
|
266
|
-
break;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
this.logger.debug('Could not find Dimension info for ' +
|
|
272
|
-
dimension +
|
|
273
|
-
'. (' +
|
|
274
|
-
quantity.unit +
|
|
275
|
-
' --> ' +
|
|
276
|
-
dimension +
|
|
277
|
-
')');
|
|
278
|
-
}
|
|
279
|
-
if (!suitableUnit) {
|
|
280
|
-
return quantity;
|
|
281
|
-
}
|
|
282
|
-
const currentToBase = this.unitService.getToBaseFactor(quantity.unit);
|
|
283
|
-
// Ensure we prefer the initial unit if the actual value is not affected.
|
|
284
|
-
// This helps to be consistent and display the actual unit in rare cases when multiple unit alternatives exist (same factor)
|
|
285
|
-
if (suitableUnit.toBaseFactor === currentToBase) {
|
|
286
|
-
return quantity;
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
return this.convertToUnit(quantity, suitableUnit.unit);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
getQuantityIdentifier(quantity) {
|
|
293
|
-
return quantity.value + '-' + quantity.unit;
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Adapted from @angular/common number_pipe.ts
|
|
297
|
-
*/
|
|
298
|
-
strToNumber(value) {
|
|
299
|
-
// Convert strings to numbers
|
|
300
|
-
if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {
|
|
301
|
-
return Number(value);
|
|
302
|
-
}
|
|
303
|
-
if (typeof value !== 'number') {
|
|
304
|
-
throw new Error(`${value} is not a number`);
|
|
305
|
-
}
|
|
306
|
-
return value;
|
|
307
|
-
}
|
|
308
|
-
static determineUserOptions(normalize, targetUnit, digitsInfo) {
|
|
309
|
-
const userOptions = normalize === undefined || typeof normalize === 'boolean'
|
|
310
|
-
? {
|
|
311
|
-
normalize: normalize,
|
|
312
|
-
targetUnit: targetUnit,
|
|
313
|
-
digitsInfo: digitsInfo,
|
|
314
|
-
}
|
|
315
|
-
: normalize;
|
|
316
|
-
if (userOptions.normalize === undefined && !userOptions.targetUnit) {
|
|
317
|
-
userOptions.normalize = true;
|
|
318
|
-
}
|
|
319
|
-
if (userOptions.digitsInfo === undefined) {
|
|
320
|
-
userOptions.digitsInfo = ElderQuantityService.DEFAULT_DIGITS;
|
|
321
|
-
}
|
|
322
|
-
return userOptions;
|
|
323
|
-
}
|
|
324
|
-
determineSuffix(userOptions, quantityToDisplay) {
|
|
325
|
-
if (!userOptions.hideUnit) {
|
|
326
|
-
return (ElderQuantityService.SPACE_STRING + this.unitService.getUnitSymbol(quantityToDisplay.unit));
|
|
327
|
-
}
|
|
328
|
-
else {
|
|
329
|
-
return '';
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderQuantityService, deps: [{ token: i1.ElderUnitService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
333
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderQuantityService, providedIn: 'root' }); }
|
|
334
|
-
}
|
|
335
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderQuantityService, decorators: [{
|
|
336
|
-
type: Injectable,
|
|
337
|
-
args: [{
|
|
338
|
-
providedIn: 'root',
|
|
339
|
-
}]
|
|
340
|
-
}], ctorParameters: () => [{ type: i1.ElderUnitService }] });
|
|
341
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItcXVhbnRpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvbWVhc3VyZXMvdXRpbC9lbGRlci1xdWFudGl0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUU1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBOzs7QUFXOUMsTUFBTSxPQUFPLG9CQUFvQjthQVNQLGlCQUFZLEdBQVcsRUFBRSxBQUFiLENBQWE7YUFDekIsaUJBQVksR0FBVyxHQUFHLEFBQWQsQ0FBYzthQUUxQixtQkFBYyxHQUFXLE9BQU8sQUFBbEIsQ0FBa0I7SUFLeEQ7Ozs7Z0ZBSTRFO0lBRXJFLFVBQVUsQ0FBQyxNQUFnQixFQUFFLEtBQWU7UUFDakQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3pFLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxNQUFnQixFQUFFLEtBQWUsRUFBRSxNQUFnQjtRQUN6RSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQ3BCLE1BQU0sQ0FBQyxJQUFJLEVBQ1gsTUFBTSxDQUFDLEtBQUssRUFDWixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUM1QyxJQUFJLENB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QUM7UUFDRCxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDO0lBRU8sZUFBZSxDQUFDLFdBQWdDLEVBQUUsaUJBQTJCO1FBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUNMLG9CQUFvQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FDM0YsQ0FBQTtRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxFQUFFLENBQUE7UUFDWCxDQUFDO0lBQ0gsQ0FBQzsrR0FoYVUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVuaXQgfSBmcm9tICcuLi9tb2RlbC91bml0J1xuaW1wb3J0IHsgUXVhbnRpdHkgfSBmcm9tICcuLi9tb2RlbC9xdWFudGl0eSdcbmltcG9ydCB7IFVuaXRJbmZvIH0gZnJvbSAnLi4vbW9kZWwvdW5pdC1yZWdpc3RyeSdcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRWxkZXJVbml0U2VydmljZSB9IGZyb20gJy4uL2VsZGVyLXVuaXQuc2VydmljZSdcbmltcG9ydCB7IERpbWVuc2lvbnMgfSBmcm9tICcuLi9tb2RlbC9kaW1lbnNpb25zJ1xuaW1wb3J0IHsgTG9nZ2VyRmFjdG9yeSB9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJ1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgUXVhbnRpdHlQaXBlT3B0aW9ucyB9IGZyb20gJy4uL2VsZGVyLXF1YW50aXR5LnBpcGUnXG5cbmludGVyZmFjZSBRdWFudGl0eVdpdGhCYXNlVmFsdWUge1xuICBvcmlnaW5hbDogUXVhbnRpdHlcbiAgYmFzZVZhbHVlOiBudW1iZXJcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyUXVhbnRpdHlTZXJ2aWNlIHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRU1QVFlfU1RSSU5HOiBzdHJpbmcgPSAnJ1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTUEFDRV9TVFJJTkc6IHN0cmluZyA9ICcgJ1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfRElHSVRTOiBzdHJpbmcgPSAnMS4wLTEnXG5cbiAgcHJpdmF0ZSByZWFkb25seSBRVUFOVElUWV9DQUNIRV9TSVpFID0gNTAwXG4gIHByaXZhdGUgcmVhZG9ubHkgUVVBTlRJVFlfQ0FDSEUgPSBuZXcgTWFwPHN0cmluZywgUXVhbnRpdHk+KClcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQnVpbGRlciBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgY3JlYXRlQXJlYShsZW5ndGg6IFF1YW50aXR5LCB3aWR0aDogUXVhbnRpdHkpOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVEaW1lbnNpb25zKGxlbmd0aCwgd2lkdGgsIFF1YW50aXR5Lnplcm8obGVuZ3RoLnVuaXQpKVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZURpbWVuc2lvbnMobGVuZ3RoOiBRdWFudGl0eSwgd2lkdGg6IFF1YW50aXR5LCBoZWlnaHQ6IFF1YW50aXR5KTogRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbShcbiAgICAgIGxlbmd0aC51bml0LFxuICAgICAgbGVuZ3RoLnZhbHVlLFxuICAgICAgdGhpcy5jb252ZXJ0VG9Vbml0KHdpZHRoLCBsZW5ndGgudW5pdCkudmFsdWUsXG4gICAgICB0aGlzLmNvbnZlcnRUb1VuaXQoaGVpZ2h0LCBsZW5ndGgudW5pdCkudmFsdWVcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1heGltdW0gKGxvbmdlc3QpIGVkZ2Ugb2YgdGhlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBkaW1lbnNpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0TWF4RWRnZShkaW1lbnNpb25zOiBEaW1lbnNpb25zKTogUXVhbnRpdHkge1xuICAgIGlmICghZGltZW5zaW9ucykge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFF1YW50aXR5LmZyb20oXG4gICAgICAgIGRpbWVuc2lvbnMudW5pdCxcbiAgICAgICAgTWF0aC5tYXgoZGltZW5zaW9ucy53aWR0aCwgZGltZW5zaW9ucy5sZW5ndGgsIGRpbWVuc2lvbnMuaGVpZ2h0KVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdW5pdFNlcnZpY2U6IEVsZGVyVW5pdFNlcnZpY2UpIHt9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHdpdGhVbml0KHF1YW50aXR5OiBRdWFudGl0eSwgdW5pdDogVW5pdCkge1xuICAgIHJldHVybiBRdWFudGl0eS5mcm9tKHVuaXQsIHF1YW50aXR5LnZhbHVlKVxuICB9XG5cbiAgcHVibGljIHdpdGhWYWx1ZShxdWFudGl0eTogUXVhbnRpdHksIHZhbHVlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gUXVhbnRpdHkuZnJvbShxdWFudGl0eS51bml0LCB2YWx1ZSlcbiAgfVxuXG4gIHB1YmxpYyBjYWNoZUxvb2t1cChsb29rdXA6IFF1YW50aXR5KTogUXVhbnRpdHkge1xuICAgIHJldHVybiB0aGlzLlFVQU5USVRZX0NBQ0hFLmdldCh0aGlzLmdldFF1YW50aXR5SWRlbnRpZmllcihsb29rdXApKVxuICB9XG5cbiAgcHVibGljIGNhY2hlVXBkYXRlKGtleTogUXVhbnRpdHksIHZhbHVlOiBRdWFudGl0eSkge1xuICAgIGlmICh0aGlzLlFVQU5USVRZX0NBQ0hFLnNpemUgPj0gdGhpcy5RVUFOVElUWV9DQUNIRV9TSVpFKSB7XG4gICAgICB0aGlzLlFVQU5USVRZX0NBQ0hFLmNsZWFyKClcbiAgICB9XG4gICAgdGhpcy5RVUFOVElUWV9DQUNIRS5zZXQodGhpcy5nZXRRdWFudGl0eUlkZW50aWZpZXIoa2V5KSwgdmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogTXVsdGlwbGllcyBhIHF1YW50aXR5IHdpdGggYSBtdWx0aXBsaWVyIGFuZCByZXR1cm5zIGEgcXVhbnRpdHkuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIFF1YW50aXR5KDEwLCdrZycpICogMyA9IFF1YW50aXR5KDMwMDAwLCdnJylcbiAgICpcbiAgICogQHBhcmFtIHF1YW50aXR5XG4gICAqIEBwYXJhbSBtdWx0aXBsaWVyXG4gICAqL1xuXG4gIHB1YmxpYyBtdWx0aXBseShxdWFudGl0eTogUXVhbnRpdHksIG11bHRpcGxpZXI6IG51bWJlcik6IFF1YW50aXR5IHtcbiAgICBpZiAoIXF1YW50aXR5IHx8ICFtdWx0aXBsaWVyKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gUXVhbnRpdHkuZnJvbShxdWFudGl0eS51bml0LCBxdWFudGl0eS52YWx1ZSAqIG11bHRpcGxpZXIpXG4gIH1cblxuICAvKipcbiAgICogRGl2aWRlcyBhIHF1YW50aXR5IGJ5IGFub3RoZXIgcXVhbnRpdHkgYW5kIHJldHVybnMgYSBzY2FsYXIuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKiBRdWFudGl0eSgxMCwna2cnKSAvIFF1YW50aXR5KDUsJ2tnJykgPSAyXG4gICAqIFF1YW50aXR5KDEwLCdrZycpIC8gUXVhbnRpdHkoNSwnZycpID0gMjAwMFxuICAgKlxuICAgKiBAcGFyYW0gZGl2aWRlbmRcbiAgICogQHBhcmFtIGRpdmlzb3JcbiAgICovXG4gIHB1YmxpYyBkaXZpZGVCeVF1YW50aXR5KGRpdmlkZW5kOiBRdWFudGl0eSwgZGl2aXNvcjogUXVhbnRpdHkpOiBudW1iZXIge1xuICAgIGlmICghZGl2aWRlbmQgfHwgIWRpdmlzb3IpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGNvbnN0IGRpdmlkZW5kTm9ybWFsID0gdGhpcy50b0Jhc2VVbml0VmFsdWUoZGl2aWRlbmQpXG4gICAgY29uc3QgZGl2aXNvck5vcm1hbCA9IHRoaXMudG9CYXNlVW5pdFZhbHVlKGRpdmlzb3IpXG4gICAgcmV0dXJuIGRpdmlkZW5kTm9ybWFsIC8gZGl2aXNvck5vcm1hbFxuICB9XG5cbiAgLyoqXG4gICAqIFN1bXMgdXAgUXVhbnRpdGllcyBhbmQgcmV0dXJucyBhIFF1YW50aXR5LlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBRdWFudGl0eSgxMCwna2cnKSArIFF1YW50aXR5KDUsJ2tnJykgKyBRdWFudGl0eSg1LCdnJykgPSBRdWFudGl0eSgxNTAwNSwgJ2cnKVxuICAgKlxuICAgKiBAcGFyYW0gcXVhbnRpdGllc1xuICAgKi9cbiAgcHVibGljIHN1bShxdWFudGl0aWVzOiBRdWFudGl0eVtdKTogUXVhbnRpdHkge1xuICAgIGlmICghcXVhbnRpdGllcyB8fCBxdWFudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRVbml0ID0gcXVhbnRpdGllc1swXS51bml0XG5cbiAgICByZXR1cm4gUXVhbnRpdHkuZnJvbShcbiAgICAgIHRhcmdldFVuaXQsXG4gICAgICBxdWFudGl0aWVzLnJlZHVjZSgodG90YWwsIGFkZCkgPT4ge1xuICAgICAgICByZXR1cm4gdG90YWwgKyB0aGlzLmNvbnZlcnRUb1VuaXQoYWRkLCB0YXJnZXRVbml0KS52YWx1ZVxuICAgICAgfSwgMClcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogU3VidHJhY3RzIGEgcXVhbnRpdHkgZnJvbSBhbm90aGVyIHF1YW50aXR5IGFuZCByZXR1cm5zIGEgcXVhbnRpdHkuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIFF1YW50aXR5KDEwLCdrZycpIC0gUXVhbnRpdHkoNSwnZycpID0gUXVhbnRpdHkoOTk5NSwgJ2cnKVxuICAgKlxuICAgKiBAcGFyYW0gbWludWVuZFxuICAgKiBAcGFyYW0gc3VidHJhaGVuZFxuICAgKi9cbiAgcHVibGljIHN1YnRyYWN0KG1pbnVlbmQ6IFF1YW50aXR5LCBzdWJ0cmFoZW5kOiBRdWFudGl0eSk6IFF1YW50aXR5IHtcbiAgICBpZiAoIW1pbnVlbmQgfHwgIXN1YnRyYWhlbmQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBRdWFudGl0eS5mcm9tKFxuICAgICAgbWludWVuZC51bml0LFxuICAgICAgbWludWVuZC52YWx1ZSAtIHRoaXMuY29udmVydFRvVW5pdChzdWJ0cmFoZW5kLCBtaW51ZW5kLnVuaXQpLnZhbHVlXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnRyYWN0cyBhIHF1YW50aXR5IGZyb20gYW5vdGhlciBxdWFudGl0eSBhbmQgcmV0dXJucyBhIHF1YW50aXR5LlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBRdWFudGl0eSgxMCwna2cnKSArIFF1YW50aXR5KDUwMCwnZycpID0gUXVhbnRpdHkoMTAuNSwgJ2tnJylcbiAgICpcbiAgICogQHBhcmFtIGxlZnRcbiAgICogQHBhcmFtIHJpZ2h0XG4gICAqL1xuICBwdWJsaWMgYWRkKGxlZnQ6IFF1YW50aXR5LCByaWdodDogUXVhbnRpdHkpOiBRdWFudGl0eSB7XG4gICAgaWYgKCFsZWZ0IHx8ICFyaWdodCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIFF1YW50aXR5LmZyb20obGVmdC51bml0LCBsZWZ0LnZhbHVlIC0gdGhpcy5jb252ZXJ0VG9Vbml0KHJpZ2h0LCBsZWZ0LnVuaXQpLnZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1heCBxdWFudGl0eSBvZiBhbiBhcnJheSBvZiBxdWFudGl0aWVzLlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBRdWFudGl0eSgxMCwgJ20nKSwgUXVhbnRpdHkoMjUwMCwgJ2NtJyksIFF1YW50aXR5KDAuMDAzLCAna20nKSA9IFF1YW50aXR5KDI1MDAsICdjbScpXG4gICAqXG4gICAqIEBwYXJhbSBxdWFudGl0aWVzXG4gICAqL1xuXG4gIHB1YmxpYyBtYXgocXVhbnRpdGllczogUXVhbnRpdHlbXSk6IFF1YW50aXR5IHtcbiAgICBpZiAoIXF1YW50aXRpZXMgfHwgcXVhbnRpdGllcy5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBoZWxwZXJzID0gcXVhbnRpdGllcy5tYXAoXG4gICAgICAocXVhbnRpdHkpID0+XG4gICAgICAgIDxRdWFudGl0eVdpdGhCYXNlVmFsdWU+e1xuICAgICAgICAgIG9yaWdpbmFsOiBxdWFudGl0eSxcbiAgICAgICAgICBiYXNlVmFsdWU6IHRoaXMudG9CYXNlVW5pdFZhbHVlKHF1YW50aXR5KSxcbiAgICAgICAgfVxuICAgIClcblxuICAgIGhlbHBlcnMuc29ydCgoYSwgYikgPT4gYi5iYXNlVmFsdWUgLSBhLmJhc2VWYWx1ZSlcblxuICAgIHJldHVybiBoZWxwZXJzWzBdLm9yaWdpbmFsXG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyBhIHF1YW50aXR5IHRvIGFub3RoZXIgcXVhbnRpdHkgb2YgdGhlIHNhbWUgZGltZW5zaW9uIGJ5IHRhcmdldC1TSVxuICAgKlxuICAgKiBAcGFyYW0gcXVhbnRpdHlcbiAgICogQHBhcmFtIHRhcmdldFVuaXRcbiAgICovXG4gIHB1YmxpYyBjb252ZXJ0VG9Vbml0KHF1YW50aXR5OiBRdWFudGl0eSwgdGFyZ2V0VW5pdDogVW5pdCk6IFF1YW50aXR5IHtcbiAgICBpZiAoIXF1YW50aXR5IHx8ICF0YXJnZXRVbml0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmIChxdWFudGl0eS51bml0ID09PSB0YXJnZXRVbml0KSB7XG4gICAgICByZXR1cm4gUXVhbnRpdHkuZnJvbShxdWFudGl0eS51bml0LCBxdWFudGl0eS52YWx1ZSlcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRCYXNlRmFjdG9yID0gdGhpcy51bml0U2VydmljZS5nZXRUb0Jhc2VGYWN0b3IodGFyZ2V0VW5pdClcblxuICAgIGlmICh0YXJnZXRCYXNlRmFjdG9yID4gMCkge1xuICAgICAgcmV0dXJuIFF1YW50aXR5LmZyb20odGFyZ2V0VW5pdCwgdGhpcy50b0Jhc2VVbml0VmFsdWUocXVhbnRpdHkpIC8gdGFyZ2V0QmFzZUZhY3RvcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjb252ZXJ0IHF1YW50aXR5IHRvIHRhcmdldCB1bml0OicgKyB0YXJnZXRVbml0ICsgJy4gUXVhbnRpdHk6ICcsXG4gICAgICAgIHF1YW50aXR5XG4gICAgICApXG4gICAgICByZXR1cm4gcXVhbnRpdHlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9CYXNlVW5pdFZhbHVlKHF1YW50aXR5OiBRdWFudGl0eSk6IG51bWJlciB7XG4gICAgY29uc3QgdGFyZ2V0QmFzZUZhY3RvciA9IHRoaXMudW5pdFNlcnZpY2UuZ2V0VG9CYXNlRmFjdG9yKHF1YW50aXR5LnVuaXQpXG4gICAgcmV0dXJuIHF1YW50aXR5LnZhbHVlICogdGFyZ2V0QmFzZUZhY3RvclxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBxdWFudGl0eSBpbiBhIG5vcm1hbGl6ZWQgZm9ybS5cbiAgICogQSBjYWNoZSBpcyB1c2VkIHRvIHJlZHVjZSBjYWxjdWxhdGlvbnMuXG4gICAqXG4gICAqIDg1MDAga2cgLT4gOC41IHRcbiAgICogOTAwMDAwMCBtbSAtPiA5IGttXG4gICAqIDEyMTUgbSAtPiAxLjIga21cbiAgICpcbiAgICogQHBhcmFtIHF1YW50aXR5XG4gICAqL1xuICBwdWJsaWMgbm9ybWFsaXplKHF1YW50aXR5OiBRdWFudGl0eSk6IFF1YW50aXR5IHtcbiAgICAvLyBDaGVjayBjYWNoZVxuICAgIGNvbnN0IGNhY2hlZEl0ZW0gPSB0aGlzLmNhY2hlTG9va3VwKHF1YW50aXR5KVxuXG4gICAgLy8gVmFsdWUgaXMgaW4gY2FjaGVcbiAgICBpZiAoY2FjaGVkSXRlbSkge1xuICAgICAgcmV0dXJuIGNhY2hlZEl0ZW1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGFyZ2V0UXVhbnRpdHkgPSB0aGlzLm5vcm1hbGl6ZUludGVybmFsKHF1YW50aXR5KVxuXG4gICAgICAvLyBVcGRhdGUgY2FjaGVcbiAgICAgIHRoaXMuY2FjaGVVcGRhdGUocXVhbnRpdHksIHRhcmdldFF1YW50aXR5KVxuXG4gICAgICByZXR1cm4gdGFyZ2V0UXVhbnRpdHlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtUXVhbnRpdHkoXG4gICAgcXVhbnRpdHk6IFF1YW50aXR5LFxuICAgIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWUsXG4gICAgdGFyZ2V0VW5pdD86IFVuaXQgfCBzdHJpbmdcbiAgKTogUXVhbnRpdHkge1xuICAgIGlmICghcXVhbnRpdHkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKHF1YW50aXR5KVxuICAgIH0gZWxzZSBpZiAodGFyZ2V0VW5pdCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvVW5pdChxdWFudGl0eSwgPFVuaXQ+dGFyZ2V0VW5pdClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHF1YW50aXR5XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcm1hdFF1YW50aXR5KFxuICAgIHF1YW50aXR5OiBRdWFudGl0eSB8IHVuZGVmaW5lZCxcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBub3JtYWxpemU/OiBib29sZWFuIHwgUXVhbnRpdHlQaXBlT3B0aW9ucyxcbiAgICB0YXJnZXRVbml0PzogVW5pdCB8IHN0cmluZyxcbiAgICBkaWdpdHNJbmZvPzogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgZGlnaXRzSW5mbyB8fD0gRWxkZXJRdWFudGl0eVNlcnZpY2UuREVGQVVMVF9ESUdJVFNcblxuICAgIGlmICghcXVhbnRpdHkpIHtcbiAgICAgIHJldHVybiBFbGRlclF1YW50aXR5U2VydmljZS5FTVBUWV9TVFJJTkdcbiAgICB9XG4gICAgY29uc3QgdXNlck9wdGlvbnMgPSBFbGRlclF1YW50aXR5U2VydmljZS5kZXRlcm1pbmVVc2VyT3B0aW9ucyhub3JtYWxpemUsIHRhcmdldFVuaXQsIGRpZ2l0c0luZm8pXG5cbiAgICBjb25zdCBxdWFudGl0eVRvRGlzcGxheTogUXVhbnRpdHkgPSB0aGlzLnRyYW5zZm9ybVF1YW50aXR5KFxuICAgICAgcXVhbnRpdHksXG4gICAgICB1c2VyT3B0aW9ucy5ub3JtYWxpemUsXG4gICAgICB1c2VyT3B0aW9ucy50YXJnZXRVbml0XG4gICAgKVxuICAgIGNvbnN0IG51bWJlciA9IHRoaXMuc3RyVG9OdW1iZXIocXVhbnRpdHlUb0Rpc3BsYXkudmFsdWUpXG4gICAgY29uc3Qgc3VmZml4ID0gdGhpcy5kZXRlcm1pbmVTdWZmaXgodXNlck9wdGlvbnMsIHF1YW50aXR5VG9EaXNwbGF5KVxuICAgIHJldHVybiBmb3JtYXROdW1iZXIobnVtYmVyLCBsb2NhbGUsIHVzZXJPcHRpb25zLmRpZ2l0c0luZm8pICsgc3VmZml4XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBNZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIG5vcm1hbGl6ZUludGVybmFsKHF1YW50aXR5OiBRdWFudGl0eSk6IFF1YW50aXR5IHtcbiAgICAvLyBHaXZlbiBxdWFudGl0eSB2YWx1ZSBpbiBiYXNlIHVuaXRcblxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMudW5pdFNlcnZpY2UuZ2V0VW5pdERpbWVuc2lvbihxdWFudGl0eS51bml0KVxuXG4gICAgaWYgKCFkaW1lbnNpb24pIHtcbiAgICAgIHJldHVybiBxdWFudGl0eVxuICAgIH1cblxuICAgIGNvbnN0IGJhc2VWYWx1ZSA9IHRoaXMudG9CYXNlVW5pdFZhbHVlKHF1YW50aXR5KVxuXG4gICAgbGV0IHN1aXRhYmxlVW5pdDogVW5pdEluZm9cblxuICAgIGNvbnN0IGRpbWVuc2lvblVuaXRzID0gdGhpcy51bml0U2VydmljZS5nZXRVbml0SW5mb3NCeURpbWVuc2lvbihkaW1lbnNpb24pXG5cbiAgICBpZiAoZGltZW5zaW9uVW5pdHMpIHtcbiAgICAgIGNvbnN0IGZhY3RvclNvcnRlZFVuaXRzID0gZGltZW5zaW9uVW5pdHMuc29ydCgoYSwgYikgPT4gYi50b0Jhc2VGYWN0b3IgLSBhLnRvQmFzZUZhY3RvcilcblxuICAgICAgZm9yIChjb25zdCB1bml0SW5mbyBvZiBmYWN0b3JTb3J0ZWRVbml0cykge1xuICAgICAgICBjb25zdCBzaWduZWRCYXNlVmFsdWUgPSBiYXNlVmFsdWUgPCAwID8gYmFzZVZhbHVlICogLTEgOiBiYXNlVmFsdWVcbiAgICAgICAgaWYgKHVuaXRJbmZvLnRvQmFzZUZhY3RvciA8PSBzaWduZWRCYXNlVmFsdWUpIHtcbiAgICAgICAgICBzdWl0YWJsZVVuaXQgPSB1bml0SW5mb1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCBEaW1lbnNpb24gaW5mbyBmb3IgJyArXG4gICAgICAgICAgZGltZW5zaW9uICtcbiAgICAgICAgICAnLiAoJyArXG4gICAgICAgICAgcXVhbnRpdHkudW5pdCArXG4gICAgICAgICAgJyAtLT4gJyArXG4gICAgICAgICAgZGltZW5zaW9uICtcbiAgICAgICAgICAnKSdcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoIXN1aXRhYmxlVW5pdCkge1xuICAgICAgcmV0dXJuIHF1YW50aXR5XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRvQmFzZSA9IHRoaXMudW5pdFNlcnZpY2UuZ2V0VG9CYXNlRmFjdG9yKHF1YW50aXR5LnVuaXQpXG5cbiAgICAvLyBFbnN1cmUgd2UgcHJlZmVyIHRoZSBpbml0aWFsIHVuaXQgaWYgdGhlIGFjdHVhbCB2YWx1ZSBpcyBub3QgYWZmZWN0ZWQuXG4gICAgLy8gVGhpcyBoZWxwcyB0byBiZSBjb25zaXN0ZW50IGFuZCBkaXNwbGF5IHRoZSBhY3R1YWwgdW5pdCBpbiByYXJlIGNhc2VzIHdoZW4gbXVsdGlwbGUgdW5pdCBhbHRlcm5hdGl2ZXMgZXhpc3QgKHNhbWUgZmFjdG9yKVxuICAgIGlmIChzdWl0YWJsZVVuaXQudG9CYXNlRmFjdG9yID09PSBjdXJyZW50VG9CYXNlKSB7XG4gICAgICByZXR1cm4gcXVhbnRpdHlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvVW5pdChxdWFudGl0eSwgc3VpdGFibGVVbml0LnVuaXQpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRRdWFudGl0eUlkZW50aWZpZXIocXVhbnRpdHk6IFF1YW50aXR5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcXVhbnRpdHkudmFsdWUgKyAnLScgKyBxdWFudGl0eS51bml0XG4gIH1cblxuICAvKipcbiAgICogQWRhcHRlZCBmcm9tIEBhbmd1bGFyL2NvbW1vbiBudW1iZXJfcGlwZS50c1xuICAgKi9cbiAgcHJpdmF0ZSBzdHJUb051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHN0cmluZ3MgdG8gbnVtYmVyc1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihOdW1iZXIodmFsdWUpIC0gcGFyc2VGbG9hdCh2YWx1ZSkpKSB7XG4gICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3ZhbHVlfSBpcyBub3QgYSBudW1iZXJgKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGRldGVybWluZVVzZXJPcHRpb25zKFxuICAgIG5vcm1hbGl6ZTogYm9vbGVhbiB8IFF1YW50aXR5UGlwZU9wdGlvbnMsXG4gICAgdGFyZ2V0VW5pdDogVW5pdCB8IHN0cmluZyxcbiAgICBkaWdpdHNJbmZvOiBzdHJpbmdcbiAgKTogUXVhbnRpdHlQaXBlT3B0aW9ucyB7XG4gICAgY29uc3QgdXNlck9wdGlvbnMgPVxuICAgICAgbm9ybWFsaXplID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG5vcm1hbGl6ZSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8gPFF1YW50aXR5UGlwZU9wdGlvbnM+e1xuICAgICAgICAgICAgbm9ybWFsaXplOiBub3JtYWxpemUsXG4gICAgICAgICAgICB0YXJnZXRVbml0OiB0YXJnZXRVbml0LFxuICAgICAgICAgICAgZGlnaXRzSW5mbzogZGlnaXRzSW5mbyxcbiAgICAgICAgICB9XG4gICAgICAgIDogbm9ybWFsaXplXG5cbiAgICBpZiAodXNlck9wdGlvbnMubm9ybWFsaXplID09PSB1bmRlZmluZWQgJiYgIXVzZXJPcHRpb25zLnRhcmdldFVuaXQpIHtcbiAgICAgIHVzZXJPcHRpb25zLm5vcm1hbGl6ZSA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAodXNlck9wdGlvbnMuZGlnaXRzSW5mbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VyT3B0aW9ucy5kaWdpdHNJbmZvID0gRWxkZXJRdWFudGl0eVNlcnZpY2UuREVGQVVMVF9ESUdJVFNcbiAgICB9XG4gICAgcmV0dXJuIHVzZXJPcHRpb25zXG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVN1ZmZpeCh1c2VyT3B0aW9uczogUXVhbnRpdHlQaXBlT3B0aW9ucywgcXVhbnRpdHlUb0Rpc3BsYXk6IFF1YW50aXR5KSB7XG4gICAgaWYgKCF1c2VyT3B0aW9ucy5oaWRlVW5pdCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgRWxkZXJRdWFudGl0eVNlcnZpY2UuU1BBQ0VfU1RSSU5HICsgdGhpcy51bml0U2VydmljZS5nZXRVbml0U3ltYm9sKHF1YW50aXR5VG9EaXNwbGF5LnVuaXQpXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgfVxufVxuIl19
|