{"version":3,"file":"elderbyte-ngx-starter.mjs","sources":["../../../../projects/elderbyte/ngx-starter/src/lib/common/format/bytes-format.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/bytes.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/time-ago.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/weight.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/time-duration.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/elder-repeat.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/elder-safe-url.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/time/period-duration.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/duration/duration-bucket.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/duration/duration-format.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/format/duration-format-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/iso-duration.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/elder-round.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/time/time-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/time/interval.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/format/iso-interval-format-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/iso-interval.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/iso-interval-parse.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/elder-truncate.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/pipes/elder-pipes.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/objects.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/arrays.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/sets.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/json-map.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/rxjs/operators/lazy-sample.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/format/bytes-per-second-format.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/format/curency-format-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/format/phone/phone-format.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/format/phone/country-phone-format.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/format/phone/phone.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/time/interval-coerce.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/time/date-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/time/temporal-plain-date-interval.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/time/temporal-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/collection-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/filters/filter.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/filter/object-path-resolver.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/exceptions/unreachable-case-error.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/filter/object-field-matcher.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/filter/local-data-filter.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/filter/filter-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/filters/filter-context.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/sort.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/page.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/entity-set-patch.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/http-params-builder.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/field-comparator.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/continuable-listing.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/token-chunk-request.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/indexed-entities.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context-status.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/sort-context.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context-simple.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context-continuable-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context-continuable-paged.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context-continuable-token.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context-active-page.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/mat-table-data-context-binding.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context-life-cycle-binding.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/required-filter-evaluator.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context-auto-starter.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/patch/deep-partial-patcher.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context-source-event-binding.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/data-source-change-event.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/entity-id-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/data-source-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/sort-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/local/local-list-data-source.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/local/local-paged-data-source.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/data-source.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/fetcher/delegate-data-source.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/data-context/data-context-builder.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/data-source-adapter.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/data-source-processor.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/batcher.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/rest/rest-client.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/curated/curated-data-source.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/curated/curated-list-data-source.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/datasource/curated/curated-paged-data-source.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/view-providers.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/elder-entity-value-accessor.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/elder-multi-entity-value-accessor.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/entities-change-event.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/value-change-event.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/value-accessor-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/template-composite-control.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/form-field-base.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/elder-form-field-control-base.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/multi-model-base.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/elder-from-field-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/elder-from-field-entity-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/elder-from-field-multi-entity-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/url/url-query-params.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/url-builder.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/uuid-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/property-path-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/next-number-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/value-wrapper.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/ng-zone-utils.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/query-list-binding.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/parse-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/focus-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/signal-input.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/selection/selection-model.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/http/transfer/data-transfer-status.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/http/transfer/data-transfer-progress.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/http/transfer/data-transfer-state.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/http/transfer/data-transfer-progress-aggregate.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/http/transfer/data-transfer-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/http/transfer/http-data-transfer.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/http/transfer/data-transfer-factory.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/http/upload/file-upload-client.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/http/http-client-pristine.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/http/http-client-builder.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/i18n/entity/language-tag.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/i18n/entity/locale.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/i18n/entity/impl/translated.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/i18n/entity/impl/i18n-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/i18n/entity/localisation-picker.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/i18n/entity/impl/i18n-text.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/i18n/entity/translated-converter.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/i18n/entity/elder-multi-translate-loader.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/enums/elder-enum-translation.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/csv/csv-serializer.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/csv/csv-spec.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/async/refreshing-entity.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/url/elder-url-fragment-params.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/url/elder-router.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/dom/dom-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/webstorage/webstorage.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/suggestion-provider.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/reactive-map.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/theme/theme-spec.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/theme/known-elder-themes.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/theme/elder-theme.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/theme/elder-theme-applier.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/theme/elder-theme-preference.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/theme/elder-theme.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/theme/elder-theme.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/access-denied/elder-access-denied.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/access-denied/elder-access-denied.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/access-denied/elder-access-denied.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/expand-toggle-button/elder-expand-toggle-button.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/expand-toggle-button/elder-expand-toggle-button.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/expand-toggle-button/elder-expand-toggle-button.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/labels/labels-input/labels-input.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/labels/labels-input/labels-input.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/labels/elder-labels.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/panels/card-panel/elder-card-panel.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/panels/card-panel/elder-card-panel.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/panels/elder-dialog-panel/elder-dialog-panel.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/panels/elder-dialog-panel/elder-dialog-panel.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/panels/toggle-panel/elder-toggle-panel.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/panels/toggle-panel/elder-toggle-panel.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/panels/toggle-panel/elder-toggle-panel-trigger.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/panels/elder-panel.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/file-system-api.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/listing/file-entry.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/elder-file-select-input.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/listing/file-listing-system-handle.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/elder-file-select.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/file-select/file-select.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/file-select/file-select.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/file-upload/file-upload.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/file-upload/file-upload.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/listing/file-listing-webkit.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/listing/file-listing-rx.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/elder-file-drop-zone.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/blob-url.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/toasts/toast-type.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/toasts/standard-toast/standard-toast.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/toasts/standard-toast/standard-toast.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/errors/error-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/toasts/elder-toast.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/blob-viewer/elder-blob-viewer.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/blob-viewer/elder-blob-viewer.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/drag-n-drop/elder-drop-zone/elder-drop-zone.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/drag-n-drop/elder-drop-zone/elder-drop-zone.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/drag-n-drop/global-drag-drop.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/files/elder-file.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/card-organizer/card-organizer/elder-stack-card.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/card-organizer/card-stack.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/cards/elder-card/elder-card.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/cards/elder-card/elder-card.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/card-organizer/card-stack/elder-card-stack.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/card-organizer/card-stack/elder-card-stack.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/card-organizer/card-organizer/elder-card-organizer.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/card-organizer/card-organizer/elder-card-organizer.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/cards/elder-card/elder-card.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/card-organizer/card-organizer-data.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/card-organizer/elder-card-organizer.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/base/elder-data-view.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/base/data-view-options-provider-binding.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/base/elder-data-view-options.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/base/elder-data-view-options-provider.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/activation/model/activation-event-source.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/base/data-context-range.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/base/data-selection.controller.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/activation/model/item-activation-event.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/activation/model/activation-model.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/keyboard/modifier-key-state.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/base/data-view-interaction-controller.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/base/elder-data-view-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/composite-sort/composite-sort.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/composite-sort/composite-sort-context.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/composite-sort/elder-composite-sort/elder-composite-sort.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/composite-sort/elder-composite-sort/elder-composite-sort.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/composite-sort/composite-sort-dc.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/dialogs/elder-dialog-config.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/dialogs/question-dialog/elder-question-dialog.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/dialogs/question-dialog/elder-question-dialog.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/dialogs/selection-dialog/elder-selection-dialog.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/headers/elder-header/elder-header.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/headers/elder-header/elder-header.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/headers/elder-header.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/dialogs/elder-dialog.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/dialogs/elder-dialog.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/badge/elder-badge.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/selection/master-selection-state.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/selection/data-context-selection.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/activation/model/item-activation-options.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/utils/input-utils.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/activation/data-view-activation-controller.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/activation/elder-data-activation.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/drag-and-drop/events/data-view-drag-entered-event.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/drag-and-drop/events/data-view-drag-exited-event.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/drag-and-drop/events/data-view-item-drop-event.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/drag-and-drop/data-view-dnd-controller.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/drag-and-drop/elder-data-view-dnd.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/drag-and-drop/grouping/data-view-dnd-group-controller.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/drag-and-drop/grouping/elder-data-view-dnd-group.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/drag-and-drop/local-data/data-view-dnd-model-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/drag-and-drop/local-data/elder-local-dnd-support.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/drag-and-drop/elder-data-view-item-drag.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/elder-data-common.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/elder-continuator/elder-continuator.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/common/elder-continuator/elder-continuator.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-table-row.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/model/elder-column-layout.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/model/elder-table-model.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/model/elder-table-model-provider.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/model/elder-table-model-cdk-table-binding.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-table-column.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/model/elder-table-model-query-group.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-table/elder-table-toolbar.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/infinitescroll/elder-infinite-scroll.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/drag-and-drop/elder-table-drop-list-connector.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/columns/elder-table-selection-cell/elder-table-selection-cell.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/columns/elder-table-selection-cell/elder-table-selection-cell.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/table-navigation/table-navigation.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/table-navigation/table-navigation.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-table-extension.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-table/elder-table.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-table/elder-table.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/infinitescroll/elder-infinite-autocomplete.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/infinitescroll/elder-infinite-scroll.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-paginator-intl.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-delayed-focus.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-touched.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-plug-parent-form.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-stop-event-propagation.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/validation/validators/elder-min.validator.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/validation/validators/elder-max.validator.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-form-field-label.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-key-event.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/clipboard/elder-clipboard.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-clipboard-put.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/base/elder-class-hostbinding-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-form-field-dense.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-form-field-no-spinner.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/validation/validators/elder-required-ignore-zero.validator.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/validation/validators/elder-multiple-of.validator.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-next-focusable.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/checkbox/elder-triple-state-checkbox-controller.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/checkbox/elder-triple-state-checkbox.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-tab-focus-trap.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-form-field-no-hint.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-input-pattern.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/validation/strategies/fallback-validation-message-strategy.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/validation/strategies/common-validation-message-strategy.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/validation/strategies/dynamic-validation-message-strategy.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/validation/validation-message-renderer.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/validation/elder-validation-error.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/checkbox/elder-single-state-checkbox-controller.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/checkbox/elder-single-state-checkbox.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-forms-directives.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-table-sort.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-number-cell.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/activation/elder-table-activation.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-table-root.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/activation/elder-delete-active.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-center-cell.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/table/elder-table.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/grid/elder-tile/elder-tile.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/grid/elder-tile/elder-tile.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/grid/elder-grid/layout/grid-row.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/grid/elder-grid/layout/grid-row-layout-builder.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/layout/responsive/observer/resize-observer.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/grid/elder-grid/elder-grid.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/grid/elder-grid/elder-grid.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/grid/activation/elder-grid-activation.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/grid/elder-grid.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/master-detail/master-detail-activation-event.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/master-detail/elder-master-detail.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/master-detail/elder-detail.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/master-detail/elder-master.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/templates/template-slot-manager.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/toolbar/elder-toolbar.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/toolbar/elder-toolbar-column.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/language/elder-language.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/language/language-switcher/elder-language-switcher.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/language/language-switcher/elder-language-switcher.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/master-detail/elder-detail-dialog/elder-detail-dialog.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/master-detail/elder-detail-dialog/elder-detail-dialog.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/master-detail/elder-master-detail-provider.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/layout/basic-pane-layout/basic-pane-layout.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/master-detail/master-detail/elder-master-detail.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/master-detail/master-detail/elder-master-detail.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/master-detail/elder-master-activation.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/forms/elder-from-field-customizable-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/quantity-input/quantity-form-field/elder-quantity-form-field.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/quantity-input/quantity-form-field/elder-quantity-form-field.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/model/quantity.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/model/dimensions.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/model/unit-dimension.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/model/unit-registry.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/model/unit.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/elder-unit.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/util/elder-quantity.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/elder-quantity.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/elder-quantity-transform.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/elder-select-value.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/popup/selection-model-popup.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-chip-select-option/elder-select-option.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-chip-select-option/elder-select-option.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/elder-select-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/input/autocomplete/elder-autocomplete.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/elder-select-on-tab.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/input/autocomplete/elder-autocomplete/elder-suggestion-panel.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/input/autocomplete/elder-autocomplete/elder-suggestion-panel.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/auto/elder-auto-select-first.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/auto/elder-auto-select-suggest-first.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/single/elder-select/elder-select.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/single/elder-select/elder-select.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/directives/elder-unit-select.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/quantity-input/quantity-input-control/elder-quantity-input-control.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/quantity-input/quantity-input-control/elder-quantity-input-control.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/dimensions/dimensions-input/elder-dimensions-input.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/dimensions/dimensions-input/elder-dimensions-input.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/quantity-input/validation/elder-required-quantity.validator.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/quantity-input/validation/elder-quantity-range.validator.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/dimensions/validation/elder-required-dimensions.validator.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/measures/elder-measures.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/input/autocomplete/many/word-position-finder.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/input/autocomplete/elder-autocomplete-many.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/input/autocomplete/elder-autocomplete.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-multi-select-base.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/elder-select-chip.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-multi-select-chips/select-chip-spec.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/single/elder-clear-select.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/chips/elder-chip-label.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/auto/elder-select-first-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/auto/elder-auto-select-first.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/popup/selection-model-popup-trigger-adapter.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/chips/elder-chips.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-multi-select-chip-options/select-option-chip-spec.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-multi-select-chip-options/chip-options-provider.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-mutli-select-all-directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/filter/elder-filter-chip-template/elder-filter-chip-template.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/filter/elder-filter-chip-template/elder-filter-chip-template.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/filter/include-exclude-selection-model.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/filter/elder-chip-filter-style-resolver.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/filter/elder-chips-include-exclude.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/domain/input/search-input-state.ts","../../../../projects/elderbyte/ngx-starter/src/lib/common/data/filters/filter-commons.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/filter/include-exclude-model-filter-adapter.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/domain/context/search-context.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/domain/context/search-context.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/elder-search-context.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-search-include-exclude.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/elder-select.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/language/elder-language-config.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/language/elder-language-interceptor.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/language/elder-language.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/toolbar/elder-toolbar.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-view/master-detail/elder-master-detail.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/nav/nav-list/elder-nav-list.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/nav/nav-list/elder-nav-list.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/nav/nav-link/elder-nav-link.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/nav/nav-link/elder-nav-link.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/nav/nav-group/elder-nav-group.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/nav/nav-group/elder-nav-group.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/nav/elder-nav.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/bread-crumbs/path/path.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/navigation/bread-crumbs/elder-bread-crumbs.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/drawers/elder-router-outlet.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/elder-shell.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/drawers/elder-route-outlet-drawer.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/shell/elder-shell.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/shell/elder-shell.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/elder-shell-slot.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/header/elder-app-header/elder-app-header.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/header/elder-app-header/elder-app-header.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/drawers/drawer-outlet-binding.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/shell/elder-shell.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/date-formats/locale-date-formats.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/date-adapters/custom-date-adapter.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/period/period-bucket.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/period/period-format.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-toggle-text-input.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/smart-local-date-parser.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-local-date-input/elder-local-date-input.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-local-date-input/elder-local-date-input.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-date-switcher/elder-date-switcher.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-date-switcher/elder-date-switcher.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-local-time-input/elder-local-time-input.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-local-time-input/elder-local-time-input.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-date-time-input/elder-date-time-input.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-date-time-input/elder-date-time-input.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-input/elder-interval-input.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-input/elder-interval-input.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/duration/elder-duration-input/elder-duration-input.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/duration/elder-duration-input/elder-duration-input.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/period/elder-period-input/elder-period-input.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/period/elder-period-input/elder-period-input.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/pipes/to-iso-date-string.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/model/interval-state.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/util/interval-picker-util.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/model/anchor-state.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/controller/interval-anchor-controller.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/controller/interval-calendar-controller.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/controller/interval-form-controller.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/model/smart-shift-state.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/controller/interval-select-controller.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/controller/interval-shift-controller.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/controller/interval-controller.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/manager/interval-picker-state-manager.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/presenter/interval-picker-presenter.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/elder-interval-picker.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/elder-interval-picker.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/overlays/elder-overlay-origin.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/overlays/elder-overlay-trigger.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/overlays/elder-overlay-ref.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/overlays/elder-overlay.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/interval-picker-toggle/elder-interval-picker-toggle.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-interval-picker/interval-picker-binding/elder-interval-picker-binding.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/time/elder-time.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/locales/elder-locales-de-ch.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/elder-localized-text-column.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/elder-localized-input-dialog.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/picker/localisation-picker.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/directives/elder-initial-value.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/filter/default-input-filter-converter.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/elder-search-input.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/search-box/elder-search-panel.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/search-box/elder-search-box.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/search-box/elder-search-box.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/overlays/elder-overlay.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/domain/url/search-query-params-parser.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/domain/url/elder-search-url.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/domain/url/elder-search-url.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/elder-search.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/elder-forms.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/picker/i18n-pick-async.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/picker/i18n-pick.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/elder-localized-texts.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/i18n/entities/elder-i18n-entities.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/select-chip-list/elder-chip-list-select.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-transfer/elder-data-transfer.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/data-transfer/elder-data-transfer.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/connectivity/elder-connectivity.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/connectivity/elder-connectivity.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/scrollbar/elder-scrollbar.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/scrollbar/elder-scrollbar.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/forms/search/domain/input/simple-search-input.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/toasts/elder-toast.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/single/elder-select-form-field.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-multi-select-form-field.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips-options.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/currency/model/currency-code.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/currency/model/currency-unit.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/currency/model/currency-unit-registry.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/currency/model/currency.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/currency/elder-currency.pipe.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/currency/elder-currency.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/viewers/elder-viewers.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/button-group/elder-button-group/elder-button-group.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/button-group/elder-button-group/elder-button-group.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/button-group/elder-button-group.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/url-fragment/elder-url-fragment.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/url-fragment/elder-url-fragment.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/url-fragment/webapp-domain/webapp-domain-spec.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/url-fragment/webapp-domain/webapp-domain-spec.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/url-fragment/webapp-domain/webapp-domain-switcher.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/graph/elder-progress-bar/sub-bar.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/graph/elder-progress-bar/elder-progress-bar.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/graph/elder-progress-bar/elder-progress-bar.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/graph/elder-progress-bar/elder-progress-bar.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/containers/elder-scroll-container/elder-scroll-container.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/containers/elder-scroll-container/elder-scroll-container.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/containers/elder-containers.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/csv/elder-csv-stream-exporter.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/csv/elder-csv-stream-exporter-builder.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/csv/elder-csv-stream-exporter-builder.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/csv/elder-csv.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/typed-event-message.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/iframe-messages.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/iframe-host/iframe-host.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/iframe-host/iframe-host.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/iframe-dialog/iframe-dialog.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/iframe-dialog/iframe-dialog.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/iframe-side-content/iframe-side-content.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/iframe-side-content/iframe-side-content.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/iframe.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/iframe-close.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/data-view/data-view-iframe/data-view-iframe.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/data-view/data-view-iframe/data-view-iframe.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/data-view/data-view-iframe-adapter.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/iframes/elder-iframe.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/errors/exception-detail/elder-exception-detail.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/errors/exception-detail/elder-exception-detail.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/errors/elder-error.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/auditing/audited-entity/elder-audited-entity.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/auditing/audited-entity/elder-audited-entity.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/auditing/i-audited-entity.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/auditing/elder-audit.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/tabs/elder-tab/elder-tab.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/tabs/elder-tab-group-routing/elder-tab-group-routing.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/tabs/elder-tab.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/page/exit-guard/page-exit-lock/page-exit-lock.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/page/exit-guard/page-exit-lock/page-exit-lock.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/page/exit-guard/page-exit-lock-overview/page-exit-lock-overview.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/page/exit-guard/page-exit-lock-overview/page-exit-lock-overview.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/page/exit-guard/page-exit-guard.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/page/exit-guard/page-exit-lock-indicator/page-exit-lock-indicator.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/page/exit-guard/page-exit-lock-indicator/page-exit-lock-indicator.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/components/page/exit-guard/page-exit-guard.module.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/layout/pane/pane.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/layout/pane/pane-content.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/layout/pane/header/pane-title.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/layout/pane/header/pane-header.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/layout/pane/header/pane-subtitle.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/layout/pane/header/pane-actions.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/layout/single-pane-wrapper/single-pane-wrapper.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/colors/named/named-color.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/colors/named/named-color-select.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/colors/named/named-color.directive.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/colors/named/named-color-select-value/named-color-select-value.component.ts","../../../../projects/elderbyte/ngx-starter/src/lib/components/colors/named/named-color-select-value/named-color-select-value.component.html","../../../../projects/elderbyte/ngx-starter/src/lib/features/event-source/standard/reactive-event-source.ts","../../../../projects/elderbyte/ngx-starter/src/lib/features/event-source/standard/elder-event-source.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/features/event-source/fetch/reactive-fetch-event-source.ts","../../../../projects/elderbyte/ngx-starter/src/lib/features/event-source/fetch/reactive-fetch-event-source.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/features/kafent/kafent-config.ts","../../../../projects/elderbyte/ngx-starter/src/lib/features/kafent/kafent-event-stream.ts","../../../../projects/elderbyte/ngx-starter/src/lib/features/kafent/access-token-provider.ts","../../../../projects/elderbyte/ngx-starter/src/lib/features/kafent/kafent-event.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/features/kafent/sse/kafent-topic-sse.ts","../../../../projects/elderbyte/ngx-starter/src/lib/features/kafent/sse/kafent-event-stream-sse.service.ts","../../../../projects/elderbyte/ngx-starter/src/lib/features/kafent/kafent-event.ts","../../../../projects/elderbyte/ngx-starter/src/lib/features/kafent/kafent.module.ts","../../../../projects/elderbyte/ngx-starter/src/public_api.ts","../../../../projects/elderbyte/ngx-starter/src/elderbyte-ngx-starter.ts"],"sourcesContent":["export class BytesFormat {\n  private static units = ['bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB']\n\n  public static format(bytes: number, precision = 2): string {\n    if (isNaN(parseFloat(String(bytes))) || !isFinite(bytes)) {\n      return '?'\n    }\n\n    let unit = 0\n\n    while (bytes >= 1024) {\n      bytes /= 1024\n      unit++\n    }\n\n    return bytes.toFixed(+precision) + ' ' + this.units[unit]\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\nimport { BytesFormat } from '../common/format/bytes-format'\n\n/*\n * Convert bytes into largest possible unit.\n * Takes an precision argument that defaults to 2.\n * Usage:\n *   bytes | bytes:precision\n * Example:\n *   {{ 1024 |  bytes}}\n *   formats to: 1 KB\n */\n@Pipe({\n  name: 'bytes',\n  standalone: true,\n})\nexport class BytesPipe implements PipeTransform {\n  transform(bytes = 0, precision = 2): string {\n    return BytesFormat.format(bytes, precision)\n  }\n}\n","import { Pipe, PipeTransform, NgZone, ChangeDetectorRef, OnDestroy } from '@angular/core'\n\n/**\n * Source code from\n * https://github.com/AndrewPoyntz/time-ago-pipe\n */\n@Pipe({\n  name: 'timeAgo',\n  pure: false,\n  standalone: true,\n})\nexport class TimeAgoPipe implements PipeTransform, OnDestroy {\n  private timer: number | null\n\n  constructor(\n    private changeDetectorRef: ChangeDetectorRef,\n    private ngZone: NgZone\n  ) {}\n\n  public transform(value: string | number | Date) {\n    this.removeTimer()\n\n    if (!value) {\n      return 'unknown time'\n    }\n\n    const d = new Date(value)\n    const now = new Date()\n    const seconds = Math.round(Math.abs((now.getTime() - d.getTime()) / 1000))\n    const timeToUpdate = this.getSecondsUntilUpdate(seconds) * 1000\n    this.timer = this.ngZone.runOutsideAngular(() => {\n      if (typeof window !== 'undefined') {\n        return window.setTimeout(() => {\n          this.ngZone.run(() => this.changeDetectorRef.markForCheck())\n        }, timeToUpdate)\n      }\n      return null\n    })\n    const minutes = Math.round(Math.abs(seconds / 60))\n    const hours = Math.round(Math.abs(minutes / 60))\n    const days = Math.round(Math.abs(hours / 24))\n    const months = Math.round(Math.abs(days / 30.416))\n    const years = Math.round(Math.abs(days / 365))\n    if (seconds <= 45) {\n      return 'a few seconds ago'\n    } else if (seconds <= 90) {\n      return 'a minute ago'\n    } else if (minutes <= 45) {\n      return minutes + ' minutes ago'\n    } else if (minutes <= 90) {\n      return 'an hour ago'\n    } else if (hours <= 22) {\n      return hours + ' hours ago'\n    } else if (hours <= 36) {\n      return 'a day ago'\n    } else if (days <= 25) {\n      return days + ' days ago'\n    } else if (days <= 45) {\n      return 'a month ago'\n    } else if (days <= 345) {\n      return months + ' months ago'\n    } else if (days <= 545) {\n      return 'a year ago'\n    } else {\n      // (days > 545)\n      return years + ' years ago'\n    }\n  }\n  ngOnDestroy(): void {\n    this.removeTimer()\n  }\n  private removeTimer() {\n    if (this.timer) {\n      window.clearTimeout(this.timer)\n      this.timer = null\n    }\n  }\n  private getSecondsUntilUpdate(seconds: number) {\n    const min = 60\n    const hr = min * 60\n    const day = hr * 24\n    if (seconds < min) {\n      // less than 1 min, update ever 2 secs\n      return 2\n    } else if (seconds < hr) {\n      // less than an hour, update every 30 secs\n      return 30\n    } else if (seconds < day) {\n      // less then a day, update every 5 mins\n      return 300\n    } else {\n      // update every hour\n      return 3600\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\n/*\n * Convert milligrams into largest possible unit.\n * Takes an precision argument that defaults to 2.\n * Usage:\n *   weight | weight:unit:precision\n * Example:\n *   {{ 1024 |  weight:'g':2}}\n *   formats to: 1.02kg\n */\n@Pipe({\n  name: 'weight',\n  standalone: true,\n})\nexport class WeightPipe implements PipeTransform {\n  transform(value = 0, unit = 'kg', precision = 2): string {\n    if (isNaN(parseFloat(String(value))) || !isFinite(value)) {\n      return '?'\n    }\n\n    let mg = 0\n    switch (unit) {\n      case 'mg':\n        mg = value\n        break\n      case 'g':\n        mg = value * 1000\n        break\n      case 'kg':\n        mg = value * 1000 * 1000\n        break\n      case 't':\n        mg = value * 1000 * 1000 * 1000\n        break\n      default:\n        throw new Error(`Unknown input unit in weight pipe: '${unit}'`)\n    }\n\n    const g = mg / 1000.0\n    const kg = g / 1000.0\n    const t = kg / 1000.0\n\n    if (t > 1) {\n      return t.toFixed(+precision) + 't'\n    } else if (kg > 1) {\n      return kg.toFixed(+precision) + 'kg'\n    } else if (g > 1) {\n      return kg.toFixed(+precision) + 'g'\n    } else {\n      return mg.toFixed(+precision) + 'mg'\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\n/**\n * Shows a duration in an approximated, human friendly way.\n * Based on time-ago pipe.\n */\n@Pipe({\n  name: 'caTimeDuration',\n  pure: false,\n  standalone: true,\n})\nexport class TimeDurationPipe implements PipeTransform {\n  constructor() {}\n\n  transform(value = 0, unit = 's', precision: number = null) {\n    if (isNaN(parseFloat(String(value))) || !isFinite(value)) {\n      return '?'\n    }\n\n    // 10−3 s\tms\tmillisecond\t103 s\tks\tkilosecond\n    // 10−6 s\tµs\tmicrosecond\t106 s\tMs\tmegasecond\n    // 10−9 s\tns\tnanosecond\n\n    let ns = 0\n    switch (unit) {\n      case 'ns':\n        ns = value\n        break\n      case 'micro':\n      case 'µs':\n        ns = value * 1000\n        break\n      case 'ms':\n        ns = value * 1000 * 1000\n        break\n      case 's':\n        ns = value * 1000 * 1000 * 1000\n        break\n      default:\n        throw new Error(`Unknown input unit in weight pipe: '${unit}'`)\n    }\n\n    const nanoseconds = ns\n    const microseconds = nanoseconds / 1000.0\n    const milliseconds = microseconds / 1000.0\n    const seconds = milliseconds / 1000.0\n    const minutes = seconds / 60.0\n    const hours = minutes / 60.0\n    const days = hours / 24.0\n    const months = days / 30.416\n    const years = days / 365\n\n    if (nanoseconds <= 999) {\n      return this.format(nanoseconds, precision || 0) + ' ns'\n    } else if (microseconds <= 999) {\n      return this.format(microseconds, precision || 0) + ' µs'\n    } else if (milliseconds <= 999) {\n      return this.format(milliseconds, precision || 0) + ' ms'\n    } else if (seconds <= 59) {\n      return this.format(seconds, precision || 0) + ' seconds'\n    } else if (seconds <= 90) {\n      return 'a minute'\n    } else if (minutes <= 45) {\n      return this.format(minutes, precision || 0) + ' minutes'\n    } else if (minutes <= 90) {\n      return 'an hour'\n    } else if (hours <= 22) {\n      return this.format(hours, precision || 1) + ' hours'\n    } else if (hours <= 36) {\n      return 'a day'\n    } else if (days <= 25) {\n      return this.format(days, precision || 1) + ' days'\n    } else if (days <= 45) {\n      return 'a month'\n    } else if (days <= 345) {\n      return this.format(months, precision || 1) + ' months'\n    } else if (days <= 545) {\n      return 'a year'\n    } else {\n      // (days > 545)\n      return this.format(years, precision || 1) + ' years'\n    }\n  }\n\n  private format(value: number, precision: number): number {\n    return +value.toFixed(precision)\n  }\n}\n","import { PipeTransform, Pipe } from '@angular/core'\n\n@Pipe({\n  name: 'elderRepeat',\n  standalone: true,\n})\nexport class ElderRepeatPipe implements PipeTransform {\n  transform(value: number): any {\n    const iterable = <Iterable<any>>{}\n    iterable[Symbol.iterator] = function* () {\n      let n = 0\n      while (n < value) {\n        yield ++n\n      }\n    }\n    return iterable\n  }\n}\n","import { DomSanitizer } from '@angular/platform-browser'\nimport { Pipe, PipeTransform } from '@angular/core'\n\n@Pipe({\n  name: 'elderSafeUrl',\n  standalone: true,\n})\nexport class ElderSafeUrlPipe implements PipeTransform {\n  constructor(private domSanitizer: DomSanitizer) {}\n  transform(url: string) {\n    return this.domSanitizer.bypassSecurityTrustResourceUrl(url)\n  }\n}\n","import { Duration, LocalTime, Period, Temporal, TemporalQueries } from '@js-joda/core'\n\nexport class PeriodDuration {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly period: Period\n  public readonly duration: Duration\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  private constructor(period: Period, duration: Duration) {\n    this.period = period\n    this.duration = duration\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Obtains an instance from a text string such as {@code PnYnMnDTnHnMnS}.\n   * <p>\n   * This will parse the string produced by {@code toString()} which is\n   * based on the ISO-8601 period formats {@code PnYnMnDTnHnMnS} and {@code PnW}.\n   * <p>\n   * The string starts with an optional sign, denoted by the ASCII negative\n   * or positive symbol. If negative, the whole amount is negated.\n   * The ASCII letter \"P\" is next in upper or lower case.\n   * There are then a number of sections, each consisting of a number and a suffix.\n   * At least one of the sections must be present.\n   * The sections have suffixes in ASCII of \"Y\" for years, \"M\" for months,\n   * \"W\" for weeks, \"D\" for days, \"H\" for hours, \"M\" for minutes, \"S\" for seconds,\n   * accepted in upper or lower case. Note that the ASCII letter \"T\" separates\n   * the date and time parts and must be present if any time part is present.\n   * The suffixes must occur in order.\n   * The number part of each section must consist of ASCII digits.\n   * The number may be prefixed by the ASCII negative or positive symbol.\n   * The number must parse to an {@code int}.\n   * Any week-based input is multiplied by 7 and treated as a number of days.\n   * <p>\n   * The leading plus/minus sign, and negative values for weeks and days are\n   * not part of the ISO-8601 standard.\n   * <p>\n   * Note that the date style format {@code PYYYY-MM-DDTHH:MM:SS} is not supported.\n   * <p>\n   * For example, the following are valid inputs:\n   * <pre>\n   *   \"P2Y\"             -- PeriodDuration.of(Period.ofYears(2))\n   *   \"P3M\"             -- PeriodDuration.of(Period.ofMonths(3))\n   *   \"P4W\"             -- PeriodDuration.of(Period.ofWeeks(4))\n   *   \"P5D\"             -- PeriodDuration.of(Period.ofDays(5))\n   *   \"PT6H\"            -- PeriodDuration.of(Duration.ofHours(6))\n   *   \"P1Y2M3D\"         -- PeriodDuration.of(Period.of(1, 2, 3))\n   *   \"P1Y2M3W4DT8H\"    -- PeriodDuration.of(Period.of(1, 2, 25), Duration.ofHours(8))\n   *   \"P-1Y2M\"          -- PeriodDuration.of(Period.of(-1, 2, 0))\n   *   \"-P1Y2M\"          -- PeriodDuration.of(Period.of(-1, -2, 0))\n   * </pre>\n   *\n   * @param text  the text to parse, not null\n   * @return the parsed period, not null\n   * @throws DateTimeParseException if the text cannot be parsed to a period\n   */\n  public static parse(text: string): PeriodDuration {\n    // Objects.requireNonNull(text, \"text\");\n    let upper = text.toString().toUpperCase()\n    let negate = ''\n    if (upper.startsWith('+')) {\n      upper = upper.substring(1)\n    } else if (upper.startsWith('-')) {\n      upper = upper.substring(1)\n      negate = '-'\n    }\n    // duration only, parse original text so it does negation\n    if (upper.startsWith('PT')) {\n      return PeriodDuration.ofDuration(Duration.parse(text))\n    }\n    // period only, parse original text so it does negation\n    const tpos = upper.indexOf('T')\n    if (tpos < 0) {\n      return PeriodDuration.ofPeriod(Period.parse(text))\n    }\n    // period and duration\n    const period = Period.parse(negate + upper.substring(0, tpos))\n    const duration = Duration.parse(negate + 'P' + upper.substring(tpos))\n    return PeriodDuration.of(period, duration)\n  }\n\n  /**\n   * Obtains an instance consisting of the amount of time between two temporals.\n   * <p>\n   * The start is included, but the end is not.\n   * The result of this method can be negative if the end is before the start.\n   * <p>\n   * The calculation examines the temporals and extracts {@link LocalDate} and {@link LocalTime}.\n   * If the time is missing, it will be defaulted to midnight.\n   * If one date is missing, it will be defaulted to the other date.\n   * It then finds the amount of time between the two dates and between the two times.\n   *\n   * @param startInclusive  the start, inclusive, not null\n   * @param endExclusive  the end, exclusive, not null\n   * @return the number of days between this date and the end date, not null\n   */\n  public static between(startInclusive: Temporal, endExclusive: Temporal): PeriodDuration {\n    const startDate = startInclusive.query(TemporalQueries.localDate())\n    const endDate = endExclusive.query(TemporalQueries.localDate())\n    let period = Period.ZERO\n    if (startDate != null && endDate != null) {\n      period = Period.between(startDate, endDate)\n    }\n    let startTime = startInclusive.query(TemporalQueries.localTime())\n    let endTime = endExclusive.query(TemporalQueries.localTime())\n    startTime = startTime != null ? startTime : LocalTime.MIDNIGHT\n    endTime = endTime != null ? endTime : LocalTime.MIDNIGHT\n    const duration = Duration.between(startTime, endTime)\n    return PeriodDuration.of(period, duration)\n  }\n\n  public static ofPeriod(period: Period): PeriodDuration {\n    return PeriodDuration.of(period, Duration.ZERO)\n  }\n\n  public static ofDuration(duration: Duration): PeriodDuration {\n    return PeriodDuration.of(Period.ZERO, duration)\n  }\n\n  public static of(period: Period, duration: Duration): PeriodDuration {\n    if (!period) {\n      throw new Error('Parameter period must not be null!')\n    }\n    if (!duration) {\n      throw new Error('Parameter duration must not be null!')\n    }\n\n    return new PeriodDuration(period, duration)\n  }\n\n  public static zero(): PeriodDuration {\n    return this.of(Period.ZERO, Duration.ZERO)\n  }\n}\n","/**\n * A duration bucket splits a duration into time parts.\n * This is used for formatting and editors.\n */\nimport { Duration, Period } from '@js-joda/core'\nimport { PeriodDuration } from '../../../common/time/period-duration'\n\nexport class DurationBucket {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly nanos: number,\n    public readonly seconds: number,\n    public readonly minutes: number,\n    public readonly hours: number,\n    public readonly days: number,\n    public readonly months: number,\n    public readonly years: number\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public withNanos(nanos: number): DurationBucket {\n    return new DurationBucket(\n      nanos,\n      this.seconds,\n      this.minutes,\n      this.hours,\n      this.days,\n      this.months,\n      this.years\n    )\n  }\n\n  public withSeconds(seconds: number): DurationBucket {\n    return new DurationBucket(\n      this.nanos,\n      seconds,\n      this.minutes,\n      this.hours,\n      this.days,\n      this.months,\n      this.years\n    )\n  }\n\n  public withMinutes(minutes: number): DurationBucket {\n    return new DurationBucket(\n      this.nanos,\n      this.seconds,\n      minutes,\n      this.hours,\n      this.days,\n      this.months,\n      this.years\n    )\n  }\n\n  public withHours(hours: number): DurationBucket {\n    return new DurationBucket(\n      this.nanos,\n      this.seconds,\n      this.minutes,\n      hours,\n      this.days,\n      this.months,\n      this.years\n    )\n  }\n\n  public withDays(days: number): DurationBucket {\n    return new DurationBucket(\n      this.nanos,\n      this.seconds,\n      this.minutes,\n      this.hours,\n      days,\n      this.months,\n      this.years\n    )\n  }\n\n  public withWeeks(weeks: number): DurationBucket {\n    return this.withDays(weeks * 7)\n  }\n\n  public withMonths(months: number): DurationBucket {\n    return new DurationBucket(\n      this.nanos,\n      this.seconds,\n      this.minutes,\n      this.hours,\n      this.days,\n      months,\n      this.years\n    )\n  }\n\n  public withYears(years: number): DurationBucket {\n    return new DurationBucket(\n      this.nanos,\n      this.seconds,\n      this.minutes,\n      this.hours,\n      this.days,\n      this.months,\n      years\n    )\n  }\n\n  public toDuration(): Duration {\n    return Duration.ofDays(this.toPeriod().days())\n      .plusHours(this.hours ?? 0)\n      .plusMinutes(this.minutes ?? 0)\n      .plusSeconds(this.seconds ?? 0)\n      .plusNanos(this.nanos ?? 0)\n  }\n\n  public toPeriodDuration(): PeriodDuration {\n    return PeriodDuration.of(\n      this.toPeriod(),\n      Duration.ofHours(this.hours ?? 0)\n        .plusMinutes(this.minutes ?? 0)\n        .plusSeconds(this.seconds ?? 0)\n        .plusNanos(this.nanos ?? 0)\n    )\n  }\n\n  public toPeriod(): Period {\n    return Period.of(this.years ?? 0, this.months ?? 0, this.days ?? 0)\n  }\n}\n","import { Duration, Period } from '@js-joda/core'\nimport { DurationBucket } from './duration-bucket'\nimport { PeriodDuration } from '../../../common/time/period-duration'\n\n/**\n * yyyy:MM:dd hh:mm:ss\n */\nexport class DurationFormat {\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static readonly FORMAT_DYNAMIC = 'dynamic'\n\n  public static readonly FORMAT_HH_MM_SS = 'hh:mm:ss'\n  public static readonly FORMAT_HH_MM = 'hh:mm'\n\n  public static DYNAMIC = new DurationFormat(\n    DurationFormat.FORMAT_DYNAMIC,\n    true,\n    true,\n    true,\n    true,\n    true,\n    true,\n    true\n  )\n\n  public static DEFAULT = DurationFormat.DYNAMIC\n\n  public static parse(format: string): DurationFormat {\n    if (format) {\n      if (format === DurationFormat.FORMAT_DYNAMIC) {\n        return DurationFormat.DYNAMIC\n      } else {\n        return new DurationFormat(\n          format,\n          format.includes('nn'),\n          format.includes('ss'),\n          format.includes('mm'),\n          format.includes('hh'),\n          format.includes('dd'),\n          format.includes('MM'),\n          format.includes('yyyy')\n        )\n      }\n    } else {\n      return DurationFormat.DEFAULT\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly formatStr: string,\n    public readonly nanos: boolean,\n    public readonly seconds: boolean,\n    public readonly minutes: boolean,\n    public readonly hours: boolean,\n    public readonly days: boolean,\n    public readonly months: boolean,\n    public readonly years: boolean\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public bucket(periodDuration: PeriodDuration): DurationBucket {\n    if (!periodDuration) {\n      periodDuration = PeriodDuration.ofDuration(Duration.ZERO)\n    }\n\n    let period = periodDuration.period ?? Period.ZERO\n    let duration = periodDuration.duration ?? Duration.ZERO\n\n    let actualYears: number = null\n    let actualMonths: number = null\n    let actualDays: number = null\n    let actualHours: number = null\n    let actualMinutes: number = null\n    let actualSeconds: number = null\n    let actualNanos: number = null\n\n    if (this.years) {\n      actualYears = period.years()\n      period = period.minusYears(actualYears)\n\n      if (this.yearsIsLast()) {\n        actualYears += this.remainderToYears(period, duration)\n      }\n    }\n\n    if (this.months) {\n      actualMonths = period.months()\n      period = period.minusMonths(actualMonths)\n\n      if (this.monthsIsLast()) {\n        actualMonths += this.remainderToMonths(period, duration)\n      }\n    }\n\n    if (this.days) {\n      const pdays = period.days()\n      const dDays = duration.toDays()\n      actualDays = pdays + dDays\n      duration = duration.minusDays(dDays)\n\n      if (this.daysIsLast()) {\n        actualDays += this.remainderToDays(duration)\n      }\n    } else {\n      duration = duration.plusDays(period.days()) // Transfer from Period to duration\n    }\n\n    if (this.hours) {\n      actualHours = duration.toHours()\n      duration = duration.minusHours(actualHours)\n\n      if (this.hoursIsLast()) {\n        actualHours += this.remainderToHours(duration)\n      }\n    }\n\n    if (this.minutes) {\n      actualMinutes = duration.toMinutes()\n      duration = duration.minusMinutes(actualMinutes)\n\n      if (this.minutesIsLast()) {\n        actualMinutes += this.remainderToMinutes(duration)\n      }\n    }\n\n    if (this.seconds) {\n      actualSeconds = duration.seconds()\n      duration = duration.minusSeconds(actualSeconds)\n\n      if (this.secondsIsLast()) {\n        actualSeconds += this.remainderToSeconds(duration)\n        duration = Duration.ZERO\n      }\n    }\n\n    if (this.nanos) {\n      actualNanos = duration.toNanos()\n    }\n\n    return new DurationBucket(\n      actualNanos,\n      actualSeconds,\n      actualMinutes,\n      actualHours,\n      actualDays,\n      actualMonths,\n      actualYears\n    )\n  }\n\n  public format(duration: PeriodDuration): string {\n    return this.formatDynamic(duration)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private secondsIsLast(): boolean {\n    return !this.nanos\n  }\n\n  private minutesIsLast(): boolean {\n    return this.secondsIsLast() && !this.seconds\n  }\n\n  private hoursIsLast(): boolean {\n    return this.minutesIsLast() && !this.minutes\n  }\n\n  private daysIsLast(): boolean {\n    return this.hoursIsLast() && !this.hours\n  }\n\n  private monthsIsLast(): boolean {\n    return this.daysIsLast() && !this.days\n  }\n\n  private yearsIsLast(): boolean {\n    return this.monthsIsLast() && !this.months\n  }\n\n  private remainderToSeconds(duration: Duration): number {\n    let seconds = 0\n    const nanos = duration?.toNanos()\n    if (nanos) {\n      seconds += nanos / 1000000000\n    }\n    return seconds\n  }\n\n  private remainderToMinutes(duration: Duration): number {\n    let minutes = 0\n    const seconds = duration?.seconds()\n    if (seconds) {\n      minutes += seconds / 60\n      duration = duration.minusSeconds(seconds)\n    }\n    minutes += this.remainderToSeconds(duration) / 60\n    return minutes\n  }\n\n  private remainderToHours(duration: Duration): number {\n    let hours = 0\n    const minutes = duration?.toMinutes()\n    if (minutes) {\n      hours += minutes / 60\n      duration = duration.minusMinutes(minutes)\n    }\n    hours += this.remainderToMinutes(duration) / 60\n    return hours\n  }\n\n  private remainderToDays(duration: Duration): number {\n    let days = 0\n    const hours = duration?.toMinutes()\n    if (hours) {\n      days += hours / 24\n      duration = duration.minusHours(hours)\n    }\n    days += this.remainderToHours(duration) / 24\n    return days\n  }\n\n  private remainderToMonths(period: Period, duration: Duration): number {\n    let months = 0\n    const pDays = period?.days()\n    if (pDays) {\n      months += pDays / 30 // Approximation\n    }\n    const dDays = duration?.toDays()\n    if (dDays) {\n      months += dDays / 30 // Approximation\n      duration = duration.minusDays(dDays)\n    }\n    months += this.remainderToDays(duration) / 30 // Approximation\n    return months\n  }\n\n  private remainderToYears(period: Period, duration: Duration): number {\n    let years = 0\n    const months = period?.months()\n    if (months) {\n      years += months / 12\n      period = period.minusMonths(months)\n    }\n    years += this.remainderToMonths(period, duration) / 12\n    return years\n  }\n\n  private formatDynamic(duration: PeriodDuration): string {\n    const bucket = this.bucket(duration)\n\n    const time = this.formatTime(bucket)\n    const period = this.formatPeriod(bucket)\n\n    if (period && time) {\n      return period + ' and ' + time\n    } else if (period) {\n      return period\n    } else if (time) {\n      return time\n    } else {\n      return '-'\n    }\n  }\n\n  private formatPeriod(bucket: DurationBucket): string {\n    const parts: string[] = []\n\n    if (bucket.years) {\n      parts.push(this.ceilAndFormatNumber(bucket.years) + 'yr')\n    }\n\n    if (bucket.months) {\n      parts.push(this.ceilAndFormatNumber(bucket.months) + 'mo')\n    }\n\n    if (bucket.days) {\n      parts.push(this.ceilAndFormatNumber(bucket.days) + 'd')\n    }\n\n    return parts.join(', ')\n  }\n\n  private formatTime(bucket: DurationBucket): string {\n    const parts: string[] = []\n\n    if (bucket.hours) {\n      parts.push(this.ceilAndFormatNumber(bucket.hours) + 'h')\n    }\n\n    if (bucket.minutes) {\n      parts.push(this.ceilAndFormatNumber(bucket.minutes) + 'min')\n    }\n\n    if (bucket.seconds) {\n      parts.push(this.ceilAndFormatNumber(bucket.seconds) + 'sec')\n    }\n\n    if (bucket.nanos) {\n      parts.push(this.formatNanos(bucket.nanos))\n    }\n    return parts.join(' ')\n  }\n\n  private ceilAndFormatNumber(number: number): number {\n    return Math.ceil(number * 10) / 10\n  }\n\n  private formatNanos(nanoseconds: number): string {\n    const microseconds = nanoseconds / 1000\n    const milliseconds = microseconds / 1000\n\n    if (nanoseconds <= 999) {\n      return this.formatNumber(nanoseconds, 0) + ' ns'\n    } else if (microseconds <= 999) {\n      return this.formatNumber(microseconds, 0) + ' µs'\n    } else if (milliseconds <= 999) {\n      return this.formatNumber(milliseconds, 0) + ' ms'\n    } else {\n      return undefined // TODO: Maybe add way to format 1000+ milliseconds also\n    }\n  }\n\n  private formatNumber(value: number, precision: number): number {\n    return +value.toFixed(precision)\n  }\n}\n","import { Duration, Period } from '@js-joda/core'\nimport { PeriodDuration } from '../time/period-duration'\nimport { DurationFormat } from '../../components/time/duration/duration-format'\n\nexport class DurationFormatUtil {\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Converts any valid input of standard ISO 8601 duration format\n   * example input: PT2H10M12.1235675S, output: 2h, 10min, 12s, 124 ms\n   *\n   * a maximal input looks like this: P3Y6M4DT12H30M5S although\n   *  all arguments except P are optional, decimal numbers allowed\n   */\n  public static formatDuration(\n    value: string | Duration | Period | PeriodDuration,\n    format: string = DurationFormat.FORMAT_DYNAMIC\n  ): string {\n    if (!value) {\n      return value + ''\n    }\n    const periodDuration = DurationFormatUtil.toPeriodDuration(value)\n    return DurationFormat.parse(format).format(periodDuration)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static toPeriodDuration(\n    value: string | Duration | Period | PeriodDuration\n  ): PeriodDuration {\n    if (value instanceof Duration) {\n      return PeriodDuration.ofDuration(value)\n    } else if (value instanceof Period) {\n      return PeriodDuration.ofPeriod(value)\n    } else if (value instanceof PeriodDuration) {\n      return value\n    } else {\n      return PeriodDuration.parse(value)\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\nimport { Duration, Period } from '@js-joda/core'\nimport { DurationFormat } from '../components/time/duration/duration-format'\nimport { PeriodDuration } from '../common/time/period-duration'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { IsoDurationStr } from '../components/time/duration/iso-duration-str'\nimport { DurationFormatUtil } from '../common/format/duration-format-util'\n\n/**\n * Converts any valid input of standard ISO 8601 duration format\n * example input: PT2H10M12.1235675S, output: 2h, 10min, 12s, 124 ms\n *\n * a maximal input looks like this: P3Y6M4DT12H30M5S although\n *  all arguments except P are optional, decimal numbers allowed\n */\n@Pipe({\n  name: 'isoDuration',\n  standalone: true,\n})\nexport class IsoDurationPipe implements PipeTransform {\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public transform(\n    value: IsoDurationStr | Duration | Period | PeriodDuration,\n    format = DurationFormat.FORMAT_DYNAMIC\n  ): string {\n    try {\n      return DurationFormatUtil.formatDuration(value, format)\n    } catch (err) {\n      this.logger.error('Failed to parse period/duration value: ' + value.toString(), err)\n      return value.toString()\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\n@Pipe({\n  name: 'elderRound',\n  standalone: true,\n})\nexport class ElderRoundPipe implements PipeTransform {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * @param value The number to be rounded.\n   * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.<br>\n   *   defaults to 0.\n   */\n  transform(value: number, fractionDigits?: number): number | null {\n    if (value == null) {\n      return null\n    }\n\n    return parseFloat(value.toFixed(fractionDigits))\n  }\n}\n","import {\n  Duration,\n  Instant,\n  LocalDate,\n  nativeJs,\n  TemporalAccessor,\n  ZonedDateTime,\n  ZoneId,\n} from '@js-joda/core'\n\nexport class TimeUtil {\n  public static readonly SECONDS_PER_DAY = 86400\n\n  /**\n   * Returns an instant for a javascript date / iso date string.\n   * @param date\n   */\n  public static instant(date: Date | string): Instant {\n    if (date instanceof Date) {\n      return Instant.from(TimeUtil.temporalAccessor(date))\n    } else {\n      return Instant.parse(date)\n    }\n  }\n\n  public static dateToLocalDate(date: Date): LocalDate {\n    return LocalDate.from(TimeUtil.temporalAccessor(date))\n  }\n\n  public static temporalAccessor(date: Date): TemporalAccessor {\n    return nativeJs(date)\n  }\n\n  public static date(instant: Instant): Date {\n    const d = new Date(0) // The 0 there is the key, which sets the date to the epoch\n    d.setUTCMilliseconds(instant.toEpochMilli())\n    return d\n  }\n\n  public static localDateToDate(localDate: LocalDate, zone = ZoneId.systemDefault()): Date {\n    return new Date(\n      localDate.year(),\n      localDate.monthValue() - 1,\n      localDate.dayOfMonth(),\n      0,\n      0,\n      0,\n      0\n    )\n  }\n\n  public static isFullDays(duration: Duration): boolean {\n    const r = duration.seconds() % TimeUtil.SECONDS_PER_DAY\n    return r === 0\n  }\n\n  public static isStartOfDay(date: ZonedDateTime): boolean {\n    return date.second() === 0 && date.minute() === 0 && date.hour() === 0 && date.nano() === 0\n  }\n}\n","import {\n  Duration,\n  Instant,\n  LocalDate,\n  nativeJs,\n  Period,\n  TemporalAmount,\n  ZoneId,\n} from '@js-joda/core'\nimport { TimeUtil } from './time-util'\nimport { PeriodDuration } from './period-duration'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n/**\n * Represents an ISO-8601 interval string.\n * https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n */\nexport type IsoIntervalStr = string\n\nexport class Interval {\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly start: Instant,\n    public readonly end: Instant\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builders                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Parses an ISO-8601 interval string.\n   * https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n   * @param iso\n   */\n  public static parse(iso: IsoIntervalStr): Interval {\n    const parts = iso.split('/')\n\n    if (parts.length !== 2) {\n      throw new Error('The given string is not a valid iso interval: \"' + iso + '\"')\n    }\n\n    const start = parts[0] ? Instant.parse(parts[0]) : null\n\n    const endStr = parts[1]\n    // The 'end' part can either be an instant or a duration in iso format\n    if ((start && endStr && endStr.startsWith('P')) || endStr.startsWith('-P')) {\n      const duration = Duration.parse(endStr)\n      return Interval.ofStartAndOffset(start, duration)\n    } else {\n      return Interval.of(start, endStr ? Instant.parse(endStr) : null)\n    }\n  }\n\n  public static yesterday(zoneId: ZoneId): Interval {\n    return Interval.ofDay(LocalDate.now().minusDays(1), zoneId)\n  }\n\n  public static tomorrow(zoneId: ZoneId): Interval {\n    return Interval.ofDay(LocalDate.now().plusDays(1), zoneId)\n  }\n\n  public static today(zoneId: ZoneId): Interval {\n    return Interval.ofDay(LocalDate.now(), zoneId)\n  }\n\n  /**\n   * Creates a Interval from a Date by spreading it to the begin and end of its day.\n   * @param date Date to spread\n   */\n  public static ofDayDate(date: Date): Interval {\n    const localDate = LocalDate.from(nativeJs(date))\n    return Interval.ofDay(localDate, ZoneId.systemDefault())\n  }\n\n  public static ofDay(day: LocalDate, zoneId: ZoneId): Interval {\n    return Interval.betweenDays(day, day.plusDays(1), zoneId)\n  }\n\n  public static betweenDays(\n    startDayInclusive: LocalDate,\n    endDayExclusive: LocalDate,\n    zoneId: ZoneId\n  ) {\n    return Interval.of(\n      startDayInclusive.atStartOfDay(zoneId).toInstant(),\n      endDayExclusive.atStartOfDay(zoneId).toInstant()\n    )\n  }\n\n  /**\n   * Creates a new interval with the given start time point\n   * and a offset from the start.\n   *\n   * Note that you should use Period for days to account for zone specific\n   * things like daylight saving.\n   *\n   * @param startInclusive\n   * @param offsetExclusive A Period or Duration offset.\n   */\n  public static ofStartAndOffset(\n    startInclusive: Instant,\n    offsetExclusive: TemporalAmount\n  ): Interval {\n    return Interval.of(startInclusive, startInclusive.plus(offsetExclusive))\n  }\n\n  public static of(startInclusive: Instant, endExclusive: Instant): Interval {\n    return new Interval(startInclusive, endExclusive)\n  }\n\n  public static ofDate(startInclusive: Date | string, endExclusive: Date | string): Interval {\n    return new Interval(TimeUtil.instant(startInclusive), TimeUtil.instant(endExclusive))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Checks if the range is empty.\n   * <p>\n   * An empty range occurs when the start date equals the inclusive end date.\n   *\n   * @return true if the range is empty\n   */\n  public isEmpty(): boolean {\n    return this.start?.equals(this.end)\n  }\n\n  /**\n   * Checks if the start of the interval is unbounded.\n   *\n   * @return true if start is unbounded\n   */\n  public isUnboundedStart(): boolean {\n    return this.start?.equals(Instant.MIN)\n  }\n\n  /**\n   * Checks if the end of the interval is unbounded.\n   *\n   * @return true if end is unbounded\n   */\n  public isUnboundedEnd(): boolean {\n    return this.end?.equals(Instant.MAX)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public toDuration(): Duration {\n    if (!this.start || !this.end) return Duration.ZERO\n\n    try {\n      return Duration.between(this.start, this.end)\n    } catch (e) {\n      this.log.error('Could not convert to Duration! Error: ', e)\n      return Duration.ZERO\n    }\n  }\n\n  public toPeriodDuration(zone: ZoneId): PeriodDuration {\n    if (!this.start || !this.end) return PeriodDuration.zero()\n\n    return PeriodDuration.between(this.start?.atZone(zone), this.end?.atZone(zone))\n  }\n\n  public toString(): IsoIntervalStr {\n    return this.toDurationString()\n  }\n\n  public toInstantString(): IsoIntervalStr {\n    let instantString = ''\n    if (this.start) {\n      instantString = instantString + this.start.toString()\n    }\n    instantString = instantString + '/'\n    if (this.end) {\n      instantString = instantString + this.end.toString()\n    }\n    return instantString\n  }\n\n  public toDurationString(): IsoIntervalStr {\n    return this.start?.toString() + '/' + this.toDuration().toString()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public Modification API                                                 *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Returns a copy of this range with the specified start instant.\n   *\n   * @param start  the start instant for the new interval, not null\n   * @return an interval with the end from this interval and the specified start\n   * @throws DateTimeException if the resulting interval has end before start\n   */\n  public withStart(start: Instant): Interval {\n    return Interval.of(start, this.end)\n  }\n\n  /**\n   * Returns a copy of this range with the specified end instant.\n   *\n   * @param end  the end instant for the new interval, not null\n   * @return an interval with the start from this interval and the specified end\n   * @throws DateTimeException if the resulting interval has end before start\n   */\n  public withEnd(end: Instant): Interval {\n    return Interval.of(this.start, end)\n  }\n\n  /**\n   * Calculates the interval that is the intersection of this interval and the specified interval.\n   * <p>\n   * This finds the intersection of two intervals.\n   * This throws an exception if the two intervals are not {@linkplain #isConnected(Interval) connected}.\n   *\n   * @param other  the other interval to check for, not null\n   * @return the interval that is the intersection of the two intervals\n   * @throws DateTimeException if the intervals do not connect\n   */\n  public intersection(other: Interval): Interval {\n    if (this.isConnected(other) === false) {\n      throw new Error('Intervals do not connect: ' + this + ' and ' + other)\n    }\n    const cmpStart = this.start?.compareTo(other.start)\n    const cmpEnd = this.end?.compareTo(other.end)\n    if (cmpStart >= 0 && cmpEnd <= 0) {\n      return this\n    } else if (cmpStart <= 0 && cmpEnd >= 0) {\n      return other\n    } else {\n      const newStart = cmpStart >= 0 ? this.start : other.start\n      const newEnd = cmpEnd <= 0 ? this.end : other.end\n      return Interval.of(newStart, newEnd)\n    }\n  }\n\n  /**\n   * Calculates the interval that is the union of this interval and the specified interval.\n   * <p>\n   * This finds the union of two intervals.\n   * This throws an exception if the two intervals are not {@linkplain #isConnected(Interval) connected}.\n   *\n   * @param other  the other interval to check for, not null\n   * @return the interval that is the union of the two intervals\n   * @throws DateTimeException if the intervals do not connect\n   */\n  public union(other: Interval): Interval {\n    if (this.isConnected(other) === false) {\n      throw new Error('Intervals do not connect: ' + this + ' and ' + other)\n    }\n    const cmpStart = this.start?.compareTo(other.start)\n    const cmpEnd = this.end?.compareTo(other.end)\n    if (cmpStart >= 0 && cmpEnd <= 0) {\n      return other\n    } else if (cmpStart <= 0 && cmpEnd >= 0) {\n      return this\n    } else {\n      const newStart = cmpStart >= 0 ? other.start : this.start\n      const newEnd = cmpEnd <= 0 ? other.end : this.end\n      return Interval.of(newStart, newEnd)\n    }\n  }\n\n  /**\n   * Calculates the smallest interval that encloses this interval and the specified interval.\n   * <p>\n   * The result of this method will {@linkplain #encloses(Interval) enclose}\n   * this interval and the specified interval.\n   *\n   * @param other  the other interval to check for, not null\n   * @return the interval that spans the two intervals\n   */\n  public span(other: Interval): Interval {\n    const cmpStart = this.start?.compareTo(other.start)\n    const cmpEnd = this.end?.compareTo(other.end)\n    const newStart = cmpStart >= 0 ? other.start : this.start\n    const newEnd = cmpEnd <= 0 ? other.end : this.end\n    return Interval.of(newStart, newEnd)\n  }\n\n  /**\n   * Shift the whole interval by the given days period.\n   * @param days\n   */\n  public shiftDays(days: number): Interval {\n    return this.shift(Period.ofDays(days))\n  }\n\n  /**\n   * Shift the whole interval by the given temporal amount.\n   * Note that only Period will account for zone specific things such as daylight savings.\n   * Use Duration only if you are below days.\n   * @param offset\n   */\n  public shift(offset: TemporalAmount): Interval {\n    return Interval.of(this.start?.plus(offset), this.end?.plus(offset))\n  }\n\n  public moveStart(offset: TemporalAmount): Interval {\n    return Interval.of(this.start?.plus(offset), this.end)\n  }\n\n  public moveEnd(offset: TemporalAmount): Interval {\n    return Interval.of(this.start, this.end?.plus(offset))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Interval Query API                                                      *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Checks if the given TimeFrame overlaps with this one.\n   *\n   * @param other TimeFrame to check against\n   * @return Returns {@code true} if the two candidates overlap, false otherwise\n   */\n  public overlaps(other: Interval): boolean {\n    return (\n      other.equals(this) ||\n      (this.start?.compareTo(other.end) < 0 && other.start?.compareTo(this.end) < 0)\n    )\n  }\n\n  /**\n   * Checks it the given localDate overlaps with the given TimeFrame.\n   *\n   * @param timeFrame TimeFrame to check against\n   * @param localDate LocalDate to check\n   */\n  public overlapsWithLocalDate(localDate: Date): boolean {\n    return this.overlaps(Interval.ofDayDate(localDate))\n  }\n\n  /**\n   * Checks if this interval contains the specified instant.\n   * <p>\n   * This checks if the specified instant is within the bounds of this interval.\n   * If this range has an unbounded start then {@code contains(Instant#MIN)} returns true.\n   * If this range has an unbounded end then {@code contains(Instant#MAX)} returns true.\n   * If this range is empty then this method always returns false.\n   *\n   * @param instant  the instant, not null\n   * @return true if this interval contains the instant\n   */\n  public contains(instant: Instant): boolean {\n    return (\n      this.start?.compareTo(instant) <= 0 &&\n      (instant.compareTo(this.end) < 0 || this.isUnboundedEnd())\n    )\n  }\n\n  /**\n   * Checks if this interval encloses the specified interval.\n   * <p>\n   * This checks if the bounds of the specified interval are within the bounds of this interval.\n   * An empty interval encloses itself.\n   *\n   * @param other  the other interval, not null\n   * @return true if this interval contains the other interval\n   */\n  public encloses(other: Interval): boolean {\n    return this.start?.compareTo(other.start) <= 0 && other.end?.compareTo(this.end) <= 0\n  }\n\n  /**\n   * Checks if this interval abuts (is next to or has a common boundary with) the specified interval.\n   * <p>\n   * The result is true if the end of this interval is the start of the other, or vice versa.\n   * An empty interval does not abut itself.\n   *\n   * @param other  the other interval, not null\n   * @return true if this interval abuts the other interval\n   */\n  public abuts(other: Interval): boolean {\n    return this.end?.equals(other.start) !== this.start?.equals(other.end) // !== means XOR\n  }\n\n  /**\n   * Checks if this interval is connected to the specified interval.\n   * <p>\n   * The result is true if the two intervals have an enclosed interval in common, even if that interval is empty.\n   * An empty interval is connected to itself.\n   * <p>\n   * This is equivalent to {@code (overlaps(other) || abuts(other))}.\n   *\n   * @param other  the other interval, not null\n   * @return true if this interval is connected to the other interval\n   */\n  public isConnected(other: Interval): boolean {\n    return (\n      this.equals(other) ||\n      (this.start?.compareTo(other.end) <= 0 && other.start?.compareTo(this.end) <= 0)\n    )\n  }\n\n  // ---\n\n  /**\n   * Checks if this interval is after the specified instant.\n   * <p>\n   * The result is true if this instant starts after the specified instant.\n   * An empty interval behaves as though it is an instant for comparison purposes.\n   *\n   * @param instant  the other instant to compare to, not null\n   * @return true if the start of this interval is after the specified instant\n   */\n  public isAfterInstant(instant: Instant): boolean {\n    return this.start?.compareTo(instant) > 0\n  }\n\n  /**\n   * Checks if this interval is before the specified instant.\n   * <p>\n   * The result is true if this instant ends before the specified instant.\n   * Since intervals do not include their end points, this will return true if the\n   * instant equals the end of the interval.\n   * An empty interval behaves as though it is an instant for comparison purposes.\n   *\n   * @param instant  the other instant to compare to, not null\n   * @return true if the start of this interval is before the specified instant\n   */\n  public isBeforeInstant(instant: Instant): boolean {\n    return this.end?.compareTo(instant) <= 0 && this.start?.compareTo(instant) < 0\n  }\n\n  /**\n   * Checks if this interval is after the specified interval.\n   * <p>\n   * The result is true if this instant starts after the end of the specified interval.\n   * Since intervals do not include their end points, this will return true if the\n   * instant equals the end of the interval.\n   * An empty interval behaves as though it is an instant for comparison purposes.\n   *\n   * @param interval  the other interval to compare to, not null\n   * @return true if this instant is after the specified instant\n   */\n  public isAfter(interval: Interval): boolean {\n    return this.start?.compareTo(interval.end) >= 0 && !interval.equals(this)\n  }\n\n  /**\n   * Checks if this interval is before the specified interval.\n   * <p>\n   * The result is true if this instant ends before the start of the specified interval.\n   * Since intervals do not include their end points, this will return true if the\n   * two intervals abut.\n   * An empty interval behaves as though it is an instant for comparison purposes.\n   *\n   * @param interval  the other interval to compare to, not null\n   * @return true if this instant is before the specified instant\n   */\n  public isBefore(interval: Interval): boolean {\n    return this.end?.compareTo(interval.start) <= 0 && !interval.equals(this)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Equality & Hashcode                                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Checks if this interval is equal to another interval.\n   * <p>\n   * Compares this {@code Interval} with another ensuring that the two instants are the same.\n   * Only objects of type {@code Interval} are compared, other types return false.\n   *\n   * @param obj  the object to check, null returns false\n   * @return true if this is equal to the other interval\n   */\n  public equals(obj: any): boolean {\n    if (this === obj) {\n      return true\n    }\n    if (obj instanceof Interval) {\n      const other = <Interval>obj\n      return this.start?.equals(other.start) && this.end?.equals(other.end)\n    }\n    return false\n  }\n\n  /**\n   * Compares this Interval to the given Interval.\n   * <p>\n   * The comparison is based on the time-line position of the lower bound instants (Interval start).\n   *\n   * @param other the other Interval to compare to, not null\n   * @return the comparator value, negative if less, positive if greater\n   * @throws NullPointerException if other is null\n   */\n  public compareTo(other: Interval): number {\n    return this.start?.compareTo(other.start)\n  }\n}\n","import { Interval } from '../time/interval'\nimport { Instant, ZonedDateTime, ZoneId } from '@js-joda/core'\nimport { TimeUtil } from '../time/time-util'\nimport { formatDate } from '@angular/common'\n\nenum DisplayMode {\n  WHOLE_DAY_MULTIPLE,\n  WHOLE_DAY_SINGLE,\n  PARTIAL_DAY,\n  DETAILED,\n}\n\nexport class IsoIntervalFormatUtil {\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static formatIsoInterval(\n    value: string | Interval,\n    timezone: string | ZoneId = ZoneId.SYSTEM,\n    locale: string,\n    format?: string,\n    formatEnd?: string\n  ): string | null {\n    const interval = value instanceof Interval ? value : Interval.parse(value)\n\n    if (typeof timezone === 'string') {\n      timezone = timezone ? ZoneId.of(timezone) : ZoneId.SYSTEM\n    }\n\n    const displayMode = IsoIntervalFormatUtil.determineDisplayMode(interval, timezone)\n\n    switch (displayMode) {\n      case DisplayMode.PARTIAL_DAY:\n        // If the period is less than a day, and the interval falls in the same local date\n        // We can improve the generated display text by omitting the redundant date information.\n        return IsoIntervalFormatUtil.formatSubDay(interval, format, timezone, locale)\n      case DisplayMode.WHOLE_DAY_SINGLE:\n        // Display a single, full day\n        return IsoIntervalFormatUtil.formatInstant(\n          interval.start,\n          format || 'mediumDate',\n          timezone,\n          locale\n        )\n      case DisplayMode.WHOLE_DAY_MULTIPLE: {\n        // Display a range of multiple 'full' days\n        return IsoIntervalFormatUtil.formatFullDays(interval, format, timezone, locale, formatEnd)\n      }\n      case DisplayMode.DETAILED: {\n        // No special handling, we render both instants\n        return IsoIntervalFormatUtil.formatDetailedInterval(\n          interval,\n          format,\n          timezone,\n          locale,\n          formatEnd\n        )\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static determineDisplayMode(interval: Interval, timezone: ZoneId): DisplayMode {\n    const period = interval.toPeriodDuration(timezone)\n    const periodDays = period.period.days()\n    const zonedStart = interval.start.atZone(timezone)\n    const zonedEndExc = interval.end.atZone(timezone)\n\n    const isPartialDay = IsoIntervalFormatUtil.isPartialDay(zonedStart, zonedEndExc, periodDays)\n    const isFullDays =\n      TimeUtil.isStartOfDay(zonedStart) && TimeUtil.isFullDays(interval.toDuration())\n    const isSingleFullDay = isFullDays && periodDays === 1\n\n    if (isPartialDay) {\n      return DisplayMode.PARTIAL_DAY\n    } else if (isSingleFullDay) {\n      // more specific, order matters here\n      return DisplayMode.WHOLE_DAY_SINGLE\n    } else if (isFullDays) {\n      return DisplayMode.WHOLE_DAY_MULTIPLE\n    } else {\n      return DisplayMode.DETAILED\n    }\n  }\n\n  private static formatSubDay(\n    interval: Interval,\n    format: string,\n    timezone: ZoneId,\n    locale: string\n  ): string {\n    const startDay = IsoIntervalFormatUtil.formatInstant(\n      interval.start,\n      format || 'short',\n      timezone,\n      locale\n    )\n    const endTime = interval.end.atZone(timezone).toLocalTime().toString()\n    return startDay + ' - ' + endTime\n  }\n\n  private static formatFullDays(\n    interval: Interval,\n    format: string,\n    timezone: ZoneId,\n    locale: string,\n    formatEnd: string\n  ): string {\n    const zonedEndExclusive = interval.end.atZone(timezone)\n    const endDayInstant = zonedEndExclusive.minusDays(1).toInstant()\n    const startDay = IsoIntervalFormatUtil.formatInstant(\n      interval.start,\n      format || 'mediumDate',\n      timezone,\n      locale\n    )\n    const endDay = IsoIntervalFormatUtil.formatInstant(\n      endDayInstant,\n      formatEnd || format || 'mediumDate',\n      timezone,\n      locale\n    )\n    return `${startDay} - ${endDay}`\n  }\n\n  private static formatDetailedInterval(\n    interval: Interval,\n    format: string,\n    timezone: ZoneId,\n    locale: string,\n    formatEnd: string\n  ): string {\n    const start = IsoIntervalFormatUtil.formatInstant(\n      interval.start,\n      format || 'short',\n      timezone,\n      locale\n    )\n    const end = IsoIntervalFormatUtil.formatInstant(\n      interval.end,\n      formatEnd || format || 'short',\n      timezone,\n      locale\n    )\n    return `${start} - ${end}`\n  }\n\n  private static formatInstant(\n    instant: Instant,\n    format: string,\n    timezone: ZoneId,\n    locale: string\n  ): string | null {\n    return IsoIntervalFormatUtil.formatDate(instant.toEpochMilli(), format, timezone, locale)\n  }\n\n  private static formatDate(\n    value: string | Date | number,\n    format: string,\n    timezone: ZoneId,\n    locale: string\n  ): string | null {\n    if (value == null || value === '' || value !== value) {\n      // last part filters out NaN values\n      return null\n    }\n\n    try {\n      const zoneId = timezone?.id()\n      return formatDate(value, format, locale, zoneId)\n    } catch (error) {\n      throw Error(`Invalid pipe argument: ${(error as Error).message}`)\n    }\n  }\n\n  private static isPartialDay(\n    zonedStart: ZonedDateTime,\n    zonedEndExc: ZonedDateTime,\n    periodDays: number\n  ): boolean {\n    const localStart = zonedStart.toLocalDate()\n    const localEndExc = zonedEndExc.toLocalDate()\n    const zeroPeriod = periodDays === 0\n    const startIsEnd = localStart.equals(localEndExc)\n    const endIsStartOfDay = TimeUtil.isStartOfDay(zonedEndExc)\n    return zeroPeriod && (startIsEnd || endIsStartOfDay)\n  }\n}\n","import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core'\nimport { Interval, IsoIntervalStr } from '../common/time/interval'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { IsoIntervalFormatUtil } from '../common/format/iso-interval-format-util'\n\n@Pipe({\n  name: 'isoInterval',\n  standalone: true,\n})\nexport class IsoIntervalPipe implements PipeTransform {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private log = LoggerFactory.getLogger('IsoIntervalPipe')\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(@Inject(LOCALE_ID) private readonly localeId: string) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Transforms an Interval / ISO Interval to a human-readable display text.\n   *\n   * @return null in case of error\n   *\n   * @param value The interval value, either as iso string or interval object\n   * @param format The format of the start (and if not specified otherwise, the end)\n   * @param formatEnd The format of the end\n   * @param timezone\n   * @param locale\n   */\n  public transform(\n    value: IsoIntervalStr | Interval,\n    format?: string,\n    formatEnd?: string,\n    timezone?: string,\n    locale?: string\n  ): string | null {\n    if (!value) {\n      return null\n    }\n    const _localeId = locale ?? this.localeId\n    try {\n      return IsoIntervalFormatUtil.formatIsoInterval(value, timezone, _localeId, format, formatEnd)\n    } catch (err) {\n      this.log.warn('Failed to parse iso interval: ' + value, err)\n      return null\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\nimport { Interval, IsoIntervalStr } from '../common/time/interval'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n@Pipe({\n  name: 'isoIntervalParse',\n  standalone: true,\n})\nexport class IsoIntervalParsePipe implements PipeTransform {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private static log = LoggerFactory.getLogger('IsoIntervalParsePipe')\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Parses an iso interval string to an interval object\n   * @param value The interval as iso string\n   * @return The parsed interval object\n   */\n  public transform(value: IsoIntervalStr | Interval): Interval {\n    if (value) {\n      try {\n        return value instanceof Interval ? value : Interval.parse(value)\n      } catch (err) {\n        IsoIntervalParsePipe.log.warn('Failed to parse iso interval: ' + value, err)\n      }\n    }\n    return null\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\ntype TrimMode = 'start' | 'end'\n\n@Pipe({\n  name: 'elderTruncate',\n  standalone: true,\n})\nexport class ElderTruncatePipe implements PipeTransform {\n  /**\n   * Truncate (cut off) the given input value if it is longer than maxCharacters.\n   * @param value\n   * @param maxCharacters\n   * @param trimMode truncate from\n   */\n  public transform(value: any, maxCharacters: number = 10, trimMode: TrimMode = 'end'): string {\n    if (typeof value == 'string' && value.length > maxCharacters) {\n      let trimmed\n      switch (trimMode) {\n        case 'start':\n          trimmed = '…' + this.truncateStart(value, maxCharacters)\n          break\n        case 'end':\n          trimmed = this.truncateEnd(value, maxCharacters) + '…'\n          break\n      }\n      return trimmed\n    }\n    return value\n  }\n\n  private truncateStart(value: string, maxCharacters: number): string {\n    return value.substring(value.length - maxCharacters)\n  }\n\n  private truncateEnd(value: string, maxCharacters: number): string {\n    return value.substring(0, maxCharacters)\n  }\n}\n","import { CommonModule } from '@angular/common'\nimport { BytesPipe } from './bytes.pipe'\nimport { NgModule, Pipe, PipeTransform } from '@angular/core'\nimport { TimeAgoPipe } from './time-ago.pipe'\nimport { WeightPipe } from './weight.pipe'\nimport { TimeDurationPipe } from './time-duration.pipe'\nimport { ElderRepeatPipe } from './elder-repeat.pipe'\nimport { ElderSafeUrlPipe } from './elder-safe-url.pipe'\nimport { IsoDurationPipe } from './iso-duration.pipe'\nimport { ElderRoundPipe } from './elder-round.pipe'\nimport { IsoIntervalPipe } from './iso-interval.pipe'\nimport { IsoIntervalParsePipe } from './iso-interval-parse.pipe'\nimport { ElderTruncatePipe } from './elder-truncate.pipe'\n\nexport { BytesPipe } from './bytes.pipe'\nexport { TimeAgoPipe } from './time-ago.pipe'\nexport { WeightPipe } from './weight.pipe'\nexport { TimeDurationPipe } from './time-duration.pipe'\nexport { ElderRepeatPipe } from './elder-repeat.pipe'\nexport { ElderSafeUrlPipe } from './elder-safe-url.pipe'\nexport { IsoDurationPipe } from './iso-duration.pipe'\nexport { IsoIntervalPipe } from './iso-interval.pipe'\nexport { IsoIntervalParsePipe } from './iso-interval-parse.pipe'\nexport { ElderRoundPipe } from './elder-round.pipe'\nexport { ElderTruncatePipe } from './elder-truncate.pipe'\n\n@NgModule({\n  exports: [\n    BytesPipe,\n    TimeAgoPipe,\n    TimeDurationPipe,\n    WeightPipe,\n    ElderRepeatPipe,\n    ElderSafeUrlPipe,\n    IsoDurationPipe,\n    ElderRoundPipe,\n    IsoIntervalPipe,\n    IsoIntervalParsePipe,\n    ElderTruncatePipe,\n  ],\n  imports: [\n    CommonModule,\n    BytesPipe,\n    TimeAgoPipe,\n    TimeDurationPipe,\n    WeightPipe,\n    ElderRepeatPipe,\n    ElderSafeUrlPipe,\n    IsoDurationPipe,\n    ElderRoundPipe,\n    IsoIntervalPipe,\n    IsoIntervalParsePipe,\n    ElderTruncatePipe,\n  ],\n})\nexport class ElderPipesModule {}\n","/**\n * Provides common used object utils\n */\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\nexport class Objects {\n  private static readonly logger = LoggerFactory.getLogger('Objects')\n\n  /**\n   * Checks if the given value is non null / nun undefined\n   */\n  public static nonNull(value: any): boolean {\n    return value !== null && value !== undefined\n  }\n\n  /**\n   * Checks if the given value is null or undefined\n   */\n  public static isNull(value: any): boolean {\n    return value === null || value === undefined\n  }\n\n  /**\n   * Creates a copy of the object data.\n   */\n  public static cloneData<T>(src: T): T {\n    if (!src) {\n      return src\n    }\n\n    try {\n      return JSON.parse(JSON.stringify(src)) as T\n    } catch (err) {\n      const errorMessage = err instanceof Error ? err.message : 'unknown error'\n      throw new Error(`Failed to clone object: ${errorMessage}`)\n    }\n  }\n\n  /**\n   * Checks if the two given objects have the same data\n   */\n  public static dataEquals<T>(a: T, b: T): boolean {\n    return JSON.stringify(a) === JSON.stringify(b)\n  }\n}\n","export class Arrays {\n  /**\n   * Checks if the two given arrays have the same content in the exact same order.\n   * If order is not relevant, use Sets.equalContent.\n   *\n   * @param arrayA\n   * @param arrayB\n   * @param equalsFn Optional Equality Operator. If omitted, reference equality is used.\n   */\n  public static equalContentAndOrder<T>(\n    arrayA: T[],\n    arrayB: T[],\n    equalsFn: (a: T, b: T) => boolean = (a, b) => a === b\n  ) {\n    if (!arrayA?.length && !arrayB?.length) {\n      return true\n    }\n    if (!arrayA || !arrayB) {\n      return false\n    }\n    if (arrayA.length !== arrayB.length) {\n      return false\n    }\n\n    // Comparing each element of your array\n    for (let i = 0; i < arrayA.length; i++) {\n      if (!equalsFn(arrayA[i], arrayB[i])) {\n        return false\n      }\n    }\n    return true\n  }\n}\n","export class Sets {\n  /**\n   * Compares the content of two sets for equality in O(n).\n   * @param as\n   * @param bs\n   */\n  public static equals<T>(as: Set<T>, bs: Set<T>) {\n    if (as.size !== bs.size) {\n      return false\n    }\n    if (as !== bs) {\n      // Same reference?\n      return Sets.containsEvery(bs, Array.from(as.values()))\n    }\n    return true\n  }\n\n  /**\n   * Checks if the two given arrays have the same content.\n   * They are handled as \"Sets\" and order of the items is not relevant for the check.\n   *\n   * @param idsA\n   * @param idsB\n   */\n  public static equalContent<T>(idsA: T[], idsB: T[]) {\n    if (!idsA?.length && !idsB?.length) {\n      return true\n    }\n    if (!idsA || !idsB) {\n      return false\n    }\n    if (idsA.length !== idsB.length) {\n      return false\n    }\n    // Both element lists have content and the same length\n    return Sets.containsEvery(new Set(idsA), idsB)\n  }\n\n  /**\n   * Checks if the given set contains every given element\n   */\n  public static containsEvery<T>(set: Set<T>, elements: T[]): boolean {\n    const predicateFn = (e: T) => set.has(e) // aot does not like lambdas\n    return elements.every(predicateFn)\n  }\n}\n","export type JsonMap<T> = {\n  [name in string | number]: T\n}\n\nexport class JsonMapUtil {\n  public static toJsonMap<T>(esMap: Map<string | number, T>): JsonMap<T> {\n    const entries = Array.from(esMap.entries())\n    const jsonMap = <JsonMap<T>>{}\n    entries.reduce((o, [key, value]) => {\n      o[key] = value\n      return o\n    }, jsonMap)\n    return jsonMap\n  }\n\n  public static toMap<T, ID = string | number>(\n    jsonMap: JsonMap<T>,\n    toIdFn: (key: string | number) => ID = (key) => <any>key\n  ): Map<ID, T> {\n    const map = new Map<ID, T>()\n    Object.keys(jsonMap).forEach((k) => map.set(toIdFn(k), jsonMap[k]))\n    return map\n  }\n}\n","import {\n  concat,\n  defer,\n  exhaustMap,\n  finalize,\n  MonoTypeOperatorFunction,\n  Observable,\n  ReplaySubject,\n  timer,\n} from 'rxjs'\nimport { filter, map, takeUntil, takeWhile, tap } from 'rxjs/operators'\n\n/**\n * Similar to sampleTime, but emits the first event and optionally the last event as-well.\n * @param intervalDuration\n * @param includeFinal\n */\nexport function lazySampleTime<T>(\n  intervalDuration: number,\n  includeFinal: boolean = true\n): MonoTypeOperatorFunction<T> {\n  return lazySample(() => timer(0, intervalDuration), includeFinal)\n}\n\n/**\n *\n * @see https://medium.com/@jan.benscheid/rxjs-rate-limiting-and-the-quest-for-the-perfect-throttle-836612c88eb7\n * @param notifierSelector\n * @param includeFinal\n */\nexport function lazySample<T>(\n  notifierSelector: (value: T) => Observable<any>,\n  includeFinal: boolean = true\n): MonoTypeOperatorFunction<T> {\n  return (source) =>\n    defer(() => {\n      const finalValue = new ReplaySubject<T>()\n      let hasValue = false\n      let lastValue: T | null = null\n\n      return concat(\n        source.pipe(\n          tap((val) => {\n            lastValue = val\n            hasValue = true\n          }),\n          finalize(() => {\n            finalValue.next(lastValue)\n            finalValue.complete()\n          }),\n          exhaustMap((value) =>\n            notifierSelector(value).pipe(\n              takeUntil(finalValue),\n              takeWhile(() => hasValue),\n              map(() => {\n                hasValue = false\n                return lastValue\n              })\n            )\n          )\n        ),\n        finalValue.pipe(filter(() => hasValue && includeFinal))\n      )\n    })\n}\n","export class BytesPerSecondFormat {\n  public static formatBytesPerSecond(bytesPerSecond: number, precision: number = null): string {\n    const KBPerSecond = bytesPerSecond / 1000\n    const MBPerSecond = KBPerSecond / 1000\n    const GBPerSecond = MBPerSecond / 1000\n\n    if (bytesPerSecond < 500) {\n      return BytesPerSecondFormat.format(bytesPerSecond, precision || 0) + ' Bps'\n    } else if (KBPerSecond < 999) {\n      return BytesPerSecondFormat.format(KBPerSecond, precision || 0) + ' KBps'\n    } else if (MBPerSecond < 999) {\n      return BytesPerSecondFormat.format(MBPerSecond, precision || 2) + ' MBps'\n    } else {\n      return BytesPerSecondFormat.format(GBPerSecond, precision || 2) + ' GBps'\n    }\n  }\n\n  public static formatAsBitsPerSecond(bytesPerSecond: number, precision: number = null): string {\n    const bitsPerSecond = bytesPerSecond * 8\n\n    const KbPerSecond = bitsPerSecond / 1000\n    const MbPerSecond = KbPerSecond / 1000\n    const GbPerSecond = MbPerSecond / 1000\n\n    if (bitsPerSecond < 500) {\n      return BytesPerSecondFormat.format(bitsPerSecond, precision || 0) + ' bps'\n    } else if (KbPerSecond < 999) {\n      return BytesPerSecondFormat.format(KbPerSecond, precision || 0) + ' Kbps'\n    } else if (MbPerSecond < 999) {\n      return BytesPerSecondFormat.format(MbPerSecond, precision || 2) + ' Mbps'\n    } else {\n      return BytesPerSecondFormat.format(GbPerSecond, precision || 2) + ' Gbps'\n    }\n  }\n\n  private static format(value: number, precision: number): number {\n    return +value.toFixed(precision)\n  }\n}\n","import { CurrencyCode } from '../../components/currency/model/currency-code'\nimport { formatCurrency, getCurrencySymbol } from '@angular/common'\nimport { Currency } from '../../components/currency/model/currency'\n\nexport type CurrencyIndication = 'code' | 'symbol' | 'symbol-narrow' | string\n\nexport class CurrencyFormatUtil {\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * @param currency amount and ISO 4217 currency code to format\n   * @param locale locale code for formatting rules (e.g. en-US)\n   * @param indication determines currency indicator in output (e.g. USD100 vs $100). Will fall back to 'symbol' if missing.\n   * @param digitsInfo see DecimalPipe for documentation\n   */\n  public static formatElderCurrency(\n    currency: Currency,\n    locale: string,\n    indication: CurrencyIndication = 'symbol',\n    digitsInfo?: string\n  ): string {\n    if (!currency) {\n      return '-'\n    }\n    const currencyCode = currency.unit\n    const currencyIndicator = CurrencyFormatUtil.determineCurrencyIndicator(\n      currencyCode,\n      locale,\n      indication\n    )\n    return formatCurrency(currency.value, locale, currencyIndicator, currencyCode, digitsInfo)\n  }\n\n  public static determineCurrencySymbol(currencyCode: CurrencyCode, locale: string): string {\n    return getCurrencySymbol(currencyCode, 'narrow', locale)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static determineCurrencyIndicator(\n    currencyCode: CurrencyCode,\n    locale: string,\n    indication: CurrencyIndication\n  ): string {\n    switch (indication) {\n      case 'code':\n        return currencyCode\n      case 'symbol':\n        return getCurrencySymbol(currencyCode, 'wide', locale) // will return code if no symbol is available\n      case 'symbol-narrow':\n        return getCurrencySymbol(currencyCode, 'narrow', locale)\n      default:\n        return indication // arbitrary\n    }\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { CountryPhoneFormatService } from './country-phone-format.service'\nimport { CountryPhoneFormat } from './phone.types'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PhoneFormatService {\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public formatPhoneNumber(nr: string, config: CountryPhoneFormat): string {\n    if (!config?.countryCode) {\n      return nr\n    }\n\n    const phoneNrBody = this.preparePhoneNumberBody(nr, config)\n    const transformedBody = this.applyRegexTransform(phoneNrBody, config)\n    return this.addPrefix(transformedBody, config)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private addPrefix(body: string, config: CountryPhoneFormat): string {\n    let prefix = ''\n    if (config.customPrefix !== undefined && config.customPrefix !== null) {\n      prefix = config.customPrefix\n    } else {\n      prefix = config.countryCode + ' '\n    }\n\n    return `${prefix}${body}`\n  }\n\n  private preparePhoneNumberBody(number: string, config: CountryPhoneFormat): string {\n    const clean = this.cleanNumberString(number)\n    const withoutDialingCode = this.removeDialingCode(clean, config.countryCode)\n    const withoutLeadingZeros = withoutDialingCode.replace(/^0+/, '')\n    return withoutLeadingZeros\n  }\n\n  private cleanNumberString(number: string): string {\n    return number.replace(/[^0-9+]/g, '')\n  }\n\n  private removeDialingCode(phoneNr: string, countryCode: string): string {\n    const dialingCodeWithDoubleZero = countryCode.replace('+', '00')\n\n    for (const prefix of [countryCode, dialingCodeWithDoubleZero]) {\n      if (phoneNr.startsWith(prefix)) {\n        return phoneNr.slice(prefix.length)\n      }\n    }\n\n    return phoneNr\n  }\n\n  private applyRegexTransform(phoneNrBody: string, config: CountryPhoneFormat): string {\n    if (!config?.bodyFormat) {\n      return phoneNrBody\n    }\n\n    const [regex, format] = config.bodyFormat\n    return phoneNrBody.replace(regex, format)\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { CountryPhoneFormat } from './phone.types'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CountryPhoneFormatService {\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public getCountryPhoneFormat(countryCode: string): CountryPhoneFormat | null {\n    if (!countryCode) {\n      return null\n    }\n\n    const cleanedCode = countryCode.replace(/^00/, '+')\n\n    if (this.countryPhoneFormats[cleanedCode]) {\n      return this.countryPhoneFormats[cleanedCode]\n    }\n\n    return {\n      country: null,\n      countryCode: cleanedCode,\n      bodyFormat: null,\n    }\n  }\n\n  public getCountry(countryCode: string): string | null {\n    const countryFormat = this.countryPhoneFormats[countryCode]\n    return countryFormat?.country || null\n  }\n\n  protected readonly countryPhoneFormats: Record<string, CountryPhoneFormat> = {\n    '+41': {\n      country: 'CH',\n      countryCode: '+41',\n      bodyFormat: [/^(\\d{2})(\\d{3})(\\d{2})(\\d{2})$/, '$1 $2 $3 $4'],\n      customPrefix: '0',\n    },\n    '+423': {\n      country: 'LI',\n      countryCode: '+423',\n      bodyFormat: [/^(\\d{3})(\\d{4})$/, '$1 $2'],\n    },\n    '+49': {\n      country: 'DE',\n      countryCode: '+49',\n    },\n    '+43': {\n      country: 'AT',\n      countryCode: '+43',\n    },\n    '+33': {\n      country: 'FR',\n      countryCode: '+33',\n    },\n    '+44': {\n      country: 'GB',\n      countryCode: '+44',\n    },\n    '+1': {\n      country: 'US',\n      countryCode: '+1',\n    },\n  }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core'\nimport { PhoneNumber } from './phone.types'\nimport { CountryPhoneFormatService } from './country-phone-format.service'\nimport { PhoneFormatService } from './phone-format.service'\n@Pipe({\n  name: 'phone',\n  standalone: true,\n})\nexport class PhonePipe implements PipeTransform {\n  private readonly countryPhoneFormats = inject(CountryPhoneFormatService)\n  private readonly phoneFormat = inject(PhoneFormatService)\n\n  transform(phoneNumber: PhoneNumber): string {\n    if (phoneNumber) {\n      const countryPhoneFormat = this.countryPhoneFormats.getCountryPhoneFormat(\n        phoneNumber.countryCode\n      )\n      return this.phoneFormat.formatPhoneNumber(phoneNumber.number, countryPhoneFormat)\n    } else {\n      return '';\n    }\n  }\n}\n","import { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { Interval, IsoIntervalStr } from './interval'\n\nexport function coerceInterval(value: Interval | IsoIntervalStr | undefined | null): Interval {\n  if (value) {\n    if (value instanceof Interval) {\n      return value as Interval\n    } else if (typeof value === 'string' && value.length > 0) {\n      return Interval.parse(value)\n    } else {\n      LoggerFactory.getLogger('static: coerceInterval').warn(\n        `Unsupported value that cant be converted to Interval: \"${value}\"`\n      )\n    }\n  }\n  return undefined\n}\n\nexport function coerceIntervalIsoStr(\n  value: Interval | IsoIntervalStr | undefined | null\n): IsoIntervalStr {\n  if (value) {\n    if (value instanceof Interval) {\n      return value.toInstantString()\n    } else if (typeof value === 'string') {\n      return coerceInterval(value)?.toInstantString()\n    } else {\n      LoggerFactory.getLogger('static: coerceIntervalIsoStr').warn(\n        `Unsupported value that cant be converted to Iso Interval Str: \"${value}\"`\n      )\n    }\n  }\n  return undefined\n}\n","/**\n * Represents an ISO-8601 date string.\n * https://en.wikipedia.org/wiki/ISO_8601#Dates\n */\nimport { Instant } from '@js-joda/core'\n\nexport type IsoDateStr = string\n\nexport class DateUtil {\n  public static readonly IsoDateDelimiter = '-'\n  public static readonly IsoTimeDelimiter = ':'\n  public static readonly DateTimeSeparator = 'T'\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static instantToDate(instant: Instant): Date {\n    return new Date(instant.toEpochMilli())\n  }\n\n  /**\n   * Returns the given Date as ISO formatted local date string.\n   *\n   * YYYY-MM-DD\n   *\n   * @param date\n   */\n  public static toLocalDateIso(date: Date): string {\n    return DateUtil.dateString(date)\n  }\n\n  /**\n   * Returns the given Date as ISO formatted local date-time string.\n   *\n   * YYYY-MM-DDTHH:mm:ss.sss\n   *\n   * @param date\n   */\n  public static toLocalDateTimeIso(date: Date): string {\n    const dateString = DateUtil.toLocalDateIso(date)\n    const timeString = DateUtil.timeString(date)\n    return dateString + DateUtil.DateTimeSeparator + timeString\n  }\n\n  /**\n   * Checks if the given DateTime is represents the start of the day.\n   *\n   * @param dateTime DateTime to check\n   */\n  public static isStartOfDay(date: Date): boolean {\n    date = new Date(date)\n    return (\n      date.getMilliseconds() === 0 &&\n      date.getSeconds() === 0 &&\n      date.getMinutes() === 0 &&\n      date.getHours() === 0\n    )\n  }\n\n  /**\n   * Sets the given Date to the start of its day by setting its time to 0.\n   *\n   * @param localDate Date to set to start of day\n   */\n  public static startOfDay(localDate: Date): Date {\n    const startOfDay = new Date(localDate)\n    startOfDay.setHours(0, 0, 0, 0)\n    return startOfDay\n  }\n\n  public static plusDays(date: Date, days: number): Date {\n    const plus = new Date(date)\n    plus.setDate(plus.getDate() + days)\n    return plus\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static dateString(date: Date): string {\n    const values = [\n      String(date.getFullYear()),\n      DateUtil.format(date.getMonth() + 1),\n      DateUtil.format(date.getDate()),\n    ]\n\n    return values.join(DateUtil.IsoDateDelimiter)\n  }\n\n  private static timeString(date: Date): string {\n    const values = [\n      DateUtil.format(date.getHours()),\n      DateUtil.format(date.getMinutes()),\n      DateUtil.format(date.getSeconds()),\n    ]\n\n    return values.join(DateUtil.IsoTimeDelimiter) + '.' + DateUtil.format(date.getMilliseconds(), 3)\n  }\n\n  private static format(value: number, digitCount = 2): string {\n    let zeros = ''\n\n    for (let i = 0; i < digitCount; i++) {\n      zeros += '0'\n    }\n\n    return (zeros + value).slice(-digitCount)\n  }\n}\n","import { Temporal } from '@js-temporal/polyfill'\n\nexport class TemporalPlainDateInterval {\n  start: Temporal.PlainDate\n  end: Temporal.PlainDate\n\n  constructor(start: Temporal.PlainDate, end: Temporal.PlainDate) {\n    this.start = start\n    this.end = end\n  }\n\n  shiftDays(days: number): TemporalPlainDateInterval {\n    return new TemporalPlainDateInterval(this.start.add({ days }), this.end.add({ days }))\n  }\n\n  shiftMonths(months: number): TemporalPlainDateInterval {\n    return new TemporalPlainDateInterval(this.start.add({ months }), this.end.add({ months }))\n  }\n\n  shiftYears(years: number): TemporalPlainDateInterval {\n    return new TemporalPlainDateInterval(this.start.add({ years }), this.end.add({ years }))\n  }\n\n  toString(): string {\n    return `${this.start.toString()} - ${this.end.toString()} (duration: ${this.getDurationInDays()} days)`\n  }\n\n  getDuration(): Temporal.Duration {\n    return this.start.until(this.end)\n  }\n\n  getDurationInDays(): number {\n    return this.getDuration().days\n  }\n\n  getDurationInWeeks(): number {\n    return this.getDurationInDays() / 7\n  }\n\n  getDurationInMonths(): number {\n    return this.getDuration().months\n  }\n\n  getDurationInYears(): number {\n    return this.getDuration().years\n  }\n}\n","import { Temporal } from '@js-temporal/polyfill'\nimport { TemporalPlainDateInterval } from './temporal-plain-date-interval'\n\nexport class TemporalUtil {\n  public static equalPlainDates(\n    a: Temporal.PlainDate | undefined,\n    b: Temporal.PlainDate | undefined\n  ): boolean {\n    if (a && b) {\n      return a.equals(b)\n    }\n    return a == b\n  }\n\n  public static equalPlainTimes(\n    a: Temporal.PlainTime | undefined,\n    b: Temporal.PlainTime | undefined\n  ): boolean {\n    if (a && b) {\n      return a.equals(b)\n    }\n    return a == b\n  }\n\n  static getJSDateFromPlainDateTime(date: Temporal.PlainDate | Temporal.PlainDateTime): Date {\n    if (date instanceof Temporal.PlainDateTime) {\n      return new Date(\n        date.year,\n        date.month - 1,\n        date.day,\n        date.hour,\n        date.minute,\n        date.second,\n        date.millisecond\n      )\n    }\n    return new Date(date.year, date.month - 1, date.day)\n  }\n\n  static getPlainDateTimeFromJSDate(date: Date): Temporal.PlainDateTime {\n    const instant = Temporal.Instant.fromEpochMilliseconds(date.getTime())\n    const dateTimeIso = instant.toZonedDateTimeISO(Temporal.Now.timeZoneId())\n    return Temporal.PlainDateTime.from(dateTimeIso)\n  }\n\n  static getPlainDateTimeFromPlainDateAndPlainTime(\n    date: Temporal.PlainDate,\n    time: Temporal.PlainTime\n  ): Temporal.PlainDateTime {\n    return Temporal.PlainDateTime.from({\n      year: date.year,\n      month: date.month,\n      day: date.day,\n      hour: time.hour,\n      minute: time.minute,\n      second: time.second,\n      millisecond: time.millisecond,\n    })\n  }\n\n  static isFirstDayOfWeek(date: Temporal.PlainDate | Temporal.PlainDateTime): boolean {\n    return date.dayOfWeek === 1\n  }\n\n  static getPlainDateFromJSDate(date: Date): Temporal.PlainDate {\n    return this.createTemporalLocalizedDateFromTimestamp(date.getTime())\n  }\n\n  static getPlainTimeFromJSDate(date: Date): Temporal.PlainTime {\n    const instant = Temporal.Instant.fromEpochMilliseconds(date.getTime())\n    const dateTimeIso = instant.toZonedDateTimeISO(Temporal.Now.timeZoneId())\n    return Temporal.PlainTime.from(dateTimeIso)\n  }\n\n  static getPlainDateTimeFromString(dateString: string): Temporal.PlainDateTime {\n    let jsDate: Date = null\n    try {\n      jsDate = new Date(dateString)\n      if (typeof jsDate !== 'object' || jsDate.constructor.name !== 'Date') {\n        throw new Error('Invalid date string')\n      }\n    } catch (e) {\n      console.warn('Invalid date string', dateString)\n      return null\n    }\n\n    return this.getPlainDateTimeFromJSDate(jsDate)\n  }\n\n  static getHtmlTimeStringFromPlainTime(time: Temporal.PlainTime | Temporal.PlainDateTime): string {\n    if (!time) {\n      return '00:00:00'\n    }\n    return (\n      time.hour.toString().padStart(2, '0') +\n      ':' +\n      time.minute.toString().padStart(2, '0') +\n      ':' +\n      time.second.toString().padStart(2, '0')\n    )\n  }\n\n  static getQuarterForDate(\n    date: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): number {\n    return Math.floor((date.month - 1) / 3) + 1\n  }\n\n  static getCurrentDay(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    const today = referenceDate\n    const tomorrow = today.add({ days: 1 })\n    return new TemporalPlainDateInterval(today, tomorrow)\n  }\n\n  static getYesterday(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    const yesterday = referenceDate.subtract({ days: 1 })\n    return new TemporalPlainDateInterval(yesterday, referenceDate)\n  }\n\n  static getLastSevenDays(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return new TemporalPlainDateInterval(referenceDate.subtract({ days: 7 }), referenceDate)\n  }\n\n  static getLastSevenDaysIncludingToday(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return new TemporalPlainDateInterval(\n      referenceDate.subtract({ days: 7 - 1 }),\n      referenceDate.add({ days: 1 })\n    )\n  }\n\n  static getLastThirtyDays(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return new TemporalPlainDateInterval(referenceDate.subtract({ days: 30 }), referenceDate)\n  }\n\n  static getLastThirtyDaysIncludingToday(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return new TemporalPlainDateInterval(\n      referenceDate.subtract({ days: 30 - 1 }),\n      referenceDate.add({ days: 1 })\n    )\n  }\n\n  static getCurrentWeek(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    const startOfWeek = referenceDate.subtract({\n      days: referenceDate.dayOfWeek - 1,\n    })\n    const endOfWeek = startOfWeek.add({ days: 7 })\n    return new TemporalPlainDateInterval(startOfWeek, endOfWeek)\n  }\n\n  static getCurrentMonth(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    const startOfMonth = referenceDate.subtract({\n      days: referenceDate.day - 1,\n    })\n    const endOfMonth = startOfMonth.add({ months: 1 })\n    return new TemporalPlainDateInterval(startOfMonth, endOfMonth)\n  }\n\n  static getCurrentQuarter(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    const quarter = Math.floor((referenceDate.month - 1) / 3)\n    const startOfQuarter = referenceDate.subtract({\n      months: referenceDate.month - 1 - quarter * 3,\n      days: referenceDate.day - 1,\n    })\n    const endOfQuarter = startOfQuarter.add({ months: 3 })\n    return new TemporalPlainDateInterval(startOfQuarter, endOfQuarter)\n  }\n\n  static getPreviousQuarter(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return TemporalUtil.getCurrentQuarter(referenceDate).shiftMonths(-3)\n  }\n\n  static getCurrentYear(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    const startOfYear = referenceDate.subtract({\n      days: referenceDate.dayOfYear - 1,\n    })\n    const endOfYear = startOfYear.add({ years: 1 })\n    return new TemporalPlainDateInterval(startOfYear, endOfYear)\n  }\n\n  static getPreviousYear(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return TemporalUtil.getCurrentYear(referenceDate).shiftYears(-1)\n  }\n\n  static getNextYear(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return TemporalUtil.getCurrentYear(referenceDate).shiftYears(1)\n  }\n\n  static getLast365Days(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return new TemporalPlainDateInterval(referenceDate.subtract({ days: 365 }), referenceDate)\n  }\n\n  static getLast90Days(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return new TemporalPlainDateInterval(referenceDate.subtract({ days: 90 }), referenceDate)\n  }\n\n  static getPreviousMonth(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return TemporalUtil.getCurrentMonth(referenceDate).shiftMonths(-1)\n  }\n\n  static getNextMonth(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return TemporalUtil.getCurrentMonth(referenceDate).shiftMonths(1)\n  }\n\n  static getPreviousWeek(\n    referenceDate: Temporal.PlainDate = TemporalUtil.getDateTodayLocalized()\n  ): TemporalPlainDateInterval {\n    return TemporalUtil.getCurrentWeek(referenceDate).shiftDays(-7)\n  }\n\n  static getDateTodayLocalized(): Temporal.PlainDate {\n    return this.createTemporalLocalizedDateFromTimestamp(Date.now())\n  }\n\n  static createTemporalLocalizedDateFromTimestamp(timestamp: number): Temporal.PlainDate {\n    const instant = Temporal.Instant.fromEpochMilliseconds(timestamp)\n    const dateTimeIso = instant.toZonedDateTimeISO(Temporal.Now.timeZoneId())\n    const date = Temporal.PlainDate.from(dateTimeIso)\n    return date\n  }\n\n  static getHtmlDateString(date: Temporal.PlainDate | Temporal.PlainDateTime): string {\n    if (!date) {\n      return ''\n    }\n    return (\n      date.year +\n      '-' +\n      date.month.toString().padStart(2, '0') +\n      '-' +\n      date.day.toString().padStart(2, '0')\n    )\n  }\n\n  static getPlainDateFromHtmlDateString(dateString: string): Temporal.PlainDate {\n    if (!dateString) {\n      return null\n    }\n    const dateArr = dateString.split('-')\n    if (dateArr.length !== 3) {\n      return null\n    }\n    return Temporal.PlainDate.from({\n      year: parseInt(dateArr[0]),\n      month: parseInt(dateArr[1]),\n      day: parseInt(dateArr[2]),\n    })\n  }\n\n  static getPlainTimeFromHtmlTimeString(timeString: string): Temporal.PlainTime {\n    if (!timeString) {\n      return null\n    }\n    const timeArr = timeString.split(':')\n    if (timeArr.length !== 2 && timeArr.length !== 3) {\n      return null\n    }\n\n    if (timeArr.length === 2) {\n      return Temporal.PlainTime.from({\n        hour: parseInt(timeArr[0]),\n        minute: parseInt(timeArr[1]),\n      })\n    }\n\n    return Temporal.PlainTime.from({\n      hour: parseInt(timeArr[0]),\n      minute: parseInt(timeArr[1]),\n      second: parseInt(timeArr[2]),\n    })\n  }\n}\n","import { LoggerFactory } from '@elderbyte/ts-logger'\n\n// @dynamic\nexport class CollectionUtil {\n  private static readonly logger = LoggerFactory.getLogger('CollectionUtil')\n\n  public static flatten<T>(groups: T[][]): T[] {\n    return groups.reduce((acc, val) => acc.concat(val), [])\n  }\n\n  /**\n   * Moves the given item down in the given array - if not already at the bottom\n   * @param items\n   * @param toMove\n   */\n  public static moveDown<T>(items: T[], toMove: T): boolean {\n    if (items.length < 2) {\n      return false\n    }\n\n    const position = items.indexOf(toMove)\n\n    if (position >= 0) {\n      const targetIndex = position + 1\n      const bottom = items.length - 1\n      if (!(bottom < targetIndex)) {\n        items[position] = items[targetIndex]\n        items[targetIndex] = toMove\n        return true\n      } else {\n        this.logger.debug(\n          'Can not move item down since target index ' +\n            targetIndex +\n            ' is already at the bottom: ' +\n            bottom\n        )\n      }\n    }\n    return false\n  }\n\n  /**\n   * Moves the given item up in the given array - if not already at the top\n   * @param items\n   * @param toMove\n   */\n  public static moveUp<T>(items: T[], toMove: T): boolean {\n    if (items.length < 2) {\n      return false\n    }\n\n    const position = items.indexOf(toMove)\n\n    if (position >= 0) {\n      const targetIndex = position - 1\n\n      if (targetIndex >= 0) {\n        items[position] = items[targetIndex]\n        items[targetIndex] = toMove\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * Groups the given items by the given field into a Map\n   */\n  // @dynamic\n  public static groupByField<G, T>(items: T[], field: string): Map<G, T[]> {\n    return CollectionUtil.groupByKey(items, (it) => (it as any)[field] as G)\n  }\n\n  /**\n   * Groups the given items, using the group key getter, into a Map\n   * @dynamic\n   */\n  // @dynamic\n  public static groupByKey<G, T>(items: T[], keyGetter: (item: T) => G): Map<G, T[]> {\n    return items.reduce((map, p) => {\n      let subset: T[]\n\n      const key = keyGetter(p)\n\n      if (map.has(key)) {\n        subset = map.get(key)\n      } else {\n        subset = []\n        map.set(key, subset)\n      }\n      subset.push(p)\n      return map\n    }, new Map())\n  }\n\n  /**\n   * Compares two sets values deep.\n   * If both sets have the same items, they are considered equal.\n   *\n   * Warning: Duplicate elements are ignored.\n   * @param aSet\n   * @param bSet\n   */\n  public static equalSetDeep<T>(aSet: Set<T>, bSet: Set<T>): boolean {\n    if (aSet === bSet) {\n      return true\n    }\n\n    if (!aSet || !bSet) {\n      return false\n    }\n    if (aSet.size !== bSet.size) {\n      return false\n    } // Must have same length\n\n    for (const a of aSet) {\n      if (!bSet.has(a)) {\n        return false\n      }\n    }\n    return true\n  }\n\n  public static hasElements(list: any[]): boolean {\n    return list !== null && list !== undefined && list.length > 0\n  }\n}\n","import { Objects } from '../../objects'\nimport { CollectionUtil } from '../../utils/collection-util'\n\nexport class Filter {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * The filter key.\n   * Unique inside a FilterContext or Filter request.\n   */\n  public readonly key: string\n\n  /**\n   * The filter value as string.\n   * Multiple string values are supported.\n   */\n  public readonly value: string | string[] | null\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(key: string, value: string | string[] | null) {\n    if (!key) {\n      throw new Error('ArgumentNull: Filter.key can not be null!')\n    }\n\n    this.key = key\n    this.value = value\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static merge(current: Filter, forcedFilter: Filter): Filter {\n    let newFilterValue: string | string[]\n    if (Filter.isMulti(current) || Filter.isMulti(forcedFilter)) {\n      // We have a list of values. We just have to ensure our forced values are in there\n      const valueSet = new Set<string>()\n      Filter.addValuesToSet(valueSet, current)\n      Filter.addValuesToSet(valueSet, forcedFilter)\n      newFilterValue = Array.from(valueSet)\n    } else {\n      newFilterValue = forcedFilter.value\n    }\n    return new Filter(current.key, newFilterValue)\n  }\n\n  /**\n   * Checks if this filter supports multiple values.\n   * @param filter\n   */\n  public static isMulti(filter: Filter) {\n    return Array.isArray(filter.value)\n  }\n\n  /**\n   * Checks if this filter has a value.\n   * This is the case when the value is non-null.\n   * In case of an array, empty and non-empty return both true.\n   */\n  public static hasValue(self: Filter): boolean {\n    if (!self) {\n      return false\n    }\n\n    if (Objects.nonNull(self.value)) {\n      return true\n    }\n    return false\n  }\n\n  /**\n   * Checks this filter has the same value as the other given filter.\n   * @param self\n   * @param other\n   */\n  public static equals(self: Filter, other: Filter): boolean {\n    if (self === other) {\n      return true\n    } // Same obj reference\n\n    if (!self) {\n      return false\n    }\n    if (!other) {\n      return false\n    }\n    if (self.key !== other.key) {\n      return false\n    }\n    if (self.value === other.value) {\n      return true\n    } // Same key and same value reference\n\n    // In case the filter has a multi value array, we need to compare those by value\n\n    if (Array.isArray(self.value) || Array.isArray(other.value)) {\n      const valueArr = Array.isArray(self.value) ? (self.value as string[]) : [self.value]\n      const otherArr = Array.isArray(other.value) ? (other.value as string[]) : [other.value]\n      return CollectionUtil.equalSetDeep(new Set<string>(valueArr), new Set<string>(otherArr))\n    } else {\n      return false // Otherwise, they are not equal\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static addValuesToSet(valueSet: Set<string>, filter: Filter): void {\n    const filterValue = filter.value\n    if (Array.isArray(filterValue)) {\n      const values = filterValue as string[]\n      values.forEach((v) => valueSet.add(v))\n    } else {\n      const value = filterValue as string\n      valueSet.add(value)\n    }\n  }\n}\n","import { LoggerFactory } from '@elderbyte/ts-logger'\n\nexport class ObjectPathResolver {\n  private static readonly log = LoggerFactory.getLogger(ObjectPathResolver.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static resolveValue(entity: unknown, fieldPath: string): unknown {\n    let value: any\n    if (entity === null || entity === undefined) {\n      value = null\n    } else if (typeof entity === 'object') {\n      value = this.resolveObjectValue(entity, fieldPath)\n    } else {\n      value = String(entity) // Support filtering primitive values\n    }\n    return value\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static resolveObjectValue(entity: object, fieldPath: string): unknown {\n    const hops = fieldPath.split('.')\n    let resolved: any = entity\n    for (const hop of hops) {\n      if (resolved) {\n        resolved = resolved[hop]\n      } else {\n        this.log.warn(\n          'Could not resolve fieldPath \"' +\n            fieldPath +\n            '\" on value, .' +\n            hop +\n            ' not found on null.',\n          entity\n        )\n        return undefined\n      }\n    }\n    return resolved\n  }\n}\n","export class UnreachableCaseError extends Error {\n  constructor(public value: never) {\n    super('Unreachable case unhandled value: ' + value)\n    Object.setPrototypeOf(this, UnreachableCaseError.prototype)\n  }\n}\n","import { ObjectPathResolver } from './object-path-resolver'\nimport { UnreachableCaseError } from '../../exceptions/unreachable-case-error'\n\nexport interface MatchOptions {\n  caseSensitive?: boolean\n  mode: 'start' | 'full' | 'anywhere'\n  exclude?: boolean\n}\n\nexport interface ValueSpec {\n  needle: string | string[] | undefined\n  options: MatchOptions\n}\n\nexport class ObjectFieldMatcher<TEntity> {\n  public static of<TEntity>(entity: TEntity): ObjectFieldMatcher<TEntity> {\n    return new ObjectFieldMatcher<TEntity>(entity)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(public readonly entity: TEntity) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public matchesAll(fieldPaths: string[], spec: ValueSpec): boolean {\n    if (fieldPaths.length === 0) return false\n    for (const fieldPath of fieldPaths) {\n      if (!this.matches(fieldPath, spec)) {\n        return false\n      }\n    }\n    return true\n  }\n\n  public matchesAny(fieldPaths: string[], spec: ValueSpec): boolean {\n    for (const fieldPath of fieldPaths) {\n      if (this.matches(fieldPath, spec)) {\n        return true\n      }\n    }\n    return false\n  }\n\n  public matches(fieldPath: string, spec: ValueSpec): boolean {\n    const resolvedValue = ObjectPathResolver.resolveValue(this.entity, fieldPath)\n    if (!spec.options.exclude) {\n      return this.matchesGenericInclude(spec, resolvedValue)\n    } else {\n      return this.matchesGenericExclude(spec, resolvedValue)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private matchesGenericExclude(spec: ValueSpec, resolvedValue: any): boolean {\n    let exclusions: string[]\n    if (Array.isArray(spec.needle)) {\n      exclusions = spec.needle\n    } else {\n      exclusions = [spec.needle]\n    }\n    if (exclusions.length > 0) {\n      return !exclusions.some((excluded) => {\n        if (Array.isArray(resolvedValue)) {\n          return resolvedValue.some((v) => v === excluded) // TODO use matchesSingleValue\n        } else {\n          return resolvedValue === excluded // TODO use matchesSingleValue\n        }\n      })\n    } else {\n      return true\n    }\n  }\n\n  private matchesGenericInclude(spec: ValueSpec, resolvedValue: any): boolean {\n    if (Array.isArray(spec.needle)) {\n      for (const val of spec.needle) {\n        if (this.matchesSingleValue(resolvedValue, val, spec.options)) {\n          return true\n        }\n      }\n      return false\n    } else {\n      return this.matchesSingleValue(resolvedValue, spec.needle, spec.options)\n    }\n  }\n\n  private matchesSingleValue(\n    resolvedValue: unknown,\n    filterValue: string,\n    options: MatchOptions\n  ): boolean {\n    if (resolvedValue === filterValue) {\n      return true\n    }\n    if (resolvedValue === null || resolvedValue === undefined) {\n      return false\n    }\n    let resolvedValueStr = String(resolvedValue)\n    let filterValueStr = filterValue\n\n    if (!options.caseSensitive) {\n      resolvedValueStr = resolvedValueStr.toLowerCase()\n      filterValueStr = filterValueStr.toLowerCase()\n    }\n\n    switch (options.mode) {\n      case 'start':\n        return resolvedValueStr.startsWith(filterValueStr)\n      case 'full':\n        return resolvedValueStr === filterValueStr\n      case 'anywhere':\n        return resolvedValueStr.indexOf(filterValueStr) >= 0\n      default:\n        throw new UnreachableCaseError(options.mode)\n    }\n  }\n}\n","import { Filter } from '../../data/filters/filter'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ObjectPathResolver } from './object-path-resolver'\nimport { ObjectFieldMatcher } from './object-field-matcher'\n\nexport interface GenericMatcherOptions {\n  mode: 'start' | 'full' | 'anywhere'\n  caseSensitive: boolean\n  excludeSuffix?: string\n}\n\nexport class TargetValue<TEntity> {\n  constructor(\n    public readonly entity: TEntity,\n    public readonly resolvedValue: unknown\n  ) {}\n}\n\n/**\n * Allows defining custom filter matchers.\n *\n * @example\n *\n * const customFilterMatchers = CustomMatcherSpec.start()\n *   .customFilterWildcard((filter, target) => {\n *     return target.resolvedValue.indexOf(filter.value) >= 0\n *   })\n *   .customFilter('name', (filter, target) => {\n *     return target.resolvedValue.indexOf(filter.value) >= 0\n })\n */\nexport class CustomMatcherSpec<TEntity> {\n  private readonly customFilterMatchers: Map<\n    string, // Filter Key\n    (filter: Filter, target: TargetValue<TEntity>) => boolean\n  > = new Map()\n\n  public static start<TEntity>(): CustomMatcherSpec<TEntity> {\n    return new CustomMatcherSpec<TEntity>()\n  }\n\n  public customFilterWildcard(\n    matcher: (filter: Filter, target: TargetValue<TEntity>) => boolean\n  ): this {\n    this.customFilterMatchers.set('*', matcher)\n    return this\n  }\n\n  public customFilter(\n    filterKey: string,\n    matcher: (filter: Filter, target: TargetValue<TEntity>) => boolean\n  ): this {\n    this.customFilterMatchers.set(filterKey, matcher)\n    return this\n  }\n\n  public toMap(): Map<\n    string, // Filter Key\n    (filter: Filter, target: TargetValue<TEntity>) => boolean\n  > {\n    return new Map(this.customFilterMatchers)\n  }\n}\n\n/**\n * Filters data based on a set of filters.\n *\n * @example\n *\n * const filter = new LocalDataFilter.generic({\n *   mode: 'start',\n *   caseSensitive: false\n * })\n *\n * const filtered = filter.filterData(data, [])\n */\nexport class LocalDataFilter<TEntity> {\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static generic<TEntity = any>(options: GenericMatcherOptions): LocalDataFilter<TEntity> {\n    return new LocalDataFilter(options, new Map())\n  }\n\n  public static custom<TEntity>(\n    customMatcher: CustomMatcherSpec<TEntity>,\n    options: GenericMatcherOptions\n  ): LocalDataFilter<TEntity> {\n    return new LocalDataFilter(options, customMatcher.toMap())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(LocalDataFilter.constructor.name)\n  private readonly customWildcardMatcher: (\n    filter: Filter,\n    target: TargetValue<TEntity>\n  ) => boolean | undefined\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  private constructor(\n    private readonly genericOptions: GenericMatcherOptions,\n    private readonly customFilterMatchers: Map<\n      string, // Filter Key\n      (filter: Filter, target: TargetValue<TEntity>) => boolean\n    >\n  ) {\n    this.customWildcardMatcher = this.customFilterMatchers.get('*')\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public filterData<T>(data: T[], filters: Filter[]): T[] {\n    if (filters && filters.length > 0) {\n      for (const filter of filters) {\n        data = data.filter((e) => this.matches(e, filter))\n      }\n    }\n    return data\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private matches(entity: any, filter: Filter): boolean {\n    if (filter.value === null || filter.value === undefined) {\n      return true\n    }\n\n    const target = new TargetValue<TEntity>(\n      entity,\n      ObjectPathResolver.resolveValue(entity, this.resolveObjectPath(filter))\n    )\n    return this.matchesResolvedValue(filter, target)\n  }\n\n  private resolveObjectPath(filter: Filter): string {\n    let filterPath = filter.key\n    if (this.isExclude(filter)) {\n      filterPath = filter.key.substring(\n        0,\n        filter.key.length - this.genericOptions.excludeSuffix.length\n      )\n    }\n    return filterPath\n  }\n\n  private isExclude(filter: Filter): boolean {\n    return (\n      this.genericOptions.excludeSuffix !== undefined &&\n      filter.key.endsWith(this.genericOptions.excludeSuffix)\n    )\n  }\n\n  private matchesResolvedValue(filter: Filter, target: TargetValue<TEntity>): boolean {\n    if (this.customFilterMatchers.has(filter.key)) {\n      const customMatcher = this.customFilterMatchers.get(filter.key)\n      return customMatcher(filter, target)\n    } else if (this.customWildcardMatcher !== undefined) {\n      return this.customWildcardMatcher(filter, target)\n    } else {\n      return this.matchesResolvedValueGeneric(filter, target)\n    }\n  }\n\n  private matchesResolvedValueGeneric(filter: Filter, target: TargetValue<TEntity>): boolean {\n    return ObjectFieldMatcher.of(target.entity).matches(this.resolveObjectPath(filter), {\n      options: {\n        caseSensitive: this.genericOptions.caseSensitive,\n        mode: this.genericOptions.mode,\n        exclude: this.isExclude(filter),\n      },\n      needle: filter.value,\n    })\n  }\n}\n","import { Filter } from '../../data/filters/filter'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { FilterContext } from '../../data/filters/filter-context'\nimport { LocalDataFilter } from './local-data-filter'\n\nexport class FilterUtil {\n  private static readonly log = LoggerFactory.getLogger(FilterUtil.constructor.name)\n\n  public static equals(aFilters: Filter[], bFilters: Filter[]): boolean {\n    if (aFilters.length !== bFilters.length) {\n      return false\n    }\n    if (aFilters.length === 0 && bFilters.length === 0) {\n      return true\n    }\n\n    // The both filter arrays have the same length, so we must compare them by value\n\n    const bIndex = new Map<string, Filter>()\n    bFilters.forEach((f) => bIndex.set(f.key, f))\n\n    for (const fa of aFilters) {\n      const bFilter = bIndex.get(fa.key)\n      if (!Filter.equals(bFilter, fa)) {\n        return false\n      }\n    }\n    return true\n  }\n\n  /**\n   * Merge the provided filter sets. The second parameter will\n   * replace filters which exist in the first.\n   * @param filtersA\n   * @param filtersB\n   */\n  public static mergeFlat(filtersA: Filter[], filtersB: Filter[]): Filter[] {\n    const mergeContext = new FilterContext()\n    mergeContext.updateFilters(filtersA)\n    mergeContext.updateFilters(filtersB)\n    return mergeContext.filtersSnapshot\n  }\n\n  /**\n   * Performs a combining merge of the provided filters.\n   * Array based filter values will be combined.\n   * @param filtersA\n   * @param filtersB\n   */\n  public static mergeCombine(filtersA: Filter[], filtersB: Filter[]): Filter[] {\n    const mergeContext = new FilterContext()\n    mergeContext.updateFilters(filtersA)\n    mergeContext.mergeFilters(filtersB)\n    return mergeContext.filtersSnapshot\n  }\n\n  public static strip(base: Filter[], toRemove: Filter[]): Filter[] {\n    const removeMap = new Map<string, Filter>()\n    toRemove.forEach((r) => removeMap.set(r.key, r))\n    return base\n      .map((filter) => {\n        if (removeMap.has(filter.key)) {\n          const stripped = FilterUtil.stripValue(filter.value, removeMap.get(filter.key).value)\n          if (stripped !== null) {\n            return new Filter(filter.key, stripped)\n          } else {\n            return null\n          }\n        } else {\n          return filter\n        }\n      })\n      .filter((f) => !!f)\n  }\n\n  private static stripValue(\n    baseValue: string | string[] | null,\n    removeValue: string | string[] | null\n  ): string | string[] | null {\n    if (Array.isArray(baseValue)) {\n      if (Array.isArray(removeValue)) {\n        const filtered = baseValue.filter((b) => removeValue.indexOf(b) === -1)\n        if (filtered.length > 0) {\n          return filtered\n        }\n      } else {\n        const filtered = baseValue.filter((b) => b !== removeValue)\n        if (filtered.length > 0) {\n          return filtered\n        }\n      }\n    }\n    return null\n  }\n\n  private static startsWithFilter = LocalDataFilter.generic({ mode: 'start', caseSensitive: false })\n\n  public static filterData<T>(data: T[], filters: Filter[]): T[] {\n    FilterUtil.log.debug('Filtering data with ' + data.length + ' items.', filters)\n    return FilterUtil.startsWithFilter.filterData(data, filters)\n  }\n}\n","import { Filter } from './filter'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { distinctUntilChanged } from 'rxjs/operators'\nimport { FilterUtil } from '../../utils/filter/filter-util'\n\nexport class FilterContext {\n  public static empty(): FilterContext {\n    return new FilterContext()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _filters$ = new BehaviorSubject<Filter[]>([])\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Utilities                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Update the given filters with new ones, merging the two.\n   * The updated filters take precedence.\n   * @param filters\n   * @param updatedFilters\n   */\n  public static updateFilters(filters: Filter[], updatedFilters: Filter[]): Filter[] {\n    const filterMap = new Map<string, Filter>()\n\n    if (filters) {\n      filters.forEach((f) => filterMap.set(f.key, f))\n    }\n\n    if (updatedFilters) {\n      updatedFilters.forEach((f) => {\n        if (Filter.hasValue(f)) {\n          filterMap.set(f.key, f)\n        } else {\n          if (filterMap.has(f.key)) {\n            filterMap.delete(f.key)\n          }\n        }\n      })\n    }\n\n    return Array.from(filterMap.values())\n  }\n\n  public static of(filters: Filter[]): FilterContext {\n    const filterContext = new FilterContext()\n    filterContext.replaceFilters(filters)\n    return filterContext\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Read API                                                                *\n   *                                                                         *\n   **************************************************************************/\n\n  public get isEmpty(): boolean {\n    return this.filtersSnapshot.length == 0\n  }\n\n  public get filters(): Observable<Filter[]> {\n    return this._filters$\n      .asObservable()\n      .pipe(distinctUntilChanged((a, b) => FilterUtil.equals(a, b)))\n  }\n\n  public get filtersSnapshot(): Filter[] {\n    return [...this._filters$.getValue()]\n  }\n\n  public findFilterValue(key: string): string | string[] | undefined {\n    const f = this.findFilter(key)\n    return f ? f.value : undefined\n  }\n\n  public findFilter(key: string): Filter | undefined {\n    return this.filtersSnapshot.filter((f) => f.key === key).find((first) => true)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public removeFilter(key: string): void {\n    const current = this.filtersSnapshot\n    const newFilters = current.filter((f) => f.key !== key)\n    if (current.length !== newFilters.length) {\n      this.replaceFilters(newFilters)\n    }\n  }\n\n  /**\n   * This method updatees / adds the given filter, leaving\n   * existing ones untouched.\n   * @param updatedFilter\n   */\n  public updateFilter(updatedFilter?: Filter): void {\n    if (updatedFilter) {\n      this.updateFilters([updatedFilter])\n    }\n  }\n\n  /**\n   * This method updates / adds the given filters, leaving\n   * existing ones untouched.\n   * @param updatedFilters\n   */\n  public updateFilters(updatedFilters?: Filter[]): void {\n    if (updatedFilters && updatedFilters.length > 0) {\n      this.replaceFilters(FilterContext.updateFilters(this.filtersSnapshot, updatedFilters))\n    }\n  }\n\n  /**\n   * Replace all existing filters with the given new ones.\n   * @param newFilters\n   */\n  public replaceFilters(newFilters?: Filter[]) {\n    this._filters$.next(newFilters || [])\n  }\n\n  public clear(): void {\n    this.replaceFilters([])\n  }\n\n  public mergeFilters(filters: Filter[]) {\n    filters.forEach((filter) => this.mergeFilter(filter))\n  }\n\n  public mergeFilter(filter: Filter): void {\n    const existing = this.findFilter(filter.key)\n    if (!existing) {\n      this.updateFilter(filter)\n    } else {\n      this.updateFilter(Filter.merge(existing, filter))\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","export declare type SortDirection = 'asc' | 'desc' | ''\n\nexport class Sort {\n  public static NONE = new Sort(undefined, '')\n\n  constructor(\n    public readonly prop: string | undefined,\n    public readonly dir: SortDirection\n  ) {}\n\n  public equals(other: Sort): boolean {\n    return other && this.prop === other.prop && this.dir === other.dir\n  }\n}\n","import { Sort } from './sort'\n\nexport class Page<T> {\n  public content: T[]\n  public totalElements: number\n  public totalPages: number\n  public last: boolean\n  public size: number\n  public number: number\n  public sort: any\n  public first: boolean\n  public numberOfElements: number\n\n  public static hasNext(page: Page<any>): boolean {\n    return !page.last\n  }\n\n  public static nextPageable(page: Page<any>, sorts?: Sort[]): Pageable {\n    if (!Page.hasNext(page)) {\n      throw new Error('There is no next page! To avoid this error, check with hasNext() first.')\n    }\n\n    return new Pageable(page.number + 1, page.size, sorts)\n  }\n\n  public static fromPage<TS>(data: TS[], total: number, pageable: Pageable) {\n    const page = new Page<TS>()\n    page.content = data\n    page.totalElements = total\n    page.totalPages = Math.ceil(total / pageable.size)\n    page.last = pageable.page >= page.totalPages\n    page.first = pageable.page === 0\n    page.size = pageable.size\n    page.number = pageable.page\n    page.numberOfElements = total\n    return page\n  }\n\n  public static from<TS>(data: TS[]) {\n    const page = new Page<TS>()\n    page.content = data\n    page.totalElements = data.length\n    page.totalPages = 1\n    page.last = true\n    page.first = true\n    page.size = data.length\n    page.number = 0\n    page.numberOfElements = data.length\n    return page\n  }\n}\n\nexport class PageRequest {\n  constructor(\n    /**\n     * index Page number (zero based index)\n     */\n    public readonly index: number,\n\n    /**\n     * size The page size\n     */\n    public readonly size: number\n  ) {}\n}\n\nexport class Pageable {\n  public readonly page: number\n  public readonly size: number\n  public readonly sorts: Sort[] = []\n\n  constructor(page: number, size: number, sorts?: Sort[]) {\n    this.page = page\n    this.size = size\n    this.sorts = sorts ? sorts : []\n  }\n}\n","import { JsonMap, JsonMapUtil } from '../json-map'\n\nexport class EntitySetPatch<ID, ItemUpdate> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly idToMapKeyFn: (id: ID) => string | number\n\n  private upsertsById: JsonMap<ItemUpdate> = {}\n  private updatesById: JsonMap<ItemUpdate> = {}\n  private upsertOnes: ItemUpdate[] = []\n  private updateOnes: ItemUpdate[] = []\n  private deleteOther?: boolean\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static start<ID, ItemUpdate>(\n    idToMapKeyFn?: (id: ID) => string | number\n  ): EntitySetPatch<ID, ItemUpdate> {\n    return new EntitySetPatch<ID, ItemUpdate>(idToMapKeyFn)\n  }\n\n  private static idToMapKeyDefault<ID>(id: ID): string | number {\n    if (typeof id === 'string') {\n      return id\n    } else if (typeof id === 'number') {\n      return id\n    } else {\n      return id + ''\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(idToMapKeyFn?: (id: ID) => string | number) {\n    this.idToMapKeyFn = idToMapKeyFn ?? EntitySetPatch.idToMapKeyDefault\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Query                                                                   *\n   *                                                                         *\n   **************************************************************************/\n\n  public getUpsertsById(): Map<ID, ItemUpdate> {\n    return JsonMapUtil.toMap(this.upsertsById)\n  }\n\n  public getUpdatesById(): Map<ID, ItemUpdate> {\n    return JsonMapUtil.toMap(this.updatesById)\n  }\n\n  public getUpsertOnes(): ItemUpdate[] {\n    return [...this.upsertOnes]\n  }\n\n  public getUpdateOnes(): ItemUpdate[] {\n    return [...this.updateOnes]\n  }\n\n  /**\n   * Gets all ids which should be deleted.\n   * Also consider isDeleteOther, which means\n   * everything gets deleted.\n   */\n  public collectDeletions(): ID[] {\n    return [\n      ...Array.from(this.getUpsertsById().entries())\n        .filter(([id, update]) => !update)\n        .map(([id, update]) => id),\n      ...Array.from(this.getUpdatesById().entries())\n        .filter(([id, update]) => !update)\n        .map(([id, update]) => id),\n    ]\n  }\n\n  /**\n   * Delete all entities which are not\n   * explicitly defined in this update.\n   * \"Replace with\" semantics.\n   */\n  public get isDeleteOther(): boolean {\n    return this.deleteOther\n  }\n\n  /**\n   * Collects all upserts. (Updates are ignored)\n   */\n  public collectUpserts(): ItemUpdate[] {\n    return [\n      ...Array.from(this.getUpsertsById().entries())\n        .filter(([id, update]) => !!update)\n        .map(([id, update]) => update),\n      ...this.upsertOnes,\n    ]\n  }\n\n  /**\n   * Collects all updates. (Upserts are ignored)\n   */\n  public collectUpdates(): ItemUpdate[] {\n    return [\n      ...Array.from(this.getUpdatesById().entries())\n        .filter(([id, update]) => !!update)\n        .map(([id, update]) => update),\n      ...this.updateOnes,\n    ]\n  }\n\n  public collectUpdatesAndUpserts(): ItemUpdate[] {\n    return [...this.collectUpserts(), ...this.collectUpdates()]\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Builder API                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public update(updateOne: ItemUpdate): this {\n    this.updateOnes.push(updateOne)\n    return this\n  }\n\n  public updateAll(updateOne: ItemUpdate[]): this {\n    this.updateOnes.push(...updateOne)\n    return this\n  }\n\n  public updateById(id: ID, updateOne: ItemUpdate): this {\n    this.updatesById[this.idToMapKeyFn(id)] = updateOne\n    return this\n  }\n\n  public updateAllById(updates: Map<ID, ItemUpdate>): this {\n    updates.forEach((v, k) => this.updateById(k, v))\n    return this\n  }\n\n  public upsert(updateOne: ItemUpdate): this {\n    this.upsertOnes.push(updateOne)\n    return this\n  }\n\n  public upsertAll(updateOne: ItemUpdate[]): this {\n    this.upsertOnes.push(...updateOne)\n    return this\n  }\n\n  public upsertById(id: ID, updateOne: ItemUpdate): this {\n    this.upsertsById[this.idToMapKeyFn(id)] = updateOne\n    return this\n  }\n\n  public upsertAllById(upserts: Map<ID, ItemUpdate>): this {\n    upserts.forEach((v, k) => this.upsertById(k, v))\n    return this\n  }\n\n  public deleteById(...idArgs: ID[]): this {\n    idArgs.forEach((id) => this.upsertById(id, null))\n    return this\n  }\n\n  public deleteByIds(ids: ID[]): this {\n    ids.forEach((id) => this.upsertById(id, null))\n    return this\n  }\n\n  public deleteAllOther(): this {\n    this.deleteOther = true\n    return this\n  }\n\n  public deleteAll(): this {\n    this.clear()\n    this.deleteAllOther()\n    return this\n  }\n\n  public clear(): this {\n    this.upsertOnes = []\n    this.upsertsById = {}\n    this.updateOnes = []\n    this.updatesById = {}\n    return this\n  }\n}\n","import { HttpParams } from '@angular/common/http'\nimport { Filter } from './filters/filter'\nimport { Sort } from './sort'\nimport { Pageable } from './page'\nimport { Objects } from '../objects'\nimport { TokenChunkRequest } from './token-chunk-request'\n\nexport class HttpParamsBuilder {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private params: HttpParams\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static start(params?: HttpParams): HttpParamsBuilder {\n    return new HttpParamsBuilder(params)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(params?: HttpParams) {\n    this.params = params ? params : new HttpParams()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public appendFilters(filters?: Filter[]): this {\n    if (filters) {\n      for (const filter of filters) {\n        if (Filter.hasValue(filter)) {\n          // Ignore filters without a value specified\n          if (filter.value instanceof Array) {\n            this.appendArray(filter.key, filter.value)\n          } else {\n            this.append(filter.key, filter.value)\n          }\n        }\n      }\n    }\n    return this\n  }\n\n  private appendArray(key: string, value: any[]) {\n    if (value.length > 0) {\n      value.forEach((v) => this.append(key, v))\n    } else {\n      this.append(key, '')\n    }\n  }\n\n  public appendFilter(...filters: Filter[]): this {\n    return this.appendFilters(filters)\n  }\n\n  public appendSorts(sorts?: Sort[]): this {\n    if (sorts) {\n      for (const sort of sorts) {\n        if (sort && Objects.nonNull(sort.prop)) {\n          this.append('sort', sort.prop + ',' + sort.dir)\n        }\n      }\n    }\n    return this\n  }\n\n  public appendSort(...sorts: Sort[]): this {\n    return this.appendSorts(sorts)\n  }\n\n  public appendPageable(pageable?: Pageable): this {\n    if (pageable) {\n      this.set('page', pageable.page.toString())\n        .set('size', pageable.size.toString())\n        .appendSorts(pageable.sorts)\n    }\n    return this\n  }\n\n  public appendContinuationRequest(tokenChunkRequest?: TokenChunkRequest): this {\n    if (tokenChunkRequest) {\n      if (tokenChunkRequest.nextContinuationToken) {\n        this.set('continuationToken', tokenChunkRequest.nextContinuationToken)\n      }\n      if (tokenChunkRequest.chunkSize) {\n        this.set('size', tokenChunkRequest.chunkSize.toString())\n      }\n      this.appendFilters(tokenChunkRequest.filters)\n      this.appendSorts(tokenChunkRequest.sorts)\n    }\n    return this\n  }\n\n  /**\n   * Turns an object into query-params.\n   *\n   * @param obj The object of which all properties should be applied to this param builder\n   */\n  public appendObject(obj: any): this {\n    if (obj) {\n      Object.keys(obj).forEach((k) => {\n        const value = obj[k]\n        if (Array.isArray(value)) {\n          const arr = <any[]>value\n          arr.forEach((v) => this.append(k, v + ''))\n        } else {\n          this.append(k, value + '')\n        }\n      })\n    }\n    return this\n  }\n\n  public append(key: string, value: string): this {\n    this.params = this.params.append(key, value)\n    return this\n  }\n\n  public set(key: string, value: string): this {\n    this.params = this.params.set(key, value)\n    return this\n  }\n\n  public build(): HttpParams {\n    return this.params\n  }\n}\n","export type ComparatorFn<T> = (a: T, b: T) => number\n\nexport function naturalValueComparator(a: any, b: any): number {\n  if (a === b) {\n    return 0\n  }\n  if (a === null || a === undefined) {\n    return -1\n  }\n  if (b === null || b === undefined) {\n    return 1\n  }\n  return a < b ? -1 : a > b ? 1 : 0\n}\n\nexport function alphaNumStringComparator(a: any, b: any): number {\n  if (a === b) {\n    return 0\n  }\n  if (a === null || a === undefined) {\n    return -1\n  }\n  if (b === null || b === undefined) {\n    return 1\n  }\n  return a.localeCompare(b, 'en', { numeric: true })\n}\n\n/**\n * Provides the ability to build a sorting comparator dynamically using\n * a given array of fields / additional syntax.\n *\n * - Supports ASC / DESC\n * - Supports multiple fields\n * - Supports nested fields\n *\n * Example:\n *\n * ComparatorBuilder.fieldSort('simple', '-reveresed', 'some.very.deep.nested.path')\n *\n */\nexport class ComparatorBuilder {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public static NATURAL_VALUE_COMPARATOR: ComparatorFn<any> = naturalValueComparator\n  public static ALPHANUM_STRING_COMPARATOR: ComparatorFn<string> = alphaNumStringComparator\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Dynamically builds a comparator function, using the given fields for sorting.\n   *\n   * @param fields One or more field name to sort.\n   */\n  public static fieldSort<T = any>(...fields: string[]): ComparatorFn<T> {\n    const props = fields\n    return function (obj1, obj2) {\n      let i = 0\n      let result = 0\n      const numberOfProperties = props.length\n      /* try getting a different result from 0 (equal)\n       * as long as we have extra properties to compare\n       */\n      while (result === 0 && i < numberOfProperties) {\n        result = ComparatorBuilder.dynamicSort(\n          props[i],\n          ComparatorBuilder.NATURAL_VALUE_COMPARATOR,\n          ComparatorBuilder.ALPHANUM_STRING_COMPARATOR\n        )(obj1, obj2)\n        i++\n      }\n      return result\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static dynamicSort<T = any>(\n    property: string,\n    genericValueComparator: ComparatorFn<T>,\n    stringValueComparator: ComparatorFn<string>\n  ): ComparatorFn<T> {\n    let sortOrder = 1\n    if (property[0] === '-') {\n      sortOrder = -1\n      property = property.substring(1)\n    }\n\n    return (a, b) => {\n      const aValue = ComparatorBuilder.resolveProperty(a, property)\n      const bValue = ComparatorBuilder.resolveProperty(b, property)\n      let result: number\n      if (typeof aValue === 'string' && typeof bValue === 'string') {\n        result = stringValueComparator(aValue, bValue)\n      } else {\n        result = genericValueComparator(aValue, bValue)\n      }\n      return result * sortOrder\n    }\n  }\n\n  private static resolveProperty(obj: any, property: string): any {\n    const parts = property.split('.')\n    let resolved: any = obj\n\n    for (const part of parts) {\n      if (!resolved) {\n        return null\n      }\n      resolved = resolved[part]\n    }\n    return resolved\n  }\n}\n","export class ContinuableListing<T> {\n  constructor() {}\n\n  /**\n   * The data of this listing chunk\n   */\n  public content: T[]\n\n  /**\n   * The current continuation token of this listing.\n   * To fetch the next page, use the NextContinuationToken property not this!\n   */\n  continuationToken?: string\n\n  /**\n   * The continuation token to fetch the next part\n   */\n  nextContinuationToken?: string\n\n  /**\n   * The totalSnapshot number of elements\n   * Might be null if the server does not know this\n   */\n  total?: number | undefined = null\n\n  /**\n   * Size of this chunk (max page size)\n   */\n  chunkSize?: number\n\n  /**\n   * Size of this chunk (max page size)\n   */\n  maxChunkSize?: number\n\n  /**\n   * Is there more data to load with the NextContiunationToken?\n   */\n  hasMore: boolean\n}\n","import { Sort } from './sort'\nimport { Filter } from './filters/filter'\nimport { ContinuableListing } from './continuable-listing'\n\nexport class TokenChunkRequest {\n  public static first(\n    filters: Filter[],\n    sorts: Sort[],\n    chunkSize: number | undefined\n  ): TokenChunkRequest {\n    return new TokenChunkRequest(undefined, filters, sorts, chunkSize)\n  }\n\n  public static nextIfAvailable(\n    listing: ContinuableListing<any>,\n    filters: Filter[],\n    sorts: Sort[]\n  ): TokenChunkRequest | undefined {\n    if (listing.hasMore && listing.nextContinuationToken) {\n      return new TokenChunkRequest(\n        listing.nextContinuationToken,\n        filters,\n        sorts,\n        listing.chunkSize ?? listing.maxChunkSize\n      )\n    } else {\n      return undefined\n    }\n  }\n\n  /**\n   *\n   * @param nextContinuationToken The continuation token. If not defined, fetches the first chunk.\n   * @param filters Filters to send with the request.\n   * @param sorts Sorts to send with the request.\n   * @param chunkSize The desired chunk size. Since servers are in control of chunk-size (performance), this is only considered a hint which might be ignored.\n   */\n  constructor(\n    public readonly nextContinuationToken: string | null | undefined,\n    public readonly filters: Filter[],\n    public readonly sorts: Sort[],\n    public readonly chunkSize: number | undefined\n  ) {}\n}\n","import { BehaviorSubject, Observable } from 'rxjs'\nimport { Sort } from '../sort'\nimport { SortContext } from '../sort-context'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\nexport class IndexedEntities<T, TId = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger('IndexedEntities')\n\n  private readonly _entities$ = new BehaviorSubject<T[]>([])\n  private readonly _idToArrayIndex = new Map<TId, number>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly idFn: (e: T) => TId,\n    private readonly localSortFn: ((data: T[], sorts: Sort[]) => T[]) | undefined,\n    private readonly sortContext: SortContext\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get entities$(): Observable<T[]> {\n    return this._entities$.asObservable()\n  }\n\n  public get entitiesSnapshot(): T[] {\n    return this._entities$.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Replaces all existing entities with the new ones.\n   * The index is rebuilt. O(n)\n   */\n  public replaceAll(newEntities: T[] = []) {\n    if (this.localSortFn) {\n      newEntities = this.localSortFn(newEntities, this.sortContext.sortsSnapshot)\n    }\n    this.rebuildIndex(newEntities)\n    this.setEntities(newEntities)\n  }\n\n  /**\n   * Keeps all existing entities, but replaces those which are updated with the new data.\n   * Provided updated entities which are currently not in this index are ignored.\n   * @param updated\n   */\n  public updateSome(updated: T[]) {\n    const newData = [...this.entitiesSnapshot]\n    let anyUpdated = false\n    const notFound: T[] = []\n    updated.forEach((update) => {\n      const id = this.getItemId(update)\n      const index = this.indexById(id)\n      if (index !== -1) {\n        newData[index] = update\n        anyUpdated = true\n      } else {\n        notFound.push(update)\n      }\n    })\n    if (notFound.length > 0) {\n      this.log.warn(\n        'could not find all entities to update ' + notFound.length + '/' + updated.length,\n        notFound\n      )\n    }\n    if (anyUpdated) {\n      this.setEntities(newData)\n    }\n  }\n\n  public append(append: T[]): void {\n    this.insert(append, this.entitiesSnapshot.length)\n  }\n\n  /**\n   * Appends the given entities to this index.\n   * The new appended entities are included in the index.\n   * O(n) where n = number of appended entities\n   * @param inserted\n   * @param offset\n   */\n  public insert(inserted: T[], offset: number): void {\n    if (inserted && inserted.length > 0) {\n      const entities = this.entitiesSnapshot\n      const newData = [...entities]\n\n      for (let i = 0; i < inserted.length; i++) {\n        newData[i + offset] = inserted[i]\n      }\n\n      if (this.localSortFn) {\n        // local sort can re-order all items\n        this.replaceAll(newData)\n      } else {\n        // Without a sort, we can optimize indexing\n        this.reIndexFrom(newData, offset)\n        this.setEntities(newData)\n      }\n    }\n  }\n\n  /**\n   * Lookup an entity by its id.\n   * This will use an index O(1)\n   * @param id\n   */\n  public getById(id: TId): T | undefined {\n    const entities = this.entitiesSnapshot\n    const index = this.indexById(id)\n    if (index !== -1) {\n      return entities[index]\n    }\n    return undefined\n  }\n\n  public notify(): void {\n    this._entities$.next(this._entities$.getValue())\n  }\n\n  public destroy() {\n    this._entities$.complete()\n    this._idToArrayIndex.clear()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private rebuildIndex(entities: T[]): void {\n    this._idToArrayIndex.clear()\n    this.reIndexFrom(entities, 0)\n  }\n\n  private reIndexFrom(entities: T[], startIndex: number) {\n    for (let i = startIndex; i < entities.length; i++) {\n      const entity = entities[i]\n      if (entity) {\n        this._idToArrayIndex.set(this.getItemId(entity), i)\n      }\n    }\n  }\n\n  private indexById(id: TId): number | undefined {\n    return this._idToArrayIndex.get(id) ?? -1\n  }\n\n  private getItemId(item: T): TId {\n    return this.idFn(item)\n  }\n\n  private setEntities(entities: T[]): void {\n    if (!(this.entitiesSnapshot.length === 0 && entities.length === 0)) {\n      this.log.debug('Entities changed: ' + entities.length, entities)\n      this._entities$.next(entities)\n    }\n  }\n}\n","/**\n * Represents the status of a data-context\n */\nexport class DataContextStatus {\n  /***************************************************************************\n   *                                                                         *\n   * Static builders                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public static idle(): DataContextStatus {\n    return new DataContextStatus(null)\n  }\n\n  public static error(error: any): DataContextStatus {\n    return new DataContextStatus(error)\n  }\n\n  public static loading(): DataContextStatus {\n    return new DataContextStatus(null, true)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructors                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly _error: any,\n    private readonly _loading = false\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get idle(): boolean {\n    return !this.loading && !this.error\n  }\n\n  public get loading(): boolean {\n    return this._loading\n  }\n\n  public get error(): any {\n    return this._error\n  }\n\n  public get hasError(): boolean {\n    return !!this._error\n  }\n}\n","import { DataContextStatus } from './data-context-status'\nimport { Observable } from 'rxjs'\nimport { Sort } from '../sort'\nimport { Filter } from '../filters/filter'\nimport { FilterContext } from '../filters/filter-context'\nimport { PageRequest } from '../page'\nimport { SortContext } from '../sort-context'\nimport { IDataSource } from '../datasource/data-source'\n\nexport class DataContextSnapshot<T> {\n  constructor(\n    public readonly data: T[],\n    public readonly isEmpty: boolean,\n    public readonly isLoading: boolean,\n    public readonly total: number | undefined,\n    public readonly status: DataContextStatus\n  ) {}\n}\n\n/**\n * Manages a set of data (rows) which are to be displayed in a UI Component.\n *\n */\nexport interface IDataContext<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * An auto generated id of this DataContext instance.\n   * Mostly for debugging purposes.\n   */\n  readonly id: string\n\n  /**\n   * Gets the underlying DataSource of this DataContext.\n   */\n  readonly dataSource: IDataSource<T>\n\n  /**\n   * Gets a snapshot of the current state in this data-context\n   */\n  readonly snapshot: DataContextSnapshot<T>\n\n  /**\n   * Observable which emits the current data over time.\n   */\n  readonly data: Observable<T[]>\n\n  /**\n   * Indicates if the context currently holds no data\n   */\n  readonly isEmpty: boolean\n\n  /**\n   * Indicates if the context has been started.\n   */\n  readonly isStarted: boolean\n\n  /**\n   * Indicates if the context has been started.\n   */\n  readonly isStarted$: Observable<boolean>\n\n  /**\n   * Indicates if the context has been closed.\n   * Depending on the implementation, restarting might not be possible.\n   */\n  readonly isClosed: boolean\n\n  /**\n   * Indicates if data is loading over time\n   */\n  readonly loading: Observable<boolean>\n\n  /**\n   * The total count of all elements over time\n   * (I.e. the expected count when the data context is completed)\n   */\n  readonly total: Observable<number | undefined>\n\n  /**\n   * Observable which emits when the status changes (i.e. error)\n   */\n  readonly status: Observable<DataContextStatus>\n\n  /**\n   * Gets the sort context. Changes in this context are reflected by the data-context.\n   */\n  readonly sort: SortContext\n\n  /**\n   * Gets the filter context. Changes in this context are reflected by the data-context.\n   */\n  readonly filter: FilterContext\n\n  /***************************************************************************\n   *                                                                         *\n   * API                                                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Starts populating data context by loading first\n   * batch of data.\n   */\n  start(sorts?: Sort[], filters?: Filter[]): Observable<any>\n\n  /**\n   * Requests a reload of the current data / chunk.\n   * Attempts to keep the current position.\n   */\n  reload(reason?: string): Observable<any>\n\n  /**\n   * Refresh the data view from the local data model. (Does not request new data from the server)\n   * Useful if the data model has changes that need to be reflected in the UI.\n   */\n  refresh(): void\n\n  /**\n   * Closes the data-context and cleans up resources\n   */\n  close(): void\n\n  /**\n   * Returns the item by a custom index key.\n   * Requires that custom index functionality is enabled.\n   *\n   * For id based lookup, refer to findById().\n   *\n   * @param key\n   */\n  findByIndex(key: any): T | undefined\n\n  /**\n   * Lookup an entity by its id. This method is guaranteed to be backed by a fast index.\n   * @param id The Entity Id.\n   */\n  findById(id: any): T | undefined\n\n  /**\n   * Update the given entities in this data-context\n   */\n  update(entities: T[]): void\n}\n\n/**\n * Represents a data-context which backs a infinite like data stream\n * where more data will be loaded and added to the backing rows.\n */\nexport interface IDataContextContinuable<T> extends IDataContext<T> {\n  /**\n   * Returns true if this data-context can load more data\n   */\n  readonly hasMoreDataSnapshot: boolean\n\n  /**\n   * Returns true if this data-context can load more data over time\n   */\n  readonly hasMoreData: Observable<boolean>\n\n  /**\n   * Loads more data if any available.\n   * E.g. next page.\n   *\n   */\n  loadMore(): Observable<any>\n\n  /**\n   * Loads all available data. In case of\n   * paged context loads page by page until finished.\n   */\n  loadAll(sorts?: Sort[], filters?: Filter[]): void\n\n  /**\n   * Set the desired chunk size\n   */\n  set chunkSize(size: number | undefined)\n  get chunkSize(): number\n  get chunkSize$(): Observable<number | undefined>\n}\n\nexport interface IDataContextActivePage<T> extends IDataContext<T> {\n  /**\n   * Gets the active page over time\n   */\n  readonly page: Observable<PageRequest>\n\n  /**\n   * Gets the current active page\n   */\n  readonly pageSnapshot: PageRequest\n\n  /**\n   * Sets the active page\n   */\n  setActivePage(page: PageRequest): void\n}\n\n/***************************************************************************\n *                                                                         *\n * Type Predicates                                                         *\n *                                                                         *\n **************************************************************************/\n\nexport function isDataContext(object: any): object is IDataContext<any> {\n  if (!object) {\n    return false\n  }\n\n  return (\n    (object as IDataContext<any>).data !== undefined &&\n    (object as IDataContext<any>).start !== undefined &&\n    (object as IDataContext<any>).reload !== undefined &&\n    (object as IDataContext<any>).refresh !== undefined\n  )\n}\n\nexport function isContinuableDataContext(\n  object: IDataContext<any>\n): object is IDataContextContinuable<any> {\n  return (object as IDataContextContinuable<any>).loadMore !== undefined\n}\n\nexport function isActivePagedDataContext(\n  object: IDataContext<any>\n): object is IDataContextActivePage<any> {\n  return (object as IDataContextActivePage<any>).setActivePage !== undefined\n}\n","import { BehaviorSubject, Observable } from 'rxjs'\nimport { Sort, SortDirection } from './sort'\n\nexport class SortContext {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _sorts = new BehaviorSubject<Sort[]>([])\n\n  /***************************************************************************\n   *                                                                         *\n   * Read API                                                                *\n   *                                                                         *\n   **************************************************************************/\n\n  public get sorts(): Observable<Sort[]> {\n    return this._sorts.asObservable()\n  }\n\n  public get sortsSnapshot(): Sort[] {\n    return [...this._sorts.getValue()]\n  }\n\n  public findSortDirection(prop: string): SortDirection | undefined {\n    const f = this.findSort(prop)\n    return f ? f.dir : undefined\n  }\n\n  public findSort(prop: string): Sort | undefined {\n    return this.sortsSnapshot.filter((f) => f.prop === prop).find((first) => true)\n  }\n\n  public isEmpty(): boolean {\n    return !this._sorts.getValue() || this._sorts.getValue().length === 0\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * This method updatees / adds the given sort, leaving\n   * existing ones untouched.\n   * @param updatedSort\n   */\n  public updateSort(updatedSort?: Sort): void {\n    if (updatedSort) {\n      this.updateSorts([updatedSort])\n    }\n  }\n\n  /**\n   * This method updates / adds the given filters, leaving\n   * existing ones untouched.\n   * @param updatedSorts\n   */\n  public updateSorts(updatedSorts?: Sort[]): void {\n    if (updatedSorts && updatedSorts.length > 0) {\n      const sortMap = new Map<string, Sort>()\n      this.sortsSnapshot.forEach((s) => sortMap.set(s.prop, s))\n      updatedSorts.forEach((s) => sortMap.set(s.prop, s))\n      this.replaceSorts(Array.from(updatedSorts.values()))\n    }\n  }\n\n  /**\n   * Replace all existing filters with the given new ones.\n   * @param newSorts\n   */\n  public replaceSorts(newSorts?: Sort[]) {\n    this._sorts.next(newSorts || [])\n  }\n\n  public clear(): void {\n    this.replaceSorts([])\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { Filter } from '../filters/filter'\nimport { Sort } from '../sort'\nimport { CollectionViewer, DataSource } from '@angular/cdk/collections'\nimport { DataContextStatus } from './data-context-status'\nimport { BehaviorSubject, Observable, of, Subject, switchMap } from 'rxjs'\nimport { FilterContext } from '../filters/filter-context'\nimport { DataContextSnapshot, IDataContext } from './data-context'\nimport { catchError, debounceTime, filter, map, takeUntil } from 'rxjs/operators'\nimport { SortContext } from '../sort-context'\nimport { IDataSource } from '../datasource/data-source'\nimport { IndexedEntities } from './indexed-entities'\n\nclass ReloadRequest {\n  constructor(\n    public readonly number: number,\n    public readonly reason?: string\n  ) {}\n}\n\nclass AfterReload {\n  constructor(\n    public readonly request: ReloadRequest,\n    public readonly result: any\n  ) {}\n\n  public fulfills(minRequest: ReloadRequest): boolean {\n    return this.request.number >= minRequest.number\n  }\n}\n\nexport abstract class DataContextBase<T, TId = any>\n  extends DataSource<T>\n  implements IDataContext<T>\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private static DC_ID_COUNTER = 0\n\n  private readonly baselog: Logger = LoggerFactory.getLogger('DataContextBase')\n\n  /**\n   * ID of this DataContext\n   */\n  public readonly id: string\n\n  private readonly _dataSource: IDataSource<T>\n\n  private readonly _filter = new FilterContext()\n  private readonly _sort = new SortContext()\n\n  private readonly _loading: Observable<boolean>\n\n  private readonly _data: IndexedEntities<T, TId>\n  private readonly _total = new BehaviorSubject<number | undefined>(undefined)\n  private readonly _status = new BehaviorSubject<DataContextStatus>(DataContextStatus.idle())\n\n  private readonly _started = new BehaviorSubject<boolean>(false)\n  private readonly _closed = new BehaviorSubject<boolean>(false)\n\n  private readonly _customIndex = new Map<any, T>()\n\n  private _reloadCounter = 0\n  private readonly _reloadQueue = new Subject<ReloadRequest>()\n  private readonly _reloaded = new Subject<AfterReload>()\n\n  protected readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor(\n    dataSource: IDataSource<T>,\n    private _indexFn: (item: T) => any,\n    private _localApply: (data: T[]) => T[],\n    private _localSort: (data: T[], sorts: Sort[]) => T[]\n  ) {\n    super()\n    this.id = 'DataContext#' + ++DataContextBase.DC_ID_COUNTER\n    this._dataSource = dataSource\n    this._data = new IndexedEntities((e) => dataSource.getId(e), _localSort, this._sort)\n\n    this._loading = this._status.pipe(map((status) => status.loading))\n\n    this._filter.filters\n      .pipe(\n        filter(() => this.started),\n        takeUntil(this.destroy$)\n      )\n      .subscribe((filters) => this.onFiltersChanged(filters))\n\n    this._sort.sorts\n      .pipe(\n        filter(() => this.started),\n        takeUntil(this.destroy$)\n      )\n      .subscribe((sorts) => this.onSortsChanged(sorts))\n\n    this._reloadQueue\n      .pipe(\n        takeUntil(this.destroy$),\n        filter((request) => this.started),\n        debounceTime(50),\n        switchMap((request) =>\n          this.reloadNow(request).pipe(\n            map((result) => new AfterReload(request, result)),\n            catchError((err) => {\n              // Dont die on errors\n              this.baselog.error(this.id + ': Reload queue detected error, bad!', err)\n              return of(new AfterReload(request, err))\n            })\n          )\n        )\n      )\n      .subscribe((afterReload) => this._reloaded.next(afterReload))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API Material DC                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public connect(collectionViewer: CollectionViewer): Observable<T[]> {\n    return this.data\n  }\n\n  public disconnect(collectionViewer: CollectionViewer): void {\n    // this.close(); Closing will destroy the DC\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get dataSource(): IDataSource<T> {\n    return this._dataSource\n  }\n\n  public get snapshot(): DataContextSnapshot<T> {\n    return new DataContextSnapshot(\n      this.dataSnapshot,\n      this.isEmpty,\n      this.loadingSnapshot,\n      this.totalSnapshot,\n      this.statusSnapshot\n    )\n  }\n\n  public get total(): Observable<number | undefined> {\n    return this._total.asObservable()\n  }\n\n  public get totalSnapshot(): number | undefined {\n    return this._total.getValue()\n  }\n\n  public get sort(): SortContext {\n    return this._sort\n  }\n\n  public get filter(): FilterContext {\n    return this._filter\n  }\n\n  public get loading(): Observable<boolean> {\n    return this._loading\n  }\n\n  public get loadingSnapshot(): boolean {\n    return this.statusSnapshot?.loading\n  }\n\n  public get data(): Observable<T[]> {\n    return this._data.entities$\n  }\n\n  public get dataSnapshot(): T[] {\n    return this._data.entitiesSnapshot\n  }\n\n  public get status(): Observable<DataContextStatus> {\n    return this._status\n  }\n\n  public get statusSnapshot(): DataContextStatus {\n    return this._status.getValue()\n  }\n\n  public get isEmpty(): boolean {\n    return this.dataSnapshot.length === 0\n  }\n\n  public get isStarted(): boolean {\n    return this.started\n  }\n\n  public get isStarted$(): Observable<boolean> {\n    return this._started.asObservable()\n  }\n\n  public get isClosed(): boolean {\n    return this._closed.getValue()\n  }\n\n  protected get started(): boolean {\n    return this._started.getValue()\n  }\n\n  protected set started(started: boolean) {\n    this._started.next(started)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public start(sorts?: Sort[], filters?: Filter[]): Observable<any> {\n    if (this.isClosed) {\n      throw new Error(this.id + ': Restarting a closed DataContext is not possible!') // See unsubscribe$\n    }\n\n    this.started = false\n\n    this._sort.replaceSorts(sorts || this.sort.sortsSnapshot)\n    this._filter.replaceFilters(filters || this.filter.filtersSnapshot)\n\n    this.baselog.debug(this.id + ': Start ...', {\n      dataSource: this.dataSource,\n      sort: this._sort.sortsSnapshot,\n      filter: this._filter.filtersSnapshot,\n    })\n\n    this.started = true\n\n    return this.reload('START')\n  }\n\n  public reload(reason?: string): Observable<any> {\n    const request = new ReloadRequest(++this._reloadCounter, reason)\n    this.baselog.debug(\n      this.id + ': Enqueuing reload request #' + request.number + ' [' + reason + ']'\n    )\n    this._reloadQueue.next(request)\n    return this._reloaded.pipe(\n      filter((reload) => reload.fulfills(request)),\n      map((reload) => reload.result)\n    )\n  }\n\n  public findByIndex(key: any): T | undefined {\n    if (!this._indexFn) {\n      throw new Error(this.id + ': findByIndex requires you to pass a index function!')\n    }\n    return this._customIndex.get(key)\n  }\n\n  public findById(id: any): T | undefined {\n    return this._data.getById(id)\n  }\n\n  /**\n   * Closes this DataContext and cleans up all used resources.\n   */\n  public close(): void {\n    this.started = false\n    this.destroy$.next()\n    this.destroy$.complete()\n    this._closed.next(true)\n\n    this._data.destroy()\n    this._total.complete()\n    this._status.complete()\n\n    this.clearAll()\n    this.baselog.debug(this.id + ': Has been closed and resources cleaned up!')\n  }\n\n  public refresh(): void {\n    this._data.notify()\n  }\n\n  public update(entities: T[]): void {\n    this._data.updateSome(entities)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Protected methods                                                       *\n   *                                                                         *\n   **************************************************************************/\n\n  private reloadNow(request: ReloadRequest): Observable<any> {\n    this.baselog.debug(\n      this.id + ': reloadNow triggered. Request #' + request.number + ' ' + request.reason,\n      {\n        filter: this._filter.filtersSnapshot,\n        sort: this._sort.sortsSnapshot,\n        dataSource: this.dataSource,\n        request: request,\n      }\n    )\n    return this.reloadInternal() // TODO This should actually return the real (http) request\n  }\n\n  /**\n   * Append the given rows to the existing ones.\n   */\n  protected appendData(additionalData: T[]): void {\n    additionalData = this.localApply(additionalData)\n    this.indexAll(additionalData)\n    this._data.append(additionalData)\n  }\n\n  /**\n   * Insert the given rows at the given location.\n   */\n  protected insertData(additionalData: T[], offset: number): void {\n    additionalData = this.localApply(additionalData)\n    this.indexAll(additionalData)\n    this._data.insert(additionalData, offset)\n  }\n\n  /**\n   * Replaces the existing data with the new set.\n   * @param newData The new data set.\n   * @param alreadyIndexed The rows will be indexed unless they already have been.\n   */\n  protected setData(newData: T[], alreadyIndexed = false): void {\n    newData = this.localApply(newData)\n    if (!alreadyIndexed) {\n      this.clearIndex()\n      this.indexAll(newData)\n    }\n    this._data.replaceAll(newData)\n  }\n\n  protected clearData(): void {\n    this.setData([])\n  }\n\n  private localApply(data: T[]): T[] {\n    if (this._localApply) {\n      return this._localApply(data)\n    } else {\n      return data\n    }\n  }\n\n  protected setTotal(total: number | undefined): void {\n    this._total.next(total)\n  }\n\n  /**\n   * Clears the current data-context cached data.\n   * State such as current sorting and filtersSnapshot are kept.\n   */\n  protected clearAll(silent = false): void {\n    this.clearIndex()\n\n    if (!silent) {\n      this.setTotal(0)\n      this.clearData()\n    }\n\n    this.onIdle()\n  }\n\n  protected updateIndex(): void {\n    this.clearIndex()\n    this.indexAll(this.dataSnapshot)\n  }\n\n  /**\n   * Indexes the given item by key if there is an index function defined.\n   */\n  protected indexItem(item: T): void {\n    const key = this.getItemKey(item)\n    if (key) {\n      this._customIndex.set(key, item)\n    }\n  }\n\n  /**\n   * Indexes all the given items by key if there is an index function defined.\n   */\n  protected indexAll(items: T[]): void {\n    if (this._indexFn) {\n      items.forEach((item) => this.indexItem(item))\n    }\n  }\n\n  protected getItemKey(item: T): any {\n    if (this._indexFn) {\n      return this._indexFn(item)\n    }\n    return null\n  }\n\n  protected getItemId(item: T): TId {\n    return this.dataSource.getId(item)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Event handler                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Occurs when the sort has changed.\n   */\n  protected onSortsChanged(sorts: Sort[]): void {\n    if (!this._localSort) {\n      this.reload('Sort Changed')\n    } else {\n      this.setData(this.dataSnapshot, true)\n    }\n  }\n\n  /**\n   * Occurs when the filter has changed.\n   */\n  protected onFiltersChanged(filters: Filter[]): void {\n    this.reload('Filters Changed')\n  }\n\n  protected onError(err: any): void {\n    this.onStatus(DataContextStatus.error(err))\n  }\n\n  protected onIdle(): void {\n    this.onStatus(DataContextStatus.idle())\n  }\n\n  protected onLoading(): void {\n    this.onStatus(DataContextStatus.loading())\n  }\n\n  protected onStatus(status: DataContextStatus): void {\n    this._status.next(status)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Abstract methods                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Subclasses must implement this method and\n   * reload the currently held data.\n   * If possible, the current view state should be kept.\n   *\n   * @returns The reload job.\n   */\n  protected abstract reloadInternal(): Observable<any>\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private clearIndex(): void {\n    this._customIndex.clear()\n  }\n}\n","import { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { DataContextBase } from './data-context-base'\nimport { Sort } from '../sort'\nimport { Observable, Subject } from 'rxjs'\nimport { first } from 'rxjs/operators'\nimport { IListDataSource } from '../datasource/data-source'\n\nexport class DataContextSimple<T> extends DataContextBase<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    dataSource: IListDataSource<T>,\n    indexFn: (item: T) => any,\n    localApply: (data: T[]) => T[],\n    localSort: (data: T[], sorts: Sort[]) => T[]\n  ) {\n    super(dataSource, indexFn, localApply, localSort)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public override get dataSource(): IListDataSource<T> {\n    return <IListDataSource<T>>super.dataSource\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  protected reloadInternal(): Observable<any> {\n    const subject = new Subject<void>()\n\n    if (this.dataSource) {\n      this.onLoading()\n\n      this.dataSource\n        .findAllFiltered(this.filter.filtersSnapshot, this.sort.sortsSnapshot)\n        .pipe(first())\n        .subscribe(\n          (list) => {\n            this.onIdle()\n            this.setTotal(list.length)\n            this.setData(list)\n            this.log.debug(this.id + ': Got list data: ' + list.length)\n\n            subject.next()\n          },\n          (err) => {\n            this.onError(err)\n            this.clearAll()\n            this.log.error(this.id + ': Failed to query data', err)\n            subject.error(err)\n          }\n        )\n    } else {\n      const errorMsg = this.id + ': Skipping data context load - no list fetcher present!'\n      this.log.warn(errorMsg)\n      subject.error(new Error(errorMsg))\n    }\n\n    return subject.pipe(first())\n  }\n}\n","import { DataContextBase } from './data-context-base'\nimport { Sort } from '../sort'\nimport { Filter } from '../filters/filter'\nimport { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { IDataContextContinuable } from './data-context'\nimport { IDataSource } from '../datasource/data-source'\n\n/**\n * Extends a simple flat list data-context with infinite-scroll pagination support.\n *\n */\nexport abstract class DataContextContinuableBase<T>\n  extends DataContextBase<T>\n  implements IDataContextContinuable<T>\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly cblogger: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _chunkSize$: BehaviorSubject<number>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructors                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor(\n    dataSource: IDataSource<T>,\n    chunkSize: number,\n    indexFn: (item: T) => any,\n    localApply: (data: T[]) => T[],\n    localSort: (data: T[], sorts: Sort[]) => T[]\n  ) {\n    super(dataSource, indexFn, localApply, localSort)\n    this._chunkSize$ = new BehaviorSubject<number>(chunkSize)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public loadAll(sorts?: Sort[], filters?: Filter[]): void {\n    this.cblogger.debug(this.id + ': Starting to load all data ...')\n\n    // load first page\n    this.start(sorts, filters).subscribe({\n      next: () => {\n        this.cblogger.debug(this.id + ': First page has been loaded. Loading remaining data ...')\n        // load rest in a recursive manner\n        this.loadAllRec()\n      },\n      error: (err) => {\n        this.onError(err)\n        this.cblogger.error(this.id + ': Failed to load first page of load all procedure!', err)\n      },\n    })\n  }\n\n  public get chunkSize$(): Observable<number> {\n    return this._chunkSize$.asObservable()\n  }\n\n  public get chunkSize(): number | undefined {\n    return this._chunkSize$.value\n  }\n\n  public set chunkSize(size: number) {\n    this.updateChunkSize(size, true)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  protected updateChunkSize(newSize: number, reloadOnChange: boolean): void {\n    if (this._chunkSize$.value !== newSize) {\n      this._chunkSize$.next(newSize)\n      if (reloadOnChange) {\n        this.reload('ChunkSizeChanged:' + newSize)\n      }\n    }\n  }\n\n  private loadAllRec(): void {\n    this.loadMore().subscribe({\n      next: () => {\n        this.cblogger.debug(this.id + ': Loading data chunk finished, loading next...')\n        this.loadAllRec()\n      },\n      error: (err) => {\n        this.onError(err)\n        this.cblogger.error(this.id + ': Loading all failed!', err)\n      },\n      complete: () => {\n        this.cblogger.info(this.id + ': All data loaded completely.')\n      },\n    })\n  }\n\n  public abstract loadMore(): Observable<any>\n\n  public abstract get hasMoreDataSnapshot(): boolean\n\n  public abstract get hasMoreData(): Observable<boolean>\n}\n","import { combineLatest, EMPTY, Observable, Subject } from 'rxjs'\nimport { Page, Pageable } from '../page'\nimport { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { DataContextContinuableBase } from './data-context-continuable-base'\nimport { first, map, takeUntil } from 'rxjs/operators'\nimport { Sort } from '../sort'\nimport { IPagedDataSource } from '../datasource/data-source'\n\n/**\n * Extends a simple flat list data-context with infinite-scroll pagination support.\n *\n */\nexport class DataContextContinuablePaged<T> extends DataContextContinuableBase<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _pageCache: Map<number, Observable<Page<T>>> = new Map()\n  private _latestPage = 0\n\n  private readonly _hasMoreData: Observable<boolean>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructors                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    dataSource: IPagedDataSource<T>,\n    pageSize: number,\n    indexFn: (item: T) => any,\n    localApply: (data: T[]) => T[],\n    localSort: (data: T[], sorts: Sort[]) => T[]\n  ) {\n    super(dataSource, pageSize, indexFn, localApply, localSort)\n\n    this._hasMoreData = combineLatest([this.total, this.data]).pipe(\n      map(([total, data]) => this.checkHasMoreData(total, data)),\n      takeUntil(this.destroy$)\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public override get dataSource(): IPagedDataSource<T> {\n    return <IPagedDataSource<T>>super.dataSource\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Load the next chunk of data.\n   * Useful for infinite scroll like data flows.\n   *\n   */\n  public loadMore(): Observable<any> {\n    if (this.hasMoreDataSnapshot) {\n      this.logger.info(this.id + ': Loading more...' + this._latestPage)\n\n      if (this.loadingSnapshot) {\n        return EMPTY\n      }\n      const nextPage = this._latestPage + 1\n      return this.fetchPage(nextPage, this.chunkSize)\n    } else {\n      this.logger.debug(this.id + ': Cannot load more data, since no more data available.')\n      return EMPTY\n    }\n  }\n\n  public get hasMoreData(): Observable<boolean> {\n    return this._hasMoreData\n  }\n\n  public get hasMoreDataSnapshot(): boolean {\n    return this.checkHasMoreData(this.totalSnapshot, this.dataSnapshot)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private checkHasMoreData(total: number | undefined, data: T[]): boolean {\n    if (total) {\n      return total > data.length\n    }\n    return false\n  }\n\n  protected override reloadInternal(): Observable<any> {\n    // Since continuable data-contexts are appending data,\n    // we need to clear it for a reload.\n    this.clearAll(true)\n    return this.fetchPage(0, this.chunkSize, true)\n  }\n\n  protected override clearAll(silent = false): void {\n    super.clearAll(silent)\n    this._pageCache = new Map()\n    this._latestPage = 0\n  }\n\n  private fetchPage(pageIndex: number, pageSize: number, clear = false): Observable<any> {\n    const subject = new Subject<void>()\n\n    const pageRequest = new Pageable(pageIndex, pageSize, this.sort.sortsSnapshot)\n\n    if (this._pageCache.has(pageIndex)) {\n      // Page already loaded - skipping request!\n      this.logger.debug(\n        this.id + ': Skipping fetching page since its already in page observable cache.'\n      )\n      subject.next()\n    } else {\n      this.onLoading()\n\n      this.logger.debug(this.id + `: Loading page ${pageIndex} using pageable:`, pageRequest)\n\n      const pageObs = this.dataSource.findAllPaged(pageRequest, this.filter.filtersSnapshot)\n\n      this._pageCache.set(pageIndex, pageObs)\n\n      pageObs.subscribe(\n        (page: Page<T>) => {\n          this.logger.debug(this.id + ': Got page data:', page)\n\n          this.populatePageData(page, clear)\n\n          if (this._latestPage < page.number) {\n            this._latestPage = page.number // TODO This might cause that pages are skipped\n          }\n\n          subject.next()\n          this.onIdle()\n        },\n        (err) => {\n          this.onError(err)\n          this.clearData()\n          this.setTotal(0)\n          this.logger.error(this.id + ': Failed to query data', err)\n          subject.error(err)\n        }\n      )\n    }\n\n    return subject.pipe(first())\n  }\n\n  /**\n   * Load the data from the given page into the current data context\n   */\n  private populatePageData(page: Page<T>, clear: boolean): void {\n    try {\n      this.setTotal(page.totalElements)\n      const start = page.number * page.size\n      if (clear) {\n        this.setData(page.content)\n      } else {\n        this.insertData(page.content, start)\n      }\n    } catch (err) {\n      this.onError(err)\n      this.logger.error(this.id + ': Failed to populate data with page', page, err)\n    }\n  }\n}\n","import { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { ContinuableListing } from '../continuable-listing'\nimport { DataContextContinuableBase } from './data-context-continuable-base'\nimport { BehaviorSubject, EMPTY, Observable, Subject } from 'rxjs'\nimport { first, take } from 'rxjs/operators'\nimport { TokenChunkRequest } from '../token-chunk-request'\nimport { Sort } from '../sort'\nimport { IContinuableDataSource } from '../datasource/data-source'\n\nexport class DataContextContinuableToken<T> extends DataContextContinuableBase<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _hasMoreData = new BehaviorSubject<boolean>(false)\n  private readonly _chunkCache: Set<string | undefined> = new Set()\n\n  private _expectedChunkToken?: string\n\n  // protected nextContinuationToken?: string;\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    dataSource: IContinuableDataSource<T>,\n    chunkSize: number,\n    indexFn: (item: T) => any,\n    localApply: (data: T[]) => T[],\n    localSort: (data: T[], sorts: Sort[]) => T[]\n  ) {\n    super(dataSource, chunkSize, indexFn, localApply, localSort)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public override get dataSource(): IContinuableDataSource<T> {\n    return <IContinuableDataSource<T>>super.dataSource\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get hasMoreDataSnapshot(): boolean {\n    return this._hasMoreData.getValue()\n  }\n\n  public get hasMoreData(): Observable<boolean> {\n    return this._hasMoreData.asObservable()\n  }\n\n  public loadMore(): Observable<any> {\n    if (this.loadingSnapshot) {\n      this.logger.debug(this.id + ': Skipping load-more since already loading a chunk!')\n      return EMPTY\n    }\n\n    const token = this._expectedChunkToken\n\n    if (token && token.length > 0) {\n      return this.fetchNextChunk(token)\n    } else {\n      this.logger.debug(this.id + ': Cannot load more data, since no more data available.')\n      return EMPTY\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Protect API                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected override clearAll(silent = false): void {\n    super.clearAll(silent)\n    this._chunkCache.clear()\n    this._hasMoreData.next(true)\n    this._expectedChunkToken = undefined\n  }\n\n  protected reloadInternal(): Observable<any> {\n    // Since continuable data-contexts are appending data,\n    // we need to clear it for a reload.\n    this.clearAll(true)\n\n    return this.fetchNextChunk(undefined)\n  }\n\n  private fetchNextChunk(nextToken?: string): Observable<ContinuableListing<T>> {\n    const subject = new Subject<ContinuableListing<T>>()\n\n    nextToken = nextToken ? nextToken : undefined\n\n    if (this._chunkCache.has(nextToken)) {\n      this.logger.debug(\n        this.id +\n          ': Skipping fetching chunk for token \"' +\n          nextToken +\n          '\" since its already in observable cache.'\n      )\n      subject.complete()\n    } else {\n      this.onLoading()\n\n      this._chunkCache.add(nextToken)\n\n      this.dataSource\n        .findAllContinuable(\n          new TokenChunkRequest(\n            nextToken,\n            this.filter.filtersSnapshot,\n            this.sort.sortsSnapshot,\n            this.chunkSize\n          )\n        )\n        .pipe(first())\n        .subscribe({\n          next: (chunk) => {\n            this.onChunkFetched(chunk)\n            subject.next(chunk)\n          },\n          error: (err) => {\n            this.onChunkFetchError(err)\n            subject.error(err)\n          },\n        })\n    }\n    return subject.pipe(take(1))\n  }\n\n  private onChunkFetched(chunk: ContinuableListing<T>): void {\n    this.logger.debug(this.id + ': Got next chunk data:', chunk)\n    this._hasMoreData.next(chunk.hasMore)\n    this.updateChunkSize(chunk.chunkSize ?? chunk.maxChunkSize, false)\n    this.populateChunkData(chunk)\n    this.onIdle()\n  }\n\n  private onChunkFetchError(err: any): void {\n    this.onError(err)\n    this.logger.error(this.id + ': Failed to query data', err)\n    this.clearData()\n    this.setTotal(0)\n  }\n\n  /**\n   * Load the data from the given page into the current data context\n   */\n  private populateChunkData(chunk: ContinuableListing<T>): void {\n    if (this.areTokenEqual(chunk.continuationToken, this._expectedChunkToken)) {\n      try {\n        this.setTotal(chunk.total)\n\n        if (chunk.continuationToken) {\n          // We had previous chunks so append to current data.\n          this.appendData(chunk.content)\n        } else {\n          this.setData(chunk.content)\n        }\n      } catch (err) {\n        this.onError(err)\n        this.logger.error(this.id + ': Failed to populate data with chunk', chunk, err)\n      }\n      this._expectedChunkToken = chunk.nextContinuationToken\n    } else {\n      this.logger.warn(\n        this.id +\n          ': Discarding continuable chunk (items: ' +\n          chunk.content.length +\n          ', token: ' +\n          chunk.continuationToken +\n          ' )' +\n          ' as it does not match the expected contiunation-token: ' +\n          this._expectedChunkToken\n      )\n    }\n  }\n\n  private areTokenEqual(token1?: string, token2?: string): boolean {\n    if (!token1 && !token2) {\n      return true\n    }\n    return token1 === token2\n  }\n}\n","import { DataContextBase } from './data-context-base'\nimport { Pageable, PageRequest } from '../page'\nimport { Filter } from '../filters/filter'\nimport { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs'\nimport { first } from 'rxjs/operators'\nimport { IDataContextActivePage } from './data-context'\nimport { Sort } from '../sort'\nimport { IPagedDataSource } from '../datasource/data-source'\n\nexport class DataContextActivePage<T>\n  extends DataContextBase<T>\n  implements IDataContextActivePage<T>\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly actlogger: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _page: BehaviorSubject<PageRequest>\n\n  /**\n   * Subscription to the event when the active page has changed.\n   * This will trigger a page reload.\n   */\n  private _activePageChangedSub: Subscription\n\n  /**\n   * Subscription of an actual page load http request.\n   * If this is closed, it will cancel the http request.\n   */\n  private _activePageLoad: Subscription\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    dataSource: IPagedDataSource<T>,\n    pageSize: number,\n    indexFn: (item: T) => any,\n    localApply: (data: T[]) => T[],\n    localSort: (data: T[], sorts: Sort[]) => T[]\n  ) {\n    super(dataSource, indexFn, localApply, localSort)\n    this._page = new BehaviorSubject<PageRequest>(new PageRequest(0, pageSize))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public override get dataSource(): IPagedDataSource<T> {\n    return <IPagedDataSource<T>>super.dataSource\n  }\n\n  public get page(): Observable<PageRequest> {\n    return this._page.asObservable()\n  }\n\n  public get pageSnapshot(): PageRequest {\n    return this._page.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Set the current page index and reload.\n   * @param pageIndex\n   */\n  public setActiveIndex(pageIndex: number) {\n    this.setActivePage(new PageRequest(pageIndex, this.pageSnapshot.size))\n  }\n\n  /**\n   * Sets the current page index / size and reload.\n   */\n  public setActivePage(request: PageRequest) {\n    // this.actlogger.debug('Setting page to ', request);\n\n    if (!request) {\n      throw new Error(this.id + ': Setting page PageRequest must not be null!')\n    }\n\n    let hasChange = false\n\n    const page = this.pageSnapshot\n\n    if (page.index !== request.index) {\n      hasChange = true\n    } else if (page.size !== request.size) {\n      hasChange = true\n    }\n\n    if (hasChange) {\n      this._page.next(request)\n      this.reload('setActivePage')\n    }\n  }\n\n  public override close(): void {\n    super.close()\n    if (this._activePageChangedSub) {\n      this._activePageChangedSub.unsubscribe()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  protected override clearAll(): void {\n    super.clearAll()\n    this.setActiveIndex(0)\n  }\n\n  protected override reloadInternal(): Observable<any> {\n    if (this._activePageLoad) {\n      // Cancel previous pending request\n      this._activePageLoad.unsubscribe()\n    }\n\n    const subject = new Subject<any>()\n\n    this.onLoading()\n    const page = this.pageSnapshot\n    const pageRequest = new Pageable(page.index, page.size, this.sort.sortsSnapshot)\n\n    this._activePageLoad = this.dataSource\n      .findAllPaged(pageRequest, this.filter.filtersSnapshot)\n      .pipe(first())\n      .subscribe(\n        (success) => {\n          this.setTotal(success.totalElements)\n          this.setData(success.content)\n          subject.next(success)\n          this.onIdle()\n        },\n        (err) => {\n          this.clearData()\n          this.actlogger.error(this.id + ': Failed to query data', err)\n          subject.error(err)\n          this.onError(err)\n        },\n        () => {\n          this.onIdle()\n        }\n      )\n\n    return subject.pipe(first())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Event handlers                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Occurs when the sorts property has changed.\n   */\n  protected override onSortsChanged(sorts: Sort[]): void {\n    this.setActiveIndex(0)\n    super.onSortsChanged(sorts)\n  }\n\n  /**\n   * Occurs when the filtersSnapshot property has changed.\n   */\n  protected override onFiltersChanged(filters: Filter[]): void {\n    this.setActiveIndex(0)\n    super.onFiltersChanged(filters)\n  }\n}\n","import { MatPaginator } from '@angular/material/paginator'\nimport { MatSort, SortDirection as MatSortDirection } from '@angular/material/sort'\nimport {\n  IDataContext,\n  IDataContextActivePage,\n  IDataContextContinuable,\n  isActivePagedDataContext,\n  isContinuableDataContext,\n} from './data-context'\nimport { combineLatest, merge, Observable } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { filter, map, mergeMap, switchMap, takeUntil } from 'rxjs/operators'\nimport { Sort, SortDirection } from '../sort'\nimport { PageRequest } from '../page'\nimport { ElderContinuatorComponent } from '../../../components/data-view/common/elder-continuator/elder-continuator.component'\nimport { outputToObservable } from '@angular/core/rxjs-interop'\n\nexport class MatTableDataContextBindingBuilder {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _dataContext$: Observable<IDataContext<any>>\n  private _sorts$: Observable<MatSort[]>\n  private _matPaginator$: Observable<MatPaginator>\n  private _continuator$: Observable<ElderContinuatorComponent>\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static start(\n    dataContext$: Observable<IDataContext<any>>\n  ): MatTableDataContextBindingBuilder {\n    return new MatTableDataContextBindingBuilder(dataContext$)\n  }\n\n  constructor(dataContext$: Observable<IDataContext<any>>) {\n    this._dataContext$ = dataContext$\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public withSorts(sorts$: Observable<MatSort[]>): this {\n    this._sorts$ = sorts$\n    return this\n  }\n\n  public withPaginator(paginator$: Observable<MatPaginator>): this {\n    this._matPaginator$ = paginator$\n    return this\n  }\n\n  public withContinuator(continuator$: Observable<ElderContinuatorComponent>): this {\n    this._continuator$ = continuator$\n    return this\n  }\n\n  public bindUntil(destroy$: Observable<any>): MatTableDataContextBinding {\n    return new MatTableDataContextBinding(\n      this._dataContext$,\n      this._sorts$,\n      this._matPaginator$,\n      this._continuator$,\n      destroy$\n    )\n  }\n}\n\nexport class MatTableDataContextBinding {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly _dataContext$: Observable<IDataContext<any>>,\n    private readonly _matSorts$: Observable<MatSort[]> | null,\n    private readonly _matPaginator$: Observable<MatPaginator> | null,\n    private readonly _continuator$: Observable<ElderContinuatorComponent> | null,\n    destroy$: Observable<any>\n  ) {\n    this.subscribeUntil(destroy$)\n  }\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private subscribeUntil(destroy$: Observable<any>): void {\n    if (this._matSorts$) {\n      this.bindMatSortsToDataContextUntil(this._matSorts$, destroy$)\n      this.bindDataContextToMatSortsUntil(this._matSorts$, destroy$)\n    }\n\n    if (this._matPaginator$) {\n      this.bindPaginatorUntil(this._matPaginator$, destroy$)\n    }\n\n    if (this._continuator$) {\n      this.bindContinuatorUntil(this._continuator$, destroy$)\n    }\n  }\n\n  private bindDataContextToMatSortsUntil(\n    matSorts$: Observable<MatSort[]>,\n    destroy$: Observable<any>\n  ): void {\n    const dcSorts$ = this._dataContext$.pipe(\n      filter((dc) => !!dc),\n      switchMap((dc) => dc.sort.sorts)\n    )\n\n    combineLatest([dcSorts$, matSorts$])\n      .pipe(takeUntil(destroy$))\n      .subscribe(([dcSorts, matSorts]) => {\n        if (dcSorts.length >= 1) {\n          // At least one sort active\n          const sort = dcSorts[0]\n          this.updateMatSorts(sort, matSorts)\n        } else {\n          // No sort active\n          this.updateMatSorts(Sort.NONE, matSorts)\n        }\n      })\n  }\n\n  private updateMatSorts(dcSort: Sort, matSorts: MatSort[]): void {\n    const active = dcSort.prop\n    const direction = this.toMatDirection(dcSort.dir)\n    matSorts.forEach((matSort) => this.updateMatSort(active, direction, matSort))\n  }\n\n  private updateMatSort(activeProp: string, direction: MatSortDirection, matSort: MatSort): void {\n    if (activeProp) {\n      if (!matSort.sortables.has(activeProp)) {\n        // The current sort property is not part of this MatSort.\n        activeProp = Sort.NONE.prop // Force no sort in this mat context\n      }\n    }\n\n    if (matSort.active !== activeProp || matSort.direction !== direction) {\n      // We do only update matSort when there was a real change\n      matSort.active = activeProp\n      matSort.direction = direction\n      matSort._stateChanges.next()\n    }\n  }\n\n  private bindMatSortsToDataContextUntil(\n    sorts$: Observable<MatSort[]>,\n    destroy$: Observable<any>\n  ): void {\n    const sortChanges$ = sorts$.pipe(\n      mergeMap((sorts) => merge(...sorts.map((s) => s.sortChange))),\n      map((matSort) => {\n        return new Sort(matSort.active, this.fromMatDirection(matSort.direction))\n      })\n    )\n\n    combineLatest([this._dataContext$, sortChanges$])\n      .pipe(takeUntil(destroy$))\n      .subscribe(([dc, sortRequest]) => {\n        if (dc) {\n          dc.sort.updateSort(sortRequest)\n        }\n      })\n  }\n\n  private bindPaginatorUntil(\n    paginator$: Observable<MatPaginator>,\n    destroy$: Observable<any>\n  ): void {\n    const pageRequest$ = paginator$.pipe(\n      filter((paginator) => !!paginator),\n      switchMap((paginator) => paginator.page),\n      map((pageEvent) => new PageRequest(pageEvent.pageIndex, pageEvent.pageSize))\n    )\n\n    combineLatest([this._dataContext$, pageRequest$])\n      .pipe(takeUntil(destroy$))\n      .subscribe(([dc, pageRequest]) => {\n        if (dc) {\n          if (isActivePagedDataContext(dc)) {\n            const pagedDc = dc as IDataContextActivePage<any>\n            pagedDc.setActivePage(pageRequest)\n          } else {\n            this.logger.warn(\n              'Can not bind the given paginator to the given data-context,' +\n                ' as the datacontext does not support pagination!',\n              dc\n            )\n          }\n        }\n      })\n  }\n\n  private bindContinuatorUntil(\n    continuator$: Observable<ElderContinuatorComponent>,\n    destroy$: Observable<any>\n  ): void {\n    const chunkSizeChange$ = continuator$.pipe(\n      filter((continuator) => !!continuator),\n      switchMap((continuator) => outputToObservable(continuator.chunkSizeChange))\n    )\n\n    combineLatest([this._dataContext$, chunkSizeChange$])\n      .pipe(takeUntil(destroy$))\n      .subscribe(([dc, newChunkSize]) => {\n        if (dc) {\n          if (isContinuableDataContext(dc)) {\n            const continuableDc = dc as IDataContextContinuable<any>\n            continuableDc.chunkSize = newChunkSize\n          } else {\n            this.logger.warn(\n              'Can not bind the given Continuator to the given data-context,' +\n                ' as the DataContext does not support continuation!',\n              dc\n            )\n          }\n        }\n      })\n  }\n\n  private toMatDirection(direction: SortDirection): MatSortDirection {\n    return direction\n  }\n\n  private fromMatDirection(matSortDirection: MatSortDirection): SortDirection {\n    return matSortDirection\n  }\n}\n","import { Subscription, Unsubscribable } from 'rxjs'\nimport { IDataContext } from './data-context'\n\n/**\n * Allows making any kind of subscription which will be automatically unsubscribed\n * upon data context closing/cleanup.\n */\nexport abstract class DataContextLifeCycleBinding implements Unsubscribable {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  protected _subscription: Subscription\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor(protected readonly _dataContext: IDataContext<any>) {\n    if (_dataContext == null) {\n      throw new Error('dataContext must not be null!')\n    }\n\n    this._dataContext.data.subscribe({\n      complete: () => this.unsubscribe(),\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public unsubscribe(): void {\n    if (this._subscription) {\n      this._subscription.unsubscribe()\n      this._subscription = null\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Protected                                                               *\n   *                                                                         *\n   **************************************************************************/\n\n  protected abstract subscribe(): void\n}\n","import { Filter } from './filters/filter'\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { FilterContext } from './filters/filter-context'\n\nexport class RequiredFilterContextChangedEvent {\n  constructor(\n    public readonly requiredFilters: Array<string[]>,\n    public readonly currentFilters: Filter[],\n    public readonly isValid: boolean\n  ) {}\n}\n\nexport class RequiredFilterEvaluator {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _filterContext: FilterContext\n  private readonly _requiredFilters = new BehaviorSubject<Array<string[]>>([])\n\n  public readonly context$: Observable<RequiredFilterContextChangedEvent>\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(filterContext: FilterContext, requiredFilters?: Array<string[]>) {\n    if (filterContext == null) {\n      throw new Error('filterContext must not be null!')\n    }\n\n    this._filterContext = filterContext\n    if (requiredFilters) {\n      this._requiredFilters.next(requiredFilters)\n    }\n\n    this.context$ = combineLatest([this._requiredFilters, this._filterContext.filters]).pipe(\n      map(([required, currentFilters]) => this.createEvent(requiredFilters, currentFilters))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get filterContext(): FilterContext {\n    return this._filterContext\n  }\n\n  public get requiredFilters$(): Observable<Array<string[]>> {\n    return this._requiredFilters.asObservable()\n  }\n\n  public get requiredFilters(): Array<string[]> {\n    return this._requiredFilters.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private createEvent(\n    requiredFilters: Array<string[]>,\n    currentFilters: Filter[]\n  ): RequiredFilterContextChangedEvent {\n    return new RequiredFilterContextChangedEvent(\n      requiredFilters,\n      currentFilters,\n      this.allRequiredFiltersPresent(requiredFilters, currentFilters)\n    )\n  }\n\n  private allRequiredFiltersPresent(\n    requiredFilters: Array<string[]>,\n    currentFilters: Filter[]\n  ): boolean {\n    if (requiredFilters) {\n      return requiredFilters.some((filterGroup) => this.hasAllFilters(filterGroup, currentFilters))\n    }\n    return true\n  }\n\n  private hasAllFilters(requiredFilters: string[], currentFilters: Filter[]): boolean {\n    const requiredFilterSet = new Set(requiredFilters)\n    const currentFilterKeySet = new Set(currentFilters.map((f) => f.key))\n\n    const areAllRequiredFiltersPresent = requiredFilters.every((required) =>\n      currentFilterKeySet.has(required)\n    )\n\n    const areAllRequiredFiltersHaveValue = currentFilters\n      .filter((f) => requiredFilterSet.has(f.key))\n      .every((currentFilter) => Filter.hasValue(currentFilter))\n\n    return areAllRequiredFiltersPresent && areAllRequiredFiltersHaveValue\n  }\n}\n","import { IDataContext } from './data-context'\nimport { RequiredFilterEvaluator } from '../required-filter-evaluator'\nimport { DataContextLifeCycleBinding } from './data-context-life-cycle-binding'\nimport { Observable } from 'rxjs'\nimport { filter, map, takeUntil, tap } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Sort } from '../sort'\n\nexport class AutoStartSpec {\n  public static asap(sort?: Sort[]): AutoStartSpec {\n    return new AutoStartSpec(null, sort)\n  }\n\n  public static requireFiltersAll(filters: string[], sort?: Sort[]): AutoStartSpec {\n    return AutoStartSpec.requireFilters([filters], sort)\n  }\n\n  public static requireFiltersAny(filters: string[], sort?: Sort[]): AutoStartSpec {\n    const separateFilterArrays = filters.map((singleFilter) => [singleFilter])\n    return AutoStartSpec.requireFilters(separateFilterArrays, sort)\n  }\n\n  public static requireFilters(filters: Array<string[]>, sort?: Sort[]): AutoStartSpec {\n    return new AutoStartSpec(filters, sort)\n  }\n\n  constructor(\n    public requiredFilters?: Array<string[]>,\n    public initialSort?: Sort[]\n  ) {}\n}\n\nexport class DataContextAutoStarter extends DataContextLifeCycleBinding {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _autoStartConditionFulfilled$: Observable<boolean>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    dataContext: IDataContext<any>,\n    private readonly _autoStartSpec: AutoStartSpec\n  ) {\n    super(dataContext)\n\n    if (_autoStartSpec == null) {\n      throw new Error('autoStartSpec must not be null!')\n    }\n\n    if (_autoStartSpec.requiredFilters) {\n      this._autoStartConditionFulfilled$ = this.buildRequiredFilterConditionObservable()\n    } else {\n      // no condition defined, try to start immediately\n      this.startDataContext()\n    }\n\n    this.subscribe()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  protected subscribe(): void {\n    const hasRequiredFilters = !!this._autoStartConditionFulfilled$\n    if (hasRequiredFilters) {\n      const startedTrue$ = this._dataContext.isStarted$.pipe(filter((t) => t))\n      this._subscription = this._autoStartConditionFulfilled$\n        .pipe(\n          takeUntil(startedTrue$),\n          tap((fulfilled) => this.logger.debug(`Got fulfilled event: ${fulfilled}`)),\n          filter((fulfilled) => !!fulfilled)\n        )\n        .subscribe(() => this.startDataContext())\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildRequiredFilterConditionObservable(): Observable<boolean> {\n    return new RequiredFilterEvaluator(\n      this._dataContext.filter,\n      this._autoStartSpec.requiredFilters\n    ).context$.pipe(map((event) => event.isValid))\n  }\n\n  private startDataContext() {\n    this.logger.debug(this._dataContext.id + ': Auto starting ...')\n    this._dataContext.start(this._autoStartSpec.initialSort)\n  }\n}\n","export type DeepPartialPatch<T> = {\n  [K in keyof T]?: T[K] extends object ? DeepPartialPatch<T[K]> : T[K]\n}\n\nexport class DeepPartialPatcher {\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * All modified parts are deep cloned so the original is never modified.\n   */\n  public static patchDeepClone<T>(original: T, patch: DeepPartialPatch<T>): T {\n    return this.mapReducePatch(original, patch) as T\n  }\n\n  /**\n   * Returns a shallow copy of the original, but may modify nested objects.\n   */\n  public static patchShallowCopy<T>(original: T, patch: DeepPartialPatch<T>): T {\n    const shallowCopy = { ...original }\n    return this.patchOriginal(shallowCopy, patch)\n  }\n\n  /**\n   * Modifies the original directly. Returns a reference to the original object.\n   */\n  public static patchOriginal<T>(original: T, patch: DeepPartialPatch<T>): T {\n    const result = original\n\n    for (const key in patch) {\n      if (patch[key] && typeof patch[key] === 'object' && !Array.isArray(patch[key])) {\n        // Recursively apply patch for nested objects\n        result[key] = DeepPartialPatcher.patchOriginal(\n          result[key] ?? new Object(patch[key]),\n          patch[key] as DeepPartialPatch<T[keyof T]>\n        ) as any\n      } else {\n        // Apply patch for non-object fields\n        result[key] = patch[key] as any\n      }\n    }\n\n    return result\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static mapReducePatch(\n    obj: Record<string, any>,\n    pobj: Record<string, any>\n  ): Record<string, any> {\n    return Object.entries(obj).reduce((acc, [key, value]) => {\n      if (!(key in pobj)) {\n        return { ...acc, [key]: value } // If key doesn't exist in pobj, copy the value from obj\n      }\n      if (typeof pobj[key] === 'object' && pobj[key] !== null && !Array.isArray(pobj[key])) {\n        // If it's an object (but not an array), recursively apply rmap\n        return { ...acc, [key]: this.mapReducePatch(obj[key], pobj[key]) }\n      } else {\n        // Otherwise, copy the value from pobj\n        return { ...acc, [key]: pobj[key] }\n      }\n    }, {})\n  }\n}\n","import { IDataContext } from './data-context'\nimport { IDataSource } from '../datasource/data-source'\nimport { DataContextLifeCycleBinding } from './data-context-life-cycle-binding'\nimport {\n  DataSourceChangeEvent,\n  DataSourceEntityPatch,\n} from '../datasource/data-source-change-event'\nimport { DeepPartialPatcher } from '../datasource/patch/deep-partial-patcher'\n\nexport class DataContextSourceEventBinding<T = any> extends DataContextLifeCycleBinding {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    dataContext: IDataContext<T>,\n    private readonly dataApi: IDataSource<T>,\n    private readonly reloadOnChanges: boolean\n  ) {\n    super(dataContext)\n    this.subscribe()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Internal Impl                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  protected subscribe(): void {\n    this._subscription = this.dataApi.dataChanged.subscribe((event) =>\n      this.handleDataChangeEvent(event)\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleDataChangeEvent(event: DataSourceChangeEvent<T>): void {\n    if (this.reloadOnChanges && this.isReloadDesirable(event)) {\n      this._dataContext.reload('DataSourceChangeEvent')\n      return\n    }\n\n    // We might also be able to perform deletions locally, and avoid reload data\n\n    if (event.modified) {\n      this.updateExisting(event.modified)\n    }\n\n    if (event.patches) {\n      this.updateExisting(this.buildPatchUpdates(event.patches))\n    }\n  }\n\n  private updateExisting(entities: T[]): void {\n    if (entities.length > 0) {\n      this._dataContext.update(entities)\n    }\n  }\n\n  private isReloadDesirable(event: DataSourceChangeEvent<T>) {\n    return event.unknownChanges || event.created || event.deletedIds\n  }\n\n  private buildPatchUpdates(patches: DataSourceEntityPatch<T>[]): T[] {\n    return patches\n      .map((patch) => {\n        const existing = this._dataContext.findById(patch.entityId)\n        if (existing) {\n          return DeepPartialPatcher.patchShallowCopy(existing, patch.patch)\n        } else {\n          return null\n        }\n      })\n      .filter((update) => !!update)\n  }\n}\n","import { DeepPartialPatch } from './patch/deep-partial-patcher'\n\nexport class DataSourceEntityPatch<T, Id = any> {\n  public constructor(\n    public entityId: Id,\n    public patch: DeepPartialPatch<T>\n  ) {}\n}\n\n/**\n * Notifies about changes in a DataSource.\n */\nexport class DataSourceChangeEvent<T, TId = any> {\n  public static unknownChanges<T, TId = any>(): DataSourceChangeEvent<T> {\n    return new DataSourceChangeEvent<T, TId>(null, null, null, null)\n  }\n\n  public static deleted<TId>(ids: TId[]): DataSourceChangeEvent<any, TId> {\n    return new DataSourceChangeEvent<any, TId>(ids, null, null, null)\n  }\n\n  public static modified<T, TId = any>(modified: T[]): DataSourceChangeEvent<T> {\n    return new DataSourceChangeEvent<T, TId>(null, modified, null, null)\n  }\n\n  public static created<T, TId = any>(created: T[]): DataSourceChangeEvent<T> {\n    return new DataSourceChangeEvent<T, TId>(null, null, created, null)\n  }\n\n  public static patched<T, TId = any>(\n    patches: DataSourceEntityPatch<T, TId>[]\n  ): DataSourceChangeEvent<T> {\n    return new DataSourceChangeEvent<T>(null, null, null, patches)\n  }\n\n  // entities -> data must be updated with new versions\n  // entity-ids -> must be downloaded findByIds() and data updated\n  // entity-patches -> entity must be looked up & applied locally & replaced\n\n  // const entity = dc.findById(entity-id);\n  // dc.replace(entity);\n  // dc.replaceAll(entities);\n\n  public readonly unknownChanges: boolean\n\n  constructor(\n    public readonly deletedIds: TId[],\n    public readonly modified: T[],\n    public readonly created: T[],\n    public readonly patches: DataSourceEntityPatch<T>[]\n  ) {\n    this.unknownChanges = !deletedIds && !modified && !created && !patches\n  }\n}\n","export type IdExtractor<T> = (entity: T) => any\n\nexport class EntityIdUtil {\n  public static getId<T>(entity: T, idProperty: string | null): any {\n    if (entity && idProperty) {\n      if (typeof entity === 'object') {\n        return (<any>entity)?.[idProperty]\n      }\n    }\n    return entity\n  }\n\n  public static extractIdFnOrProperty<T>(\n    idPropertyOrExtractFn: string | null | IdExtractor<T>\n  ): IdExtractor<T> {\n    if (typeof idPropertyOrExtractFn === 'string') {\n      return EntityIdUtil.extractIdFn(idPropertyOrExtractFn)\n    } else if (typeof idPropertyOrExtractFn === 'function') {\n      return idPropertyOrExtractFn\n    } else if (idPropertyOrExtractFn === null || idPropertyOrExtractFn === undefined) {\n      return EntityIdUtil.extractIdFn(null)\n    } else {\n      throw new Error('Invalid idPropertyOrExtractFn')\n    }\n  }\n\n  public static extractIdFn<T>(idProperty: string | null): IdExtractor<T> {\n    return (entity: T) => EntityIdUtil.getId(entity, idProperty)\n  }\n}\n","import { IDataSource } from './data-source'\nimport { DataSourceChangeEvent } from './data-source-change-event'\nimport { Observable, Subject } from 'rxjs'\nimport { EntityIdUtil, IdExtractor } from './entity-id-util'\n\nexport abstract class DataSourceBase<T> implements IDataSource<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly dataChangeEvents$ = new Subject<DataSourceChangeEvent<T>>()\n  private readonly extractIdFn: IdExtractor<T>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor(propertyOrIdExtractor: string | IdExtractor<T>) {\n    this.extractIdFn = EntityIdUtil.extractIdFnOrProperty(propertyOrIdExtractor)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get dataChanged(): Observable<DataSourceChangeEvent<T>> {\n    return this.dataChangeEvents$.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public publishChangeEvent(e: DataSourceChangeEvent<T>): void {\n    this.dataChangeEvents$.next(e)\n  }\n\n  public getId(entity: T): any {\n    return this.extractIdFn(entity)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Abstract methods                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  abstract findById(id: any): Observable<T>\n\n  abstract findByIds(ids: any[]): Observable<T[]>\n}\n","import { Sort, SortDirection } from '../data/sort'\nimport { ComparatorBuilder } from '../data/field-comparator'\n\nexport class SortUtil {\n  public static toggleDir(dir: SortDirection): SortDirection {\n    if (dir === 'asc') {\n      return 'desc'\n    } else {\n      return 'asc'\n    }\n  }\n\n  public static toggleSort(sort: Sort): Sort {\n    return new Sort(sort.prop, SortUtil.toggleDir(sort.dir))\n  }\n\n  public static sortData<T>(data: T[], sorts: Sort[]): T[] {\n    if (sorts && sorts.length > 0) {\n      const copy = [...data]\n      const sortFields = sorts.map((s) => (s.dir === 'desc' ? '-' : '') + s.prop)\n      return copy.sort(ComparatorBuilder.fieldSort(...sortFields))\n    } else {\n      return data\n    }\n  }\n\n  /**\n   * Checks if the two arrays have all content references in the exact same order.\n   * @param data\n   * @param other\n   */\n  public static equalsExactRefs<T>(data: T[], other: T[]): boolean {\n    if (data.length == other.length) {\n      for (let i = 0; i < data.length; i++) {\n        if (data[i] != other[i]) {\n          return false\n        }\n      }\n      return true\n    }\n    return false\n  }\n}\n","import { Filter } from '../../filters/filter'\nimport { Sort } from '../../sort'\nimport { BehaviorSubject, forkJoin, Observable, of, throwError } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { IListDataSource } from '../data-source'\nimport { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { DataSourceChangeEvent } from '../data-source-change-event'\nimport { DataSourceBase } from '../data-source-base'\nimport { SortUtil } from '../../../utils/sort-util'\nimport { FilterUtil } from '../../../utils/filter/filter-util'\nimport { EntityIdUtil, IdExtractor } from '../entity-id-util'\n\nexport type LocalDataSortFn<T> = (data: T[], sorts: Sort[]) => T[]\nexport type LocalDataFilterFn<T> = (data: T[], filters: Filter[]) => T[]\n\nexport class LocalListDataSource<T> extends DataSourceBase<T> implements IListDataSource<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly data$ = new BehaviorSubject<T[]>([])\n\n  private readonly localSort: LocalDataSortFn<T>\n  private readonly localFilter: LocalDataFilterFn<T>\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates an empty local list data-source.\n   * You can set / modify data by using the data property.\n   * @param idPropertyOrExtractor\n   * @param localSort\n   * @param localFilter\n   */\n  public static empty<T>(\n    idPropertyOrExtractor: string | null | IdExtractor<T>,\n    localSort?: LocalDataSortFn<T>,\n    localFilter?: LocalDataFilterFn<T>\n  ): LocalListDataSource<T> {\n    return this.from([], idPropertyOrExtractor, localSort, localFilter)\n  }\n\n  public static from<T>(\n    localData: T[],\n    idPropertyOrExtractor: string | null | IdExtractor<T>,\n    localSort?: LocalDataSortFn<T>,\n    localFilter?: LocalDataFilterFn<T>\n  ): LocalListDataSource<T> {\n    if (idPropertyOrExtractor === null) {\n      idPropertyOrExtractor = LocalListDataSource.guessIdProperty(localData)\n    }\n    return new LocalListDataSource(localData, localSort, localFilter, idPropertyOrExtractor)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    localData: T[],\n    localSort: LocalDataSortFn<T>,\n    localFilter: LocalDataFilterFn<T>,\n    idPropertyOrExtractor: string | null | IdExtractor<T>\n  ) {\n    super(idPropertyOrExtractor)\n    if (!localData) {\n      throw new Error('localData must not be null!')\n    }\n    this.localSort = localSort || SortUtil.sortData\n    this.localFilter = localFilter || FilterUtil.filterData\n    this.data = localData\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get data(): T[] {\n    return this.data$.getValue()\n  }\n\n  public set data(data: T[]) {\n    this.replaceAll(data)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * IDataSource API                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public findById(id: any): Observable<T> {\n    if (id === undefined || id === null) {\n      throw new Error('findById: id argument required!')\n    }\n    const found = this.data.find((d) => this.getId(d) === id)\n    if (found) {\n      return of(found)\n    } else {\n      return throwError(() => new Error(\"Could not find local entity by id: '\" + id + \"'\"))\n    }\n  }\n\n  public findByIds(ids: any[]): Observable<T[]> {\n    if (ids === undefined || ids === null) {\n      throw new Error('findByIds: ids array argument required!')\n    }\n    return forkJoin(ids.map((id) => this.findById(id)))\n  }\n\n  public findAllFiltered(filters?: Filter[], sorts?: Sort[]): Observable<T[]> {\n    return of(this.data).pipe(\n      map((data) => this.localFilter(data, filters)),\n      map((data) => this.localSort(data, sorts))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public replaceAll(data: T[]): void {\n    this.silentReplaceData(data)\n    this.publishChangeEvent(DataSourceChangeEvent.unknownChanges())\n  }\n\n  public delete(entity: T): void {\n    this.deleteAll([entity])\n  }\n\n  public deleteAll(toDelete: T[]): void {\n    if (toDelete?.length > 0) {\n      return this.deleteAllById(toDelete.map((e) => this.getId(e)))\n    }\n  }\n\n  public deleteAllById(idsToDelete: any[]): void {\n    if (idsToDelete?.length > 0) {\n      const existing = this.data\n      const idsToDeleteSet = new Set(idsToDelete)\n      this.silentReplaceData(existing.filter((e) => !idsToDeleteSet.has(this.getId(e))))\n      this.publishChangeEvent(DataSourceChangeEvent.deleted(idsToDelete))\n    }\n  }\n\n  public saveAll(toSave: T[]): void {\n    toSave.forEach((entity) => this.save(entity))\n  }\n\n  public save(entity: T, index?: number): void {\n    const id = this.getId(entity)\n    const newData = [...this.data]\n    const existingIndex = newData.findIndex((entity) => this.getId(entity) === id)\n\n    let created = false\n    if (existingIndex === -1) {\n      if (index !== null) {\n        newData.splice(index, 0, entity)\n      } else {\n        newData.push(entity)\n      }\n      created = true\n    } else {\n      newData[existingIndex] = entity\n    }\n    this.silentReplaceData(newData)\n    this.publishChangeEvent(\n      created ? DataSourceChangeEvent.created([entity]) : DataSourceChangeEvent.modified([entity])\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private silentReplaceData(newData: T[]): void {\n    this.data$.next(newData)\n  }\n\n  private static guessIdProperty<T>(localData: T[]): string | null {\n    const log = LoggerFactory.getLogger('LocalListDataSource')\n\n    if (localData && localData.length > 0) {\n      const sample = localData[0]\n      if (typeof sample === 'object') {\n        if (Object.prototype.hasOwnProperty.call(sample, 'id')) {\n          log.warn(\n            'DataSource without defined id-property => autodetected property id-property as \"id\"'\n          )\n          return 'id' // Use id\n        } else {\n          log.warn(\n            'Local DataSource created without defined id-property and objects. Using object equality!'\n          )\n        }\n      }\n    }\n    return null // Use value as id if scalar\n  }\n}\n","import { Page, Pageable } from '../../page'\nimport { Filter } from '../../filters/filter'\nimport { Observable } from 'rxjs'\nimport { LocalListDataSource } from './local-list-data-source'\nimport { map } from 'rxjs/operators'\nimport { Sort } from '../../sort'\nimport { IPagedDataSource } from '../data-source'\nimport { DataSourceChangeEvent } from '../data-source-change-event'\n\nexport class LocalPagedDataSource<T> implements IPagedDataSource<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly localListFetcher: LocalListDataSource<T>\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates an empty local list data-source.\n   * You can set / modify data by using the data property.\n   * @param idProperty\n   * @param localSort\n   * @param localFilter\n   */\n  public static empty<T>(\n    idProperty: string | null,\n    localSort?: (data: T[], sorts: Sort[]) => T[],\n    localFilter?: (data: T[], filters: Filter[]) => T[]\n  ): LocalPagedDataSource<T> {\n    return LocalPagedDataSource.of(LocalListDataSource.empty(idProperty, localSort, localFilter))\n  }\n\n  public static of<T>(listDataSource: LocalListDataSource<T>): LocalPagedDataSource<T> {\n    return new LocalPagedDataSource(listDataSource)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(listDataSource: LocalListDataSource<T>) {\n    if (!listDataSource) {\n      throw new Error('listDataSource must not be null!')\n    }\n    this.localListFetcher = listDataSource\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get dataChanged(): Observable<DataSourceChangeEvent<T>> {\n    return this.localListFetcher.dataChanged\n  }\n\n  public findById(id: any): Observable<T> {\n    return this.localListFetcher.findById(id)\n  }\n\n  public findByIds(ids: any[]): Observable<T[]> {\n    return this.localListFetcher.findByIds(ids)\n  }\n\n  public findAllPaged(pageable: Pageable, filters?: Filter[]): Observable<Page<T>> {\n    return this.localListFetcher\n      .findAllFiltered(filters, pageable.sorts)\n      .pipe(map((data) => this.pageSlice(pageable, data)))\n  }\n\n  public getId(entity: T): string {\n    return this.localListFetcher.getId(entity)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private pageSlice(pageable: Pageable, data: T[]): Page<T> {\n    let page: Page<T>\n\n    if (data) {\n      const start = pageable.page * pageable.size\n      const end = start + pageable.size\n      const slice = data.slice(start, end)\n      page = Page.fromPage(slice, data.length, pageable)\n    } else {\n      page = Page.from([])\n    }\n    return page\n  }\n}\n","import { Observable } from 'rxjs'\nimport { Sort } from '../sort'\nimport { Filter } from '../filters/filter'\nimport { Page, Pageable } from '../page'\nimport { TokenChunkRequest } from '../token-chunk-request'\nimport { ContinuableListing } from '../continuable-listing'\nimport { DataSourceChangeEvent } from './data-source-change-event'\nimport { LocalListDataSource } from './local/local-list-data-source'\nimport { DataSource } from '@angular/cdk/collections'\n\n/***************************************************************************\n *                                                                         *\n * Data Fetcher APIs                                                       *\n *                                                                         *\n **************************************************************************/\n\nexport interface IListFetcher<T> {\n  findAllFiltered(filters?: Filter[], sorts?: Sort[]): Observable<Array<T>>\n}\n\nexport interface IPageFetcher<T> {\n  findAllPaged(pageable: Pageable, filters?: Filter[]): Observable<Page<T>>\n}\n\nexport interface IContinuationFetcher<T> {\n  findAllContinuable(tokenChunkRequest: TokenChunkRequest): Observable<ContinuableListing<T>>\n}\n\n/***************************************************************************\n *                                                                         *\n * Data Accessor APIs                                                      *\n *                                                                         *\n **************************************************************************/\n\nexport interface IDataSource<T> {\n  /**\n   * Notifies that this data source has modified elements.\n   */\n  readonly dataChanged: Observable<DataSourceChangeEvent<T>>\n\n  /**\n   * Return the entity with the given Id.\n   */\n  findById(id: any): Observable<T>\n\n  /**\n   * Return the entity with the given Id.\n   */\n  findByIds(ids: any[]): Observable<T[]>\n\n  /**\n   * Get the Id value of the given entity\n   */\n  getId(entity: T): any\n}\n\nexport interface IListDataSource<T> extends IListFetcher<T>, IDataSource<T> {}\n\nexport interface IPagedDataSource<T> extends IPageFetcher<T>, IDataSource<T> {}\n\nexport interface IContinuableDataSource<T> extends IContinuationFetcher<T>, IDataSource<T> {}\n\n/***************************************************************************\n *                                                                         *\n * Type Predicates                                                         *\n *                                                                         *\n **************************************************************************/\n\nexport function isDataSource(object: any): object is IDataSource<any> {\n  if (!object) {\n    return false\n  }\n\n  return (\n    (object as IDataSource<any>).dataChanged !== undefined &&\n    (object as IDataSource<any>).findById !== undefined &&\n    (object as IDataSource<any>).getId !== undefined\n  )\n}\n\nexport function isListDataSource(object: IDataSource<any>): object is IListDataSource<any> {\n  return (object as IListDataSource<any>).findAllFiltered !== undefined\n}\n\nexport function isLocalListDataSource(\n  object: IDataSource<any>\n): object is LocalListDataSource<any> {\n  return (\n    isListDataSource(object) &&\n    (object as LocalListDataSource<any>).delete !== undefined &&\n    (object as LocalListDataSource<any>).save !== undefined &&\n    (object as LocalListDataSource<any>).replaceAll !== undefined\n  )\n}\n\nexport function isPagedDataSource(object: IDataSource<any>): object is IPagedDataSource<any> {\n  return (object as IPagedDataSource<any>).findAllPaged !== undefined\n}\n\nexport function isContinuableDataSource(\n  object: IDataSource<any>\n): object is IContinuableDataSource<any> {\n  return (object as IContinuableDataSource<any>).findAllContinuable !== undefined\n}\n","import {\n  IContinuableDataSource,\n  IDataSource,\n  IListDataSource,\n  IPagedDataSource,\n} from '../data-source'\nimport { EMPTY, forkJoin, Observable, throwError } from 'rxjs'\nimport { Filter } from '../../filters/filter'\nimport { Sort } from '../../sort'\nimport { Page, Pageable } from '../../page'\nimport { TokenChunkRequest } from '../../token-chunk-request'\nimport { ContinuableListing } from '../../continuable-listing'\nimport { EntityIdUtil } from '../entity-id-util'\n\nexport abstract class DelegateDataSource<T> implements IDataSource<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static emptyListFetcher<T>(): IDataSource<T> {\n    const empty = () => EMPTY // AOT Ignore\n    return DelegateDataSource.listFetcher(empty, 'id', empty, empty)\n  }\n\n  public static listFetcher<T>(\n    listFetcher: (sorts: Sort[], filters?: Filter[]) => Observable<Array<T>>,\n    idProperty: string = 'id',\n    findByIdFn?: (id: any) => Observable<T>,\n    findAllByIdFn?: (ids: any[]) => Observable<T[]>\n  ): IDataSource<T> {\n    return new DelegateListDataSource(listFetcher, idProperty, findByIdFn, findAllByIdFn)\n  }\n\n  public static emptyPageFetcher<T>(): IDataSource<T> {\n    const empty = () => EMPTY // AOT Ignore\n    return DelegateDataSource.pageFetcher(empty, 'id', empty)\n  }\n\n  public static pageFetcher<T>(\n    pageFetcher: (pageable: Pageable, filters?: Filter[]) => Observable<Page<T>>,\n    idProperty: string = 'id',\n    findByIdFn?: (id: any) => Observable<T>,\n    findAllByIdFn?: (ids: any[]) => Observable<T[]>\n  ): IDataSource<T> {\n    return new DelegatePagedDataSource(pageFetcher, idProperty, findByIdFn, findAllByIdFn)\n  }\n\n  public static emptyContinuableFetcher<T>(): IDataSource<T> {\n    const empty = () => EMPTY // AOT Ignore\n    return DelegateDataSource.continuableFetcher(empty, 'id', empty)\n  }\n\n  public static continuableFetcher<T>(\n    chunkFetcher: (tokenChunkRequest: TokenChunkRequest) => Observable<ContinuableListing<T>>,\n    idProperty: string = 'id',\n    findByIdFn?: (id: any) => Observable<T>,\n    findAllByIdFn?: (ids: any[]) => Observable<T[]>\n  ): IDataSource<T> {\n    return new DelegateContinuableDataSource(chunkFetcher, idProperty, findByIdFn, findAllByIdFn)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor(\n    private readonly idProperty: string,\n    private readonly findByIdFn: (id: any) => Observable<T>,\n    private readonly findAllByIdFn: (ids: any[]) => Observable<T[]>\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get dataChanged(): Observable<any> {\n    return EMPTY\n  }\n\n  public findById(id: any): Observable<T> {\n    if (this.findByIdFn) {\n      return this.findByIdFn(id)\n    }\n    return throwError('This DelegateDataSource does not implement findById!')\n  }\n\n  public findByIds(ids: any[]): Observable<T[]> {\n    if (this.findAllByIdFn) {\n      return this.findAllByIdFn(ids)\n    }\n    if (this.findByIdFn) {\n      return forkJoin(ids.map((id) => this.findById(id)))\n    }\n    return throwError('This DelegateDataSource does not implement findByIds or findById!')\n  }\n\n  public getId(entity: T): any {\n    return EntityIdUtil.getId(entity, this.idProperty)\n  }\n}\n\nexport class DelegateListDataSource<T> extends DelegateDataSource<T> implements IListDataSource<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly listFetcherFn: (sorts: Sort[], filters?: Filter[]) => Observable<Array<T>>,\n    idProperty: string,\n    findByIdFn: (id: any) => Observable<T>,\n    findAllByIdFn: (ids: any[]) => Observable<T[]>\n  ) {\n    super(idProperty, findByIdFn, findAllByIdFn)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public findAllFiltered(filters?: Filter[], sorts?: Sort[]): Observable<Array<T>> {\n    return this.listFetcherFn(sorts, filters)\n  }\n}\n\nexport class DelegatePagedDataSource<T>\n  extends DelegateDataSource<T>\n  implements IPagedDataSource<T>\n{\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly pageFetcherFn: (pageable: Pageable, filters?: Filter[]) => Observable<Page<T>>,\n    idProperty: string,\n    findByIdFn: (id: any) => Observable<T>,\n    findAllByIdFn: (ids: any[]) => Observable<T[]>\n  ) {\n    super(idProperty, findByIdFn, findAllByIdFn)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public findAllPaged(pageable: Pageable, filters?: Filter[]): Observable<Page<T>> {\n    return this.pageFetcherFn(pageable, filters)\n  }\n\n  public process(pageSize: number, processFn: (dataChunk: T[]) => void, filters?: Filter[]): void {\n    throw new Error('Not yet implemented')\n  }\n}\n\nexport class DelegateContinuableDataSource<T>\n  extends DelegateDataSource<T>\n  implements IContinuableDataSource<T>\n{\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly chunkFetcherFn: (\n      tokenChunkRequest: TokenChunkRequest\n    ) => Observable<ContinuableListing<T>>,\n    idProperty: string,\n    findByIdFn: (id: any) => Observable<T>,\n    findAllByIdFn: (ids: any[]) => Observable<T[]>\n  ) {\n    super(idProperty, findByIdFn, findAllByIdFn)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public findAllContinuable(\n    tokenChunkRequest: TokenChunkRequest\n  ): Observable<ContinuableListing<T>> {\n    return this.chunkFetcherFn(tokenChunkRequest)\n  }\n}\n","import { DataContextContinuablePaged } from './data-context-continuable-paged'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { DataContextSimple } from './data-context-simple'\nimport { DataContextActivePage } from './data-context-active-page'\nimport { Sort } from '../sort'\nimport { DataContextContinuableToken } from './data-context-continuable-token'\nimport { IDataContext, IDataContextActivePage, IDataContextContinuable } from './data-context'\nimport { DataContextSourceEventBinding } from './data-context-source-event-binding'\nimport { LocalPagedDataSource } from '../datasource/local/local-paged-data-source'\nimport { LocalListDataSource } from '../datasource/local/local-list-data-source'\nimport { SortUtil } from '../../utils/sort-util'\nimport {\n  IContinuableDataSource,\n  IDataSource,\n  IListDataSource,\n  IPagedDataSource,\n  isContinuableDataSource,\n  isListDataSource,\n  isPagedDataSource,\n} from '../datasource/data-source'\nimport { DelegateDataSource } from '../datasource/fetcher/delegate-data-source'\nimport { AutoStartSpec, DataContextAutoStarter } from './data-context-auto-starter'\nimport { FilterUtil } from '../../utils/filter/filter-util'\n\n/**\n * Provides the ability to build a IDataContext<T>.\n */\nexport class DataContextBuilder<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _indexFn?: (item: T) => any\n  private _localApply?: (data: T[]) => T[]\n  private _localSort?: (data: T[], sorts: Sort[]) => T[]\n  private _skipLocalSort = false\n  private _pageSize = 50\n  private _reloadOnLocalChanges = false\n  private _activePaged = false\n  private _autoStartSpec?: AutoStartSpec\n\n  /***************************************************************************\n   *                                                                         *\n   * Static                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates a new DataContextBuilder.\n   * @returns A new DataContextBuilder for the given data type.\n   */\n  public static start<T>(): DataContextBuilder<T> {\n    return new DataContextBuilder<T>()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Optional index function where each element will be indexed by.\n   * If you have configured this, you can use the findByIndex(key) on the data-context.\n   */\n  public indexBy(indexFn?: (item: T) => any): this {\n    this._indexFn = indexFn\n    return this\n  }\n\n  /**\n   * The desired size of a page/chunk when loading data.\n   * Note that continuable apis might just take this as a wish or even completely ignore this param.\n   */\n  public pageSize(size: number): this {\n    this._pageSize = size\n    return this\n  }\n\n  /**\n   * Sort the data context locally.\n   *\n   * Note that this might be a costly operation when there are a lot of elements present.\n   * Prefer server side sorting if possible.\n   */\n  public localSort(localSort?: (data: T[], sorts: Sort[]) => T[]): this {\n    this._localSort = localSort ? localSort : SortUtil.sortData\n    return this\n  }\n\n  /**\n   * Enable active paging (in contrast to the infinite load) in the data context.\n   * Only supported if the underlying datasource supports pagination.\n   */\n  public activePaged(): this {\n    this._activePaged = true\n    return this\n  }\n\n  /**\n   * For each element which is added to the datacontext, apply the given function.\n   */\n  public localApply(localApply: (data: T[]) => T[]): this {\n    this._localApply = localApply\n    return this\n  }\n\n  /**\n   * On a local change event, automatically reload data in the data-context.\n   * This means whenever there was an modify operation on the rest client,\n   * such as Update, Delete or Create, the data will be reloaded.\n   */\n  public reloadOnLocalChanges(): this {\n    this._reloadOnLocalChanges = true\n    return this\n  }\n\n  public autoStartAsap(sort?: Sort[]): this {\n    return this.autoStartOn(AutoStartSpec.asap(sort))\n  }\n\n  public autoStartOnFilters(filters: Array<string[]>, sort?: Sort[]): this {\n    return this.autoStartOn(AutoStartSpec.requireFilters(filters, sort))\n  }\n\n  public autoStartOnFiltersAll(filters: string[], sort?: Sort[]): this {\n    return this.autoStartOn(AutoStartSpec.requireFiltersAll(filters, sort))\n  }\n\n  public autoStartOnFiltersAny(filters: string[], sort?: Sort[]): this {\n    return this.autoStartOn(AutoStartSpec.requireFiltersAny(filters, sort))\n  }\n\n  public autoStartOn(spec: AutoStartSpec): this {\n    this._autoStartSpec = spec\n    return this\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * DataSource Builder                                                      *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Build a new DataContext from the given DataSource.\n   *\n   * Common DataSources are RestClient, LocalListDataSource and DelegateDataSource.\n   *\n   * @param ds\n   */\n  public build(ds: IDataSource<T>): IDataContext<T> {\n    return this.buildFromSource(ds)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Local Data Builder                                                      *\n   *                                                                         *\n   **************************************************************************/\n\n  public buildLocal(items: T[], idProperty?: string): IDataContext<T> {\n    return this.build(this.localListSource(items, idProperty))\n  }\n\n  public buildLocalActivePaged(items: T[], idProperty?: string): IDataContextActivePage<T> {\n    this._skipLocalSort = true\n    this.activePaged()\n    return <IDataContextActivePage<T>>(\n      this.build(LocalPagedDataSource.of(this.localListSource(items, idProperty)))\n    )\n  }\n\n  private localListSource(items: T[], idProperty?: string): LocalListDataSource<T> {\n    return LocalListDataSource.from(items, idProperty, this._localSort, FilterUtil.filterData)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Empty Data Builder                                                      *\n   *                                                                         *\n   **************************************************************************/\n\n  public buildEmpty(): IDataContext<T> {\n    return this.build(DelegateDataSource.emptyListFetcher())\n  }\n\n  public buildEmptyContinuable(): IDataContextContinuable<T> {\n    return <IDataContextContinuable<T>>this.build(DelegateDataSource.emptyContinuableFetcher())\n  }\n\n  public buildEmptyActivePaged(): IDataContextActivePage<T> {\n    return <IDataContextActivePage<T>>(\n      this.activePaged().build(DelegateDataSource.emptyPageFetcher())\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildFromSource(ds: IDataSource<T>): IDataContext<T> {\n    let dataContext: IDataContext<T>\n\n    if (isListDataSource(ds)) {\n      dataContext = this.fromListSource(ds)\n    } else if (isPagedDataSource(ds)) {\n      if (this._activePaged) {\n        dataContext = this.fromActivePageSource(ds)\n      } else {\n        dataContext = this.fromPageSource(ds)\n      }\n    } else if (isContinuableDataSource(ds)) {\n      dataContext = this.fromContinuationSource(ds)\n    } else {\n      throw new Error('Unsupported IDataSource type: ' + typeof ds)\n    }\n\n    if (this._autoStartSpec) {\n      this.setupDataContextAutoStart(dataContext, this._autoStartSpec)\n    }\n\n    return this.setupDataContextAutoReload(dataContext, ds)\n  }\n\n  private fromListSource(listSource: IListDataSource<T>): IDataContext<T> {\n    return new DataContextSimple<T>(listSource, this._indexFn, this._localApply, this._localSort)\n  }\n\n  private fromPageSource(pageSource: IPagedDataSource<T>): IDataContextContinuable<T> {\n    return new DataContextContinuablePaged<T>(\n      pageSource,\n      this._pageSize,\n      this._indexFn,\n      this._localApply,\n      this._localSort\n    )\n  }\n\n  private fromContinuationSource(\n    continuationSource: IContinuableDataSource<T>\n  ): IDataContextContinuable<T> {\n    return new DataContextContinuableToken<T>(\n      continuationSource,\n      this._pageSize,\n      this._indexFn,\n      this._localApply,\n      this._localSort\n    )\n  }\n\n  private fromActivePageSource(pageSource: IPagedDataSource<T>): IDataContextActivePage<T> {\n    return new DataContextActivePage<T>(\n      pageSource,\n      this._pageSize,\n      this._indexFn,\n      this._localApply,\n      this._skipLocalSort ? null : this._localSort\n    )\n  }\n\n  private setupDataContextAutoReload<DC extends IDataContext<T>>(\n    dc: DC,\n    dataSource: IDataSource<any>\n  ): DC {\n    const binding = new DataContextSourceEventBinding(dc, dataSource, this._reloadOnLocalChanges)\n    return dc\n  }\n\n  private setupDataContextAutoStart<DC extends IDataContext<T>>(\n    dc: DC,\n    autoStartSpec: AutoStartSpec\n  ): DC {\n    if (this._autoStartSpec) {\n      this.logger.debug('Setting up data context auto start with spec:', this._autoStartSpec)\n      const binding = new DataContextAutoStarter(dc, autoStartSpec)\n    }\n    return dc\n  }\n}\n","import {\n  IDataSource,\n  isContinuableDataSource,\n  isListDataSource,\n  isPagedDataSource,\n} from './data-source'\nimport { Observable } from 'rxjs'\nimport { Filter } from '../filters/filter'\nimport { Sort } from '../sort'\nimport { Pageable } from '../page'\nimport { filter, map } from 'rxjs/operators'\nimport { TokenChunkRequest } from '../token-chunk-request'\n\nexport class DataSourceAdapter<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static from<T>(dataSource: IDataSource<T>): DataSourceAdapter<T> {\n    return new DataSourceAdapter<T>(dataSource)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly dataSource: IDataSource<T>) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Returns the first item which matches the given filter / sort\n   * @param filters\n   * @param sorts\n   */\n  public findFirst(filters: Filter[], sorts: Sort[] = []): Observable<T> {\n    return this.findAll(filters, sorts, 1).pipe(\n      filter((data) => data && data.length > 0),\n      map((data) => data[0])\n    )\n  }\n\n  /**\n   * Find all items which match the given filters.\n   */\n  public findAll(filters: Filter[], sorts: Sort[] = [], limit = 50): Observable<T[]> {\n    if (isListDataSource(this.dataSource)) {\n      return this.dataSource.findAllFiltered(filters, sorts)\n    } else if (isPagedDataSource(this.dataSource)) {\n      return this.dataSource\n        .findAllPaged(new Pageable(0, limit, sorts), filters)\n        .pipe(map((page) => page.content))\n    } else if (isContinuableDataSource(this.dataSource)) {\n      return this.dataSource\n        .findAllContinuable(TokenChunkRequest.first(filters, sorts, limit))\n        .pipe(map((page) => page.content))\n    }\n    throw new Error('Unsupported data source type')\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import {\n  IContinuableDataSource,\n  IDataSource,\n  IListDataSource,\n  IPagedDataSource,\n  isContinuableDataSource,\n  isListDataSource,\n  isPagedDataSource,\n} from './data-source'\nimport { Page, Pageable } from '../page'\nimport { Filter } from '../filters/filter'\nimport { TokenChunkRequest } from '../token-chunk-request'\nimport { ContinuableListing } from '../continuable-listing'\nimport { Sort } from '../sort'\nimport { Observable } from 'rxjs/internal/Observable'\nimport { map, switchMap, takeWhile, tap } from 'rxjs/operators'\nimport { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, EMPTY } from 'rxjs'\n\nexport enum ProcessState {\n  INIT = 'INIT',\n\n  RUNNING = 'RUNNING',\n\n  COMPLETED = 'COMPLETED',\n\n  ERROR = 'ERROR',\n}\n\nexport class ProcessIterationContext<T> {\n  public static init<T>(): ProcessIterationContext<T> {\n    return new ProcessIterationContext(ProcessState.INIT)\n  }\n\n  public static processingList<T>(list: T[]): ProcessIterationContext<T> {\n    return new ProcessIterationContext(ProcessState.RUNNING, list)\n  }\n\n  public static processingPage<T>(currentPage: Page<T>): ProcessIterationContext<T> {\n    return new ProcessIterationContext(ProcessState.RUNNING, null, currentPage)\n  }\n\n  public static processingContinuable<T>(\n    currentChunk: ContinuableListing<T>\n  ): ProcessIterationContext<T> {\n    return new ProcessIterationContext(ProcessState.RUNNING, null, null, currentChunk)\n  }\n\n  public static completed<T>(): ProcessIterationContext<T> {\n    return new ProcessIterationContext(ProcessState.COMPLETED)\n  }\n\n  public static error<T>(): ProcessIterationContext<T> {\n    return new ProcessIterationContext(ProcessState.ERROR)\n  }\n\n  public constructor(\n    public readonly state: ProcessState,\n    public readonly items?: T[],\n    public readonly page?: Page<T>,\n    public readonly continuable?: ContinuableListing<T>\n  ) {\n    if (page) {\n      this.items = page.content\n    }\n    if (continuable) {\n      this.items = continuable.content\n    }\n  }\n}\n\nexport class DataSourceProcessor<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _dataSource: IDataSource<T>\n  private readonly _chunkSize: number\n  private readonly _process$ = new BehaviorSubject<ProcessIterationContext<T>>(\n    ProcessIterationContext.init()\n  )\n\n  /***************************************************************************\n   *                                                                         *\n   * Static                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public static start<T>(dataSource: IDataSource<T>, chunkSize?: number): DataSourceProcessor<T> {\n    return new DataSourceProcessor(dataSource, chunkSize)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor(dataSource: IDataSource<T>, chunkSize?: number) {\n    this._dataSource = dataSource\n    this._chunkSize = chunkSize || 100\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get dataSource(): IDataSource<T> {\n    return this._dataSource\n  }\n\n  protected get listDataSource(): IListDataSource<T> {\n    return this.dataSource as IListDataSource<T>\n  }\n\n  protected get pagedDataSource(): IPagedDataSource<T> {\n    return this.dataSource as IPagedDataSource<T>\n  }\n\n  protected get continuableDataSource(): IContinuableDataSource<T> {\n    return this.dataSource as IContinuableDataSource<T>\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Allows to iterative load and process the contents of the\n   * data source in scope.\n   *\n   * @param processFn to iterative execute upon each item of each iteration\n   * @param filters to filter the data source\n   * @param sorts to sort the data source\n   */\n  public process$(\n    processFn: (dataChunk: T[]) => any,\n    filters: Filter[],\n    sorts: Sort[]\n  ): Observable<ProcessIterationContext<T>> {\n    return this._process$.pipe(\n      takeWhile((ctx) => this.notCompleted(ctx)),\n      switchMap((ctx) => this.loadNext(ctx, filters, sorts)),\n      tap((updatedCtx) => {\n        processFn(updatedCtx.items)\n        this._process$.next(updatedCtx)\n      })\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Loading                                                                 *\n   *                                                                         *\n   **************************************************************************/\n\n  private loadNext(\n    currentCtx: ProcessIterationContext<T>,\n    filters: Filter[],\n    sorts: Sort[]\n  ): Observable<ProcessIterationContext<T>> {\n    let updatedCtx$: Observable<ProcessIterationContext<T>>\n    if (isListDataSource(this._dataSource)) {\n      updatedCtx$ = this.loadList(filters, sorts)\n    } else if (isPagedDataSource(this._dataSource)) {\n      updatedCtx$ = this.loadNextPage(currentCtx.page, filters, sorts)\n    } else if (isContinuableDataSource(this._dataSource)) {\n      updatedCtx$ = this.loadNextContinuable(currentCtx.continuable, filters, sorts)\n    } else {\n      throw new Error('Unsupported DataSource!')\n    }\n\n    return updatedCtx$\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * List                                                                    *\n   *                                                                         *\n   **************************************************************************/\n\n  private loadList(filters: Filter[], sorts: Sort[]): Observable<ProcessIterationContext<T>> {\n    this.log.debug('Loading list with filters and sorts...', [filters, sorts])\n\n    return this.listDataSource\n      .findAllFiltered(filters, sorts)\n      .pipe(map((page) => this.listIteration(page)))\n  }\n\n  private listIteration(items: T[]): ProcessIterationContext<T> {\n    return new ProcessIterationContext(ProcessState.COMPLETED, items, null, null)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Paged                                                                   *\n   *                                                                         *\n   **************************************************************************/\n\n  private loadNextPage(\n    currentPage: Page<T>,\n    filters: Filter[],\n    sorts: Sort[]\n  ): Observable<ProcessIterationContext<T>> {\n    const nextPageRequest = currentPage\n      ? Page.nextPageable(currentPage, sorts)\n      : new Pageable(0, this._chunkSize, sorts)\n\n    this.log.debug('Loading next page...', [nextPageRequest, filters, sorts])\n\n    return this.pagedDataSource\n      .findAllPaged(nextPageRequest, filters)\n      .pipe(map((page) => this.pageIteration(page)))\n  }\n\n  private pageIteration(page: Page<T>): ProcessIterationContext<T> {\n    return new ProcessIterationContext(this.pageIterationState(page), null, page, null)\n  }\n\n  private pageIterationState(page: Page<T>): ProcessState {\n    return Page.hasNext(page) ? ProcessState.RUNNING : ProcessState.COMPLETED\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Continuable                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  private loadNextContinuable(\n    currentChunk: ContinuableListing<T> | undefined,\n    filters: Filter[],\n    sorts: Sort[]\n  ): Observable<ProcessIterationContext<T>> {\n    const nextChunkRequest = currentChunk\n      ? TokenChunkRequest.nextIfAvailable(currentChunk, filters, sorts)\n      : TokenChunkRequest.first(filters, sorts, this._chunkSize)\n\n    if (nextChunkRequest) {\n      this.log.debug('Loading next chunk...', [nextChunkRequest, filters, sorts])\n      return this.continuableDataSource\n        .findAllContinuable(nextChunkRequest)\n        .pipe(map((chunk) => this.continuableIteration(chunk)))\n    } else {\n      this.log.warn(\n        'Loading next chunk not possible since listing has no more data: ',\n        currentChunk\n      )\n      return EMPTY\n    }\n  }\n\n  private continuableIteration(chunk: ContinuableListing<T>): ProcessIterationContext<T> {\n    return new ProcessIterationContext(this.continuableIterationState(chunk), null, null, chunk)\n  }\n\n  private continuableIterationState(chunk: ContinuableListing<T>): ProcessState {\n    return chunk.hasMore ? ProcessState.RUNNING : ProcessState.COMPLETED\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private notCompleted(ctx: ProcessIterationContext<T>): boolean {\n    const completed = ctx.state === ProcessState.COMPLETED\n\n    if (completed) {\n      this.log.debug('Process completed with context', ctx)\n    } else {\n      this.log.debug('Starting next process iteration, current iteration context:', ctx)\n    }\n\n    return !completed\n  }\n}\n","export class Batcher {\n  /**\n   * Batches the given items into batches of the given size.\n   */\n  public static batch<V>(items: V[], batchSize: number): V[][] {\n    return Batcher.batchMap(items, batchSize, (slice) => slice)\n  }\n\n  /**\n   * Batches the given items into batches of the given size, and\n   * applies a mapping function to each batch.\n   * @param items\n   * @param batchSize\n   * @param mapper\n   */\n  public static batchMap<V, R>(items: V[], batchSize: number, mapper: (slice: V[]) => R): R[] {\n    if (!items || items.length <= 0) {\n      return [] // Nothing to batch\n    }\n\n    if (batchSize <= 0) {\n      throw new Error('Batch size must be >= 0 but was ' + batchSize)\n    }\n\n    const batches: R[] = []\n\n    let start = 0\n    let slice: V[] = []\n\n    do {\n      slice = items.slice(start, start + batchSize)\n      if (slice.length > 0) {\n        batches.push(mapper(slice))\n        start = start + batchSize\n      }\n    } while (slice.length > 0)\n\n    return batches\n  }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http'\nimport { EMPTY, forkJoin, Observable, of } from 'rxjs'\nimport { expand, map, reduce, tap } from 'rxjs/operators'\nimport { HttpParamsBuilder } from '../../http-params-builder'\nimport { Sort } from '../../sort'\nimport { Filter } from '../../filters/filter'\nimport { Page, Pageable } from '../../page'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ContinuableListing } from '../../continuable-listing'\nimport { TokenChunkRequest } from '../../token-chunk-request'\nimport {\n  IContinuableDataSource,\n  IDataSource,\n  IListDataSource,\n  IPagedDataSource,\n} from '../data-source'\nimport { Batcher } from '../../../utils/batcher'\nimport { DataSourceChangeEvent } from '../data-source-change-event'\nimport { DataSourceBase } from '../data-source-base'\n\nexport class InternalRestClientConfig {\n  public idField = 'id'\n  public idsParam = 'ids'\n\n  constructor(userConfig?: RestClientConfig) {\n    if (userConfig) {\n      if (userConfig.idField) {\n        this.idField = userConfig.idField\n      }\n      if (userConfig.idsParam) {\n        this.idsParam = userConfig.idsParam\n      }\n    }\n  }\n}\n\n/**\n * Allows to customize the rest client\n */\nexport class RestClientConfig {\n  /**\n   * The field to use as id. Defaults to 'id'.\n   */\n  public idField?: string\n\n  /**\n   * The query param to use for multiple ids. Defaults to 'ids'\n   */\n  public idsParam?: string\n}\n\nexport class RestClient<T, TID> extends DataSourceBase<T> implements IDataSource<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _logger = LoggerFactory.getLogger(this.constructor.name)\n  protected readonly config: InternalRestClientConfig\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    protected readonly restEndpoint: string,\n    protected readonly http: HttpClient,\n    config?: RestClientConfig\n  ) {\n    super(new InternalRestClientConfig(config).idField)\n    this.config = new InternalRestClientConfig(config)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public findById(id: TID, params?: HttpParams): Observable<T> {\n    if (id === undefined || id === null) {\n      throw new Error('findById: id argument required!')\n    }\n    params = HttpParamsBuilder.start(params).build()\n    return this.http.get<T>(this.getEntityUrl(id), { params: params })\n  }\n\n  public override findByIds(ids: any[], params?: HttpParams): Observable<T[]> {\n    if (ids === undefined || ids === null) {\n      throw new Error('findByIds: ids array argument required!')\n    }\n    this._logger.warn('Very inefficient findByIds handling ' + ids.length)\n    return forkJoin(ids.map((id) => this.findById(id, params)))\n  }\n\n  /**\n   * Creates or Updates the given entity depending if it already has a valid id.\n   */\n  public save(entity: T, params?: HttpParams): Observable<T> {\n    const id = this.getId(entity)\n    return id ? this.update(entity, params) : this.create(entity, params)\n  }\n\n  public create<TC = T>(newEntity: TC, params?: HttpParams): Observable<T> {\n    return this.http\n      .post<T>(this.restEndpoint, newEntity, {\n        params: params,\n      })\n      .pipe(tap((e) => this.publishChangeEvent(DataSourceChangeEvent.created([e]))))\n  }\n\n  public update<TEntityUpdate>(update: TEntityUpdate, params?: HttpParams): Observable<T> {\n    return this.http\n      .put<T>(this.getEntityUrlBy(<T>(<unknown>update)), update, {\n        params: params,\n      })\n      .pipe(tap((e) => this.publishChangeEvent(DataSourceChangeEvent.modified([e]))))\n  }\n\n  public updateAll<TEntityUpdate>(\n    updatedEntities: TEntityUpdate[],\n    params?: HttpParams\n  ): Observable<T[]> {\n    return this.http\n      .put<T[]>(this.restEndpoint, updatedEntities, {\n        params: params,\n      })\n      .pipe(tap((entities) => this.publishChangeEvent(DataSourceChangeEvent.modified(entities))))\n  }\n\n  public delete(entity: T, params?: HttpParams): Observable<any> {\n    return this.http\n      .delete(this.getEntityUrlBy(entity), {\n        responseType: 'text',\n        params: params,\n      })\n      .pipe(tap(() => this.publishChangeEvent(DataSourceChangeEvent.deleted([this.getId(entity)]))))\n  }\n\n  public deleteAll(entities: T[], params?: HttpParams): Observable<any> {\n    const ids = entities.map((e) => String(this.getId(e)))\n\n    const maxBatchSize = 50\n    const deleteRequests = Batcher.batchMap(ids, maxBatchSize, (batch) =>\n      this.deleteIdBatch(batch, params)\n    )\n    this._logger.debug(\n      'Deleting ' + entities.length + ' in ' + deleteRequests.length + ' batches: ',\n      deleteRequests\n    )\n    return forkJoin(deleteRequests)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Sub Resource Builder                                                    *\n   *                                                                         *\n   **************************************************************************/\n\n  public subResourceList<TS, TSID>(\n    parent: T,\n    subPath: string,\n    config?: RestClientConfig\n  ): RestClientList<TS, TSID> {\n    return new RestClientList(this.getEntityUrlBy(parent) + '/' + subPath, this.http, config)\n  }\n\n  public subResourcePaged<TS, TSID>(\n    parent: T,\n    subPath: string,\n    config?: RestClientConfig\n  ): RestClientPaged<TS, TSID> {\n    return new RestClientPaged(this.getEntityUrlBy(parent) + '/' + subPath, this.http, config)\n  }\n\n  public subResourceContinuable<TS, TSID>(\n    parent: T,\n    subPath: string,\n    config?: RestClientConfig\n  ): RestClientContinuable<TS, TSID> {\n    return new RestClientContinuable(this.getEntityUrlBy(parent) + '/' + subPath, this.http, config)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Protected methods                                                       *\n   *                                                                         *\n   **************************************************************************/\n\n  protected patchInternal<P>(id: TID, entityPatch: P, params?: HttpParams): Observable<T> {\n    return this.http\n      .patch<T>(this.getEntityUrl(id), entityPatch, {\n        params: params,\n      })\n      .pipe(tap((e) => this.publishChangeEvent(DataSourceChangeEvent.modified([e]))))\n  }\n\n  protected patchAllInternal<P>(entityPatches: P[], params?: HttpParams): Observable<T[]> {\n    return this.http\n      .patch<T[]>(this.restEndpoint, entityPatches, {\n        params: params,\n      })\n      .pipe(tap((e) => this.publishChangeEvent(DataSourceChangeEvent.modified(e))))\n  }\n\n  /**\n   * @deprecated Switch to publishChangeEvent\n   */\n  protected onLocalChanged(entity?: T): void {\n    this.publishChangeEvent(DataSourceChangeEvent.unknownChanges())\n  }\n\n  protected getEntityUrlBy(entity: T): string {\n    return this.getEntityUrl(this.getId(entity))\n  }\n\n  protected getEntityUrl(id: TID): string {\n    return this.restEndpoint + '/' + id\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Deletes the given ids in a batch call.\n   * Note that due HTTP Request URI limitations,\n   * the number of ids that can be deleted in a single batch is\n   * limited (around 150, depending on id length, since they are\n   * part of the request uri parameters.\n   */\n  private deleteIdBatch(ids: string[], params?: HttpParams): Observable<any> {\n    const builder = HttpParamsBuilder.start(params)\n    builder.appendFilter(new Filter(this.config.idsParam, ids))\n    return this.http\n      .delete(this.restEndpoint, {\n        params: builder.build(),\n        responseType: 'text',\n      })\n      .pipe(tap(() => this.publishChangeEvent(DataSourceChangeEvent.deleted(ids))))\n  }\n}\n\nexport class RestClientList<T, TID> extends RestClient<T, TID> implements IListDataSource<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(restEndpoint: string, http: HttpClient, config?: RestClientConfig) {\n    super(restEndpoint, http, config)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public findAllFiltered(filters?: Filter[], sorts?: Sort[], params?: HttpParams): Observable<T[]> {\n    return this.findAll(\n      HttpParamsBuilder.start(params).appendFilters(filters).appendSorts(sorts).build()\n    )\n  }\n\n  public override findByIds(ids: any[], params?: HttpParams): Observable<T[]> {\n    if (ids?.length > 0) {\n      return this.findAllFiltered([new Filter(this.config.idsParam, ids)], [], params)\n    } else {\n      return of([])\n    }\n  }\n\n  public findAll(params?: HttpParams): Observable<T[]> {\n    return this.http.get<T[]>(this.restEndpoint, {\n      params: params,\n    })\n  }\n}\n\nexport class RestClientPaged<T, TID> extends RestClient<T, TID> implements IPagedDataSource<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(restEndpoint: string, http: HttpClient, config?: RestClientConfig) {\n    super(restEndpoint, http, config)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public findAllPaged(\n    pageable: Pageable,\n    filters?: Filter[],\n    params?: HttpParams\n  ): Observable<Page<T>> {\n    return this.getPaged(this.restEndpoint, pageable, filters, params)\n  }\n\n  public override findByIds(ids: any[], params?: HttpParams): Observable<T[]> {\n    if (ids?.length > 0) {\n      return this.findAllPaged(\n        new Pageable(0, ids.length),\n        [new Filter(this.config.idsParam, ids)],\n        params\n      ).pipe(map((page) => page.content))\n    } else {\n      return of([])\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Gets the requested data page as Page<T>\n   * @param url The resource url\n   * @param pageable The page request\n   * @param filters The filtersSnapshot request\n   * @param params Additional parameters\n   */\n  private getPaged(\n    url: string,\n    pageable: Pageable,\n    filters?: Filter[],\n    params?: HttpParams\n  ): Observable<Page<T>> {\n    params = HttpParamsBuilder.start(params).appendPageable(pageable).appendFilters(filters).build()\n    return this.http.get<Page<T>>(url, { params: params })\n  }\n}\n\nexport class RestClientContinuable<T, TID>\n  extends RestClient<T, TID>\n  implements IContinuableDataSource<T>\n{\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(restEndpoint: string, http: HttpClient, config?: RestClientConfig) {\n    super(restEndpoint, http, config)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public findAllContinuable(\n    request: TokenChunkRequest,\n    params?: HttpParams\n  ): Observable<ContinuableListing<T>> {\n    return this.http.get<ContinuableListing<T>>(this.restEndpoint, {\n      params: HttpParamsBuilder.start(params).appendContinuationRequest(request).build(),\n    })\n  }\n\n  public override findByIds(ids: any[], params?: HttpParams): Observable<T[]> {\n    if (ids?.length > 0) {\n      return this.loadAll(250, [new Filter(this.config.idsParam, ids)], [], params)\n    } else {\n      return of([])\n    }\n  }\n\n  private loadAll(\n    chunkSize: number,\n    filters?: Filter[],\n    sorts?: Sort[],\n    params?: HttpParams\n  ): Observable<T[]> {\n    return this.findAllContinuable(TokenChunkRequest.first(filters, sorts, chunkSize), params).pipe(\n      expand((listing) => {\n        // the previous \"listing\" -> This is recursive\n        const nextRequest = TokenChunkRequest.nextIfAvailable(listing, filters, sorts)\n        return nextRequest // if there's \"nextContinuationToken\", we refetch or we EMPTY to complete the \"expand()\"\n          ? this.findAllContinuable(nextRequest, params)\n          : EMPTY\n      }),\n      map((listing) => listing.content),\n      reduce(\n        (agg, listing) => {\n          agg.push(...listing)\n          return agg\n        },\n        <T[]>[]\n      )\n    )\n  }\n}\n","import {\n  LocalListDataSource,\n  LocalDataSortFn,\n  LocalDataFilterFn,\n} from '../local/local-list-data-source'\nimport { IDataSource } from '../data-source'\nimport { DataSourceChangeEvent } from '../data-source-change-event'\n\nimport { BehaviorSubject, mergeWith, Observable, of } from 'rxjs'\nimport { catchError, combineLatestWith, filter, first, map, switchMap } from 'rxjs/operators'\n\nexport class CuratedDataSource<TEntity, TId = any> implements IDataSource<TEntity> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  protected readonly curatedData: LocalListDataSource<TEntity>\n  private readonly useCuratedData$ = new BehaviorSubject<boolean>(false)\n\n  private readonly ready$ = new BehaviorSubject<boolean>(false)\n\n  private readonly _dataChanged: Observable<DataSourceChangeEvent<TEntity>>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public constructor(\n    public readonly originalSource: IDataSource<TEntity>,\n    localSort?: LocalDataSortFn<TEntity>,\n    localFilter?: LocalDataFilterFn<TEntity>\n  ) {\n    this.curatedData = LocalListDataSource.empty(\n      (e) => originalSource.getId(e),\n      localSort,\n      localFilter\n    )\n    this._dataChanged = this.buildDataChanged()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public useCuratedData(data: TEntity[]): void {\n    this.curatedData.data = data\n    this.useCuratedData$.next(true)\n    this.ready$.next(true)\n  }\n\n  public useNonCuratedData(): void {\n    this.curatedData.data = []\n    this.useCuratedData$.next(false)\n    this.ready$.next(true)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * IDataSource API                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public get dataChanged(): Observable<DataSourceChangeEvent<TEntity, any>> {\n    return this._dataChanged\n  }\n\n  public findById(id: any): Observable<TEntity> {\n    return this.readyUseCurated$.pipe(\n      switchMap((useCurated) => this.curatedData.findById(id)),\n      catchError((err) => this.originalSource.findById(id))\n    )\n  }\n\n  public findByIds(ids: TId[]): Observable<TEntity[]> {\n    return this.readyUseCurated$.pipe(\n      switchMap((useCurated) => this.findByIdsFirstCuratedThenOriginal(ids))\n    )\n  }\n\n  public getId(entity: TEntity): TId {\n    return this.originalSource.getId(entity)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  protected get readyUseCurated$(): Observable<boolean> {\n    return this.ready$.pipe(\n      filter((ready) => !!ready),\n      switchMap((ready) => this.useCuratedData$),\n      first()\n    )\n  }\n\n  private buildDataChanged(): Observable<DataSourceChangeEvent<TEntity>> {\n    const genericEvents$ = this.originalSource.dataChanged.pipe(\n      combineLatestWith(this.useCuratedData$),\n      filter(([_, enabled]) => !enabled),\n      map(([event, _]) => event)\n    )\n    const curatedEvents$ = this.curatedData.dataChanged.pipe(\n      combineLatestWith(this.useCuratedData$),\n      filter(([_, enabled]) => enabled),\n      map(([event, _]) => event)\n    )\n    return genericEvents$.pipe(mergeWith(curatedEvents$))\n  }\n\n  private findByIdsFirstCuratedThenOriginal(ids: TId[]): Observable<TEntity[]> {\n    const desiredIds = new Set(ids)\n    const curated = this.findAvailableCuratedByIds(desiredIds)\n    const missingIds = new Set(ids)\n    curated.forEach((entity, id) => missingIds.delete(id))\n\n    const curatedEntities = Array.from(curated.values())\n\n    if (missingIds.size > 0) {\n      return this.originalSource\n        .findByIds(Array.from(missingIds))\n        .pipe(map((missing) => [...missing, ...curatedEntities]))\n    } else {\n      return of(curatedEntities)\n    }\n  }\n\n  private findAvailableCuratedByIds(desiredIds: Set<TId>): Map<TId, TEntity> {\n    const map = new Map<any, TEntity>()\n    this.curatedData.data\n      .filter((e) => desiredIds.has(this.getId(e)))\n      .forEach((e) => map.set(this.getId(e), e))\n    return map\n  }\n}\n","import { Observable } from 'rxjs'\nimport { switchMap } from 'rxjs/operators'\nimport { Sort } from '../../../data/sort'\nimport { Filter } from '../../../data/filters/filter'\nimport { LocalDataSortFn, LocalDataFilterFn } from '../local/local-list-data-source'\nimport { IListDataSource } from '../data-source'\nimport { CuratedDataSource } from './curated-data-source'\n\n/**\n * Wraps a standard IListDataSource, and provides the ability to overwrite\n * the returned data with custom curated data.\n *\n * You need to either invoke useCuratedData(..) or useNonCuratedData() to make data available.\n */\nexport class CuratedListDataSource<TEntity>\n  extends CuratedDataSource<TEntity>\n  implements IListDataSource<TEntity>\n{\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public constructor(\n    private listDataSource: IListDataSource<TEntity>,\n    localSort?: LocalDataSortFn<TEntity>,\n    localFilter?: LocalDataFilterFn<TEntity>\n  ) {\n    super(listDataSource, localSort, localFilter)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public findAllFiltered(filters?: Filter[], sorts?: Sort[]): Observable<Array<TEntity>> {\n    return this.readyUseCurated$.pipe(\n      switchMap((useCurated) => {\n        if (useCurated) {\n          return this.curatedData.findAllFiltered(filters, sorts)\n        } else {\n          return this.listDataSource.findAllFiltered(filters, sorts)\n        }\n      })\n    )\n  }\n}\n","import { Observable } from 'rxjs'\nimport { switchMap } from 'rxjs/operators'\nimport { Filter } from '../../../data/filters/filter'\nimport { LocalDataSortFn, LocalDataFilterFn } from '../local/local-list-data-source'\nimport { IPagedDataSource } from '../data-source'\nimport { CuratedDataSource } from './curated-data-source'\nimport { Page, Pageable } from '../../../data/page'\nimport { LocalPagedDataSource } from '../local/local-paged-data-source'\n/**\n * Wraps a standard IPagedDataSource, and provides the ability to overwrite\n * the returned data with custom curated data.\n *\n * You need to either invoke useCuratedData(..) or useNonCuratedData() to make data available.\n */\nexport class CuratedPagedDataSource<TEntity>\n  extends CuratedDataSource<TEntity>\n  implements IPagedDataSource<TEntity>\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly curatedDataPaged: LocalPagedDataSource<TEntity>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public constructor(\n    private pagedDataSource: IPagedDataSource<TEntity>,\n    localSort?: LocalDataSortFn<TEntity>,\n    localFilter?: LocalDataFilterFn<TEntity>\n  ) {\n    super(pagedDataSource, localSort, localFilter)\n    this.curatedDataPaged = LocalPagedDataSource.of(this.curatedData)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public findAllPaged(pageable: Pageable, filters?: Filter[]): Observable<Page<TEntity>> {\n    return this.readyUseCurated$.pipe(\n      switchMap((useCurated) => {\n        if (useCurated) {\n          return this.curatedDataPaged.findAllPaged(pageable, filters)\n        } else {\n          return this.pagedDataSource.findAllPaged(pageable, filters)\n        }\n      })\n    )\n  }\n}\n","import { Optional, Provider, SkipSelf } from '@angular/core'\nimport { ControlContainer } from '@angular/forms'\n\nexport function proxyControlContainer(container: ControlContainer): ControlContainer {\n  return container\n}\n\n/**\n * Allows to register templated forms (ngModels) with a parent form / control container.\n * @example\n * ```ts\n *   @Component({\n *    providers: buildFormIntegrationProviders(ElderIntervalInputComponent),\n *    viewProviders: [ViewProviders.ParentControlContainer]\n *   })\n * ```\n *\n */\nexport class ViewProviders {\n  /**\n   * This view provider plugs the parent ControlContainer (usually an FormControl)\n   * into this components context.\n   *\n   * All ngModels will register with the parent ControlContainer if available.\n   */\n  public static readonly ParentControlContainer: Provider = {\n    provide: ControlContainer,\n    useFactory: proxyControlContainer,\n    deps: [[new Optional(), new SkipSelf(), ControlContainer]],\n  }\n}\n","import { Observable } from 'rxjs'\nimport { startWith } from 'rxjs/operators'\n\n/**\n * Represents a control which is backed by entities (along  values).\n *\n * The core idea is that a control tracks an id as value, but it will\n * also side load the corresponding entity from a datasource.\n */\nexport interface IElderEntityValueAccessor<TEntity, TId, TValue> {\n  /**\n   * Gets or sets the entity\n   */\n  entity: TEntity\n\n  /**\n   * Gets or sets the entity id\n   */\n  entityId: TId\n\n  /**\n   * Emits when the entity id has changed.\n   */\n  entityIdChange: Observable<TId>\n\n  /**\n   * Emits when the entity has changed.\n   */\n  entityChange: Observable<TEntity>\n\n  /**\n   * Update the control value by the given entity\n   * and emit a value-updated event which simulates\n   * a user action.\n   * @param entity\n   */\n  updateValueByEntity(entity: TEntity): void\n\n  /**\n   * Convert an entity to a value for this control.\n   * @param entity\n   */\n  entityToValue(entity: TEntity): TValue\n}\n\nexport class ElderEntityValueAccessorUtil {\n  public static entity$<TEntity>(\n    vac: IElderEntityValueAccessor<TEntity, any, any>\n  ): Observable<TEntity> {\n    return vac.entityChange.pipe(startWith(vac.entity))\n  }\n  public static entityId$<TId>(vac: IElderEntityValueAccessor<any, TId, any>): Observable<TId> {\n    return vac.entityIdChange.pipe(startWith(vac.entityId))\n  }\n}\n\nexport function isElderEntityValueAccessor(\n  object: any\n): object is IElderEntityValueAccessor<any, any, any> {\n  if (!object) {\n    return false\n  }\n\n  const vac = object as IElderEntityValueAccessor<any, any, any>\n\n  return (\n    'entity' in vac && // This might be undefined\n    'entityId' in vac && // This might be undefined\n    vac.entityIdChange !== undefined &&\n    vac.entityChange !== undefined &&\n    vac.updateValueByEntity !== undefined &&\n    vac.entityToValue !== undefined\n  )\n}\n","import { Observable } from 'rxjs'\nimport { map, startWith } from 'rxjs/operators'\nimport { EntitiesChangeEvent } from './entities-change-event'\n\n/**\n * Represents a control which is backed by entities (along  values).\n *\n * The core idea is that a control tracks an id as value, but it will\n * also side load the corresponding entity from a datasource.\n */\nexport interface IElderMultiEntityValueAccessor<TEntity, TId, TValue> {\n  /**\n   * Gets or sets the entity\n   */\n  entities: TEntity[]\n\n  /**\n   * Gets or sets the entity id\n   */\n  entityIds: TId[]\n\n  readonly entitiesChangeEvent: Observable<EntitiesChangeEvent<TId, TEntity>>\n\n  /**\n   * Update the control value by the given entity\n   * and emit a value-updated event which simulates\n   * a user action.\n   * @param entity\n   */\n  updateValueByEntities(entity: TEntity[]): void\n\n  /**\n   * Convert an entity to a value for this control.\n   * @param entity\n   */\n  entityToValue(entity: TEntity): TValue\n}\n\nexport class ElderMultiEntityValueAccessorUtil {\n  public static entities$<TEntity>(\n    multiAccessor: IElderMultiEntityValueAccessor<TEntity, any, any>\n  ): Observable<TEntity[]> {\n    return multiAccessor.entitiesChangeEvent.pipe(\n      map((event) => event.entitiesAfter),\n      startWith(multiAccessor.entities)\n    )\n  }\n  public static entityIds$<TId>(\n    multiAccessor: IElderMultiEntityValueAccessor<any, TId, any>\n  ): Observable<TId[]> {\n    return multiAccessor.entitiesChangeEvent.pipe(\n      map((event) => event.idsAfter),\n      startWith(multiAccessor.entityIds)\n    )\n  }\n}\n\nexport function isElderMultiEntityValueAccessor(\n  object: any\n): object is IElderMultiEntityValueAccessor<any, any, any> {\n  if (!object) {\n    return false\n  }\n\n  const multiAccessor = object as IElderMultiEntityValueAccessor<any, any, any>\n\n  return (\n    'entities' in multiAccessor && // This might be undefined\n    'entityIds' in multiAccessor && // This might be undefined\n    multiAccessor.entitiesChangeEvent !== undefined &&\n    multiAccessor.updateValueByEntities !== undefined &&\n    multiAccessor.entityToValue !== undefined\n  )\n}\n","export class EntitiesChangeEvent<TId, TEntity> {\n  public readonly delta: EntityDelta<TId, TEntity>\n\n  public constructor(\n    public readonly idSetBefore: Set<TId>,\n    public readonly afterById: Map<TId, TEntity>,\n    public readonly userInitiated: boolean\n  ) {\n    this.delta = EntityDelta.buildDelta(idSetBefore, afterById)\n  }\n\n  public get idsBefore(): TId[] {\n    return Array.from(this.idSetBefore)\n  }\n\n  public get idsAfter(): TId[] {\n    return Array.from(this.afterById.keys())\n  }\n\n  public get entitiesAfter(): TEntity[] {\n    return Array.from(this.afterById.values()).filter((e) => e !== null)\n  }\n}\n\nexport class EntityDelta<TId, TEntity> {\n  public static buildDelta<TId, TEntity>(\n    idSetBefore: Set<TId>,\n    afterById: Map<TId, TEntity>\n  ): EntityDelta<TId, TEntity> {\n    const added = new Map<TId, TEntity>()\n    const removed = new Set<TId>()\n\n    for (const [id, entity] of afterById) {\n      if (!idSetBefore.has(id)) {\n        added.set(id, entity)\n      }\n    }\n\n    for (const id of idSetBefore) {\n      if (!afterById.has(id)) {\n        removed.add(id)\n      }\n    }\n    return new EntityDelta(added, removed)\n  }\n\n  private constructor(\n    public readonly added: Map<TId, TEntity>,\n    public readonly removed: Set<TId>\n  ) {}\n\n  public get addedIds(): TId[] {\n    return Array.from(this.added.keys())\n  }\n  public get removedIds(): TId[] {\n    return Array.from(this.removed.keys())\n  }\n  public get addedEntities(): TEntity[] {\n    return Array.from(this.added.values())\n  }\n}\n","export class ValueChangeEvent<T> {\n  public constructor(\n    public readonly valueBefore: T | undefined,\n    public readonly valueAfter: T | undefined,\n    public readonly userInitiated: boolean\n  ) {}\n}\n","import { ControlValueAccessor } from '@angular/forms'\nimport { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { Input, Output, Directive } from '@angular/core'\nimport { filter, map, skip } from 'rxjs/operators'\nimport { ValueChangeEvent } from './value-change-event'\n\n/**\n * Manages the control value event handlers\n */\n@Directive()\nexport abstract class ValueAccessorBase<T> implements ControlValueAccessor {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _value$ = new BehaviorSubject<T>(null)\n\n  private _changed: Array<(value: T) => void> = []\n  private _touched: Array<() => void> = []\n\n  private readonly _valueChangeEvent = new Subject<ValueChangeEvent<T>>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public readonly valueChangeEvent: Observable<ValueChangeEvent<T>> =\n    this._valueChangeEvent.asObservable()\n\n  /**\n   * Emits the updated value.\n   * In contrast to the valueChange, this event is only\n   * fired when a user action explicitly writes a value to the model.\n   */\n  @Output()\n  public readonly valueUpdated = this._valueChangeEvent.pipe(\n    filter((e) => e.userInitiated),\n    map((e) => e.valueAfter)\n  )\n\n  /**\n   * Get a value change event every time the value is changed.\n   */\n  @Output()\n  public valueChange = this._valueChangeEvent.pipe(map((e) => e.valueAfter))\n\n  /**\n   * Gets the current value as observable stream.\n   */\n  public get value$(): Observable<T> {\n    return this._value$\n  }\n\n  /**\n   * Get the current value snapshot bound to this control\n   */\n  public get value(): T {\n    return this._value$.getValue()\n  }\n\n  /**\n   * Set the current value bound to this control\n   * @param value\n   */\n  @Input()\n  public set value(value: T) {\n    this.writeValue(value)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public Api                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Update the model value.\n   * Sub Classes (Custom Controls) should use this method to change the value.\n   *\n   * @param value\n   */\n  public updateValue(value: T): void {\n    this.writeValueAndEmit(value, true)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * ControlValueAccessor implementation                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * @description\n   * Writes a new value to the element.\n   *\n   * This method is called by the forms API to write to the view when programmatic\n   * changes from model to view are requested.\n   *\n   * @param value The new value for the element\n   * @param ignoreDuplicate Duplicate values are not emitted if true (default)\n   */\n  public writeValue(value: T): void {\n    if (this.valuesEquals(this.value, value)) {\n      return // Ignore duplicate value\n    }\n    this.writeValueInternal(value)\n  }\n\n  public registerOnChange(fn: (value: T) => void) {\n    this._changed.push(fn)\n  }\n\n  public registerOnTouched(fn: () => void) {\n    this._touched.push(fn)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * API for subclasses                                                      *\n   *                                                                         *\n   **************************************************************************/\n\n  protected writeValueInternal(value: T): void {\n    this.writeValueAndEmit(value, false)\n  }\n\n  /**\n   * Checks if two values are equal to reduce change events in case nothing has changed.\n   * Subclasses should overwrite this method, when the value is not a primitive object and reference equality is not suitable.\n   *\n   * The default implementation checks only reference equality for objects.\n   *\n   * @param a\n   * @param b\n   */\n  protected valuesEquals(a: T, b: T): boolean {\n    return a === b\n  }\n\n  protected onValueChanged(value: T): void {\n    this.emitOnChanged(value)\n    this.emitOnTouch()\n  }\n\n  protected emitOnTouch(): void {\n    this._touched.forEach((f) => f())\n  }\n\n  protected emitOnChanged(value: T): void {\n    this._changed.forEach((f) => f(value))\n  }\n\n  protected abstract writeToControl(value: T): void\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private writeValueAndEmit(value: T, userInitiated: boolean): void {\n    const currentValue = this._value$.value\n    this._value$.next(value)\n    this._valueChangeEvent.next(new ValueChangeEvent<T>(currentValue, value, userInitiated))\n    this.writeToControl(value)\n    this.onValueChanged(value)\n  }\n}\n","import { ValueAccessorBase } from './value-accessor-base'\nimport {\n  AbstractControl,\n  UntypedFormGroup,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  NgForm,\n  ValidationErrors,\n  Validator,\n} from '@angular/forms'\nimport { forwardRef, Input, OnDestroy, Provider, ViewChild, Directive } from '@angular/core'\nimport { Subscription } from 'rxjs'\n\nexport function buildFormIntegrationProviders(component: any): Provider[] {\n  return [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => component),\n      multi: true,\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => component),\n      multi: true,\n    },\n  ]\n}\n\n/**\n * Provides the ability to expose a (sub) form as a control with validation support.\n * What this means is that a sub form consisting of multiple controls can be nested in a parent form\n * and propagate its validation state up to it.\n *\n * How to use:\n *\n * 1. The sub form must extend from this class.\n * 2. The sub form must be wrapped in a html form and expose the #form variable: <form #form=\"ngForm\" >\n * 3. Must register the NG_VALUE_ACCESSOR +  NG_VALIDATORS providers. (use buildFormIntegrationProviders(MyComponent)\n *\n * @deprecated Deprecated in favor of: viewProviders: [ViewProviders.ParentControlContainer]\n */\n@Directive()\nexport abstract class TemplateCompositeControl<T>\n  extends ValueAccessorBase<T>\n  implements Validator, OnDestroy\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _sub: Subscription | null\n\n  private _group: UntypedFormGroup\n  private _disabled = false\n  private _validatorChanged: Array<() => void> = []\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  ngOnDestroy(): void {\n    this.unsubscribeAll()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * ControlValueAccessor implementation                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  public validate(c: AbstractControl): ValidationErrors | any {\n    if (this.group && !this.group.valid) {\n      return {\n        composite: 'composite-error',\n      }\n    }\n    return null\n  }\n\n  public registerOnValidatorChange(fn: () => void): void {\n    this._validatorChanged.push(fn)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Disabled support                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set disabled(isDisabled: boolean) {\n    this.setDisabledState(isDisabled)\n    this._disabled = isDisabled\n  }\n\n  public get disabled(): boolean {\n    return this._disabled\n  }\n\n  public setDisabledState(isDisabled: boolean): void {\n    if (this.group) {\n      Object.keys(this.group.controls).forEach((key) => {\n        const ctrl = this.group.get(key)\n        if (ctrl) {\n          if (isDisabled) {\n            ctrl.disable()\n          } else {\n            ctrl.enable()\n          }\n        }\n      })\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * API for subclasses                                                      *\n   *                                                                         *\n   **************************************************************************/\n\n  @ViewChild('form')\n  public set ngForm(form: NgForm) {\n    if (form) {\n      this.group = form.form\n    }\n  }\n\n  protected set group(group: UntypedFormGroup) {\n    this._group = group\n\n    this.unsubscribeAll()\n\n    this._sub = this._group.valueChanges.subscribe((newValue) => {\n      this.onValueChanged(this.value)\n    })\n  }\n\n  protected get group(): UntypedFormGroup {\n    return this._group\n  }\n\n  protected override onValueChanged(value: T): void {\n    super.onValueChanged(value)\n    this.emitValidatorChange()\n  }\n\n  protected emitValidatorChange(): void {\n    this._validatorChanged.forEach((f) => f())\n  }\n\n  protected writeToControl(value: T): void {\n    // NOP - not necessary when using template binding\n  }\n\n  private unsubscribeAll(): void {\n    if (this._sub) {\n      this._sub.unsubscribe()\n      this._sub = null\n    }\n  }\n}\n","import { Input, Directive } from '@angular/core'\nimport { AbstractControl, ValidationErrors, Validator } from '@angular/forms'\nimport { ValueAccessorBase } from './value-accessor-base'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { ThemePalette } from '@angular/material/core'\nimport { FloatLabelType, MatFormFieldAppearance } from '@angular/material/form-field'\n\n/**\n * @deprecated Avoid combining form-field & custom controls.\n * Instead implement a custom control based on mat-control.\n *\n * Use ElderFromFieldBase to provide a wrapper component for common styling.\n */\n@Directive()\nexport abstract class FormFieldBaseComponent<T> extends ValueAccessorBase<T> implements Validator {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Control name.\n   */\n  @Input()\n  public name: string\n\n  @Input()\n  public label: string\n\n  @Input()\n  public appearance: MatFormFieldAppearance\n\n  /**\n   * Whether the label should always float ('always'), never float ('never')\n   * or float as the user types ('auto'). Defaults to 'auto'.\n   */\n  @Input()\n  public floatLabel: FloatLabelType\n\n  @Input()\n  public color: ThemePalette\n\n  @Input()\n  public placeholder: string\n\n  @Input()\n  public hint: string\n\n  private _showHint = false\n\n  /**\n   * Icon displayed as form field prefix.\n   */\n  @Input()\n  public icon: string\n\n  @Input()\n  public showIcon = true\n\n  private _readonly = false\n\n  private _disabled = false\n\n  private _required = false\n\n  /**\n   * Minimum number allowed.\n   */\n  @Input()\n  public min: string | number\n\n  /**\n   * Maximum number allowed.\n   */\n  @Input()\n  public max: string | number\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get isLocked(): boolean {\n    return this._disabled || this._readonly\n  }\n\n  public get showHint(): boolean {\n    return this._showHint\n  }\n\n  @Input()\n  public set showHint(value: BooleanInput) {\n    this._showHint = coerceBooleanProperty(value)\n  }\n  public get required(): boolean {\n    return this._required\n  }\n\n  @Input()\n  public set required(value: BooleanInput) {\n    this._required = coerceBooleanProperty(value)\n  }\n  public get disabled(): boolean {\n    return this._disabled\n  }\n\n  @Input()\n  public set disabled(value: BooleanInput) {\n    this._disabled = coerceBooleanProperty(value)\n  }\n\n  public get readonly(): boolean {\n    return this._readonly\n  }\n\n  /**\n   * If true, control will not show selection dialog.\n   */\n  @Input()\n  public set readonly(value: BooleanInput) {\n    this._readonly = coerceBooleanProperty(value)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * ControlValueAccessor API                                                *\n   *                                                                         *\n   **************************************************************************/\n\n  protected writeToControl(value: T): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Validator API                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  public validate(c: AbstractControl): ValidationErrors | null {\n    let result = null\n\n    if (this._required && !this.value) {\n      result = {\n        required: { valid: false },\n      }\n    }\n\n    return result\n  }\n}\n","import { MatFormFieldControl } from '@angular/material/form-field'\nimport { ValueAccessorBase } from './value-accessor-base'\nimport { mergeWith, Observable, Subject } from 'rxjs'\nimport { NgControl } from '@angular/forms'\nimport { map } from 'rxjs/operators'\nimport {\n  computed,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  HostBinding,\n  inject,\n  Input,\n  model,\n  signal,\n  untracked,\n} from '@angular/core'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { FocusMonitor } from '@angular/cdk/a11y'\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\n\n/**\n * Base for custom material form field controls.\n * https://material.angular.io/guide/creating-a-custom-form-field-control\n *\n * Implementors must provide the MatFormFieldControl:\n * providers: [{provide: MatFormFieldControl, useExisting: MyCoolInput}]\n */\n@Directive()\nexport abstract class ElderFormFieldControlBase<T>\n  extends ValueAccessorBase<T>\n  implements MatFormFieldControl<T>\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private static nextId = 0\n\n  private readonly hostRef = inject(ElementRef)\n  private readonly _focusMonitor = inject(FocusMonitor)\n  private readonly _destroyRef = inject(DestroyRef)\n  public readonly ngControl = inject(NgControl, {\n    optional: true,\n    self: true,\n  })\n\n  public readonly placeholderS = model<string>(undefined, {\n    alias: 'placeholder',\n  })\n\n  public readonly disabledS = signal<boolean>(false)\n  public readonly requiredS = signal<boolean>(false)\n  public readonly readonlyS = signal<boolean>(false)\n  public readonly isLockedS = computed<boolean>(() => {\n    const dis = this.disabledS()\n    const readonly = this.readonlyS()\n    return dis || readonly\n  })\n\n  private _focused = false\n  private readonly stateChangePusher$ = new Subject<void>()\n\n  @HostBinding() public readonly id: string\n\n  public controlType: string\n  public controlName: string\n\n  // TODO ...\n  readonly autofilled: boolean\n  readonly userAriaDescribedBy: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(controlType: string) {\n    super()\n    this.controlType = controlType\n    this.id = `elder-control-${this.controlType}-${ElderFormFieldControlBase.nextId++}`\n    if (this.ngControl) {\n      this.ngControl.valueAccessor = this\n      this.controlName = this.ngControl.name + ''\n    } else {\n      this.controlName = this.id + ''\n    }\n    this.initFocusMonitor()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  private initFocusMonitor(): void {\n    this._focusMonitor\n      .monitor(this.hostRef, true)\n      .pipe(takeUntilDestroyed(this._destroyRef))\n      .subscribe((focusOrigin) => {\n        if (focusOrigin) {\n          this.onFocusInternal()\n        } else {\n          this.onBlurInternal()\n        }\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get placeholder(): string {\n    return untracked(this.placeholderS)\n  }\n\n  public set placeholder(value: string) {\n    this.placeholderS.set(value)\n  }\n\n  @Input()\n  public set required(value: BooleanInput) {\n    const newValue = coerceBooleanProperty(value)\n    if (this.required !== newValue) {\n      this.requiredS.set(newValue)\n      this.emitStateChange()\n    }\n  }\n\n  public get required(): boolean {\n    return untracked(this.requiredS)\n  }\n\n  @Input()\n  public set disabled(value: BooleanInput) {\n    const newValue = coerceBooleanProperty(value)\n    if (this.disabled !== newValue) {\n      this.disabledS.set(newValue)\n      this.emitStateChange()\n    }\n  }\n\n  public get disabled(): boolean {\n    return untracked(this.disabledS)\n  }\n\n  @Input()\n  public set readonly(value: BooleanInput) {\n    const newValue = coerceBooleanProperty(value)\n    if (this.readonly !== newValue) {\n      this.readonlyS.set(newValue)\n      this.emitStateChange()\n    }\n  }\n\n  public get readonly(): boolean {\n    return untracked(this.readonlyS)\n  }\n\n  public get isLocked(): boolean {\n    return this.disabled || this.readonly\n  }\n\n  public get stateChanges(): Observable<void> {\n    return this.value$.pipe(\n      map((x) => <any>x),\n      mergeWith(this.stateChangePusher$)\n    )\n  }\n\n  public get errorState(): boolean {\n    return this.ngControl?.invalid && this.ngControl?.dirty\n  }\n\n  public get empty(): boolean {\n    return this.value === undefined || this.value === null || <any>this.value === ''\n  }\n\n  public get shouldLabelFloat(): boolean {\n    return !this.empty || this._focused\n  }\n\n  public get focused(): boolean {\n    return this._focused\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onContainerClick(event: MouseEvent): void {\n    this.focus()\n  }\n\n  public setDescribedByIds(ids: string[]): void {\n    if (ids.length) {\n      // this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));\n    } else {\n      // this._elementRef.nativeElement.removeAttribute('aria-describedby');\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Abstract API                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Focus this control.\n   * @param options\n   */\n  public abstract focus(options?: FocusOptions): void\n\n  /**\n   * Blur this control.\n   */\n  public abstract blur(): void\n\n  /***************************************************************************\n   *                                                                         *\n   * Internal API                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  protected emitStateChange(): void {\n    this.stateChangePusher$.next()\n  }\n\n  protected writeToControl(value: T): void {}\n\n  protected onFocusInternal(): void {\n    if (!this.disabled) {\n      this._focused = true\n      this.emitStateChange()\n    }\n  }\n\n  protected onBlurInternal(): void {\n    this._focused = false\n    if (!this.disabled) {\n      // this._onTouched();\n      // this._changeDetectorRef.markForCheck();\n      this.emitStateChange()\n    }\n  }\n}\n","import { QueryList, ViewChildren, Directive } from '@angular/core'\nimport { FormFieldBaseComponent } from './form-field-base.component'\nimport { AbstractControl, NgModel, ValidationErrors } from '@angular/forms'\n\n/**\n * Base Component which uses 0..n ngModels for validation.\n */\n@Directive()\nexport abstract class MultiModelBaseComponent<T> extends FormFieldBaseComponent<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @ViewChildren(NgModel)\n  public models: QueryList<NgModel>\n\n  /***************************************************************************\n   *                                                                         *\n   * Validator API                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  public override validate(c: AbstractControl): ValidationErrors | null {\n    let result = {}\n    if (this.models) {\n      this.models.forEach((model) => {\n        result = Object.assign(result, model.errors)\n      })\n    }\n\n    return result\n  }\n}\n","import { ContentChild, Directive, OnInit, ViewChild } from '@angular/core'\nimport { BehaviorSubject, Observable, switchMap } from 'rxjs'\nimport { MatFormField, MatFormFieldControl } from '@angular/material/form-field'\nimport { filter, map, startWith } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\nexport type ElderApplyControlFn<TControl> = (ctrl: TControl) => void\n\n@Directive()\nexport abstract class ElderFromFieldBase<TValue, TControl extends MatFormFieldControl<TValue>>\n  implements OnInit\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  protected readonly _logger = LoggerFactory.getLogger(this.constructor.name)\n\n  protected readonly formFieldControl$ = new BehaviorSubject<TControl>(null)\n\n  @ViewChild(MatFormField, { static: true })\n  public matFormField: MatFormField\n\n  private readonly _value$: Observable<TValue>\n\n  private readonly _controlActionQueue: ElderApplyControlFn<TControl>[] = []\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor() {\n    this._value$ = this.formFieldControl$.pipe(\n      filter((ctrl) => !!ctrl),\n      switchMap((ctrl) => this.controlValue$(ctrl))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    const control = this.formFieldControl$.getValue()\n    this.matFormField._control = control\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @ContentChild(MatFormFieldControl, { static: true })\n  public set formFieldControl(ctrl: TControl) {\n    this.formFieldControl$.next(ctrl)\n    if (ctrl) {\n      this.executeQueuedActions(ctrl)\n    }\n  }\n\n  public get formFieldControl(): TControl {\n    return this.formFieldControl$.getValue()\n  }\n\n  public get value$(): Observable<TValue> {\n    return this._value$\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public applyToControl(applyFn: (ctrl: TControl) => void) {\n    const ctrl = this.formFieldControl\n    if (ctrl) {\n      applyFn(ctrl)\n    } else {\n      this._controlActionQueue.push(applyFn)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private executeQueuedActions(ctrl: TControl): void {\n    try {\n      this._controlActionQueue.forEach((fn) => fn(ctrl))\n      this._controlActionQueue.length = 0 // Clear Array\n    } catch (err) {\n      this._logger.error('Applying function to control failed with error. Control: ', ctrl)\n      throw err\n    }\n  }\n\n  private controlValue$(ctrl: TControl): Observable<TValue> {\n    return ctrl.stateChanges.pipe(\n      map(() => ctrl.value),\n      startWith(ctrl.value)\n    )\n  }\n}\n","import { ElderFromFieldBase } from './elder-from-field-base'\nimport { Directive } from '@angular/core'\nimport { Observable, switchMap } from 'rxjs'\nimport { filter, map } from 'rxjs/operators'\nimport {\n  ElderEntityValueAccessorUtil,\n  IElderEntityValueAccessor,\n  isElderEntityValueAccessor,\n} from './elder-entity-value-accessor'\nimport { MatFormFieldControl } from '@angular/material/form-field'\n\n@Directive()\nexport abstract class ElderFromFieldEntityBase<\n  TEntity,\n  TId,\n  TControl extends MatFormFieldControl<TEntity | TId>,\n> extends ElderFromFieldBase<TEntity | TId, TControl> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _entityAccessor$: Observable<\n    IElderEntityValueAccessor<TEntity, TId, TEntity | TId>\n  >\n  private readonly _entity$: Observable<TEntity>\n  private readonly _entityId$: Observable<TId>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor() {\n    super()\n\n    this._entityAccessor$ = this.formFieldControl$.pipe(\n      filter((ctrl) => !!ctrl),\n      filter((ctrl) => isElderEntityValueAccessor(ctrl)),\n      map((ctrl) => <IElderEntityValueAccessor<TEntity, TId, TEntity | TId>>(<any>ctrl))\n    )\n\n    this._entityId$ = this._entityAccessor$.pipe(\n      switchMap((evac) => ElderEntityValueAccessorUtil.entityId$(evac))\n    )\n\n    this._entity$ = this._entityAccessor$.pipe(\n      switchMap((evac) => ElderEntityValueAccessorUtil.entity$(evac))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get entityAccessor$(): Observable<IElderEntityValueAccessor<TEntity, TId, TEntity | TId>> {\n    return this._entityAccessor$\n  }\n\n  public get entity$(): Observable<TEntity> {\n    return this._entity$\n  }\n\n  public get entityId$(): Observable<TId> {\n    return this._entityId$\n  }\n}\n","import { ElderFromFieldBase } from './elder-from-field-base'\nimport { Directive } from '@angular/core'\nimport { Observable, switchMap } from 'rxjs'\nimport { filter, map } from 'rxjs/operators'\nimport { MatFormFieldControl } from '@angular/material/form-field'\nimport {\n  ElderMultiEntityValueAccessorUtil,\n  IElderMultiEntityValueAccessor,\n  isElderMultiEntityValueAccessor,\n} from './elder-multi-entity-value-accessor'\n\n@Directive()\nexport abstract class ElderFromFieldMultiEntityBase<\n  TEntity,\n  TId,\n  TValue,\n  TControl extends MatFormFieldControl<TValue[]>,\n> extends ElderFromFieldBase<TValue[], TControl> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _entitiesAccessor$: Observable<\n    IElderMultiEntityValueAccessor<TEntity, TId, TValue>\n  >\n  private readonly _entities$: Observable<TEntity[]>\n  private readonly _entityIds$: Observable<TId[]>\n\n  private readonly _entitiesUpdated$: Observable<TEntity[]>\n  private readonly _entityIdsUpdated$: Observable<TId[]>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor() {\n    super()\n\n    this._entitiesAccessor$ = this.formFieldControl$.pipe(\n      filter((ctrl) => !!ctrl),\n      filter((ctrl) => isElderMultiEntityValueAccessor(ctrl)),\n      map((ctrl) => <IElderMultiEntityValueAccessor<TEntity, TId, TValue>>(<any>ctrl))\n    )\n\n    this._entityIds$ = this._entitiesAccessor$.pipe(\n      switchMap((evac) => ElderMultiEntityValueAccessorUtil.entityIds$(evac))\n    )\n\n    this._entities$ = this._entitiesAccessor$.pipe(\n      switchMap((evac) => ElderMultiEntityValueAccessorUtil.entities$(evac))\n    )\n\n    const userUpdatedEvents = this._entitiesAccessor$.pipe(\n      switchMap((eacc) => eacc.entitiesChangeEvent),\n      filter((event) => event.userInitiated)\n    )\n\n    this._entitiesUpdated$ = userUpdatedEvents.pipe(map((event) => event.entitiesAfter))\n    this._entityIdsUpdated$ = userUpdatedEvents.pipe(map((event) => event.idsAfter))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get entitiesAccessor$(): Observable<IElderMultiEntityValueAccessor<TEntity, TId, TValue>> {\n    return this._entitiesAccessor$\n  }\n\n  public get entities$(): Observable<TEntity[]> {\n    return this._entities$\n  }\n\n  public get entityIds$(): Observable<TId[]> {\n    return this._entityIds$\n  }\n\n  public get entitiesUpdated$(): Observable<TEntity[]> {\n    return this._entitiesUpdated$\n  }\n\n  public get entityIdsUpdated$(): Observable<TId[]> {\n    return this._entityIdsUpdated$\n  }\n}\n","/**\n * Utility class for handling query params.\n */\nexport class UrlQueryParams {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Internal data context holding all query params.\n   */\n  private readonly _searchParams: URLSearchParams\n\n  /***************************************************************************\n   *                                                                         *\n   * Static                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates a new empty UrlQueryParams object.\n   */\n  public static empty(): UrlQueryParams {\n    return new UrlQueryParams()\n  }\n\n  /**\n   * Parses the given string into a UrlQueryParams object.\n   */\n  public static parse(queryParamsStr: string): UrlQueryParams {\n    return new UrlQueryParams(queryParamsStr)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public constructor(\n    init?: string[][] | Record<string, string> | string | URLSearchParams | UrlQueryParams\n  ) {\n    if (init instanceof UrlQueryParams) {\n      this._searchParams = new URLSearchParams(init.toString())\n    } else {\n      this._searchParams = new URLSearchParams(init)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Appends a new query parameter with the given key / value,\n   * regardless if the same parameter is already present.\n   */\n  public append(key: string, value: string): this {\n    this._searchParams.append(key, value)\n    return this\n  }\n\n  /**\n   * Appends each of the given parameters as new query parameter,\n   * regardless if the same parameter is already present.\n   */\n  public appendAll(params: Map<string, string>): this {\n    params.forEach((value, key) => this.append(key, value))\n    return this\n  }\n\n  /**\n   * Removes the given query parameter if present.\n   */\n  public remove(key: string): this {\n    this._searchParams.delete(key)\n    return this\n  }\n\n  /**\n   * Removes all given query parameters if present.\n   */\n  public removeAll(keys: string[]): this {\n    keys.forEach((key) => this.remove(key))\n    return this\n  }\n\n  /**\n   * Updates the given query parameter with the given new value.\n   * If multiple with the same key exists, they will be removed.\n   * If the key does not exist, the query param will be added.\n   */\n  public set(key: string, value: string): this {\n    this._searchParams.set(key, value)\n    return this\n  }\n\n  /**\n   * Updates each parameter with the given value.\n   * Each entry will be added using the set(key, value) logic.\n   */\n  public setAll(params: Map<string, string>): this {\n    params.forEach((value, key) => this.set(key, value))\n    return this\n  }\n\n  /**\n   * Returns true if a query parameter with the given key exists.\n   */\n  public has(key: string): boolean {\n    return this._searchParams.has(key)\n  }\n\n  /**\n   * Returns the first value of the associated query param.\n   */\n  public get(key: string): string {\n    return this._searchParams.get(key)\n  }\n\n  /**\n   * Returns all values of the associated query params.\n   */\n  public getAllOf(key: string): string[] {\n    return this._searchParams.getAll(key)\n  }\n\n  /**\n   * Returns a map with all key-value pairs.\n   */\n  public getAll(): Map<string, string> {\n    const paramsMap = new Map<string, string>()\n    this._searchParams.forEach((value, key) => paramsMap.set(key, value))\n    return paramsMap\n  }\n\n  /**\n   * Returns true only if there are any query parameters present.\n   */\n  public hasParams(): boolean {\n    return !this.isEmpty()\n  }\n\n  /**\n   * Return true only if there are no query parameters present.\n   */\n  public isEmpty(): boolean {\n    return this.getAll().size === 0\n  }\n\n  /**\n   * Returns a string containing all query parameters in URL conform fashion.\n   * (Returns an empty string if no query parameters have been set).\n   */\n  public toString(): string {\n    return this._searchParams.toString()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","/**\n * Supports parsing and building (altering) URLs.\n *\n * Base structure of an URL:\n * https://username:password@site.com:80/some/path?q=val#hash\n */\nimport { UrlQueryParams } from '../url/url-query-params'\n\nexport class UrlBuilder {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  // The protocol scheme of the URL, including the final ':'.\n  private _protocol: string\n\n  // The domain of the URL. E.g. www.google.ch\n  private _hostname: string\n\n  // The port number of the URL.\n  private _port: string\n\n  // A string containing an initial '/' followed by the path of the URL, not including the query string or fragment.\n  private _path: string\n\n  // Helper class managing query params.\n  private _queryParams: UrlQueryParams = UrlQueryParams.empty()\n\n  // Hash string containing a '#' followed by the fragment identifier of the URL.\n  private _hash: string\n\n  // The username specified before the domain name.\n  private _username: string\n\n  // The password specified before the domain name.\n  private _password: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Static                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Crates a new empty builder instance.\n   */\n  public static start(): UrlBuilder {\n    return new UrlBuilder()\n  }\n\n  /**\n   * Parses an existing url and creates a new builder from it.\n   */\n  public static parse(url: string): UrlBuilder {\n    return new UrlBuilder(url)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  private constructor(url?: string) {\n    if (url) {\n      this.parse(url)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Returns the protocol scheme of the URL, including the final ':'.\n   */\n  public get protocol(): string {\n    return this._protocol\n  }\n\n  /**\n   * Returns the domain of the URL. E.g. www.google.ch\n   */\n  public get hostname(): string {\n    return this._hostname\n  }\n\n  /**\n   * Returns the port number of the URL.\n   */\n  public get port(): string {\n    return this._port\n  }\n\n  /**\n   * Returns the domain (that is the hostname) followed by (if a port was specified) a ':' and the port of the URL.\n   * E.g. www.google.ch or www.google.ch:80\n   */\n  public get host(): string {\n    return this.buildHost()\n  }\n\n  /**\n   * Returns a string containing an initial '/' followed by the path of the URL, not including the query string or fragment.\n   */\n  public get path(): string {\n    return this._path\n  }\n\n  /**\n   * Returns a string indicating the URL's parameter string;\n   * If any parameters are provided, this string includes all of them, beginning with the leading ? character.\n   */\n  public get queryString(): string {\n    return this._queryParams.toString()\n  }\n\n  /**\n   * Returns a string containing a '#' followed by the fragment identifier of the URL.\n   */\n  public get hash(): string {\n    return this._hash\n  }\n\n  /**\n   * Returns the username specified before the domain name.\n   */\n  public get username(): string {\n    return this._username\n  }\n\n  /**\n   * Returns the password specified before the domain name.\n   */\n  public get password(): string {\n    return this._password\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Sets the protocol scheme of the URL.\n   * @param protocol with or without ':' at the end.\n   */\n  public withProtocol(protocol: string): UrlBuilder {\n    if (!protocol.endsWith(':')) {\n      protocol = protocol + ':'\n    }\n\n    this._protocol = protocol\n    return this\n  }\n\n  /**\n   * Sets the hostname of the URL.\n   * @param hostname\n   */\n  public withHostname(hostname: string): UrlBuilder {\n    this._hostname = hostname\n    return this\n  }\n\n  /**\n   * Sets the port of the URL.\n   * @param port\n   */\n  public withPort(port: string): UrlBuilder {\n    this._port = port\n    return this\n  }\n\n  /**\n   * Sets the path of the URL.\n   * @param path with or without starting '/'.\n   */\n  public withPath(path: string): UrlBuilder {\n    if (!path.startsWith('/')) {\n      path = '/' + path\n    }\n\n    this._path = path\n    return this\n  }\n\n  /**\n   * Sets the hash of the URL.\n   * @param hash with or without starting '#'\n   */\n  public withHash(hash: string): UrlBuilder {\n    if (!hash.startsWith('#')) {\n      hash = '#' + hash\n    }\n\n    this._hash = hash\n    return this\n  }\n\n  /**\n   * Sets the username of the URL.\n   * @param username\n   */\n  public withUsername(username: string): UrlBuilder {\n    this._username = username\n    return this\n  }\n\n  /**\n   * Sets the password of the URL.\n   * @param password\n   */\n  public withPassword(password: string): UrlBuilder {\n    this._password = password\n    return this\n  }\n\n  /**\n   * Appends a new query parameter with the given key / value,\n   * regardless if the same parameter is already present.\n   */\n  public appendParam(key: string, value: string): this {\n    this._queryParams.append(key, value)\n    return this\n  }\n\n  /**\n   * Removes the given query parameter if present.\n   */\n  public removeParam(key: string): this {\n    this._queryParams.remove(key)\n    return this\n  }\n\n  /**\n   * Updates the given query parameter with the given new value.\n   * If multiple with the same key exists, they will be removed.\n   * If the key does not exist, the query param will be added.\n   */\n  public setParam(key: string, value: string): this {\n    this._queryParams.set(key, value)\n    return this\n  }\n\n  /**\n   * Returns true if a query parameter with the given key exists.\n   */\n  public hasParam(key: string): boolean {\n    return this._queryParams.has(key)\n  }\n\n  /**\n   * Returns the first value of the associated query param.\n   */\n  public getParam(key: string): string {\n    return this._queryParams.get(key)\n  }\n\n  /**\n   * Returns all values of the associated query params.\n   */\n  public getParams(key: string): string[] {\n    return this._queryParams.getAllOf(key)\n  }\n\n  /**\n   * Returns true only if there are any query parameters present.\n   */\n  public hasParams(): boolean {\n    return this._queryParams.hasParams()\n  }\n\n  /**\n   * Materializes the whole URL into a string.\n   */\n  public build(): string {\n    return this.buildUrlString()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private parse(urlString: string): void {\n    const url = new URL(urlString)\n\n    this._protocol = url.protocol\n    this._hostname = url.hostname\n    this._port = url.port\n    this._path = url.pathname\n\n    this._queryParams = new UrlQueryParams(url.searchParams)\n\n    this._hash = url.hash\n\n    this._username = url.username\n    this._password = url.password\n  }\n\n  private buildUrlString(): string {\n    let url = ''\n\n    if (this._protocol) {\n      url = url + this._protocol + '//'\n    }\n\n    if (this._username) {\n      url = url + this._username\n      if (this._password) {\n        url = url + ':' + this._password\n      }\n      url = url + '@'\n    }\n\n    url = url + this.buildHost()\n\n    if (this._path && this._path !== '/') {\n      url = url + this._path\n    }\n\n    const searchParamsString = this._queryParams.toString()\n    if (searchParamsString) {\n      url = url + '?' + searchParamsString\n    }\n\n    if (this._hash) {\n      url = url + this._hash\n    }\n\n    return url\n  }\n\n  private buildHost(): string {\n    let host = ''\n\n    if (this._hostname) {\n      host = host + this._hostname\n    }\n\n    if (this._port) {\n      host = host + ':' + this._port\n    }\n\n    return host\n  }\n}\n","/**\n * Utility to generate a Universally unique identifier (UUID).\n * Generates a pseudo random UUID\n *\n * @see This code bases on https://stackoverflow.com/questions/26501688/a-typescript-guid-class\n * @see strongUuid4 based on https://stackoverflow.com/a/2117523/12480164\n * @see https://en.wikipedia.org/wiki/Universally_unique_identifier\n */\nexport class UuidUtil {\n  /**\n   * Generates a pseudo random UUID based on Math.random\n   */\n  public static weakUuid4(): string {\n    const uuidTemplate = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n    return uuidTemplate.replace(/[xy]/g, (c) => {\n      const r = (Math.random() * 16) | 0,\n        v = c === 'x' ? r : (r & 0x3) | 0x8\n      return v.toString(16)\n    })\n  }\n\n  /**\n   * Generates a pseudo random UUID based on Crypto module\n   */\n  public static strongUuid4(): string {\n    const uuid = `${1e7}-${1e3}-${4e3}-${8e3}-${1e11}`.replace(/[018]/g, (c) =>\n      (+c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (+c / 4)))).toString(16)\n    )\n    return uuid\n  }\n}\n","export class PropertyPathUtil {\n  /**\n   * Resolve the value of the given object under the given path\n   * @param object\n   * @param path A dot path like: test.name\n   */\n  public static resolveValue(object: any, path: string): any {\n    if (path && path.length > 0) {\n      const subPaths = path.split('.')\n      subPaths.shift()\n      let current = object\n\n      while (current && subPaths.length > 0) {\n        const sub = subPaths.shift()\n        if (sub) {\n          current = current[sub as string]\n        } else {\n          break\n        }\n      }\n      return current\n    } else {\n      return object\n    }\n  }\n}\n","export class NextNumberUtil {\n  /***************************************************************************\n   *                                                                         *\n   * Public Methods                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Identifies the next lexicographically number of the given number string.\n   *\n   * <p>\n   *     '1'    ->  '2'\n   *     '1.1'  ->  '1.2'\n   *     '1.01' ->  '1.02'\n   *     '1.1a' ->  '1.1b'\n   *     '1.01a'->  '1.01b'\n   *\n   * @param numberStr\n   * @returns\n   */\n  public static nextNumber(numberStr: string): string {\n    let nextNumber = null\n\n    const numberPartsPattern = /\\d+|[a-zA-Z]+/g\n    const numberParts = numberStr.match(numberPartsPattern)\n\n    let nextNumberPart = null\n    let i = numberParts.length\n\n    while (nextNumberPart == null && i > 0) {\n      i--\n      nextNumberPart = this.nextPartialNumber(numberParts[i])\n    }\n\n    if (nextNumberPart != null) {\n      const partToReplace = numberParts[i]\n      const startIndex = numberStr.lastIndexOf(partToReplace)\n      const length = partToReplace.length\n      nextNumber =\n        numberStr.substr(0, startIndex) + nextNumberPart + numberStr.substr(startIndex + length)\n    }\n\n    return nextNumber != null ? nextNumber : '9999'\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Tries to lexicographically increase the given string.\n   *\n   * <p>\n   *     'abc' -> 'abd'\n   *     'abz' -> 'ac'\n   *     '123' -> '124'\n   *     '01'  -> '02'\n   *\n   * @param numberStr\n   * @returns\n   */\n  private static nextPartialNumber(numberStr: string): string {\n    let result = null\n    const number = +numberStr\n\n    // number only contains digits\n    if (!isNaN(number)) {\n      const origLength = numberStr.length\n      let nextNumber = (number + 1).toString()\n\n      // add leading zeros until new next number string\n      // is same length as orig number string\n      let zerosToAdd = origLength - nextNumber.length\n      while (zerosToAdd > 0) {\n        zerosToAdd--\n        nextNumber = '0' + nextNumber\n      }\n\n      result = nextNumber\n    } else {\n      let i = numberStr.length\n      while (result == null && i > 0) {\n        const letter = numberStr.charAt(i - 1)\n        if (letter.toLowerCase() !== 'z') {\n          let code = letter.charCodeAt(0)\n          code++\n          result = String.fromCharCode(code)\n        } else {\n          i--\n        }\n      }\n    }\n\n    return result\n  }\n}\n","export class ValueWrapper<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Static methods                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static from<T>(value: T): ValueWrapper<T> {\n    return new ValueWrapper<T>(value)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(public readonly value: T) {}\n}\n","import { Observable, OperatorFunction } from 'rxjs'\nimport { NgZone } from '@angular/core'\n\n/**\n * Runs the observable stream in the given Angular Zone.\n * @param zone The Angular Zone\n */\nexport function runInZone<T>(zone: NgZone): OperatorFunction<T, T> {\n  return (source) => {\n    return new Observable((observer) => {\n      const onNext = (value: T) => zone.run(() => observer.next(value))\n      const onError = (e: any) => zone.run(() => observer.error(e))\n      const onComplete = () => zone.run(() => observer.complete())\n      return source.subscribe(onNext, onError, onComplete)\n    })\n  }\n}\n","import { QueryList } from '@angular/core'\nimport { Observable, Subscription } from 'rxjs'\nimport { map, startWith, takeUntil } from 'rxjs/operators'\n\n/**\n * Makes binding to a query list easy.\n */\n// @dynamic\nexport class QueryListBinding<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private valuesUpdatedFn: (values: T[]) => void\n  private completedFn: (values: T[]) => void\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Bind to the given QueryList until destroy$ is emitted.\n   * @param queryList\n   * @param destroy$\n   */\n  public static of<T>(queryList: QueryList<T>): QueryListBinding<T> {\n    return new QueryListBinding<T>(queryList)\n  }\n\n  public static asColdObservable<T>(queryList: QueryList<T>): Observable<T[]> {\n    return queryList.changes.pipe(\n      startWith(queryList),\n      map((x) => queryList.toArray())\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly queryList: QueryList<T>) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Callback which is invoked when the query list has new values.\n   * Note that this callback is also invoked initially.\n   * @param valuesFn\n   */\n  public updated(valuesFn: (values: T[]) => void): this {\n    this.valuesUpdatedFn = valuesFn\n    return this\n  }\n\n  /**\n   * Callback which is invoked when the binding is destroyed.\n   * Users can handle clean up here.\n   * @param completedFn\n   */\n  public destroyed(completedFn: (values: T[]) => void): this {\n    this.completedFn = completedFn\n    return this\n  }\n\n  public bindUntil(destroy$: Observable<any>): void {\n    this.subscribeToQueryList(this.queryList, destroy$)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private subscribeToQueryList(queryList: QueryList<T>, destroy$: Observable<any>): Subscription {\n    return QueryListBinding.asColdObservable(queryList)\n      .pipe(takeUntil(destroy$))\n      .subscribe(\n        (values) => (this.valuesUpdatedFn ? this.valuesUpdatedFn(values) : {}),\n        (err) => {},\n        () => (this.completedFn ? this.completedFn(Array.from(queryList)) : {})\n      )\n  }\n}\n","export class ParseUtil {\n  /**\n   * Tries to parse a given value to a boolean.\n   * @param bool a value representing a boolean state.\n   * @return undefined, if the value is null/undefined/empty\n   * @return false, if the value is false, else true.\n   */\n  public static parseBoolOrUndefined(bool: any): boolean | undefined {\n    if (bool === undefined || bool === null || bool === '') {\n      return undefined\n    } else {\n      return !(bool === 'false' || bool === false)\n    }\n  }\n}\n","import { LoggerFactory } from '@elderbyte/ts-logger'\n\nexport class FocusUtil {\n  private static readonly log = LoggerFactory.getLogger('FocusUtil')\n\n  /***************************************************************************\n   *                                                                         *\n   * Public Methods                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Focus the given html element after the given delay.\n   * @param htmlElement\n   * @param delayMs\n   */\n  public static focusAfterDelay(htmlElement: HTMLInputElement, delayMs = 1): void {\n    if (htmlElement) {\n      setTimeout(() => {\n        htmlElement.focus()\n        htmlElement.select()\n      }, delayMs)\n    }\n  }\n}\n","import { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\n\nexport const booleanTransformFn = (input: BooleanInput): boolean => coerceBooleanProperty(input)\n","import { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { map, skip } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Signal } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { EntityDelta } from '../forms/entities-change-event'\n\nexport type KeyGetterFn<T> = (item: T) => any\n\nexport enum SelectionEventSource {\n  USER_MOUSE_CLICK = 'USER_MOUSE_CLICK',\n  USER_KEYBOARD = 'USER_KEYBOARD',\n  SYSTEM = 'SYSTEM',\n}\n\nexport interface SelectionOptions {\n  source: SelectionEventSource\n  info?: string\n}\n\nexport class SelectionChangedEvent<TId, TEntity> {\n  public constructor(\n    public readonly after: TEntity[],\n    public readonly addedById: Map<TId, TEntity>,\n    public readonly removed: Set<TId>,\n    public readonly source: SelectionEventSource,\n    public readonly multiSelection: boolean,\n    public readonly info?: string\n  ) {}\n\n  public get isUserSource(): boolean {\n    return this.source !== SelectionEventSource.SYSTEM\n  }\n}\n\n/**\n * Provides a model of a selection.\n * Supports single and multi selection.\n *\n * Supports custom selection equality (default by object value)\n */\nexport class SelectionModel<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly defaultOptions: SelectionOptions = {\n    source: SelectionEventSource.SYSTEM,\n  }\n\n  private _multiple: boolean\n  private readonly _selectionMap = new Map<any, T>()\n  private readonly _selection = new BehaviorSubject<T[]>([])\n\n  private readonly _selectionChange = new Subject<SelectionChangedEvent<any, T>>()\n\n  private _keyGetterFn: KeyGetterFn<T>\n  private _selectableEvaluatorFn: (item: T) => boolean\n\n  public static readonly FallbackKeyGetterFn = (a: any) => a\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates a new SelectionModel\n   *\n   * @param multiple Support multi selection?\n   * @param initial the initial selection\n   * @param keyGetter value identity - default to value object equality\n   * @param selectableEvaluatorFn function to evaluate if the element in question is selectable\n   */\n  constructor(\n    multiple = false,\n    initial?: T[],\n    keyGetter: KeyGetterFn<T> = SelectionModel.FallbackKeyGetterFn,\n    selectableEvaluatorFn: (item: T) => boolean = () => true\n  ) {\n    this._multiple = multiple\n    this._keyGetterFn = keyGetter\n    this._selectableEvaluatorFn = selectableEvaluatorFn\n    if (initial) {\n      this.replaceSelection(initial, {\n        source: SelectionEventSource.SYSTEM,\n        info: 'initial',\n      })\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get selectionChange(): Observable<SelectionChangedEvent<any, T>> {\n    return this._selectionChange.asObservable()\n  }\n\n  public get changed(): Observable<T[]> {\n    return this.selection.pipe(\n      skip(1) // Skip the initial value\n    )\n  }\n\n  public get selection(): Observable<T[]> {\n    return this._selection.asObservable()\n  }\n\n  public get selectionSnapshot(): T[] {\n    return this._selection.getValue()\n  }\n\n  public set selectableEvaluatorFn(fn: (item: T) => boolean) {\n    this._selectableEvaluatorFn = fn\n    this.replaceSelection(this.selectionSnapshot, {\n      source: SelectionEventSource.SYSTEM,\n      info: 'set:selectableEvaluatorFn',\n    })\n  }\n\n  public set keyGetterFn(fn: KeyGetterFn<T>) {\n    this._keyGetterFn = fn\n    this.replaceSelection(this.selectionSnapshot, {\n      source: SelectionEventSource.SYSTEM,\n      info: 'set:keyGetterFn',\n    })\n  }\n\n  public isSelected(value: T): boolean {\n    const key = this._keyGetterFn(value)\n    return this._selectionMap.has(key)\n  }\n\n  public observeSelection(value: T): Observable<boolean> {\n    const key = this._keyGetterFn(value)\n    return this._selection.pipe(map((selected) => this._selectionMap.has(key)))\n  }\n\n  public get count(): number {\n    return this._selectionMap.size\n  }\n\n  public get isEmpty(): boolean {\n    return this._selectionMap.size === 0\n  }\n\n  public get hasValue(): boolean {\n    return this._selectionMap.size > 0\n  }\n\n  public get hasSingleValue(): boolean {\n    return this._selectionMap.size === 1\n  }\n\n  public get hasMultipleValues(): boolean {\n    return this._selectionMap.size > 1\n  }\n\n  public get isMultipleSelection(): boolean {\n    return this._multiple\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Evaluates if the given item is selectable based on the initially set 'selectable' function.\n   * If no function has been set (or function is null), all items are selectable by default.\n   */\n  public isSelectable(item: T): boolean {\n    if (this._selectableEvaluatorFn) {\n      return this._selectableEvaluatorFn(item)\n    }\n    return true\n  }\n\n  public clear(options?: SelectionOptions): void {\n    if (this._selectionMap.size > 0) {\n      const before = this.snapshotInnerSelection()\n      this._selectionMap.clear()\n      this.selectionChanged(this.buildChangeEvent(before, options))\n    }\n  }\n\n  public replaceSelection(newSelection: T[], options?: SelectionOptions | string): void {\n    if (newSelection.length > 0) {\n      if (!this.isAlreadyExclusivelySelected(newSelection)) {\n        this._selectionMap.clear()\n        this.select(newSelection, options)\n      }\n    } else {\n      this.clear(this.coerceOptions(options))\n    }\n  }\n\n  public select(values: T[], options?: SelectionOptions | string): void {\n    const before = this.snapshotInnerSelection()\n    if (this.selectInternal(values)) {\n      this.selectionChanged(this.buildChangeEvent(before, options))\n    }\n  }\n\n  public deselect(values: T[], options?: SelectionOptions): void {\n    this.deselectIds(\n      values.map((v) => this._keyGetterFn(v)),\n      options\n    )\n  }\n\n  public deselectIds(ids: any[], options?: SelectionOptions): void {\n    let anyChange = false\n\n    const before = this.snapshotInnerSelection()\n    ids.forEach((key) => {\n      if (this._selectionMap.delete(key)) {\n        anyChange = true\n      }\n    })\n\n    if (anyChange) {\n      this.selectionChanged(this.buildChangeEvent(before, options))\n    }\n  }\n\n  public toggle(value: T, options?: SelectionOptions): void {\n    this.log.debug('toggling selection of value id:' + this._keyGetterFn(value))\n\n    if (this.isSelected(value)) {\n      this.deselect([value], options)\n    } else {\n      this.select([value], options)\n    }\n  }\n\n  public set isMultipleSelection(multiple: boolean) {\n    if (multiple !== this._multiple) {\n      this._multiple = multiple\n      const before = this.snapshotInnerSelection()\n      if (!this._multiple) {\n        const selected = this.selectionSnapshot\n        if (selected.length > 1) {\n          this.log.debug(\n            'Multiple selection was deactivated but there where more than one selected items present, fixing now!'\n          )\n          this.selectInternal([selected[0]])\n        }\n      }\n      this.selectionChanged(\n        this.buildChangeEvent(before, {\n          source: SelectionEventSource.SYSTEM,\n          info: 'set:isMultipleSelection',\n        })\n      )\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildChangeEvent(\n    before: Map<any, T>,\n    customOptions: SelectionOptions | string | undefined\n  ): SelectionChangedEvent<any, T> {\n    const options = this.coerceOptions(customOptions)\n    const after = this.snapshotInnerSelection()\n    const delta = this.deltaIds(before, after)\n    return new SelectionChangedEvent<any, T>(\n      this.mapValues(after),\n      delta.added,\n      delta.removed,\n      options.source,\n      this._multiple,\n      options.info\n    )\n  }\n\n  private deltaIds(beforeById: Map<any, T>, afterById: Map<any, T>): EntityDelta<any, T> {\n    return EntityDelta.buildDelta(new Set(beforeById.keys()), afterById)\n  }\n\n  private mapValues(map: Map<any, T>): T[] {\n    return Array.from(map.values())\n  }\n\n  private coerceOptions(maybeOptions: SelectionOptions | string | undefined): SelectionOptions {\n    if (typeof maybeOptions === 'string' || maybeOptions instanceof String) {\n      return {\n        source: this.defaultOptions.source,\n        info: maybeOptions as string,\n      }\n    } else if (maybeOptions === null || maybeOptions === undefined) {\n      return this.defaultOptions\n    } else {\n      return maybeOptions\n    }\n  }\n\n  private selectionChanged(changeEvent: SelectionChangedEvent<any, T>): void {\n    this.log.trace('SelectionChange: ' + changeEvent.info, changeEvent)\n    this._selection.next(changeEvent.after)\n    this._selectionChange.next(changeEvent)\n  }\n\n  private snapshotInnerSelection(): Map<any, T> {\n    return new Map<any, T>(this._selectionMap)\n  }\n\n  private isAlreadyExclusivelySelected(newSelection: T[]): boolean {\n    if (this._selectionMap.size !== newSelection.length) {\n      return false\n    }\n    return this.isAlreadySelected(newSelection)\n  }\n\n  private selectInternal(values: T[]): boolean {\n    values = values.filter((v) => this.isSelectable(v))\n\n    if (values && values.length > 0) {\n      if (this._multiple) {\n        // Multi selection\n        return this.ensureSelectedMulti(values)\n      } else {\n        // Single selection\n        const single = values[0] // Maybe last is better?\n        return this.ensureSelectedSingle(single)\n      }\n    }\n    return false\n  }\n\n  private ensureSelectedMulti(values: T[]): boolean {\n    if (!this.isAlreadySelected(values)) {\n      values.forEach((value) => {\n        this._selectionMap.set(this._keyGetterFn(value), value)\n      })\n      return true\n    }\n    return false\n  }\n\n  private isExclusiveSelected(value: T): boolean {\n    return this.isSelected(value) && this._selectionMap.size === 1\n  }\n\n  private isAlreadySelected(values: T[]): boolean {\n    if (this._selectionMap.size >= values.length) {\n      return values.every((v) => this.isSelected(v))\n    }\n    return false\n  }\n\n  private ensureSelectedSingle(value: T): boolean {\n    if (!this.isExclusiveSelected(value)) {\n      this._selectionMap.clear()\n      this._selectionMap.set(this._keyGetterFn(value), value)\n      return true\n    }\n    return false\n  }\n}\n","export enum DataTransferStatus {\n  /**\n   * This data transfer is prepared but has not yet started.\n   */\n  Pending = 'Pending',\n\n  /**\n   * This data transfer is currently in progress\n   */\n  Transferring = 'Transferring',\n\n  /**\n   * This data transfer is completed\n   */\n  Completed = 'Completed',\n\n  /**\n   * This data transfer failed.\n   */\n  Failed = 'Failed',\n\n  /**\n   * This data transfer was aborted.\n   */\n  Aborted = 'Aborted',\n}\n","/**\n * Represents the current transfer progress\n * Immutable.\n */\nexport class DataTransferProgress {\n  public static none(totalBytes?: number) {\n    return new DataTransferProgress(0, 0, 0, totalBytes, 0)\n  }\n\n  constructor(\n    public readonly doneBytes: number,\n    public readonly bytesPerSec: number,\n    public readonly avgBytesPerSec: number,\n    public readonly totalBytes?: number,\n    public readonly percentDone?: number\n  ) {}\n}\n","import { DataTransferStatus } from './data-transfer-status'\nimport { DataTransferProgress } from './data-transfer-progress'\nimport { HttpErrorResponse } from '@angular/common/http'\n\n/**\n * Represents a snapshot of the current state.\n * Immutable.\n */\nexport class DataTransferState {\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static pending(totalBytes?: number): DataTransferState {\n    return new DataTransferState(\n      DataTransferStatus.Pending,\n      DataTransferProgress.none(totalBytes),\n      null\n    )\n  }\n\n  public static started(totalBytes?: number): DataTransferState {\n    return new DataTransferState(\n      DataTransferStatus.Transferring,\n      DataTransferProgress.none(totalBytes),\n      null\n    )\n  }\n\n  public static transferring(progress: DataTransferProgress): DataTransferState {\n    return new DataTransferState(DataTransferStatus.Transferring, progress, null)\n  }\n\n  public static completed(progress: DataTransferProgress): DataTransferState {\n    return new DataTransferState(DataTransferStatus.Completed, progress, null)\n  }\n\n  public static failed(err: HttpErrorResponse, progress?: DataTransferProgress): DataTransferState {\n    progress = progress ? progress : DataTransferProgress.none()\n\n    return new DataTransferState(DataTransferStatus.Failed, progress, err)\n  }\n\n  public static aborted(progress?: DataTransferProgress): DataTransferState {\n    progress = progress ? progress : DataTransferProgress.none()\n\n    return new DataTransferState(DataTransferStatus.Aborted, progress, null)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  private constructor(\n    /**\n     * status The current status\n     */\n    public readonly status: DataTransferStatus,\n\n    /**\n     * progress The current progress\n     */\n    public readonly progress: DataTransferProgress,\n\n    /**\n     * error The error response if there was one\n     */\n    public readonly error: HttpErrorResponse | null\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get isPending(): boolean {\n    return this.status === DataTransferStatus.Pending\n  }\n\n  public get isTransferring(): boolean {\n    return this.status === DataTransferStatus.Transferring\n  }\n\n  public get hasFailed(): boolean {\n    return this.status === DataTransferStatus.Failed\n  }\n\n  public get isAborted(): boolean {\n    return this.status === DataTransferStatus.Aborted\n  }\n\n  public get isCompleted(): boolean {\n    return this.status === DataTransferStatus.Completed\n  }\n\n  /**\n   * Checks if the data transfer is over, either sucessfully or error / abort.\n   */\n  public get isDone(): boolean {\n    return this.isCompleted || this.hasFailed || this.isAborted\n  }\n}\n","import { DataTransferState } from './data-transfer-state'\nimport { BytesPerSecondFormat } from '../../format/bytes-per-second-format'\n\nexport class DataTransferProgressAggregate {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public static Empty = new DataTransferProgressAggregate(undefined, 0, 0, 0)\n\n  public readonly percentDone: number\n  public readonly bps: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Static builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static aggregate(states: DataTransferState[]): DataTransferProgressAggregate {\n    let bytesPerSecAgg = 0\n    let doneBytesAgg = 0\n    let totalBytesAgg = 0\n    let inTransfer = 0\n\n    states\n      .filter((state) => !state.isAborted)\n      .forEach((state) => {\n        const progress = state.progress\n\n        if (progress.percentDone < 100) {\n          // > delta would be better. expose delta?\n          bytesPerSecAgg += progress.bytesPerSec\n          inTransfer++\n        } else {\n          // done\n        }\n\n        doneBytesAgg += progress.doneBytes\n        totalBytesAgg += progress.totalBytes\n      })\n\n    return new DataTransferProgressAggregate(\n      doneBytesAgg,\n      bytesPerSecAgg,\n      totalBytesAgg,\n      inTransfer\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly doneBytesAgg: number | undefined,\n    public readonly bytesPerSecAgg: number,\n    public readonly totalBytesAgg: number,\n    public readonly inTransfer: number\n  ) {\n    let percentDone: number\n    if (doneBytesAgg > 0) {\n      percentDone = totalBytesAgg ? Math.round((100 * doneBytesAgg) / totalBytesAgg) : 100\n    } else if (totalBytesAgg === 0 && doneBytesAgg === 0) {\n      percentDone = 100\n    } else {\n      percentDone = 0\n    }\n    this.percentDone = percentDone\n    this.bps = BytesPerSecondFormat.formatAsBitsPerSecond(bytesPerSecAgg)\n  }\n}\n","import { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { DataTransferState } from './data-transfer-state'\nimport { DataTransfer } from './data-transfer'\nimport { filter, first, map } from 'rxjs/operators'\n\nexport abstract class DataTransferBase implements DataTransfer {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  protected readonly abort$ = new Subject<void>()\n  private readonly _state: BehaviorSubject<DataTransferState>\n  private readonly _name: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(initialState: DataTransferState, name?: string) {\n    this._name = name\n    this._state = new BehaviorSubject(initialState)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Awaits until this transfer is done and closes the observable.\n   *\n   * If successful, emits true. Observable is closed.\n   * If aborted, emits false. Observable is closed.\n   * If failed, throws error. Observable is closed.\n   */\n  public get done$(): Observable<boolean> {\n    return this.state$.pipe(\n      filter((state) => state.isDone),\n      map((state) => {\n        if (state.isCompleted) {\n          return true\n        }\n        if (state.isAborted) {\n          return false\n        }\n\n        if (state.hasFailed) {\n          throw state.error ? state.error : 'Completion Failed due unknown error!'\n        }\n\n        return false // Default return for unexpected state\n      }),\n      first()\n    )\n  }\n  /**\n   * Get the state of this data transfer over time.\n   * Unsubscribe after use.\n   */\n  public get state$(): Observable<DataTransferState> {\n    return this._state.asObservable()\n  }\n\n  /**\n   * Get a snapshot of the current state of this data transfer\n   */\n  public get stateSnapshot(): DataTransferState {\n    return this._state.getValue()\n  }\n\n  public get name(): string {\n    return this._name\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  abstract start(): Observable<any>\n\n  /**\n   * Aborts the data transfer\n   */\n  public abort(): void {\n    this.abort$.next()\n    this.emitState(DataTransferState.aborted(this.stateSnapshot.progress))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  protected emitState(newState: DataTransferState): void {\n    this._state.next(newState)\n  }\n}\n","import { Observable, of } from 'rxjs'\nimport {\n  HttpEvent,\n  HttpEventType,\n  HttpProgressEvent,\n  HttpResponse,\n  HttpSentEvent,\n} from '@angular/common/http'\nimport { catchError, takeUntil, tap } from 'rxjs/operators'\nimport { DataTransferProgress } from './data-transfer-progress'\nimport { DataTransferState } from './data-transfer-state'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { DataTransferBase } from './data-transfer-base'\n\n/**\n * Represents a Http data transfer, either a download or upload.\n */\nexport class HttpDataTransfer extends DataTransferBase {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _httpRequest: Observable<HttpEvent<any>>\n\n  private _startTimeMs: number\n  private _endTimeMs: number\n  private _currTimeMs: number\n  private _prevTimeMs: number\n  private _oldBytes = 0\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates a new HttpDataTransfer from a HttpClient HttpRequest.\n   * @param httpRequest\n   * @param name Name of this transfer\n   * @param totalBytes The total expected bytes\n   */\n  public static fromRequest(\n    httpRequest: Observable<HttpEvent<any>>,\n    name?: string,\n    totalBytes?: number\n  ): HttpDataTransfer {\n    return new HttpDataTransfer(httpRequest, name, totalBytes)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates a new HttpDataTransfer\n   * @param httpRequest The http request.\n   * @param name The name of this transfer (usually the file name)\n   * @param totalBytes The total bytes of the transfer. (If not set, will be auto discovered if possible)\n   */\n  private constructor(httpRequest: Observable<HttpEvent<any>>, name?: string, totalBytes?: number) {\n    super(DataTransferState.pending(totalBytes), name)\n    this._httpRequest = httpRequest\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Starts the data transfer\n   */\n  public start(): Observable<HttpEvent<any>> {\n    return this._httpRequest.pipe(\n      takeUntil(this.abort$),\n      tap({\n        next: (event) => {\n          switch (event.type) {\n            case HttpEventType.Sent:\n              this.onStart(event)\n              break\n            case HttpEventType.UploadProgress:\n            case HttpEventType.DownloadProgress:\n              this.onProgress(event)\n              break\n            case HttpEventType.Response:\n              this.onComplete(event)\n              break\n          }\n        },\n        error: (err) => this.onError(err),\n        finalize: () => this.finally(),\n      }),\n      catchError((err) => {\n        return of(err)\n      })\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private onStart(event: HttpSentEvent): void {\n    this.emitState(DataTransferState.started(this.stateSnapshot.progress.totalBytes))\n  }\n\n  private onProgress(event: HttpProgressEvent): void {\n    const progress = this.transferProgress(event)\n    this.emitState(DataTransferState.transferring(progress))\n  }\n\n  private onComplete(event: HttpResponse<any>): void {\n    this.emitState(\n      DataTransferState.completed(\n        this.transferProgressFromResponse(event, this.stateSnapshot.progress)\n      )\n    )\n  }\n\n  private onError(error: any): void {\n    this.emitState(DataTransferState.failed(error, this.stateSnapshot.progress))\n  }\n\n  private finally(): void {\n    this._endTimeMs = new Date().getTime()\n    if (!this.stateSnapshot.isDone) {\n      this.logger.warn('DataTransfer did not reach done-state! Completing Transfer now...')\n      this.emitState(DataTransferState.completed(this.stateSnapshot.progress))\n    }\n  }\n\n  private transferProgressFromResponse(\n    event: HttpResponse<any>,\n    previous?: DataTransferProgress\n  ): DataTransferProgress {\n    return new DataTransferProgress(\n      previous ? previous.totalBytes : 0,\n      previous ? previous.bytesPerSec : 0,\n      previous ? previous.avgBytesPerSec : 0,\n      previous ? previous.totalBytes : 0,\n      100\n    )\n  }\n\n  private transferProgress(event: HttpProgressEvent): DataTransferProgress {\n    this._currTimeMs = new Date().getTime()\n\n    // setting start time\n    if (!this._startTimeMs) {\n      this._startTimeMs = new Date().getTime()\n      this._prevTimeMs = this._startTimeMs\n    }\n\n    // tracking how much data is received and\n    const bytesReceivedTotal = event.loaded\n    const bytesReceived = bytesReceivedTotal - this._oldBytes\n\n    const durationMs = this._currTimeMs - this._prevTimeMs\n    const durationSec = durationMs / 1000\n\n    // Calc transfer speed per percent data received\n    const bytesPerSec = bytesReceived / durationSec\n\n    // updating previous values\n    this._prevTimeMs = this._currTimeMs\n    this._oldBytes = bytesReceivedTotal\n\n    // Calc avg speed\n    const durationSinceStartMs = this._currTimeMs - this._startTimeMs\n    const durationSinceStartSec = durationSinceStartMs / 1000\n    const avgBytesPerSec = event.loaded / durationSinceStartSec\n\n    // Calc progress if possible\n    const percentDone = event.total ? Math.round((100 * event.loaded) / event.total) : undefined\n\n    return new DataTransferProgress(\n      event.loaded,\n      bytesPerSec,\n      avgBytesPerSec,\n      event.total,\n      percentDone\n    )\n  }\n}\n","import { HttpDataTransfer } from './http-data-transfer'\nimport { HttpClient, HttpHeaders, HttpParams, HttpRequest } from '@angular/common/http'\nimport { Injectable } from '@angular/core'\n\n/**\n * Responsible for building HttpDataTransfer jobs.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class DataTransferFactory {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private http: HttpClient) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates a new progress tracking upload job from the given File.\n   *\n   * @param requestMethod  The HTTP method (usually POST or PUT)\n   * @param endpointUrl The url to send the request to\n   * @param file The file to construct the Form Data form\n   * @param options (Optional) Additional headers or query params\n   */\n  public buildFileUpload(\n    requestMethod: 'POST' | 'PUT' | 'PATCH',\n    endpointUrl: string,\n    file: File,\n    options?: {\n      headers?: HttpHeaders\n      params?: HttpParams\n    }\n  ): HttpDataTransfer {\n    return this.buildBlobUpload(requestMethod, endpointUrl, file, file.name, options)\n  }\n\n  /**\n   * Creates a new progress tracking upload job from the given blob.\n   *\n   * @param requestMethod  The HTTP method (usually POST or PUT)\n   * @param endpointUrl The url to send the request to\n   * @param file The file to construct the Form Data form\n   * @param options (Optional) Additional headers or query params\n   */\n  public buildBlobUpload(\n    requestMethod: 'POST' | 'PUT' | 'PATCH',\n    endpointUrl: string,\n    blob: Blob,\n    displayName: string,\n    options?: {\n      headers?: HttpHeaders\n      params?: HttpParams\n    }\n  ): HttpDataTransfer {\n    // Create a Http request and pass the form\n    // Tell it to report the upload progress\n    const req = new HttpRequest(requestMethod, endpointUrl, blob, {\n      reportProgress: true,\n      headers: options ? options.headers : undefined,\n      params: options ? options.params : undefined,\n    })\n    return this.buildOfRequest(req, displayName, blob.size)\n  }\n\n  /**\n   * Creates a new progress tracking upload job from the given File.\n   *\n   * @param requestMethod  The HTTP method (usually POST or PUT)\n   * @param endpointUrl The url to send the request to\n   * @param formFile The file to construct the Form Data form\n   * @param formName The file name of the Form Data\n   * @param options (Optional) Additional headers or query params\n   */\n  public buildFileFormDataUpload(\n    requestMethod: 'POST' | 'PUT' | 'PATCH',\n    endpointUrl: string,\n    formFile: File,\n    formName: string = 'file',\n    options?: {\n      headers?: HttpHeaders\n      params?: HttpParams\n    }\n  ): HttpDataTransfer {\n    const formData: FormData = new FormData()\n    formData.append(formName, formFile, formFile.name)\n\n    return this.buildFormDataUpload(\n      requestMethod,\n      endpointUrl,\n      formData,\n      options,\n      formFile.name,\n      formFile.size\n    )\n  }\n\n  /**\n   * Creates a new progress tracking upload job from the given Form Data.\n   *\n   * @param requestMethod The HTTP method (usually POST or PUT)\n   * @param endpointUrl The url to send the request to\n   * @param formData The Form Data\n   * @param options (Optional) Additional headers or query params\n   * @param name\n   * @param size\n   */\n  public buildFormDataUpload(\n    requestMethod: 'POST' | 'PUT' | 'PATCH',\n    endpointUrl: string,\n    formData: FormData,\n    options?: {\n      headers?: HttpHeaders\n      params?: HttpParams\n    },\n    name?: string,\n    size?: number\n  ): HttpDataTransfer {\n    // Create a Http request and pass the form\n    // Tell it to report the upload progress\n    const req = new HttpRequest(requestMethod, endpointUrl, formData, {\n      reportProgress: true,\n      headers: options ? options.headers : undefined,\n      params: options ? options.params : undefined,\n    })\n\n    return this.buildOfRequest(req, name, size)\n  }\n\n  /**\n   * Creates a new progress tracking upload job from a low level\n   * http request.\n   *\n   * @param request The upload http request\n   * @param displayName The data transfer display name\n   * @param size The data transfer  size\n   */\n  public buildOfRequest(\n    request: HttpRequest<any>,\n    displayName: string,\n    size: number\n  ): HttpDataTransfer {\n    return HttpDataTransfer.fromRequest(this.http.request(request), displayName, size)\n  }\n}\n","import { HttpClient } from '@angular/common/http'\nimport { HttpDataTransfer } from '../transfer/http-data-transfer'\nimport { DataTransferFactory } from '../transfer/data-transfer-factory'\nimport { ElderDataTransferService } from '../../../components/data-transfer/elder-data-transfer.service'\n\nexport interface IFileUploadClient {\n  uploadFiles(files: File[]): Map<File, HttpDataTransfer>\n  uploadFile(file: File): HttpDataTransfer\n}\n\nexport class FileUploadClient implements IFileUploadClient {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly dataTransferFactory: DataTransferFactory\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private http: HttpClient,\n    private transferManager: ElderDataTransferService,\n    protected readonly endpointUrl: string,\n    private requestMethod: 'POST' | 'PUT' | 'PATCH'\n  ) {\n    this.dataTransferFactory = new DataTransferFactory(http)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public uploadFiles(files: File[]): Map<File, HttpDataTransfer> {\n    const allProgress = new Map<File, HttpDataTransfer>()\n\n    files.forEach((file) => {\n      // create a new upload job for every file\n      allProgress.set(file, this.createUploadTransfer(file))\n    })\n\n    const transfers = Array.from(allProgress.values())\n\n    this.transferManager.enqueueAll(transfers)\n\n    return allProgress\n  }\n\n  public uploadFile(file: File): HttpDataTransfer {\n    return this.transferManager.enqueue(this.createUploadTransfer(file))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private createUploadTransfer(file: File): HttpDataTransfer {\n    return this.dataTransferFactory.buildFileFormDataUpload(\n      this.requestMethod,\n      this.endpointUrl,\n      file\n    )\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { HttpBackend, HttpClient } from '@angular/common/http'\n\n/**\n * A HttpClient without any interceptors\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class HttpClientPristine extends HttpClient {\n  constructor(backend: HttpBackend) {\n    super(backend)\n  }\n}\n","import { Injectable } from '@angular/core'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HttpClientBuilder {\n  constructor() {}\n\n  // TODO Custom HttpClient builder with default headers\n}\n\n/*\n\nexport const HTTP_INTERCEPTORS_CUSTOM = new InjectionToken<HttpInterceptor[]>('HTTP_INTERCEPTORS_CUSTOM');\n\nexport class HttpClientCustom extends HttpClient {\n\n  constructor(backend: HttpBackend, injector: Injector) {\n    super(new MyHandlerService(backend, injector, HTTP_INTERCEPTORS_CUSTOM));\n  }\n}\n\nexport class MyHttpInterceptorHandler implements HttpHandler {\n  constructor(\n    private next: HttpHandler,\n    private interceptor: HttpInterceptor) { }\n\n  public handle(req: HttpRequest<any>): Observable<HttpEvent<any>> {\n    return this.interceptor.intercept(req, this.next);\n  }\n}\n\nexport class MyHandlerService implements HttpHandler {\n\n  private chain: HttpHandler | null = null;\n\n  constructor(\n    private backend: HttpBackend,\n    private injector: Injector,\n    private interceptors: InjectionToken<HttpInterceptor[]>) {\n  }\n\n  public handle(req: HttpRequest<any>): Observable<HttpEvent<any>> {\n    if (this.chain === null) {\n      const interceptors = this.injector.get(this.interceptors, []);\n      this.chain = interceptors.reduceRight(\n        (next, interceptor) => new MyHttpInterceptorHandler(next, interceptor), this.backend);\n    }\n    return this.chain.handle(req);\n  }\n}\n*/\n","/**\n * Represents IETF Language Tags, consisting of\n * ISO Language Codes (639-1 and 693-2) and IETF language types.\n * https://datahub.io/core/language-codes#resource-ietf-language-tags\n */\nexport type LanguageTag = string\n\nexport class KnownLocaleTags {\n  public readonly ENGLISH: LanguageTag = 'en'\n  public readonly en_US: LanguageTag = 'en-US'\n\n  public readonly FRENCH: LanguageTag = 'fr'\n  public readonly fr_FR: LanguageTag = 'fr-FR'\n\n  public readonly GERMAN: LanguageTag = 'de'\n  public readonly de_DE: LanguageTag = 'de-DE'\n  public readonly de_CH: LanguageTag = 'de-CH'\n}\n","import { LanguageTag } from './language-tag'\n\nexport class Locale {\n  public static parse(tag: LanguageTag): Locale {\n    const parts = tag.split('-')\n    return new Locale(parts[0], parts[1], parts[2])\n  }\n\n  constructor(\n    public readonly language: string,\n    public readonly country?: string,\n    public readonly variant?: string\n  ) {}\n}\n","import { ITranslated, ITranslatedText, LocaleMap } from '../translated'\nimport { LanguageTag } from '../language-tag'\n\nexport class Translated<T> implements ITranslated<T> {\n  public locales: LocaleMap<T> = {}\n\n  public with(locale: LanguageTag, value: T): this {\n    this.locales[locale] = value\n    return this\n  }\n\n  public get(locale: LanguageTag, value: T): T | undefined {\n    return this.locales[locale]\n  }\n}\n\nexport class TranslatedText extends Translated<string> implements ITranslatedText {}\n","import { Localized } from '../localized'\nimport { LanguageTag } from '../language-tag'\n\nexport abstract class I18nBase implements Localized {\n  protected constructor(public locale: LanguageTag) {}\n}\n","import { LanguageTag } from './language-tag'\nimport { Localized } from './localized'\nimport { Locale } from './locale'\n\nexport interface LocalisationPicker {\n  /**\n   * Returns the best match of the given choices for the given desired language tag.\n   * @param choices\n   * @param desired\n   */\n  findBest<T extends Localized>(choices: T[], desired: LanguageTag): T | undefined\n}\n\nexport class SimpleLocalisationPicker implements LocalisationPicker {\n  public static readonly Instance: LocalisationPicker = new SimpleLocalisationPicker()\n\n  public findBest<T extends Localized>(choices: T[], desiredTag: LanguageTag): T | undefined {\n    if (!choices || choices.length === 0) {\n      return undefined\n    }\n\n    // 1. Attempt exact / full match\n    let match = choices.find((c) => c.locale === desiredTag)\n    if (match) {\n      return match\n    }\n\n    const desired = Locale.parse(desiredTag)\n\n    // 2. Attempt language match\n    match = choices.find((c) => Locale.parse(c.locale).language === desired.language)\n    if (match) {\n      return match\n    }\n\n    // 2. Attempt country match\n    if (desired.country) {\n      match = choices.find((c) => Locale.parse(c.locale).country === desired.country)\n      if (match) {\n        return match\n      }\n    }\n\n    // Otherwise, return the first available choice\n    return choices[0]\n  }\n}\n","import { LanguageTag } from '../language-tag'\nimport { I18nBase } from './i18n-base'\nimport { SimpleLocalisationPicker } from '../localisation-picker'\n\n/**\n * Represents a text in a specific locale.\n */\nexport class I18nText extends I18nBase {\n  private static readonly localisationPicker = SimpleLocalisationPicker.Instance\n\n  public static findBestText(choices: I18nText[], desired: LanguageTag): string | undefined {\n    return I18nText.localisationPicker.findBest(choices, desired)?.text\n  }\n\n  constructor(\n    locale: LanguageTag,\n    public text: string\n  ) {\n    super(locale)\n  }\n}\n","import { Localized } from './localized'\nimport { TranslatedText } from './impl/translated'\nimport { ITranslatedText } from './translated'\nimport { I18nText } from './impl/i18n-text'\n\nexport class TranslatedConverter {\n  public static toTranslatedText<T extends Localized>(localized: I18nText[]): TranslatedText {\n    return TranslatedConverter.toTranslatedTextWith(localized, (l) => l.text)\n  }\n\n  public static toTranslatedTextWith<T extends Localized>(\n    localized: T[],\n    textFn: (localized: T) => string\n  ): TranslatedText {\n    const translated = new TranslatedText()\n    if (localized) {\n      localized.forEach((l) => translated.with(l.locale, textFn(l)))\n    }\n    return translated\n  }\n\n  public static toI18nText(translatedText: ITranslatedText): I18nText[] {\n    return Object.keys(translatedText.locales).map(\n      (locale) => new I18nText(locale, translatedText.locales[locale])\n    )\n  }\n}\n","import { HttpBackend, HttpClient } from '@angular/common/http'\nimport { TranslateLoader } from '@ngx-translate/core'\nimport { forkJoin, Observable, of } from 'rxjs'\nimport { catchError, map } from 'rxjs/operators'\n\n/* inspired by https://github.com/rbalet/ngx-translate-multi-http-loader */\n\nexport interface ITranslationResource {\n  prefix: string\n  suffix?: string\n  optional?: boolean\n}\n\nexport class ElderMultiTranslateHttpLoader implements TranslateLoader {\n  constructor(\n    private _handler: HttpBackend,\n    private _resourcesPrefix: string[] | ITranslationResource[]\n  ) {}\n\n  public getTranslation(lang: string): Observable<any> {\n    const requests: Observable<object>[] = this._resourcesPrefix.map((resourceArg: any) => {\n      const resource = resourceArg as ITranslationResource\n      let path: string\n\n      if (resource.prefix) {\n        path = `${resource.prefix}${lang}${resource.suffix || '.json'}`\n      } else {\n        path = `${resource}${lang}.json`\n      }\n\n      return new HttpClient(this._handler).get(path).pipe(\n        catchError((res) => {\n          if (!resource.optional) {\n            console.group()\n            console.error('Something went wrong for the following translation file:', path)\n            console.error(res)\n            console.groupEnd()\n          }\n          return of({})\n        })\n      )\n    })\n\n    return forkJoin(requests).pipe(map((response) => response.reduce(simpleDeepMerge, {})))\n  }\n}\n\nfunction simpleDeepMerge(target: any, source: any): any {\n  if (typeof target !== 'object' || target === null) {\n    return source\n  }\n\n  if (typeof source !== 'object' || source === null) {\n    return target\n  }\n\n  const output = { ...target }\n\n  Object.keys(source).forEach((key) => {\n    if (Array.isArray(source[key])) {\n      output[key] = [...(target[key] || []), ...source[key]]\n    } else if (typeof source[key] === 'object' && source[key] !== null) {\n      output[key] = simpleDeepMerge(target[key] || {}, source[key])\n    } else {\n      output[key] = source[key]\n    }\n  })\n\n  return output\n}\n","import { Injectable } from '@angular/core'\nimport { map } from 'rxjs/operators'\nimport { TranslateService } from '@ngx-translate/core'\nimport { Observable } from 'rxjs'\nimport { ComparatorBuilder } from '../data/field-comparator'\nimport { IDataSource } from '../data/datasource/data-source'\nimport { DelegateListDataSource } from '../data/datasource/fetcher/delegate-data-source'\n\nexport class TranslatedEnumValue {\n  constructor(\n    public value: string,\n    public displayValue: string\n  ) {}\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderEnumTranslationService {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private translateService: TranslateService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Translates the given Enum class. Loads translations of given translationPrefix\n   * and creates for each enum value a TranslatedEnumValue.\n   *\n   * @param enumClass enum to translate\n   * @param translationPrefix prefix to load translations\n   * @param sort if true, data will be sorted by translations\n   * @param asc if true, data will be sorted in ascending order\n   */\n  public translate(\n    enumClass: any,\n    translationPrefix: string,\n    sort = true,\n    asc = true\n  ): Observable<TranslatedEnumValue[]> {\n    return this.translateService.stream(translationPrefix).pipe(\n      map((translation: string | any) => {\n        return Object.keys(enumClass).map((enumKey) => {\n          const enumValue = enumClass[enumKey]\n          const translated = translation[enumValue] ?? enumKey\n          return new TranslatedEnumValue(enumValue, translated)\n        })\n      }),\n      map((data: TranslatedEnumValue[]) => {\n        return sort\n          ? data.sort(ComparatorBuilder.fieldSort(asc ? 'displayValue' : '-displayValue'))\n          : data\n      })\n    )\n  }\n\n  /**\n   * Translates the given Enum class. Loads translations of given translationPrefix\n   * and creates for each enum value a TranslatedEnumValue.\n   *\n   * @param values The strings to translate.\n   * @param translationPrefix prefix to load translations\n   * @param sort if true, data will be sorted by translations\n   * @param asc if true, data will be sorted in ascending order\n   */\n  public translateStrings(\n    values: readonly string[],\n    translationPrefix: string,\n    sort = true,\n    asc = true\n  ): Observable<TranslatedEnumValue[]> {\n    return this.translateService.stream(translationPrefix).pipe(\n      map((translation: string | any) => {\n        return values.map((value) => {\n          const translated = translation[value] ?? value\n          return new TranslatedEnumValue(value, translated)\n        })\n      }),\n      map((data: TranslatedEnumValue[]) => {\n        return sort\n          ? data.sort(ComparatorBuilder.fieldSort(asc ? 'displayValue' : '-displayValue'))\n          : data\n      })\n    )\n  }\n\n  /**\n   * Translates the given element. Loads the translation\n   * and creates a TranslatedEnumValue.\n   *\n   * @param translationPrefix prefix to load translation\n   * @param enumKey key of the translation to load\n   */\n  public translateOne(translationPrefix: string, enumKey: string): Observable<TranslatedEnumValue> {\n    return this.translateService\n      .get(translationPrefix + '.' + enumKey)\n      .pipe(\n        map(\n          (translatedValue) =>\n            new TranslatedEnumValue(enumKey, this.addPrefixIfNotNull(enumKey, translatedValue))\n        )\n      )\n  }\n\n  private addPrefixIfNotNull(enumKey: string, translatedValue: string) {\n    return enumKey ? translatedValue : ''\n  }\n\n  /**\n   * Creates a data source of translations of the given enum class.\n   *\n   * @param enumClass enum to translate\n   * @param translationPrefix prefix to load translations\n   * @param sort if true, data will be sorted by translations\n   * @param asc if true, data will be sorted in ascending order\n   */\n  public enumDateSource<TEnum extends object>(\n    enumClass: TEnum,\n    translationPrefix: string,\n    sort = true,\n    asc = true\n  ): IDataSource<TranslatedEnumValue> {\n    return DelegateListDataSource.listFetcher(\n      () => this.translate(enumClass, translationPrefix, sort, asc),\n      'value',\n      (id) => this.translateOne(translationPrefix, id)\n    )\n  }\n\n  /**\n   * Creates a data source of translations of the given enum class.\n   *\n   * @param values Values\n   * @param translationPrefix prefix to load translations\n   * @param sort if true, data will be sorted by translations\n   * @param asc if true, data will be sorted in ascending order\n   */\n  public stringArrayDateSource(\n    values: readonly string[],\n    translationPrefix: string,\n    sort = true,\n    asc = true\n  ): IDataSource<TranslatedEnumValue> {\n    return DelegateListDataSource.listFetcher(\n      () => this.translateStrings(values, translationPrefix, sort, asc),\n      'value',\n      (id) => this.translateOne(translationPrefix, id)\n    )\n  }\n}\n","import { CsvColumnSpec, CsvSpec } from './csv-spec'\nimport { Observable } from 'rxjs/internal/Observable'\nimport { TranslateService } from '@ngx-translate/core'\nimport { map } from 'rxjs/operators'\nimport { of } from 'rxjs'\n\nexport class CsvSerializer<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _csvSpec: CsvSpec<T>\n  private readonly _translateService: TranslateService\n\n  constructor(csvSpec: CsvSpec<T>, translateService?: TranslateService) {\n    this._csvSpec = csvSpec\n    this._translateService = translateService\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get csvSpec(): CsvSpec<T> {\n    return this._csvSpec\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public serializeHeaders(): Observable<string> {\n    return this.getTranslatedHeaders().pipe(\n      map((translatedHeaders) =>\n        this.csvSpec\n          .getHeaderTexts()\n          .map((headerText) => translatedHeaders[headerText] || headerText) // fallback if no translation available\n          .join(this.csvSpec.delimiter)\n      )\n    )\n  }\n\n  public serializeRow(record: T): string {\n    return this.csvSpec.columnSpecs\n      .map((columnSpec) => this.resolveValue(record, columnSpec))\n      .join(this.csvSpec.delimiter)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private getTranslatedHeaders(): Observable<{ [key: string]: string }> {\n    if (this._translateService) {\n      return this._translateService.get(this.csvSpec.getHeaderTexts())\n    } else {\n      return of({})\n    }\n  }\n\n  private resolveValue(record: T, columnSpec: CsvColumnSpec<T>): string {\n    if (columnSpec.valueResolverFn) {\n      return columnSpec.valueResolverFn(record)\n    } else {\n      // @ts-ignore\n      return record[columnSpec.propertyPath]\n    }\n  }\n}\n","import { CsvSerializer } from './csv-serializer'\nimport { TranslateService } from '@ngx-translate/core'\n\nexport class CsvSpec<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /** File name of CSV File */\n  public filename = 'data.csv'\n\n  /** Delimiter used */\n  public delimiter = ','\n\n  /** Column specifications */\n  public columnSpecs: CsvColumnSpec<T>[] = []\n\n  /** If Column header should be included */\n  public includeHeader = true\n\n  /***************************************************************************\n   *                                                                         *\n   * Static                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public static start<T>(filename: string): CsvSpec<T> {\n    const spec = new CsvSpec<T>()\n    spec.withFilename(filename)\n    return spec\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public getSerializer(translateService?: TranslateService): CsvSerializer<T> {\n    return new CsvSerializer<T>(this, translateService)\n  }\n\n  public getHeaderTexts(): string[] {\n    return this.columnSpecs.map((columnSpec) => columnSpec.columnHeaderText)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fluent API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public withFilename(filename: string): CsvSpec<T> {\n    if (!filename.endsWith('.csv')) {\n      filename = filename + '.csv'\n    }\n    this.filename = filename\n    return this\n  }\n\n  public withDelimiter(delimiter: string): CsvSpec<T> {\n    this.delimiter = delimiter\n    return this\n  }\n\n  public withColumnSpecs(...columnSpec: CsvColumnSpec<T>[]): CsvSpec<T> {\n    this.columnSpecs.push(...columnSpec)\n    return this\n  }\n\n  public addColumnSpec(\n    headerText: string,\n    valueResolverFn: (type: T) => string,\n    id?: string\n  ): CsvSpec<T> {\n    this.withColumnSpecs(\n      CsvColumnSpec.start<T>(id || headerText)\n        .withValueResolverFn(valueResolverFn)\n        .withColumnHeaderText(headerText)\n    )\n    return this\n  }\n}\n\nexport class CsvColumnSpec<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /** ID used for identification of the column */\n  public columnId: string\n\n  /** Display string of the column header */\n  public columnHeaderText: string\n\n  /** Function to resolve the value of the record. */\n  public valueResolverFn: (record: T) => string\n\n  /***************************************************************************\n   *                                                                         *\n   * Static                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public static start<T>(id?: string): CsvColumnSpec<T> {\n    const spec = new CsvColumnSpec<T>()\n    spec.columnId = id\n    return spec\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fluent API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public withColumnHeaderText(columnHeaderText: string): CsvColumnSpec<T> {\n    this.columnHeaderText = columnHeaderText\n    if (!this.columnId) {\n      this.columnId = columnHeaderText\n    }\n    return this\n  }\n\n  public withValueResolverFn(fn: (record: T) => string): CsvColumnSpec<T> {\n    this.valueResolverFn = fn\n    return this\n  }\n}\n","import { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, Observable, of, throwError } from 'rxjs'\nimport { catchError, delay, share, startWith, switchMap, takeWhile, tap } from 'rxjs/operators'\nimport { IDataSource } from '../data/datasource/data-source'\nimport { HttpErrorResponse } from '@angular/common/http'\n\n/**\n * Represents an entity which can refresh itself periodically\n * until a defined condition is met.\n */\nexport class RefreshingEntity<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly current$: BehaviorSubject<T>\n  private readonly entityId: any\n  private readonly interval: number\n\n  private readonly _refreshing$: Observable<T>\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static refreshWhile<T>(\n    entity: T,\n    dataSource: IDataSource<T>,\n    refreshPredicate: (entity: T) => boolean,\n    interval?: number\n  ): RefreshingEntity<T> {\n    return new RefreshingEntity<T>(dataSource, entity, refreshPredicate, interval)\n  }\n\n  public static of<T>(fallback: T): RefreshingEntity<T> {\n    const neverRefreshFn = (x: T) => false\n    return RefreshingEntity.refreshWhile(fallback, null, neverRefreshFn)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly dataSource: IDataSource<T>,\n    private readonly entity: T,\n    private readonly refreshPredicate: (entity: T) => boolean,\n    interval: number = 1000\n  ) {\n    this.interval = interval\n    this.current$ = new BehaviorSubject<T>(entity)\n\n    if (this.dataSource) {\n      this.entityId = this.dataSource.getId(entity)\n    }\n\n    this._refreshing$ = this.current$.pipe(\n      takeWhile((e) => this.keepRefreshing(e)),\n      delay(this.interval),\n      switchMap((e) => this.refresh(e)),\n      tap((refreshed) => this.current$.next(refreshed)),\n      startWith(this.current$.getValue()),\n      share() // Prevent multiple refreshes for each subscriber\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Gets the entity stream which is periodically refreshed.\n   */\n  public get entity$(): Observable<T> {\n    return this._refreshing$\n  }\n\n  /**\n   * Gets the current entity value as snapshot\n   */\n  public get entitySnapshot(): T {\n    return this.current$.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private keepRefreshing(entity: T): boolean {\n    if (this.refreshPredicate) {\n      return this.refreshPredicate(entity)\n    }\n    return false\n  }\n\n  private refresh(current: T): Observable<T> {\n    return this.dataSource\n      .findById(this.entityId)\n      .pipe(catchError((err) => this.handleRefreshError(err, current)))\n  }\n\n  private handleRefreshError(err: HttpErrorResponse, current: T): Observable<T> {\n    if (err.status >= 500) {\n      this.log.warn('Failed to refresh entity due to server side error, returning current!', err)\n      return of(current)\n    } else {\n      this.log.warn('Failed to refresh entity due to client side error, aborting refresh!', err)\n      return throwError(err)\n    }\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { ActivatedRoute, Router } from '@angular/router'\nimport { UrlQueryParams } from './url-query-params'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n/**\n * Manages bidirectional binding of\n * query params within the current URL fragment.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderUrlFragmentParamsService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _queryParams$ = new BehaviorSubject<UrlQueryParams>(UrlQueryParams.empty())\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private router: Router,\n    private activatedRoute: ActivatedRoute\n  ) {\n    this.activatedRoute.fragment.subscribe((fragment) => {\n      const params = this.parseQueryParams(fragment)\n      this.updateModel(params)\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get params$(): Observable<UrlQueryParams> {\n    return this._queryParams$.asObservable()\n  }\n\n  public get params(): UrlQueryParams {\n    return new UrlQueryParams(this._queryParams$.getValue())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Replaces all current params with the given ones.\n   */\n  public setParams(params: UrlQueryParams): void {\n    // Create new instance to trigger change detection on subscribers.\n    const updated = new UrlQueryParams(params)\n    this.setCurrentParams(updated)\n  }\n\n  /**\n   * Updates the current params with the given ones, effectively\n   * resulting in a merge.\n   */\n  public updateParams(params: UrlQueryParams): void {\n    // Create new instance to trigger change detection on subscribers.\n    const updated = this.params\n    updated.setAll(params.getAll())\n    this.setCurrentParams(updated)\n  }\n\n  /**\n   * Clears all current params.\n   */\n  public clearParams(): void {\n    this.setCurrentParams(UrlQueryParams.empty())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private setCurrentParams(params: UrlQueryParams): void {\n    this.updateModel(params)\n    this.updateFragment(params)\n  }\n\n  private updateModel(params: UrlQueryParams): void {\n    this._queryParams$.next(params)\n  }\n\n  private updateFragment(queryParams: UrlQueryParams): void {\n    const queryParamsStr = queryParams.toString()\n\n    // Since both URLSearchParams.toString and angular router.navigate use encodeURIComponent\n    // we need to decode the component to avoid duplicate encoding.\n    const fragmentStr = decodeURIComponent(queryParamsStr)\n    this.replaceUrlFragment(fragmentStr)\n  }\n\n  private replaceUrlFragment(fragment: string): void {\n    this._log.debug('Replacing URL fragment with: ' + fragment)\n    this.router.navigate([], {\n      fragment: decodeURIComponent(fragment),\n      replaceUrl: true, // if true, won't add a new browser history entry\n      queryParamsHandling: 'merge',\n    })\n  }\n\n  private parseQueryParams(queryParamsStr: string): UrlQueryParams {\n    // avoids invalid search params\n    if (queryParamsStr) {\n      return new UrlQueryParams(queryParamsStr)\n    } else {\n      return new UrlQueryParams()\n    }\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { Router, UrlTree } from '@angular/router'\nimport { Location } from '@angular/common'\n\n/**\n * Provides advanced router navigation support for Angular.\n *\n * Provides the ability to build external & absolute urls which\n * can be used in iframes or external navigation, such as opening\n * new tabs.\n *\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderRouterService {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private router: Router,\n    private location: Location\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Open the given url in a new window / tab.\n   * @param urlTree\n   * @param target\n   */\n  public openUrl(urlTree: UrlTree, target?: string): void {\n    const absoluteUrl = this.serializeUrlAbsolute(urlTree)\n    window.open(absoluteUrl, target)\n  }\n\n  public serializeUrlAbsolute(urlTree: UrlTree): string {\n    const externalUrl = this.serializeUrlExternal(urlTree)\n    return window.location.origin + externalUrl\n  }\n\n  public serializeUrlExternal(urlTree: UrlTree): string {\n    const url = this.router.serializeUrl(urlTree)\n    return this.location.prepareExternalUrl(url)\n  }\n}\n","export class DomUtil {\n  /**\n   * Determines if the target element is in a text editing context.\n   */\n  public static isInTextEditingContext(target: HTMLElement): boolean {\n    if (!target) {\n      return false\n    }\n\n    const isInput = ['INPUT', 'TEXTAREA'].includes(target.tagName)\n    const isInputAndIsNotCheckbox = isInput && (target as HTMLInputElement).type !== 'checkbox'\n    const isEditable = target.isContentEditable\n    const hasTextSelection = window.getSelection()?.toString().length > 0\n\n    return isInputAndIsNotCheckbox || isEditable || hasTextSelection\n  }\n\n  /**\n   * Determines if the dom element is visible to the user.\n   */\n  public static isElementVisible(element: HTMLElement): boolean {\n    if (!element) {\n      return false\n    }\n\n    if (!DomUtil.isVisibleInDOM(element)) {\n      return false\n    }\n\n    if (DomUtil.isObscuredByOpenDrawer(element)) {\n      return false\n    }\n\n    if (!DomUtil.isInViewport(element)) {\n      return false\n    }\n\n    return true\n  }\n\n  /**\n   * Determines if the element or a parent is not hidden by css\n   */\n  private static isVisibleInDOM(element: HTMLElement): boolean {\n    let currentElement: HTMLElement | null = element\n    while (currentElement) {\n      const style = window.getComputedStyle(currentElement)\n      if (\n        style.display === 'none' ||\n        style.visibility === 'hidden' ||\n        parseFloat(style.opacity) === 0\n      ) {\n        return false\n      }\n\n      // check if element is hidden by a parent (like a hidden tab)\n      if (currentElement.hidden || currentElement.getAttribute('aria-hidden') === 'true') {\n        return false\n      }\n\n      currentElement = currentElement.parentElement\n    }\n\n    return true\n  }\n\n  /**\n   * Determines if the element is in the viewport.\n   */\n  private static isInViewport(element: HTMLElement): boolean {\n    const rect = element.getBoundingClientRect()\n    const windowHeight = window.innerHeight || document.documentElement.clientHeight\n    const windowWidth = window.innerWidth || document.documentElement.clientWidth\n\n    return rect.bottom > 0 && rect.right > 0 && rect.top < windowHeight && rect.left < windowWidth\n  }\n\n  /**\n   * Determines if the element is obscured by an open drawer (i.e., there's an open drawer and the element is not within it).\n   */\n  private static isObscuredByOpenDrawer(element: HTMLElement): boolean {\n    const openDrawerClass = 'mat-drawer-opened'\n    const isOpenDrawerElementChildOfDocument = document.querySelector(`.${openDrawerClass}`)\n\n    if (!isOpenDrawerElementChildOfDocument) {\n      return false\n    }\n\n    const isElementInOpenDrawer = isOpenDrawerElementChildOfDocument.contains(element)\n    return !isElementInOpenDrawer\n  }\n}\n","import { Injectable } from '@angular/core'\n\nclass MemoryStorage implements Storage {\n  [index: number]: string\n  [key: string]: any\n\n  private data = new Map<string, any>()\n\n  public getItem(key: string): any {\n    return this.data.get(key)\n  }\n\n  public setItem(key: string, value: any): void {\n    this.data.set(key, value)\n  }\n\n  public removeItem(key: string): void {\n    this.data.delete(key)\n  }\n\n  public clear(): void {\n    this.data.clear()\n  }\n\n  public get length(): number {\n    return this.data.size\n  }\n\n  public key(index: number): string | null {\n    throw new Error('Method not supported in Memory Storage.')\n  }\n}\n\nclass WebStorageService {\n  constructor(private storage: Storage) {\n    if (!this.isStorageAvailable()) {\n      console.warn('No web storage available. Using in-memory storage fallback.')\n      this.storage = new MemoryStorage()\n    }\n  }\n\n  getItem(key: string): any {\n    return this.storage.getItem(key)\n  }\n\n  setItem(key: string, value: any): void {\n    this.storage.setItem(key, value)\n  }\n\n  removeItem(key: string): void {\n    this.storage.removeItem(key)\n  }\n\n  clear(): void {\n    this.storage.clear()\n  }\n\n  private isStorageAvailable(): boolean {\n    try {\n      // The best way to test if functionality is available\n      // is just to try and check if it worked or not.\n      this.setItem('testKey', 'hi')\n      this.getItem('testKey')\n      this.removeItem('testKey')\n\n      return true\n    } catch (error) {\n      return false\n    }\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class WebLocalStorage extends WebStorageService {\n  constructor() {\n    super(localStorage)\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class WebSessionStorage extends WebStorageService {\n  constructor() {\n    super(sessionStorage)\n  }\n}\n","import { Observable } from 'rxjs'\n\nexport interface ISuggestionProvider<T> {\n  /**\n   * Loads all suggestions, filtered by the given filter string.\n   */\n  loadSuggestions(filter: string | null): Observable<T[]>\n}\n\nexport class SuggestionProvider<T> implements ISuggestionProvider<T> {\n  public static build<T>(provider: (filter: string) => Observable<T[]>): ISuggestionProvider<T> {\n    return new SuggestionProvider<T>(provider)\n  }\n\n  constructor(private provider: (filter: string) => Observable<T[]>) {}\n\n  public loadSuggestions(filter: string): Observable<T[]> {\n    return this.provider(filter)\n  }\n}\n","import { BehaviorSubject, Observable } from 'rxjs'\nimport { map } from 'rxjs/operators'\n\nexport class ReactiveMap<TKey, TValue> implements Map<TKey, TValue> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _map: BehaviorSubject<Map<TKey, TValue>>\n\n  public readonly map$: Observable<Map<TKey, TValue>>\n  public readonly values$: Observable<TValue[]>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(initialValue?: Map<TKey, TValue>) {\n    this._map = new BehaviorSubject<Map<TKey, TValue>>(initialValue ?? new Map())\n\n    this.map$ = this._map.asObservable()\n    this.values$ = this._map.pipe(map((myMap) => Array.from(myMap.values())))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get size(): number {\n    return this._map.getValue().size\n  }\n\n  public clear(): void {\n    this.modify((myMap) => myMap.clear())\n  }\n\n  public set(key: TKey, value: TValue): this {\n    this.modify((myMap) => myMap.set(key, value))\n    return this\n  }\n\n  public delete(key: TKey): boolean {\n    return this.modify((myMap) => myMap.delete(key))\n  }\n\n  public get(key: TKey): TValue | undefined {\n    return this._map.getValue().get(key)\n  }\n\n  public has(key: TKey): boolean {\n    return this._map.getValue().has(key)\n  }\n\n  // ---\n\n  public get [Symbol.toStringTag]() {\n    return this._map.getValue()[Symbol.toStringTag]\n  }\n\n  public get [Symbol.iterator]() {\n    return this._map.getValue()[Symbol.iterator]\n  }\n\n  public entries(): IterableIterator<[TKey, TValue]> {\n    return this._map.getValue().entries()\n  }\n\n  public forEach(\n    callbackfn: (value: TValue, key: TKey, map: Map<TKey, TValue>) => void,\n    thisArg?: any\n  ): void {\n    return this._map.getValue().forEach(callbackfn, thisArg)\n  }\n\n  public keys(): IterableIterator<TKey> {\n    return this._map.getValue().keys()\n  }\n\n  public values(): IterableIterator<TValue> {\n    return this._map.getValue().values()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private modify<TRet>(modifyFn: (mapVal: Map<TKey, TValue>) => TRet): TRet {\n    const myMap = this._map.getValue()\n    const ret = modifyFn(myMap)\n    this._map.next(myMap)\n    return ret\n  }\n}\n","import { ThemePalette } from '@angular/material/core'\n\nexport class ThemeSpec {\n  /**\n   * Hero Background is a background color which should\n   * highlight the app theme. Usually its the primary palette.\n   */\n  public readonly heroBackground: ThemePalette\n\n  /**\n   * Hero Icon is the color of icons which are displayed on\n   * top of hero backgrounds. It should look well on it.\n   */\n  public readonly heroIconColor: ThemePalette\n\n  constructor(\n    public readonly id: string,\n    public readonly name: string,\n    public readonly cssClass: string,\n    public readonly dark: boolean,\n    heroBackground: ThemePalette = null,\n    heroIconColor: ThemePalette = null\n  ) {\n    this.heroBackground = heroBackground != null ? heroBackground : dark ? undefined : 'primary'\n    this.heroIconColor = heroIconColor != null ? heroIconColor : dark ? 'primary' : undefined\n  }\n}\n","import { ThemeSpec } from './theme-spec'\n\nexport class KnownElderThemes {\n  public static ELDER_LIGHT = new ThemeSpec(\n    'elder-light',\n    'Elder Light',\n    'elder-light-theme',\n    false\n  )\n\n  public static ELDER_DARK = new ThemeSpec('elder-dark', 'Elder Dark', 'elder-dark-theme', true)\n}\n","import { Injectable } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { ThemeSpec } from './theme-spec'\nimport { filter, map } from 'rxjs/operators'\nimport { KnownElderThemes } from './known-elder-themes'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderThemeService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _activeTheme$ = new BehaviorSubject<ThemeSpec>(null)\n  private readonly _defaultTheme$ = new BehaviorSubject<ThemeSpec>(null)\n  private readonly _themes$ = new BehaviorSubject<Map<string, ThemeSpec>>(new Map())\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this.registerTheme(KnownElderThemes.ELDER_LIGHT, true)\n    this.registerTheme(KnownElderThemes.ELDER_DARK)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get defaultTheme$(): Observable<ThemeSpec> {\n    return this._defaultTheme$.asObservable()\n  }\n\n  public get defaultThemeSnapshot(): ThemeSpec {\n    return this._defaultTheme$.getValue()\n  }\n\n  public get themes$(): Observable<ThemeSpec[]> {\n    return this._themes$.pipe(map((themeMap) => Array.from(themeMap.values())))\n  }\n\n  public get themesSnapshot(): ThemeSpec[] {\n    return Array.from(this._themes$.getValue().values())\n  }\n\n  public get activeThemeSnapshot(): ThemeSpec {\n    return this._activeTheme$.getValue()\n  }\n\n  public get activeTheme$(): Observable<ThemeSpec> {\n    return this._activeTheme$.asObservable().pipe(filter((theme) => !!theme))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public activateTheme(themeId: string): void {\n    const theme = this.findTheme(themeId)\n    if (theme) {\n      this.logger.debug('Activating theme ' + themeId)\n      this._activeTheme$.next(theme)\n    } else {\n      this.logger.warn(\n        'Failed to activate theme ' + themeId + ' -> could not find registered theme with this id!'\n      )\n    }\n  }\n\n  public defaultTheme(themeId: string) {\n    const theme = this.findTheme(themeId)\n    if (theme) {\n      this._defaultTheme$.next(theme)\n    }\n  }\n\n  public registerTheme(theme: ThemeSpec, markDefault?: boolean): void {\n    this.modifyThemes((themeMap) => themeMap.set(theme.id, theme))\n    if (markDefault || !this._defaultTheme$.getValue()) {\n      this._defaultTheme$.next(theme)\n    }\n  }\n\n  public unregisterTheme(themeId: string) {\n    this.modifyThemes((themeMap) => themeMap.delete(themeId))\n  }\n\n  public clearThemes() {\n    this.modifyThemes((themeMap) => themeMap.clear())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private findTheme(themeId: string): ThemeSpec | null {\n    const themes = this._themes$.getValue()\n    return themes.get(themeId)\n  }\n\n  private modifyThemes(themesFn: (themeMap: Map<string, ThemeSpec>) => void) {\n    const themes = new Map(this._themes$.getValue())\n    themesFn(themes)\n    this.cleanUpDefaultTheme(themes)\n    this._themes$.next(themes)\n  }\n\n  private cleanUpDefaultTheme(availableThemes: Map<string, ThemeSpec>): void {\n    const currentDefault = this.defaultThemeSnapshot\n    if (currentDefault) {\n      if (!availableThemes.has(currentDefault.id)) {\n        const available = availableThemes.values()\n        const newDefault = available.next().value as ThemeSpec\n        if (newDefault) {\n          this._defaultTheme$.next(newDefault)\n        } else {\n          this._defaultTheme$.next(null)\n        }\n      }\n    }\n  }\n}\n","import { Directive, OnDestroy, OnInit, Renderer2 } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderThemeService } from './elder-theme.service'\nimport { Subject } from 'rxjs'\nimport { ThemeSpec } from './theme-spec'\nimport { filter, takeUntil } from 'rxjs/operators'\n\n@Directive({\n  selector: '[elderThemeApplier]',\n  standalone: true,\n})\nexport class ElderThemeApplierDirective implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private activeThemeCss: string\n\n  private readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly themeService: ElderThemeService,\n    private readonly renderer: Renderer2\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.themeService.activeTheme$\n      .pipe(\n        takeUntil(this.destroy$),\n        filter((theme) => !!theme)\n      )\n      .subscribe((activeTheme) => this.activateTheme(activeTheme))\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private activateTheme(theme: ThemeSpec): void {\n    if (theme.cssClass != this.activeThemeCss) {\n      this.renderer.addClass(document.body, theme.cssClass)\n      if (this.activeThemeCss) {\n        this.renderer.removeClass(document.body, this.activeThemeCss)\n      }\n      this.activeThemeCss = theme.cssClass\n    }\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { ElderThemeService } from './elder-theme.service'\nimport { WebLocalStorage } from '../../common/webstorage/webstorage.service'\nimport { ThemeSpec } from './theme-spec'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderThemePreferenceService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly THEME_PREFERENCE_KEY = 'theme.preference'\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly themeService: ElderThemeService,\n    private readonly localStorage: WebLocalStorage\n  ) {\n    const preferenceThemeId = localStorage.getItem(this.THEME_PREFERENCE_KEY) as string\n    if (preferenceThemeId) {\n      this.activateThemeAndSave(preferenceThemeId)\n    } else {\n      this.activateDefaultThemeAndSave()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public activateThemeAndSave(themeId: string): void {\n    this.themeService.activateTheme(themeId)\n    this.localStorage.setItem(this.THEME_PREFERENCE_KEY, themeId)\n  }\n\n  public activateDefaultThemeAndSave(): void {\n    const theme = this.themeService.defaultThemeSnapshot\n    if (theme) {\n      this.activateThemeAndSave(theme.id)\n    }\n  }\n\n  public activateThemeByBrowserAndSave(): void {\n    const theme = this.themeByBrowserPreference()\n    if (theme) {\n      this.activateThemeAndSave(theme.id)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private themeByBrowserPreference(): ThemeSpec | null {\n    let initialTheme: ThemeSpec\n    if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n      initialTheme = this.themeService.themesSnapshot.find((t) => t.dark)\n    }\n    if (!initialTheme) {\n      initialTheme = this.themeService.defaultThemeSnapshot\n    }\n    return initialTheme\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderThemeService } from '../elder-theme.service'\nimport { combineLatest, Observable } from 'rxjs'\nimport { map, tap } from 'rxjs/operators'\nimport { ThemeSpec } from '../theme-spec'\nimport { ElderThemePreferenceService } from '../elder-theme-preference.service'\nimport { ThemePalette } from '@angular/material/core'\nimport { MatIcon } from '@angular/material/icon'\nimport { FormsModule } from '@angular/forms'\nimport { MatSlideToggle } from '@angular/material/slide-toggle'\nimport { AsyncPipe } from '@angular/common'\n\ntype ToggleTheme = 'default' | 'secondary'\n\n@Component({\n  selector: 'elder-theme-toggle',\n  templateUrl: './elder-theme-toggle.component.html',\n  styleUrls: ['./elder-theme-toggle.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatSlideToggle, FormsModule, MatIcon, AsyncPipe],\n})\nexport class ElderThemeToggleComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly activeToggleTheme$: Observable<ToggleTheme>\n\n  @Input()\n  public color: ThemePalette\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly themeService: ElderThemeService,\n    private readonly themePreferenceService: ElderThemePreferenceService\n  ) {\n    this.activeToggleTheme$ = combineLatest([\n      this.themeService.defaultTheme$,\n      this.themeService.activeTheme$,\n    ]).pipe(\n      map(([defaultTheme, activeTheme]) => this.decideToggleTheme(defaultTheme, activeTheme)),\n      tap((tt) => this.logger.debug('Active toggle theme: ' + tt))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onToggle(tggl: boolean): void {\n    const themes = this.themeService.themesSnapshot\n    const defaultTheme = this.themeService.defaultThemeSnapshot\n    let theme: ThemeSpec\n    if (tggl) {\n      theme = themes.find((theme) => theme.id !== defaultTheme?.id)\n    } else {\n      theme = defaultTheme\n    }\n    if (theme) {\n      this.themePreferenceService.activateThemeAndSave(theme.id)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private decideToggleTheme(defaultTheme: ThemeSpec, activeTheme: ThemeSpec): ToggleTheme {\n    if (defaultTheme?.id === activeTheme?.id) {\n      return 'default'\n    } else {\n      return 'secondary'\n    }\n  }\n}\n","@if (activeToggleTheme$ | async; as activeToggleTheme) {\n  <div class=\"layout-row place-start-center\">\n    <mat-slide-toggle\n      [ngModel]=\"activeToggleTheme !== 'default'\"\n      (ngModelChange)=\"onToggle($event)\"\n      [color]=\"color\"\n    >\n    </mat-slide-toggle>\n    <mat-icon [color]=\"color\">\n      {{ activeToggleTheme === 'default' ? 'light_mode' : 'brightness_2' }}\n    </mat-icon>\n  </div>\n}\n","import { Directive, Host, OnDestroy, OnInit, Optional } from '@angular/core'\nimport { ElderThemeService } from './elder-theme.service'\nimport { MatToolbar } from '@angular/material/toolbar'\nimport { takeUntil } from 'rxjs/operators'\nimport { Subject } from 'rxjs'\nimport { ThemeSpec } from './theme-spec'\n\n/**\n * Applies material theme palettes to material components.\n */\n@Directive({\n  selector: '[elderTheme]',\n  standalone: true,\n})\nexport class ElderThemeDirective implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Optional() @Host() private readonly matToolbar: MatToolbar,\n    private readonly themeService: ElderThemeService\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.themeService.activeTheme$\n      .pipe(takeUntil(this.destroy$))\n      .subscribe((theme) => this.applyTheme(theme))\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private applyTheme(theme: ThemeSpec): void {\n    if (this.matToolbar) {\n      this.matToolbar.color = theme.heroBackground\n    }\n  }\n}\n","import { APP_INITIALIZER, NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderThemeApplierDirective } from './elder-theme-applier.directive'\nimport { ElderThemeToggleComponent } from './elder-theme-toggle/elder-theme-toggle.component'\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle'\nimport { MatIconModule } from '@angular/material/icon'\nimport { FormsModule } from '@angular/forms'\nimport { ElderThemePreferenceService } from './elder-theme-preference.service'\nimport { ElderThemeDirective } from './elder-theme.directive'\n\nexport { ThemeSpec } from './theme-spec'\nexport { KnownElderThemes } from './known-elder-themes'\nexport { ElderThemeService } from './elder-theme.service'\nexport { ElderThemePreferenceService } from './elder-theme-preference.service'\nexport { ElderThemeApplierDirective } from './elder-theme-applier.directive'\nexport { ElderThemeToggleComponent } from './elder-theme-toggle/elder-theme-toggle.component'\nexport { ElderThemeDirective } from './elder-theme.directive'\n\nexport function themeInit(thpref: ElderThemePreferenceService) {\n  return () => {\n    // Required so the ElderThemePreferenceService is initialized\n  }\n}\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatSlideToggleModule,\n    MatIconModule,\n    FormsModule,\n    ElderThemeApplierDirective,\n    ElderThemeToggleComponent,\n    ElderThemeDirective,\n  ],\n  exports: [ElderThemeApplierDirective, ElderThemeToggleComponent, ElderThemeDirective],\n  providers: [\n    {\n      provide: APP_INITIALIZER,\n      useFactory: themeInit,\n      deps: [ElderThemePreferenceService],\n      multi: true,\n    },\n  ],\n})\nexport class ElderThemeModule {}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatCard } from '@angular/material/card'\n\n@Component({\n  selector: 'elder-access-denied',\n  templateUrl: './elder-access-denied.component.html',\n  styleUrls: ['./elder-access-denied.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatCard, MatIcon],\n})\nexport class ElderAccessDeniedComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n","<div class=\"layout-col flex p-md\">\n  <mat-card appearance=\"outlined\">\n    <div class=\"layout-row place-start-center gap-md\">\n      <mat-icon color=\"warn\">warning</mat-icon>\n      <span>You do not have the permission to access this resource.</span>\n    </div>\n  </mat-card>\n</div>\n","import { NgModule } from '@angular/core'\nimport { ElderAccessDeniedComponent } from './elder-access-denied.component'\nimport { CommonModule } from '@angular/common'\nimport { MatCardModule } from '@angular/material/card'\nimport { MatIconModule } from '@angular/material/icon'\n\nexport { ElderAccessDeniedComponent } from './elder-access-denied.component'\n\n@NgModule({\n  exports: [ElderAccessDeniedComponent],\n  imports: [CommonModule, MatIconModule, MatCardModule, ElderAccessDeniedComponent],\n})\nexport class ElderAccessDeniedModule {}\n","import { ChangeDetectionStrategy, Component, Input, OnInit, Output } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { AsyncPipe } from '@angular/common'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatRipple } from '@angular/material/core'\n\n@Component({\n  selector: 'elder-expand-toggle-button',\n  templateUrl: './elder-expand-toggle-button.component.html',\n  styleUrls: ['./elder-expand-toggle-button.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatRipple, MatIcon, AsyncPipe],\n})\nexport class ElderExpandToggleButtonComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _expandedChange = new BehaviorSubject<boolean>(false)\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get expandedChange(): Observable<boolean> {\n    return this._expandedChange.asObservable()\n  }\n\n  @Input()\n  public set expanded(value: boolean) {\n    this._expandedChange.next(value)\n  }\n\n  public get expanded(): boolean {\n    return this._expandedChange.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onToggleExpand(event: any): void {\n    this.expanded = !this.expanded\n  }\n}\n","<a\n  matRipple\n  class=\"layout-row place-start-center full toggle-button\"\n  (click)=\"onToggleExpand($event)\"\n  tabindex=\"0\"\n>\n  <div class=\"layout-row place-start-center flex\">\n    <ng-content></ng-content>\n\n    <span class=\"flex\"></span>\n\n    <div class=\"layout-col place-center-center\">\n      <mat-icon>{{\n        (expandedChange | async) ? 'keyboard_arrow_up' : 'keyboard_arrow_down'\n      }}</mat-icon>\n    </div>\n  </div>\n</a>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderExpandToggleButtonComponent } from './elder-expand-toggle-button.component'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatRippleModule } from '@angular/material/core'\n\nexport { ElderExpandToggleButtonComponent } from './elder-expand-toggle-button.component'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatButtonModule,\n    MatIconModule,\n    MatRippleModule,\n    ElderExpandToggleButtonComponent,\n  ],\n  exports: [ElderExpandToggleButtonComponent],\n})\nexport class ElderExpandToggleButtonModule {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core'\nimport { UntypedFormControl, FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport {\n  MatAutocompleteSelectedEvent,\n  MatAutocompleteTrigger,\n  MatAutocomplete,\n} from '@angular/material/autocomplete'\nimport {\n  MatChipInputEvent,\n  MatChipGrid,\n  MatChipRow,\n  MatChipRemove,\n  MatChipInput,\n} from '@angular/material/chips'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { EMPTY, Observable } from 'rxjs'\nimport { debounceTime, map, startWith, switchMap } from 'rxjs/operators'\nimport { ISuggestionProvider } from '../../../common/suggestion-provider'\nimport { FormFieldBaseComponent } from '../../../common/forms/form-field-base.component'\nimport { buildFormIntegrationProviders } from '../../../common/forms/template-composite-control'\nimport { ThemePalette, MatOption } from '@angular/material/core'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatInput } from '@angular/material/input'\nimport { MatIcon } from '@angular/material/icon'\nimport { AsyncPipe } from '@angular/common'\nimport { MatFormField, MatLabel } from '@angular/material/form-field'\n\n@Component({\n  selector: 'elder-label-input',\n  templateUrl: './labels-input.component.html',\n  styleUrls: ['./labels-input.component.scss'],\n  providers: buildFormIntegrationProviders(ElderLabelInputComponent),\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatFormField,\n    MatLabel,\n    MatChipGrid,\n    MatChipRow,\n    MatIcon,\n    MatChipRemove,\n    MatInput,\n    MatChipInput,\n    MatAutocompleteTrigger,\n    FormsModule,\n    ReactiveFormsModule,\n    MatAutocomplete,\n    MatOption,\n    AsyncPipe,\n    TranslateModule,\n  ],\n})\nexport class ElderLabelInputComponent<T> extends FormFieldBaseComponent<T[]> implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _compareWith: (o1: any, o2: any) => boolean\n  private _nameResolver: (o1: any) => string\n  private _colorResolver: (o1: any) => ThemePalette\n  private _labelBuilder: (rawinput: string) => any[]\n\n  private _allowCreate = true\n\n  public removable = true\n\n  public readonly labelInputControl: UntypedFormControl = new UntypedFormControl()\n  public availableSuggestions$: Observable<any[]> = EMPTY\n\n  @ViewChild('labelInput', { static: true })\n  private inputControl: ElementRef<HTMLInputElement>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    super()\n    this.floatLabel = 'auto'\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get currentLabels$(): Observable<T[]> {\n    return this.value$\n  }\n\n  @Input()\n  public set labels(value: T[]) {\n    this.value = value\n  }\n\n  @Input()\n  public set suggestionLoader(provider: ISuggestionProvider<any>) {\n    if (provider) {\n      this.availableSuggestions$ = this.labelInputControl.valueChanges.pipe(\n        startWith(<string>null),\n        debounceTime(150),\n        switchMap((value) => provider.loadSuggestions(value)),\n        map((labels) => this.filterNotPresent(labels))\n      )\n    } else {\n      this.logger.debug('Cant provide suggestions since no suggestion provider was registered!')\n      this.availableSuggestions$ = EMPTY\n    }\n  }\n\n  @Input()\n  public set allowNew(value: boolean) {\n    this._allowCreate = value\n  }\n\n  @Output()\n  public get labelsChanged(): Observable<any[]> {\n    return this.valueChange\n  }\n\n  /**\n   * A function to compare the option values with the selected values. The first argument\n   * is a value from an option. The second is a value from the selection. A boolean\n   * should be returned.\n   */\n  @Input()\n  public set compareWith(fn: (o1: any, o2: any) => boolean) {\n    if (typeof fn !== 'function') {\n      throw new Error('compareWith must be a function!')\n    }\n    this._compareWith = fn\n  }\n\n  /**\n   * A function which returns the color of a given label object.\n   */\n  @Input()\n  public set colorResolver(fn: (o1: any) => ThemePalette) {\n    if (typeof fn !== 'function') {\n      throw new Error('colorResolver must be a function!')\n    }\n    this._colorResolver = fn\n  }\n\n  /**\n   * A function which returns the display name of a given label object.\n   */\n  @Input()\n  public set nameResolver(fn: (o1: any) => string) {\n    if (typeof fn !== 'function') {\n      throw new Error('nameResolver must be a function!')\n    }\n    this._nameResolver = fn\n  }\n\n  /**\n   * A function which returns one or more labels for a given raw string\n   */\n  @Input()\n  public set labelBuilder(fn: (rawinput: string) => any[]) {\n    if (typeof fn !== 'function') {\n      throw new Error('labelBuilder must be a function!')\n    }\n    this._labelBuilder = fn\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life-Cycle Event                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public labelSelected(event: MatAutocompleteSelectedEvent) {\n    this.logger.debug('labelSelected:', event)\n    const selection = event.option.value\n    if (selection) {\n      this.resetInput()\n      this.addLabel(selection)\n    }\n  }\n\n  public createNewLabels(event: MatChipInputEvent): void {\n    if (this._allowCreate) {\n      const input = event.input\n      const value = event.value\n\n      if (value) {\n        const myLabels = this.buildLabels(value)\n        this.addLabels(myLabels)\n      }\n\n      if (input) {\n        // input.value = ''; // reset input\n        this.resetInput()\n      }\n    }\n  }\n\n  public addLabels(labels: T[]) {\n    const current = this.value ? this.value : []\n    this.replaceWith([...current, ...labels])\n  }\n\n  public addLabel(label: any) {\n    this.addLabels([label])\n  }\n\n  public removeLabel(toRemove: T): void {\n    const remaining = this.value.filter((l) => !this.areEqual(l, toRemove))\n\n    this.replaceWith(remaining)\n  }\n\n  public replaceWith(labels: T[]): void {\n    this.updateValue(labels)\n  }\n\n  public labelName(label: T): string {\n    if (label) {\n      return this._nameResolver ? this._nameResolver(label) : label.toString()\n    } else {\n      return ''\n    }\n  }\n\n  public labelColor(label: T): ThemePalette {\n    return this._colorResolver ? this._colorResolver(label) : undefined\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private resetInput(): void {\n    this.inputControl.nativeElement.value = ''\n  }\n\n  private buildLabels(rawName: string): any[] {\n    if (this._labelBuilder) {\n      return this._labelBuilder(rawName)\n    } else {\n      return [rawName]\n    }\n  }\n\n  private filterNotPresent(suggestions: any[]): any[] {\n    if (suggestions) {\n      if (this.value) {\n        return suggestions\n          .filter((l) => l)\n          .filter((l) => !this.value.some((el) => this.areEqual(el, l)))\n      } else {\n        return suggestions\n      }\n    } else {\n      return []\n    }\n  }\n\n  private areEqual(a: any, b: any): boolean {\n    return this._compareWith ? this._compareWith(a, b) : a === b\n  }\n}\n","<mat-form-field\n  [floatLabel]=\"floatLabel\"\n  class=\"full-width\"\n  [appearance]=\"appearance\"\n  [color]=\"color\"\n>\n  @if (label) {\n    <mat-label>{{ label | translate }}</mat-label>\n  }\n\n  <mat-chip-grid #chips>\n    @for (label of currentLabels$ | async; track label) {\n      <mat-chip-row\n        class=\"noselect\"\n        [color]=\"labelColor(label)\"\n        [disabled]=\"disabled\"\n        [removable]=\"removable\"\n        (removed)=\"removeLabel(label)\"\n      >\n        {{ labelName(label) }}\n        @if (!readonly && removable) {\n          <mat-icon matChipRemove>cancel</mat-icon>\n        }\n      </mat-chip-row>\n    }\n\n    <input\n      matInput\n      type=\"text\"\n      [matChipInputFor]=\"chips\"\n      [matAutocomplete]=\"labelAutoComplete\"\n      [formControl]=\"labelInputControl\"\n      (matChipInputTokenEnd)=\"createNewLabels($event)\"\n      [name]=\"name\"\n      [disabled]=\"disabled\"\n      [readonly]=\"readonly\"\n      [required]=\"required\"\n      [placeholder]=\"placeholder\"\n      autocomplete=\"off\"\n      #labelInput\n    />\n  </mat-chip-grid>\n\n  <mat-autocomplete\n    #labelAutoComplete=\"matAutocomplete\"\n    panelWidth=\"auto\"\n    (optionSelected)=\"labelSelected($event)\"\n  >\n    @for (suggestion of availableSuggestions$ | async; track suggestion) {\n      <mat-option [value]=\"suggestion\">\n        {{ labelName(suggestion) }}\n      </mat-option>\n    }\n  </mat-autocomplete>\n</mat-form-field>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderLabelInputComponent } from './labels-input/labels-input.component'\nimport { MatAutocompleteModule } from '@angular/material/autocomplete'\nimport { MatChipsModule } from '@angular/material/chips'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatInputModule } from '@angular/material/input'\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport { TranslateModule } from '@ngx-translate/core'\n\nexport { ElderLabelInputComponent } from './labels-input/labels-input.component'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatIconModule,\n    MatInputModule,\n    MatChipsModule,\n    MatAutocompleteModule,\n    TranslateModule,\n    ElderLabelInputComponent,\n  ],\n  exports: [ElderLabelInputComponent],\n})\nexport class ElderLabelsModule {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\n\n@Component({\n  selector: 'elder-card-panel',\n  templateUrl: './elder-card-panel.component.html',\n  styleUrls: ['./elder-card-panel.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class ElderCardPanelComponent {\n  constructor() {}\n}\n","<div class=\"layout-col elder-card-panel\">\n  <ng-content></ng-content>\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\n\n@Component({\n  selector: 'elder-dialog-panel',\n  templateUrl: './elder-dialog-panel.component.html',\n  styleUrls: ['./elder-dialog-panel.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class ElderDialogPanelComponent {\n  constructor() {}\n}\n","<div class=\"layout-col elder-dialog-panel\">\n  <ng-content></ng-content>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  Directive,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core'\nimport { BehaviorSubject } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common'\n\n@Directive({\n  selector: '[elderTogglePanelPrimary]',\n  standalone: true,\n})\nexport class ElderTogglePanelPrimaryDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n\n@Directive({\n  selector: '[elderTogglePanelSecondary]',\n  standalone: true,\n})\nexport class ElderTogglePanelSecondaryDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n\n@Component({\n  selector: 'elder-toggle-panel',\n  exportAs: 'elderTogglePanel',\n  templateUrl: './elder-toggle-panel.component.html',\n  styleUrls: ['./elder-toggle-panel.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AsyncPipe, NgTemplateOutlet],\n})\nexport class ElderTogglePanelComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly showPrimary$ = new BehaviorSubject<boolean>(true)\n\n  @ContentChild(ElderTogglePanelPrimaryDirective, { read: TemplateRef, static: true })\n  public primaryPanel: TemplateRef<any>\n\n  @ContentChild(ElderTogglePanelSecondaryDirective, { read: TemplateRef, static: true })\n  public secondaryPanel: TemplateRef<any>\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public showPrimary(): void {\n    this.showPrimary$.next(true)\n  }\n  public showSecondary(): void {\n    this.showPrimary$.next(false)\n  }\n  public toggle(): void {\n    this.logger.debug('Toggling elder-toggle-panel')\n    this.showPrimary$.next(!this.showPrimary$.getValue())\n  }\n}\n","<div class=\"layout-col full\">\n  @if (showPrimary$ | async) {\n    <ng-template [ngTemplateOutlet]=\"primaryPanel\"></ng-template>\n  } @else {\n    <ng-template [ngTemplateOutlet]=\"secondaryPanel\"></ng-template>\n  }\n</div>\n","import { Directive, HostListener, Input } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderTogglePanelComponent } from './elder-toggle-panel.component'\n\n@Directive({\n  selector: '[elderTogglePanelTrigger]',\n  standalone: true,\n})\nexport class ElderTogglePanelTriggerDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  @Input('elderTogglePanelTrigger')\n  public panel: ElderTogglePanelComponent\n\n  @Input('elderTogglePanelTriggerType')\n  public type: 'click' | 'focus' = 'click'\n\n  @Input('elderTogglePanelTriggerEnabled')\n  public enabled = true\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Event Listeners                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('click', ['$event'])\n  handleClick(event: MouseEvent): void {\n    if (this.type === 'click') {\n      this.handleTrigger()\n    }\n  }\n\n  @HostListener('focus', ['$event'])\n  handleFocus(event: MouseEvent): void {\n    if (this.type === 'focus') {\n      this.handleTrigger()\n    }\n  }\n\n  @HostListener('keydown', ['$event'])\n  handleKeyDown(event: KeyboardEvent): void {\n    // on click type handle also keydown events\n    if (this.type === 'click') {\n      if (event.key === 'Enter' || event.key === ' ') {\n        event.preventDefault()\n        event.stopPropagation()\n        this.handleTrigger()\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleTrigger(): void {\n    if (this.enabled && this.panel) {\n      this.panel.toggle()\n    }\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { MatCommonModule } from '@angular/material/core'\nimport { ElderCardPanelComponent } from './card-panel/elder-card-panel.component'\nimport { ElderDialogPanelComponent } from './elder-dialog-panel/elder-dialog-panel.component'\nimport {\n  ElderTogglePanelComponent,\n  ElderTogglePanelPrimaryDirective,\n  ElderTogglePanelSecondaryDirective,\n} from './toggle-panel/elder-toggle-panel.component'\nimport { ElderTogglePanelTriggerDirective } from './toggle-panel/elder-toggle-panel-trigger.directive'\n\nexport { ElderCardPanelComponent } from './card-panel/elder-card-panel.component'\nexport { ElderDialogPanelComponent } from './elder-dialog-panel/elder-dialog-panel.component'\nexport * from './toggle-panel/elder-toggle-panel.component'\nexport { ElderTogglePanelTriggerDirective } from './toggle-panel/elder-toggle-panel-trigger.directive'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatCommonModule,\n    ElderCardPanelComponent,\n    ElderDialogPanelComponent,\n    ElderTogglePanelComponent,\n    ElderTogglePanelPrimaryDirective,\n    ElderTogglePanelSecondaryDirective,\n    ElderTogglePanelTriggerDirective,\n  ],\n  exports: [\n    ElderCardPanelComponent,\n    ElderDialogPanelComponent,\n    ElderTogglePanelComponent,\n    ElderTogglePanelPrimaryDirective,\n    ElderTogglePanelSecondaryDirective,\n    ElderTogglePanelTriggerDirective,\n  ],\n})\nexport class ElderPanelModule {}\n","import { from, Observable, of, throwError } from 'rxjs'\nimport { map } from 'rxjs/operators'\n\n/***************************************************************************\n *                                                                         *\n * File Picker Options                                                     *\n *                                                                         *\n **************************************************************************/\n\nexport interface FileSystemFilePickerOptions {\n  /**\n   *\n   * ```\n   *   types: [\n   *     {\n   *       description: \"Images\",\n   *       accept: {\n   *         \"image/*\": [\".png\", \".gif\", \".jpeg\", \".jpg\"],\n   *       },\n   *     },\n   *   ],\n   *   excludeAcceptAllOption: true,\n   *   multiple: false,\n   * ```\n   */\n  excludeAcceptAllOptions?: boolean\n  id?: string\n  multiple?: boolean\n  startIn?:\n    | FileSystemHandle\n    | 'desktop'\n    | 'documents'\n    | 'downloads'\n    | 'music'\n    | 'pictures'\n    | 'videos'\n  types?: FileSystemFilePickerTypeOptions[]\n}\n\nexport interface FileSystemFilePickerTypeOptions {\n  accept: Record<string, string[]>\n  description?: string\n}\n\n/***************************************************************************\n *                                                                         *\n * Directory Picker Options                                                *\n *                                                                         *\n **************************************************************************/\n\nexport interface FileSystemDirectoryPickerOptions {\n  id?: string\n  mode?: string\n  startIn?:\n    | FileSystemHandle\n    | 'desktop'\n    | 'documents'\n    | 'downloads'\n    | 'music'\n    | 'pictures'\n    | 'videos'\n}\n\n/***************************************************************************\n *                                                                         *\n * FileSystem API                                                          *\n *                                                                         *\n **************************************************************************/\n\n/**\n * Holds experimental features of the browser `File System API`. No typescript lint checks\n * are performed here!\n */\nexport class FileSystemApi {\n  /***************************************************************************\n   *                                                                         *\n   * DataTransferItem                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public static isGetAsFileSystemHandleSupported(transferItem: DataTransferItem): boolean {\n    // @ts-expect-error - getAsFileSystemHandle is not yet in TypeScript's lib.dom.d.ts\n    return transferItem.getAsFileSystemHandle !== undefined\n  }\n\n  /**\n   * Returns an FileSystemHandle Observable of the given DataTransferItem. The FileSystemHandle can only be accessed in the `dragstart`\n   * or `drop` event. Otherwise, it will return null!\n   */\n  public static getAsFileSystemHandle(\n    transferItem: DataTransferItem\n  ): Observable<FileSystemHandle | null> {\n    // @ts-expect-error - getAsFileSystemHandle is not yet in TypeScript's lib.dom.d.ts\n    return from(transferItem.getAsFileSystemHandle())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * File Picker                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public static isFileSystemSupported(): boolean {\n    return 'showOpenFilePicker' in window\n  }\n\n  public static openFilePicker(\n    pickerOpts: FileSystemFilePickerOptions\n  ): Observable<FileSystemFileHandle[]> {\n    if (!FileSystemApi.isFileSystemSupported()) {\n      return throwError(() => new Error('File System API is not supported in this browser'))\n    }\n\n    try {\n      // @ts-expect-error - showOpenFilePicker is not yet in TypeScript's lib.dom.d.ts\n      return from(window.showOpenFilePicker(pickerOpts))\n    } catch (e) {\n      const errorMessage = e instanceof Error ? e.message : 'unknown error'\n      return throwError(\n        () => new Error(`Error occurred while opening file picker: ${errorMessage}`)\n      )\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Directory Picker                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public static isDirectoryPickerSupported(): boolean {\n    return 'showDirectoryPicker' in window\n  }\n\n  public static openDirectoryPicker(\n    pickerOpts: FileSystemDirectoryPickerOptions\n  ): Observable<FileSystemDirectoryHandle> {\n    try {\n      // @ts-expect-error - showDirectoryPicker is not yet in TypeScript's lib.dom.d.ts\n      return from(window.showDirectoryPicker(pickerOpts))\n    } catch (e) {\n      const errorMessage = e instanceof Error ? e.message : 'unknown error'\n      return throwError(\n        () => new Error(`Error occurred while opening directory picker: ${errorMessage}`)\n      )\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * FileSystemDirectoryHandle                                               *\n   *                                                                         *\n   **************************************************************************/\n\n  public static getHandlesFromDirectory(\n    dirHandle: FileSystemDirectoryHandle\n  ): Observable<FileSystemHandle[]> {\n    return from(FileSystemApi.getHandlesFromDirectoryAsync(dirHandle))\n  }\n\n  public static buildRelativeParent(\n    fileOrDirHandle: FileSystemHandle,\n    rootDirectory?: FileSystemDirectoryHandle\n  ): Observable<string | undefined> {\n    if (rootDirectory == null) {\n      return of(undefined)\n    }\n\n    const relativeParents$ = from(rootDirectory.resolve(fileOrDirHandle))\n    return relativeParents$.pipe(\n      map((parents) => {\n        // path/to/folder/file.jpg\n        const path = parents\n\n        // root/path/to/folder/file.jpg\n        path.unshift(rootDirectory.name)\n\n        // root/path/to/folder\n        path.pop()\n        return path.join('/')\n      })\n    )\n  }\n\n  private static async getHandlesFromDirectoryAsync(\n    dirHandle: FileSystemDirectoryHandle\n  ): Promise<FileSystemHandle[]> {\n    const handles: FileSystemHandle[] = []\n    // @ts-expect-error - values() is not yet in TypeScript's lib.dom.d.ts\n    for await (const handle of dirHandle.values()) {\n      handles.push(handle)\n    }\n    return handles\n  }\n}\n","import { from, Observable } from 'rxjs'\nimport { combineLatestWith, map } from 'rxjs/operators'\nimport { FileSystemApi } from '../file-system-api'\n\n/**\n * Represents a file and the relative path where the user has selected it.\n * This is useful if the user has selected a folder and files\n * are listed recursively.\n */\nexport class FileEntry {\n  /**\n   * Creates a file Entry without an explicit relative parent.\n   *\n   * However, depending on how the file was selected, some browsers\n   * encode the relative parent path in the property 'webkitRelativePath'\n   * which is also supported by this method.\n   */\n  public static ofFile(file: File): FileEntry {\n    return FileEntry.relativeFile(file, this.buildRelativeParent(file))\n  }\n\n  /**\n   * Creates an Observable of a File Entry by resolving its FileSystemFileHandle.\n   * @param fileHandle\n   * @param rootDirectory is needed to build a relative parent. Additionally useful for requesting permissions\n   */\n  public static ofFileHandle(\n    fileHandle: FileSystemFileHandle,\n    rootDirectory?: FileSystemDirectoryHandle\n  ): Observable<FileEntry> {\n    return from(fileHandle.getFile()).pipe(\n      combineLatestWith(FileSystemApi.buildRelativeParent(fileHandle, rootDirectory)),\n      map(([file, relativeParent]) =>\n        FileEntry.relativeFile(file, relativeParent, fileHandle, rootDirectory)\n      )\n    )\n  }\n\n  /**\n   * Creates a file Entry with a relative parent path\n   */\n  public static relativeFile(\n    file: File,\n    relativeParent: string | null,\n    fileHandle?: FileSystemFileHandle,\n    rootDirectoryHandle?: FileSystemDirectoryHandle\n  ): FileEntry {\n    if (relativeParent && relativeParent.endsWith('/')) {\n      relativeParent = relativeParent.substring(0, relativeParent.length - 1)\n    }\n    return new FileEntry(file, relativeParent, fileHandle, rootDirectoryHandle)\n  }\n\n  public static toFileMap(entries: FileEntry[]): Map<File, FileEntry> {\n    const map = new Map<File, FileEntry>()\n    entries.forEach((e) => map.set(e.file, e))\n    return map\n  }\n\n  public static toFileArray(entries: FileEntry[]): File[] {\n    return entries.map((e) => e.file)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Returns a string which specifies the file's path relative to the directory selected by the user.\n   */\n  public readonly relativePath: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  private constructor(\n    public readonly file: File,\n    /**\n     * Contains the relative path from the selected folder\n     * to this file. Only relevant if the user has selected a folder.\n     */\n    public readonly relativeParent: string | null,\n    public readonly fileHandle?: FileSystemFileHandle,\n    public readonly rootDirectoryHandle?: FileSystemDirectoryHandle\n  ) {\n    this.relativePath = FileEntry.buildRelativePath(relativeParent, file)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Returns a string which specifies the file's path relative to the directory selected by the user.\n   */\n  private static buildRelativePath(relativeParent: string, file: File): string {\n    if (relativeParent != null) {\n      return relativeParent + '/' + file.name\n    } else {\n      return file.name\n    }\n  }\n\n  private static buildRelativeParent(file: File): string {\n    let relativeParent: string = null\n\n    if (file.webkitRelativePath) {\n      if (file.webkitRelativePath.endsWith(file.name)) {\n        const nameStart = file.webkitRelativePath.length - file.name.length\n        relativeParent = file.webkitRelativePath.substring(0, nameStart)\n      } else {\n        relativeParent = file.webkitRelativePath\n      }\n    }\n    return relativeParent\n  }\n}\n","import { FileEntry } from './listing/file-entry'\nimport { ElementRef, Renderer2 } from '@angular/core'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Observable, Subject } from 'rxjs'\n\nexport class ElderFileSelectInput {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _fileInput: HTMLInputElement\n  private _unlisten: () => void\n\n  private _multiple: boolean\n  private _directory: boolean\n  private _accept: string\n\n  private readonly _filesSelected = new Subject<FileEntry[]>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private renderer: Renderer2,\n    private el: ElementRef\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get filesSelected(): Observable<FileEntry[]> {\n    return this._filesSelected\n  }\n\n  public set elderFileSelect(value: string) {\n    this._accept = value\n    if (this._fileInput) {\n      this.renderer.setProperty(this._fileInput, 'accept', value)\n    }\n  }\n\n  public set elderFileSelectMultiple(value: BooleanInput) {\n    this._multiple = coerceBooleanProperty(value)\n    if (this._fileInput) {\n      this.renderer.setProperty(this._fileInput, 'multiple', value)\n    }\n  }\n\n  public set elderFileSelectDirectory(value: BooleanInput) {\n    this._directory = coerceBooleanProperty(value)\n    if (this._fileInput) {\n      this.renderer.setAttribute(this._fileInput, 'webkitdirectory', 'true')\n      this.renderer.setAttribute(this._fileInput, 'directory', 'true')\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * <input type=\"file\"\n   *     hidden #fileInput\n   *     [multiple]=\"multiple\"\n   *     [accept]=\"accept\"\n   *     (change)=\"fileInputChanged()\"\n   * />\n   */\n  public createFileSelect(): void {\n    this._fileInput = this.renderer.createElement('input')\n    this.renderer.setAttribute(this._fileInput, 'hidden', 'true')\n    this.renderer.setAttribute(this._fileInput, 'type', 'file')\n    this.renderer.appendChild(this.el.nativeElement, this._fileInput)\n\n    if (this._accept) {\n      this.renderer.setProperty(this._fileInput, 'accept', this._accept)\n    }\n    if (this._multiple) {\n      this.renderer.setProperty(this._fileInput, 'multiple', this._multiple)\n    }\n    if (this._directory) {\n      this.renderer.setAttribute(this._fileInput, 'webkitdirectory', 'true')\n      this.renderer.setAttribute(this._fileInput, 'directory', 'true')\n    }\n\n    this._unlisten = this.renderer.listen(this._fileInput, 'change', (event) => {\n      this.fileInputChanged(this._fileInput.files)\n    })\n  }\n\n  public removeFileSelect(): void {\n    if (this._unlisten) {\n      this._unlisten()\n      this._unlisten = null\n    }\n    if (this._fileInput) {\n      this.renderer.removeChild(this.el.nativeElement, this._fileInput)\n      this._fileInput = null\n    }\n  }\n\n  public openFileSelectDialog(): void {\n    this._fileInput.click()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private fileInputChanged(fileList: FileList): void {\n    const files = this.toFileEntries(fileList)\n    this.logger.debug('fileInputChanged, files:', files)\n    this.clearFileList()\n    this._filesSelected.next(files)\n  }\n\n  private clearFileList() {\n    // not nice but works\n    this._fileInput.value = null\n  }\n\n  private toFileEntries(fileList: FileList): FileEntry[] {\n    const files: FileEntry[] = []\n    for (const key in fileList) {\n      if (!isNaN(parseInt(key, 0))) {\n        files.push(FileEntry.ofFile(fileList[key]))\n      }\n    }\n    return files\n  }\n}\n","import { Observable, switchMap, toArray, zip } from 'rxjs'\nimport { FileEntry } from './file-entry'\nimport { FileSystemApi } from '../file-system-api'\nimport { map } from 'rxjs/operators'\n\nexport class FileListingSystemHandle {\n  /***************************************************************************\n   *                                                                         *\n   * Public methods                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates a File Entry Array Observable by resolving its FileSystemHandle.\n   * @returns An `Observable<FileEntry[]>` with the FileSystemFileHandle included\n   */\n  public static listFiles(\n    handle: FileSystemHandle,\n    rootDirectory?: FileSystemDirectoryHandle\n  ): Observable<FileEntry[]> {\n    switch (handle.kind) {\n      case 'file':\n        return FileEntry.ofFileHandle(handle as FileSystemFileHandle, rootDirectory).pipe(toArray())\n      case 'directory':\n        return FileListingSystemHandle.listFilesRecursive(\n          handle as FileSystemDirectoryHandle,\n          rootDirectory\n        )\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static listFilesRecursive(\n    dirHandle: FileSystemDirectoryHandle,\n    rootDirectory?: FileSystemDirectoryHandle\n  ): Observable<FileEntry[]> {\n    return FileSystemApi.getHandlesFromDirectory(dirHandle).pipe(\n      map((handles) =>\n        FileListingSystemHandle.listFilesOfEach(handles, rootDirectory ? rootDirectory : dirHandle)\n      ),\n      switchMap((fileEntriesArray$) => zip(fileEntriesArray$)),\n      map((fileEntriesArray) => fileEntriesArray.flat())\n    )\n  }\n\n  private static listFilesOfEach(\n    handles: FileSystemHandle[],\n    rootDirectory?: FileSystemDirectoryHandle\n  ): Observable<FileEntry[]>[] {\n    return handles.map((fileOrDirHandle) =>\n      FileListingSystemHandle.listFiles(fileOrDirHandle, rootDirectory)\n    )\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { FileEntry } from './listing/file-entry'\nimport { ElderFileSelectInput } from './elder-file-select-input'\nimport {\n  FileSystemApi,\n  FileSystemDirectoryPickerOptions,\n  FileSystemFilePickerOptions,\n  FileSystemFilePickerTypeOptions,\n} from './file-system-api'\nimport { combineLatest, Observable, switchMap } from 'rxjs'\nimport { FileListingSystemHandle } from './listing/file-listing-system-handle'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\n\n@Directive({\n  selector: '[elderFileSelect]',\n  standalone: true,\n})\nexport class ElderFileSelectDirective implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  @Output()\n  public readonly elderFileSelectChange = new EventEmitter<FileEntry[]>()\n\n  @Output()\n  public readonly elderSingleFileSelectChange = new EventEmitter<File>()\n\n  private _legacyInput: ElderFileSelectInput\n  private _filePickerOptions: FileSystemFilePickerOptions\n  private _directoryPickerOptions: FileSystemDirectoryPickerOptions\n  private _useDirectoryPicker: boolean = false\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private renderer: Renderer2,\n    private el: ElementRef,\n    private destroyRef: DestroyRef\n  ) {\n    this._legacyInput = new ElderFileSelectInput(this.renderer, this.el)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    if (!FileSystemApi.isFileSystemSupported() || !FileSystemApi.isDirectoryPickerSupported()) {\n      this.logger.warn(\n        'showOpenFilePicker or showDirectoryPicker is not supported for this browser, falling back to legacy file picker'\n      )\n      this._legacyInput.createFileSelect()\n      this._legacyInput.filesSelected.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n        next: (multiFileChange) => this.pushFileChanges(multiFileChange),\n      })\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this._legacyInput.removeFileSelect()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set elderFileSelect(value: string) {\n    this._filePickerOptions = {\n      excludeAcceptAllOptions: true,\n      id: this._filePickerOptions?.id,\n      multiple: this._filePickerOptions?.multiple,\n      startIn: this._filePickerOptions?.startIn,\n      types: [this.buildTypeOption(value)],\n    }\n\n    this._legacyInput.elderFileSelect = value\n  }\n\n  private buildTypeOption(value: string): FileSystemFilePickerTypeOptions {\n    if (this.isFileExtension(value)) {\n      return {\n        accept: {\n          '*/*': value.trim().replace(/\\s+/g, '').split(','),\n        },\n      }\n    } else if (this.isMimeType(value)) {\n      return {\n        accept: { [value]: [] },\n      }\n    }\n    return null\n  }\n\n  private isFileExtension(input: string): boolean {\n    const regex = new RegExp(/^(\\.\\w+)(, ?\\.\\w+)*$/)\n    return regex.test(input)\n  }\n\n  private isMimeType(input: string): boolean {\n    const regex = new RegExp(/^.+\\/.+$/)\n    return regex.test(input)\n  }\n\n  @Input()\n  public set elderFileSelectMultiple(value: BooleanInput) {\n    this._filePickerOptions = {\n      excludeAcceptAllOptions: this._filePickerOptions?.excludeAcceptAllOptions,\n      id: this._filePickerOptions?.id,\n      multiple: coerceBooleanProperty(value),\n      startIn: this._filePickerOptions?.startIn,\n      types: this._filePickerOptions?.types,\n    }\n\n    this._legacyInput.elderFileSelectMultiple = value\n  }\n\n  /**\n   * Allow the user to select a directory. All files that are recursively contained are selected.\n   * However, the user will no longer be able to select individual files if this is enabled.\n   * @param value\n   */\n  @Input()\n  public set elderFileSelectDirectory(value: BooleanInput) {\n    this._useDirectoryPicker = coerceBooleanProperty(value)\n    this._legacyInput.elderFileSelectDirectory = value\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('click', ['$event'])\n  public onClick(event: any): void {\n    if (!this._useDirectoryPicker && FileSystemApi.isFileSystemSupported()) {\n      this.openFilePicker(this._filePickerOptions).subscribe({\n        next: (multiFileChange) => this.pushFileChanges(multiFileChange),\n      })\n    } else if (this._useDirectoryPicker && FileSystemApi.isDirectoryPickerSupported()) {\n      this.openDirectoryPicker(this._directoryPickerOptions).subscribe({\n        next: (multiFileChange) => this.pushFileChanges(multiFileChange),\n      })\n    } else {\n      this._legacyInput.openFileSelectDialog()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private pushFileChanges(multiFileChange: FileEntry[]): void {\n    this.elderFileSelectChange.next(multiFileChange)\n    const file = multiFileChange[0]?.file\n    if (file) {\n      this.elderSingleFileSelectChange.next(file)\n    }\n  }\n\n  public openFilePicker(pickerOpts: FileSystemFilePickerOptions): Observable<FileEntry[]> {\n    return FileSystemApi.openFilePicker(pickerOpts).pipe(\n      switchMap((files) => combineLatest(files.map((file) => FileEntry.ofFileHandle(file))))\n    )\n  }\n\n  public openDirectoryPicker(\n    pickerOpts: FileSystemDirectoryPickerOptions\n  ): Observable<FileEntry[]> {\n    return FileSystemApi.openDirectoryPicker(pickerOpts).pipe(\n      switchMap((dir) => FileListingSystemHandle.listFiles(dir))\n    )\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n} from '@angular/core'\nimport { FileEntry } from '../listing/file-entry'\nimport { ThemePalette } from '@angular/material/core'\nimport { MatIcon } from '@angular/material/icon'\nimport { ElderFileSelectDirective } from '../elder-file-select.directive'\nimport { MatIconButton } from '@angular/material/button'\n\n@Component({\n  selector: 'elder-file-select',\n  templateUrl: './file-select.component.html',\n  styleUrls: ['./file-select.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatIconButton, ElderFileSelectDirective, MatIcon],\n})\nexport class ElderFileSelectComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public multiple = false\n\n  @Input()\n  public accept: string = undefined\n\n  @Input()\n  public icon = 'add'\n\n  @Input()\n  public color: ThemePalette\n\n  @Output()\n  public readonly filesChange = new EventEmitter<FileEntry[]>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public fileInputChanged(files: FileEntry[]): void {\n    this.filesChange.next(files)\n  }\n}\n","<button\n  mat-icon-button\n  type=\"button\"\n  [elderFileSelect]=\"accept\"\n  [elderFileSelectMultiple]=\"multiple\"\n  (elderFileSelectChange)=\"fileInputChanged($event)\"\n>\n  <mat-icon [color]=\"color\">{{ icon }}</mat-icon>\n</button>\n","import { Component, Input } from '@angular/core'\nimport { forkJoin, Observable } from 'rxjs'\nimport { IFileUploadClient } from '../../../common/http/upload/file-upload-client'\nimport { HttpDataTransfer } from '../../../common/http/transfer/http-data-transfer'\nimport { FileEntry } from '../listing/file-entry'\nimport { TimeAgoPipe } from '../../../pipes/time-ago.pipe'\nimport { BytesPipe } from '../../../pipes/bytes.pipe'\nimport { MatProgressBar } from '@angular/material/progress-bar'\nimport { MatList, MatListSubheaderCssMatStyler, MatListItem } from '@angular/material/list'\nimport { ElderFileSelectComponent } from '../file-select/file-select.component'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton } from '@angular/material/button'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-file-upload',\n  templateUrl: './file-upload.component.html',\n  styleUrls: ['./file-upload.component.scss'],\n  imports: [\n    MatIconButton,\n    MatIcon,\n    ElderFileSelectComponent,\n    MatList,\n    MatListSubheaderCssMatStyler,\n    MatListItem,\n    MatProgressBar,\n    AsyncPipe,\n    BytesPipe,\n    TimeAgoPipe,\n  ],\n})\nexport class ElderFileUploadComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public files: FileEntry[] = []\n  public uploadProgress: Map<File, HttpDataTransfer>\n  public totalProgress: Observable<any>\n\n  @Input()\n  public multiple = false\n\n  @Input()\n  public accept: string = undefined\n\n  @Input()\n  public uploadClient: IFileUploadClient\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public startUpload(event: any): void {\n    this.totalProgress = this.uploadAllFiles(this.files)\n  }\n\n  public transferOf(file: File): HttpDataTransfer {\n    if (this.uploadProgress) {\n      return this.uploadProgress.get(file)\n    }\n    return undefined\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private uploadAllFiles(entries: FileEntry[]): Observable<any> {\n    this.uploadProgress = this.uploadClient.uploadFiles(FileEntry.toFileArray(entries))\n    return forkJoin(Array.from(this.uploadProgress.values()))\n  }\n}\n","<div class=\"layout-col\">\n  <div class=\"layout-row gap-md\">\n    @if (uploadClient) {\n      <button\n        mat-icon-button\n        type=\"button\"\n        color=\"primary\"\n        (click)=\"startUpload($event)\"\n        [disabled]=\"files.length === 0\"\n      >\n        <mat-icon>cloud_upload</mat-icon>\n      </button>\n    }\n\n    <elder-file-select\n      [multiple]=\"multiple\"\n      [accept]=\"accept\"\n      (filesChange)=\"files = $event\"\n    ></elder-file-select>\n  </div>\n\n  <mat-list>\n    <h2 mat-subheader>Selected Files ({{ files.length }})</h2>\n    @for (fileEntry of files; track fileEntry) {\n      <mat-list-item>\n        <mat-icon mat-list-icon>attach_file</mat-icon>\n        <h4 mat-line>{{ fileEntry.relativePath }}</h4>\n        <p mat-line>\n          {{ fileEntry.file.size | bytes }} - {{ fileEntry.file.lastModified | timeAgo }}\n        </p>\n        @if (transferOf(fileEntry.file)?.state$ | async; as state) {\n          <mat-progress-bar\n            [color]=\"$any(state).hasFailed ? 'warn' : undefined\"\n            mode=\"determinate\"\n            [value]=\"$any(state).progress.percentDone\"\n          >\n          </mat-progress-bar>\n        }\n      </mat-list-item>\n    }\n  </mat-list>\n</div>\n","import { EMPTY, mergeMap, Observable, Subscriber, zip } from 'rxjs'\nimport { FileEntry } from './file-entry'\nimport { map } from 'rxjs/operators'\n\nexport class FileListingWebkit {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public methods                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static listFilesRecursive(entry: FileSystemEntry): Observable<FileEntry[]> {\n    return FileListingWebkit.listFilesRecursiveAsync(entry, null)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static listFilesRecursiveAsync(\n    entry: FileSystemEntry,\n    parent: FileSystemDirectoryEntry\n  ): Observable<FileEntry[]> {\n    if (entry.isDirectory) {\n      const directoryEntry = entry as FileSystemDirectoryEntry\n      return FileListingWebkit.readEntries(directoryEntry).pipe(\n        mergeMap((entries) =>\n          zip(entries.map((entry) => this.listFilesRecursiveAsync(entry, directoryEntry)))\n        ),\n        map((files) => files.flat())\n      )\n    } else if (entry.isFile) {\n      const fileEntry = entry as FileSystemFileEntry\n      return FileListingWebkit.observableFile(fileEntry, parent).pipe(map((file) => [file]))\n    } else {\n      return EMPTY\n    }\n  }\n\n  private static observableFile(\n    fileEntry: FileSystemFileEntry,\n    parent: FileSystemDirectoryEntry | null\n  ): Observable<FileEntry> {\n    return new Observable<FileEntry>((observer) => {\n      fileEntry.file(\n        (file) => {\n          observer.next(\n            FileEntry.relativeFile(file, FileListingWebkit.trimStaringSlash(parent?.fullPath))\n          )\n          observer.complete()\n        },\n        (err) => {\n          observer.error(err)\n          observer.complete()\n        }\n      )\n    })\n  }\n\n  private static trimStaringSlash(path: string | null): string {\n    if (path) {\n      if (path.startsWith('/')) {\n        path = path.substring(1)\n      }\n    }\n    return path\n  }\n\n  private static readEntries(\n    directoryEntry: FileSystemDirectoryEntry\n  ): Observable<FileSystemEntry[]> {\n    return new Observable<FileSystemEntry[]>((observer) => {\n      FileListingWebkit.consumeReaderToCompletion(observer, directoryEntry.createReader())\n    })\n  }\n\n  private static consumeReaderToCompletion(\n    observer: Subscriber<FileSystemEntry[]>,\n    directoryReader: FileSystemDirectoryReader\n  ): void {\n    directoryReader.readEntries(\n      (entries) => {\n        if (entries && entries.length > 0) {\n          observer.next(entries)\n          this.consumeReaderToCompletion(observer, directoryReader)\n        } else {\n          observer.complete()\n        }\n      },\n      (err) => {\n        observer.error(err)\n        observer.complete()\n      }\n    )\n  }\n}\n","import { BehaviorSubject, Observable, of, switchMap, zip } from 'rxjs'\nimport { FileEntry } from './file-entry'\nimport { map } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { FileListingWebkit } from './file-listing-webkit'\nimport { FileListingSystemHandle } from './file-listing-system-handle'\nimport { FileSystemApi } from '../file-system-api'\nimport { signal } from '@angular/core'\n\nexport class FileListingRx {\n  public static readonly INSTANCE = new FileListingRx()\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public toFileList(transferItemList: DataTransferItemList): Observable<FileEntry[]> {\n    const obs: Observable<FileEntry[]>[] = []\n    for (let i = 0; i < transferItemList.length; i++) {\n      const transferItem = transferItemList[i]\n      obs.push(this.resolveTransferItem(transferItem))\n    }\n    return zip(obs).pipe(map((files) => files.flat()))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private resolveTransferItem(transferItem: DataTransferItem): Observable<FileEntry[]> {\n    if (FileSystemApi.isGetAsFileSystemHandleSupported(transferItem)) {\n      return FileSystemApi.getAsFileSystemHandle(transferItem).pipe(\n        switchMap((handle) =>\n          handle ? FileListingSystemHandle.listFiles(handle) : this.legacyFileListing(transferItem)\n        )\n      )\n    }\n    return this.legacyFileListing(transferItem)\n  }\n\n  private legacyFileListing(transferItem: DataTransferItem): Observable<FileEntry[]> {\n    const entry = transferItem.webkitGetAsEntry()\n    if (entry) {\n      return FileListingWebkit.listFilesRecursive(entry)\n    }\n    return this.fallbackFileListing(transferItem)\n  }\n\n  private fallbackFileListing(transferItem: DataTransferItem): Observable<FileEntry[]> {\n    const itemAsFile = transferItem.getAsFile()\n    if (itemAsFile) {\n      return of([FileEntry.ofFile(itemAsFile)])\n    } else {\n      if (transferItem.kind == 'file') {\n        return of([\n          FileEntry.ofFile(\n            new File([], '', {\n              type: transferItem.type,\n            })\n          ),\n        ])\n      }\n      if (transferItem.kind == 'string') {\n        const string$ = new BehaviorSubject<string>(null)\n        transferItem.getAsString((string) => string$.next(string))\n\n        string$.subscribe({ next: (log) => this.log.warn('DataTransferItem was string: ', log) })\n\n        return of([])\n      } else {\n        this.log.warn('Could not handle DataTransferItem!', transferItem)\n        return of([])\n      }\n    }\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  NgZone,\n  Output,\n  Renderer2,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { FileEntry } from './listing/file-entry'\nimport { FileListingRx } from './listing/file-listing-rx'\n\n@Directive({\n  selector: '[elderFileDropZone]',\n  standalone: true,\n})\nexport class ElderFileDropZoneDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private dropFilesEnabled = false\n  private readonly _dropFiles = new EventEmitter<FileEntry[]>()\n\n  private dragEnterFilesEnabled = false\n  private readonly _dragEnterFiles = new EventEmitter<FileEntry[]>()\n\n  /**\n   * Fired once when drag zone is entered.\n   */\n  @Output()\n  public readonly dragEnter = new EventEmitter<DragEvent>()\n\n  /**\n   * Fired continuously inside drag-zone\n   */\n  @Output()\n  public readonly dragOver = new EventEmitter<DragEvent>()\n\n  @Output()\n  public readonly dragEnd = new EventEmitter<DragEvent>()\n\n  @Input()\n  public dragOverClass = 'is-dragover'\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private hostRef: ElementRef,\n    private renderer: Renderer2,\n    private ngZone: NgZone\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get dragEnterFiles(): EventEmitter<FileEntry[]> {\n    this.dragEnterFilesEnabled = true\n    return this._dragEnterFiles\n  }\n\n  @Output()\n  public get dropFiles(): EventEmitter<FileEntry[]> {\n    this.dropFilesEnabled = true\n    return this._dropFiles\n  }\n\n  @Output()\n  public get elderFileDropZoneChange(): EventEmitter<FileEntry[]> {\n    return this.dropFiles\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('dragenter', ['$event'])\n  public onDragEnter(evt: DragEvent): void {\n    evt.preventDefault() // Prevent default browser action\n    this.dragEnter.emit(evt)\n    if (this.dragEnterFilesEnabled) {\n      this.collectFilesAsync(evt, (files) => this.dragEnterFiles.emit(files))\n    }\n  }\n\n  @HostListener('dragover', ['$event'])\n  public onDragOver(evt: DragEvent): void {\n    evt.preventDefault() // Prevent default browser action\n    this.renderer.addClass(this.hostRef.nativeElement, this.dragOverClass)\n    this.dragOver.emit(evt)\n  }\n\n  @HostListener('dragend', ['$event'])\n  @HostListener('dragleave', ['$event'])\n  public onDragEnd(evt: DragEvent): void {\n    evt.preventDefault() // Prevent default browser action\n    this.handleDragEnd(evt)\n    this.dragEnd.emit(evt)\n  }\n\n  @HostListener('drop', ['$event'])\n  public onDrop(evt: DragEvent): void {\n    this.logger.debug('Drop event!', evt)\n\n    evt.preventDefault()\n    evt.stopPropagation()\n    this.handleDragEnd(evt) // TODO Do this later\n\n    if (this.dropFilesEnabled) {\n      this.collectFilesAsync(evt, (files) => this._dropFiles.emit(files))\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleDragEnd(evt: DragEvent): void {\n    this.renderer.removeClass(this.hostRef.nativeElement, this.dragOverClass)\n  }\n\n  private collectFilesAsync(event: DragEvent, filesFn: (entries: FileEntry[]) => void): void {\n    this.ngZone.runOutsideAngular(() => {\n      try {\n        const items = event.dataTransfer.items\n        FileListingRx.INSTANCE.toFileList(items).subscribe({\n          next: (files) => this.ngZone.run(() => filesFn(files)),\n          error: (err) => this.logger.error('Failed to list Files from DataTransferItemList', err),\n        })\n      } catch (error) {\n        this.logger.error('Failed to handle DragEvent!', error)\n        // this.ngZone.run(() => this.error.emit('Folder upload is unsupported by this browser'));\n      }\n    })\n  }\n}\n","export class BlobUrl {\n  public static from(url: string, mimeType: string): BlobUrl {\n    return new BlobUrl(url, mimeType)\n  }\n\n  constructor(\n    public readonly url: string,\n    public readonly mimeType: string\n  ) {}\n}\n","export enum ToastType {\n  Error,\n  Warning,\n  Success,\n}\n","import { Component, OnInit, ChangeDetectionStrategy, Inject } from '@angular/core'\nimport {\n  MAT_SNACK_BAR_DATA,\n  MatSnackBarRef,\n  MatSnackBarLabel,\n  MatSnackBarActions,\n  MatSnackBarAction,\n} from '@angular/material/snack-bar'\nimport { Toast } from '../toast'\nimport { ToastType } from '../toast-type'\nimport { ThemePalette } from '@angular/material/core'\nimport { MatButton } from '@angular/material/button'\nimport { MatIcon } from '@angular/material/icon'\n\n@Component({\n  selector: 'elder-standard-toast',\n  templateUrl: './standard-toast.component.html',\n  styleUrls: ['./standard-toast.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatIcon, MatSnackBarLabel, MatSnackBarActions, MatButton, MatSnackBarAction],\n})\nexport class StandardToastComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly ToastType = ToastType\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly snackBarRef: MatSnackBarRef<StandardToastComponent>,\n    @Inject(MAT_SNACK_BAR_DATA) public readonly toast: Toast\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public close(): void {\n    this.snackBarRef.dismiss()\n  }\n\n  public iconColor(type: ToastType): ThemePalette {\n    switch (type) {\n      case ToastType.Success:\n        return 'primary'\n      case ToastType.Warning:\n        return 'accent'\n      case ToastType.Error:\n        return 'warn'\n      default:\n        return undefined\n    }\n  }\n\n  public icon(type: ToastType): string {\n    switch (type) {\n      case ToastType.Success:\n        return 'info'\n      case ToastType.Warning:\n        return 'warning'\n      case ToastType.Error:\n        return 'error'\n      default:\n        return ''\n    }\n  }\n\n  public trimDetailText(text: string, length: number): string {\n    if (text?.length > length) {\n      return text.substring(0, length) + '...'\n    } else {\n      return text\n    }\n  }\n}\n","<div\n  class=\"layout-col place-start-stretch gap-xs mat-mdc-snack-bar-container elder-toast\"\n  [class.elder-toast-type-default]=\"!toast.type\"\n  [class.elder-toast-type-primary]=\"toast.type === ToastType.Success\"\n  [class.elder-toast-type-warn]=\"toast.type === ToastType.Warning\"\n  [class.elder-toast-type-error]=\"toast.type === ToastType.Error\"\n>\n  <!-- Icon and Status -->\n  <div class=\"layout-row place-start-center gap-sm\">\n    <mat-icon class=\"noselect\">{{ icon(toast.type) }}</mat-icon>\n    <span class=\"toast-title mat-subtitle-2 noselect\">{{ toast.status }}</span>\n  </div>\n\n  <span></span>\n\n  <!-- Toast Message -->\n  @if (toast.message) {\n    <span class=\"mat-body noselect\" matSnackBarLabel>{{ toast.message }}</span>\n  }\n\n  <span></span>\n\n  <!-- Toast Detail -->\n  @if (toast.detail) {\n    <span class=\"mat-small noselect\" matSnackBarLabel>{{ trimDetailText(toast.detail, 200) }}</span>\n  }\n\n  <!-- Actions -->\n  <div class=\"layout-row place-end-center\" matSnackBarActions>\n    <button\n      mat-flat-button\n      matSnackBarAction\n      type=\"button\"\n      [color]=\"iconColor(toast.type)\"\n      (click)=\"close()\"\n    >\n      Ok\n    </button>\n  </div>\n</div>\n","import { HttpErrorResponse } from '@angular/common/http'\nimport { IStandardErrorDetail } from '../../common/errors/standard-error-detail'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ExceptionDetail } from '../../common/errors/exception-detail'\n\nexport class ErrorUtil {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private static readonly logger = LoggerFactory.getLogger('ErrorUtil')\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static buildExceptionDetail(error: any): ExceptionDetail {\n    if (error instanceof HttpErrorResponse) {\n      return ErrorUtil.httpErrorToExceptionDetail(error)\n    } else if (error instanceof Error) {\n      return { title: 'Error', detail: error.message, stacktrace: error.stack }\n    } else if (typeof error === 'string') {\n      return ErrorUtil.stringOrObjToExceptionDetail(error)\n    } else {\n      this.logger.trace('Unknown Error format. Stringifying error ...', error)\n      return { title: 'Unknown Error', detail: error, stacktrace: JSON.stringify(error) }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static httpErrorToExceptionDetail(response: HttpErrorResponse): ExceptionDetail {\n    let detail: ExceptionDetail\n    if (response.error) {\n      detail = ErrorUtil.stringOrObjToExceptionDetail(response.error)\n    }\n    if (!detail || !detail.detail) {\n      detail = {\n        title: response.statusText,\n        detail: response.message,\n        stacktrace: JSON.stringify(response),\n      }\n    }\n    return detail\n  }\n\n  private static stringOrObjToExceptionDetail(value: string | object): ExceptionDetail {\n    const error = ErrorUtil.tryParseJson(value)\n\n    if (typeof error === 'string') {\n      return {\n        title: 'Error',\n        detail: error,\n        stacktrace: null,\n      }\n    } else if (error) {\n      const errorDetail = error as IStandardErrorDetail\n\n      let title = ''\n      let detail = ''\n\n      if (errorDetail.type) {\n        detail += errorDetail.type + ': '\n      }\n\n      if (errorDetail.message) {\n        detail += errorDetail.message\n      }\n\n      title = `${errorDetail?.error ?? 'Error'}: ${errorDetail?.type ?? 'Unknown Exception'}`\n\n      return {\n        title: title,\n        detail: detail,\n        stacktrace: JSON.stringify(error),\n      }\n    } else {\n      return null\n    }\n  }\n\n  private static tryParseJson(error: object | string): object | string {\n    if (typeof error === 'string') {\n      if ((error as string).startsWith('{')) {\n        try {\n          this.logger.trace('Error string seems to be JSON. Trying to parse JSON ...', error)\n          error = JSON.parse(error)\n        } catch (e) {\n          this.logger.trace('Failed to parse error string to JSON', e)\n        }\n      }\n    }\n    return error\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { Subject, Observable } from 'rxjs'\nimport { Toast } from './toast'\nimport { ToastType } from './toast-type'\nimport { TranslateService } from '@ngx-translate/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { catchError } from 'rxjs/operators'\nimport { MatSnackBar } from '@angular/material/snack-bar'\nimport { StandardToastComponent } from './standard-toast/standard-toast.component'\nimport { ErrorUtil } from '../errors/error-util'\n\nexport * from './toast'\nexport * from './toast-type'\n\nexport interface ToastErrorDetails {\n  status: string\n  detail?: string\n}\n\nexport interface ToastOptions {\n  msg?: string\n  detail?: string\n  interpolateParams?: Object\n  displayDurationMs?: number\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderToastService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private subject = new Subject<Toast>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private translate: TranslateService,\n    private snackBar: MatSnackBar\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get notifications(): Observable<Toast> {\n    return this.subject.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public info(msg: string, options?: ToastOptions): void {\n    options = this.prepareOptions(msg, options)\n    this.translateMessage(options).subscribe((translatedMsg) =>\n      this.toast(\n        {\n          status: 'Info',\n          message: translatedMsg,\n          detail: options.detail,\n          type: ToastType.Success,\n        },\n        options?.displayDurationMs || 3000\n      )\n    )\n  }\n\n  public warn(msg: string, options?: ToastOptions): void {\n    options = this.prepareOptions(msg, options)\n    this.translateMessage(options).subscribe((translatedMsg) =>\n      this.toast(\n        {\n          status: 'Warning',\n          message: translatedMsg,\n          detail: options.detail,\n          type: ToastType.Warning,\n        },\n        options?.displayDurationMs || 5000\n      )\n    )\n  }\n\n  public error(msg: string, error: any, options?: ToastOptions): void {\n    this.logger.error(msg, error)\n\n    options = this.prepareOptions(msg, options)\n    this.translateMessage(options).subscribe((translatedMsg) => {\n      const errDetail = this.errorToToast(error)\n      this.toast(\n        {\n          status: errDetail.status,\n          message: translatedMsg,\n          detail: errDetail.detail,\n          type: ToastType.Error,\n        },\n        options?.displayDurationMs || 10000\n      )\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private prepareOptions(msg: string, options?: ToastOptions): ToastOptions {\n    options = options ? options : {}\n    options.msg = msg\n    return options\n  }\n\n  private errorToToast(error: any): ToastErrorDetails {\n    const errorDetail = ErrorUtil.buildExceptionDetail(error)\n    if (errorDetail) {\n      return {\n        status: errorDetail.title,\n        detail: errorDetail.detail,\n      }\n    } else {\n      return {\n        status: 'Unknown Error',\n        detail: JSON.stringify(error),\n      }\n    }\n  }\n\n  private toast(toast: Toast, durationMs: number): void {\n    this.subject.next(toast)\n    this.showToast(toast, durationMs)\n  }\n\n  private showToast(toast: Toast, durationMs: number = 5000): void {\n    this.snackBar.openFromComponent(StandardToastComponent, {\n      data: toast,\n      duration: durationMs,\n      panelClass: 'mat-mdc-snack-bar-container',\n    })\n    /*\n    this.snackBar.open(\n      toast.status + ': ' + toast.message + ' -> ' + toast.detail,\n      'OK', {\n        duration: 3000,\n        panelClass: this.toastClass(toast.type)\n      }\n      );*/\n  }\n\n  private toastClass(type: ToastType): string {\n    switch (type) {\n      case ToastType.Success:\n        return 'elder-success-toast'\n      case ToastType.Warning:\n        return 'elder-warning-toast'\n      case ToastType.Error:\n        return 'elder-error-toast'\n    }\n  }\n\n  private translateMessage(options: ToastOptions): Observable<string> {\n    return this.translate.get(options.msg, options.interpolateParams).pipe(\n      catchError((err) => options.msg) // // no translation found, we use the translation key\n    )\n  }\n}\n","import { ChangeDetectionStrategy, Component, input, Input, OnDestroy, OnInit } from '@angular/core'\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser'\nimport { BlobUrl } from '../blob-url'\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { HttpClientPristine } from '../../../common/http/http-client-pristine'\nimport { ElderToastService } from '../../toasts/elder-toast.service'\nimport { filter, map, takeUntil } from 'rxjs/operators'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { AsyncPipe } from '@angular/common'\n\nclass BlobContext {\n  public static textBlob(text: string, mimeType: BlobMimeType) {\n    return new BlobContext(null, mimeType, text)\n  }\n\n  public static safeUrl(safeUrl: SafeUrl, mimeType: BlobMimeType): BlobContext {\n    return new BlobContext(safeUrl, mimeType, null)\n  }\n\n  constructor(\n    public readonly safeUrl: SafeUrl,\n    public readonly mimeType: BlobMimeType,\n    public readonly text: string = null\n  ) {}\n\n  public get displayAsText(): boolean {\n    return !!this.text\n  }\n\n  public get cantDisplay(): boolean {\n    return (\n      !this.displayAsText &&\n      !this.displayEmbedded &&\n      !this.mimeType.isAudio &&\n      !this.mimeType.isImage &&\n      !this.mimeType.isVideo\n    )\n  }\n\n  public get displayEmbedded(): boolean {\n    return this.mimeType.isPdf\n  }\n}\n\nclass BlobMimeType {\n  public static readonly OCTET_STREAM = new BlobMimeType('application/octet-stream')\n\n  public static parse(mimeType: string): BlobMimeType {\n    if (mimeType) {\n      return new BlobMimeType(mimeType)\n    } else {\n      return BlobMimeType.OCTET_STREAM\n    }\n  }\n\n  constructor(public readonly value: string) {}\n\n  public get isOctetStream(): boolean {\n    return this.value.startsWith('application/octet-stream')\n  }\n\n  public get isVideo(): boolean {\n    return this.value.startsWith('video/')\n  }\n\n  public get isImage(): boolean {\n    return this.value.startsWith('image/')\n  }\n\n  public get isAudio(): boolean {\n    return this.value.startsWith('audio/')\n  }\n\n  public get isJson(): boolean {\n    return this.value.startsWith('application/json')\n  }\n\n  public get isPdf(): boolean {\n    return this.value.startsWith('application/pdf')\n  }\n\n  public get isText(): boolean {\n    return this.value.startsWith('text/') || this.isJson\n  }\n}\n\n@Component({\n  selector: 'elder-blob-viewer',\n  templateUrl: './elder-blob-viewer.component.html',\n  styleUrls: ['./elder-blob-viewer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AsyncPipe],\n})\nexport class ElderBlobViewerComponent implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly blobContext$ = new BehaviorSubject<BlobContext>(null)\n\n  private readonly _url$ = new BehaviorSubject<string>(null)\n  private readonly _mimeType$ = new BehaviorSubject<string>(null)\n  private readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private httpPristine: HttpClientPristine,\n    private domSanitizer: DomSanitizer,\n    private toastService: ElderToastService\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    combineLatest([this._url$, this._mimeType$])\n      .pipe(\n        takeUntil(this.destroy$),\n        filter(([url, mimeType]) => !!url),\n        map(([url, mimeType]) => BlobUrl.from(url, mimeType))\n      )\n      .subscribe((blobUrl) => (this.blobUrl = blobUrl))\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Attempt to display unknown blobs as text. (i.e. mime-type is octet-stream)\n   * @param unknownAsText\n   */\n  public displayUnknownAsText = input(false, {\n    transform: (input: BooleanInput) => coerceBooleanProperty(input),\n  })\n\n  /**\n   * Set a in memory blob to display.\n   * @param blob\n   */\n  @Input()\n  public set blob(blob: Blob) {\n    this.handleBlob(blob)\n  }\n\n  /**\n   * Set a blob-url to display.\n   * @param blobUrl\n   */\n  @Input()\n  public set blobUrl(blobUrl: BlobUrl) {\n    this.handleBlobUrl(blobUrl)\n  }\n\n  /**\n   * Set a url to display. Requires the mimeType to be set aswell.\n   * @param url\n   */\n  @Input()\n  public set url(url: string) {\n    this._url$.next(url)\n  }\n\n  /**\n   * Set the mime-type for the url to display. Only considered if url is set.\n   * @param mimeType\n   */\n  @Input()\n  public set mimeType(mimeType: string) {\n    this._mimeType$.next(mimeType)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleBlob(blob: Blob): void {\n    const safeUrl = this.createSafeUrlFromBlob(blob)\n    const mimeType = BlobMimeType.parse(blob.type)\n\n    if (this.canDisplayAsText(mimeType)) {\n      this.textContext(blob, mimeType)\n    } else {\n      this.nextBlob(BlobContext.safeUrl(safeUrl, mimeType))\n    }\n  }\n\n  private textContext(blob: Blob, mimeType: BlobMimeType): void {\n    blob.text().then((text) => {\n      this.nextBlob(BlobContext.textBlob(text, mimeType))\n    })\n  }\n\n  private handleBlobUrl(blobUrl: BlobUrl): void {\n    const safeUrl = this.createSafeUrlFromDataUrl(blobUrl.url)\n    const mimeType = BlobMimeType.parse(blobUrl.mimeType)\n\n    if (this.canDisplayAsText(mimeType)) {\n      this.loadAsText(blobUrl.url, mimeType)\n    } else {\n      this.nextBlob(BlobContext.safeUrl(safeUrl, mimeType))\n    }\n  }\n\n  private nextBlob(blobContext: BlobContext): void {\n    this.blobContext$.next(blobContext)\n  }\n\n  private createSafeUrlFromBlob(blob: Blob): SafeUrl {\n    const blobUrl = URL.createObjectURL(blob)\n    return this.domSanitizer.bypassSecurityTrustResourceUrl(blobUrl)\n  }\n\n  private createSafeUrlFromDataUrl(url: string): SafeUrl {\n    return this.domSanitizer.bypassSecurityTrustResourceUrl(url)\n  }\n\n  private loadAsText(pristineUrl: string, mimeType: BlobMimeType): void {\n    this.nextBlob(BlobContext.textBlob('Loading...', mimeType))\n\n    this.downloadAsText(pristineUrl).subscribe(\n      (text) => {\n        this.nextBlob(BlobContext.textBlob(text, mimeType))\n      },\n      (err) => {\n        this.nextBlob(BlobContext.textBlob('Failed to download content!', mimeType))\n        this.toastService.warn('Failed to download content!', err)\n      }\n    )\n  }\n\n  private canDisplayAsText(mimeType: BlobMimeType): boolean {\n    const can = mimeType.isText || (this.displayUnknownAsText() && mimeType.isOctetStream)\n\n    // TODO _displayUnknownAsText might be null due race condition see todo above.\n    // this.logger.debug('canDisplayAsText(' + mimeType.value + ') --> '\n    //  + can + ' ---> this._displayUnknownAsText:' + this._displayUnknownAsText, mimeType);\n\n    return can\n  }\n\n  private downloadAsText(pristineUrl: string): Observable<string> {\n    return this.httpPristine.get(pristineUrl, {\n      responseType: 'text',\n    })\n  }\n}\n","<div class=\"layout-col full place-center-center document-viewer\">\n  @if (blobContext$ | async; as blobContext) {\n    <!-- Video -->\n    @if (blobContext.mimeType.isVideo) {\n      <div class=\"layout-col place-center-center full\">\n        <video class=\"video\" controls autoplay loop>\n          <source [src]=\"blobContext.safeUrl\" [type]=\"blobContext.mimeType.value\" />\n          Your browser does not support HTML5 video.\n        </video>\n      </div>\n    }\n    <!-- Audio -->\n    @if (blobContext.mimeType.isAudio) {\n      <div class=\"layout-col place-center-center full\">\n        <audio class=\"audio\" controls autoplay loop>\n          <source [src]=\"blobContext.safeUrl\" [type]=\"blobContext.mimeType.value\" />\n          Your browser does not support HTML5 audio.\n        </audio>\n      </div>\n    }\n    <!-- Image -->\n    @if (blobContext.mimeType.isImage) {\n      <div class=\"layout-col full\" style=\"overflow: hidden\">\n        <img class=\"cover flex\" [src]=\"blobContext.safeUrl\" alt=\"blob image\" />\n      </div>\n    }\n    <!-- Embedded (PDFs etc) -->\n    @if (blobContext.displayEmbedded) {\n      <div class=\"layout-col full\">\n        <div class=\"full\">\n          <embed\n            class=\"embedded\"\n            [src]=\"blobContext.safeUrl\"\n            [type]=\"blobContext.mimeType.value\"\n            width=\"100%\"\n            height=\"100%\"\n          />\n        </div>\n      </div>\n    }\n    <!-- Plain Text -->\n    @if (blobContext.displayAsText) {\n      <div class=\"layout-col full\">\n        <textarea\n          class=\"document-content\"\n          placeholder=\"Content\"\n          [value]=\"blobContext.text\"\n          wrap=\"off\"\n          readonly\n        ></textarea>\n      </div>\n    }\n    @if (blobContext.cantDisplay) {\n      <div class=\"layout-col place-center-center full\">\n        <p>Cant display {{ blobContext.mimeType.value }}!</p>\n      </div>\n    }\n  }\n\n  @if (!(blobContext$ | async)) {\n    <div class=\"layout-col place-center-center full\">\n      <p>No Document.</p>\n    </div>\n  }\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { FileEntry } from '../../listing/file-entry'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatIcon } from '@angular/material/icon'\nimport { ElderFileDropZoneDirective } from '../../elder-file-drop-zone.directive'\n\n@Component({\n  selector: 'elder-drop-zone',\n  templateUrl: './elder-drop-zone.component.html',\n  styleUrls: ['./elder-drop-zone.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [ElderFileDropZoneDirective, MatIcon, TranslateModule],\n})\nexport class ElderDropZoneComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  @Output()\n  public readonly filesDropped = new EventEmitter<FileEntry[]>()\n\n  @Output()\n  public readonly dragOver = new EventEmitter<DragEvent>()\n\n  @Output()\n  public readonly dragEnd = new EventEmitter<DragEvent>()\n\n  @Input()\n  public icon: string = 'upload_file'\n\n  @Input()\n  public prompt: string = 'Drop Files here.'\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n}\n","<div\n  class=\"layout-col full elder-drop-zone\"\n  elderFileDropZone\n  (dropFiles)=\"filesDropped.emit($event)\"\n  (dragOver)=\"dragOver.emit($event)\"\n  (dragEnd)=\"dragEnd.emit($event)\"\n>\n  <div class=\"layout-col flex\">\n    <ng-content></ng-content>\n    <!-- Default content -->\n    <div class=\"layout-col flex place-center-center gap-sm elder-default-content\">\n      <mat-icon class=\"elder-drop-zone-icon\">{{ icon }}</mat-icon>\n      <span class=\"elder-drop-zone-prompt\">{{ prompt | translate }}</span>\n    </div>\n  </div>\n</div>\n","import { Injectable } from '@angular/core'\nimport { fromEvent, Observable, Subscription } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\ninterface PreventDefaultSubscription {\n  preventDragOver: Subscription\n  preventDrop: Subscription\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class GlobalDragDropService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _onDragStart$: Observable<DragEvent>\n  private readonly _onDragOver$: Observable<DragEvent>\n  private readonly _onDragLeave$: Observable<DragEvent>\n  private readonly _onDragEnter$: Observable<DragEvent>\n  private readonly _onDrop$: Observable<DragEvent>\n  private readonly _onDragEnd$: Observable<DragEvent>\n\n  private preventDefaultsSub: PreventDefaultSubscription\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this._onDragStart$ = fromEvent<DragEvent>(window, 'dragstart')\n    this._onDragOver$ = fromEvent<DragEvent>(window, 'dragover')\n    this._onDragEnter$ = fromEvent<DragEvent>(window, 'dragenter')\n    this._onDragLeave$ = fromEvent<DragEvent>(window, 'dragleave')\n    this._onDrop$ = fromEvent<DragEvent>(window, 'drop')\n    this._onDragEnd$ = fromEvent<DragEvent>(window, 'dragend')\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get dragStart$(): Observable<DragEvent> {\n    return this._onDragStart$\n  }\n\n  public get dragOver$(): Observable<DragEvent> {\n    return this._onDragOver$\n  }\n\n  public get dragLeave$(): Observable<DragEvent> {\n    return this._onDragLeave$\n  }\n\n  public get dragEnter$(): Observable<DragEvent> {\n    return this._onDragEnter$\n  }\n\n  public get drop$(): Observable<DragEvent> {\n    return this._onDrop$\n  }\n\n  public get dragEnd$(): Observable<DragEvent> {\n    return this._onDragEnd$\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Prevents the browser from loading dropped files. If the user accidentally\n   * missed a drop zone and drops files anywhere in the active app, the browser would\n   * load the file and loose the current app context.\n   */\n  public preventDefaultFileLoading(): void {\n    if (!this.preventDefaultsSub) {\n      this.preventDefaultsSub = {\n        preventDragOver: this.dragOver$.subscribe({ next: (e) => e.preventDefault() }),\n        preventDrop: this.drop$.subscribe({ next: (e) => this.preventDefaultBrowserAction(e) }),\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private preventDefaultBrowserAction(e: DragEvent): void {\n    e.preventDefault()\n    this.log.warn('Prevented default Browser Action on DragEvent ', e)\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderFileSelectComponent } from './file-select/file-select.component'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatListModule } from '@angular/material/list'\nimport { MatProgressBarModule } from '@angular/material/progress-bar'\nimport { ElderPipesModule } from '../../pipes/elder-pipes.module'\nimport { ElderFileUploadComponent } from './file-upload/file-upload.component'\nimport { ElderFileSelectDirective } from './elder-file-select.directive'\nimport { ElderFileDropZoneDirective } from './elder-file-drop-zone.directive'\nimport { ElderBlobViewerComponent } from './blob-viewer/elder-blob-viewer.component'\nimport { ElderDropZoneComponent } from './drag-n-drop/elder-drop-zone/elder-drop-zone.component'\nimport { TranslateModule } from '@ngx-translate/core'\n\nexport { ElderFileSelectComponent } from './file-select/file-select.component'\nexport { ElderFileUploadComponent } from './file-upload/file-upload.component'\nexport { ElderFileSelectDirective } from './elder-file-select.directive'\nexport { ElderFileDropZoneDirective } from './elder-file-drop-zone.directive'\nexport { ElderBlobViewerComponent } from './blob-viewer/elder-blob-viewer.component'\nexport { ElderDropZoneComponent } from './drag-n-drop/elder-drop-zone/elder-drop-zone.component'\nexport * from './drag-n-drop/global-drag-drop.service'\nexport * from './blob-url'\nexport * from './listing/file-entry'\nexport * from './listing/file-listing-rx'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatListModule,\n    MatButtonModule,\n    MatIconModule,\n    MatProgressBarModule,\n    ElderPipesModule,\n    TranslateModule,\n    ElderFileSelectComponent,\n    ElderFileUploadComponent,\n    ElderFileSelectDirective,\n    ElderFileDropZoneDirective,\n    ElderBlobViewerComponent,\n    ElderDropZoneComponent,\n  ],\n  exports: [\n    ElderFileSelectComponent,\n    ElderFileUploadComponent,\n    ElderFileSelectDirective,\n    ElderFileDropZoneDirective,\n    ElderBlobViewerComponent,\n    ElderDropZoneComponent,\n  ],\n})\nexport class ElderFileModule {}\n","import { Directive, TemplateRef, ViewContainerRef } from '@angular/core'\n\n@Directive({\n  selector: '[elderStackCard]',\n  standalone: true,\n})\nexport class ElderStackCardDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n","import { Observable, BehaviorSubject } from 'rxjs'\nimport { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop'\n\nexport class CardDropEvent<T, D = any> {\n  constructor(\n    /**\n     * fromStack The stack where the card originated from\n     */\n    public readonly fromStack: CardStack<T, D>,\n\n    /**\n     * toStack The stack where the card is dropped to\n     */\n    public readonly toStack: CardStack<T, D>,\n    /**\n     * card The card domain model\n     */\n    public readonly card: T,\n    /**\n     * copy Should the item being moved (copy = false) or duplicated (copy=true).\n     */\n    public readonly copy: boolean,\n    /**\n     *  fromIndex Index of the item when it was picked up fromStack.\n     */\n    public readonly fromIndex: number,\n    /**\n     * toIndex Current index of the item in toStack.\n     */\n    public readonly toIndex: number,\n    /**\n     * isPointerOverContainer Whether the user's pointer was over the container when the item was dropped.\n     */\n    public readonly isPointerOverContainer: boolean\n  ) {}\n}\n\n/**\n * Represents a card stack model.\n *\n * D: Type of the attached stack data\n * T: Type of the attached card data\n */\nexport class CardStack<T, D = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _id: string\n  private readonly _cards: BehaviorSubject<T[]>\n  private readonly _collapsed = new BehaviorSubject<boolean>(false)\n\n  private _title: string\n  private _data: D\n\n  private _sort: (a: T, b: T) => number\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static newStackSimple<T>(initialCards?: T[]): CardStack<T> {\n    return new CardStack('id-' + Math.floor(Math.random() * 6 + 1), '', null, initialCards)\n  }\n\n  public static newStack<T>(id: string, title: string, initialCards?: T[]): CardStack<T> {\n    return new CardStack(id, title, null, initialCards)\n  }\n\n  public static newStackData<T, D>(\n    id: string,\n    title: string,\n    stackData: D,\n    initialCards?: T[]\n  ): CardStack<T, D> {\n    return new CardStack(id, title, stackData, initialCards)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates a new card stack model\n   *\n   * @param id The unique stack id\n   * @param title The display title of this stack\n   * @param data Custom data attached to this stack\n   * @param initialCards Initial card data\n   */\n  constructor(id: string, title: string, data?: D, initialCards?: T[]) {\n    this._id = id\n    this._data = data\n    this._title = title\n    this._cards = new BehaviorSubject<T[]>(initialCards ? initialCards : [])\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Gets the id of this stack.\n   */\n  public get id(): string {\n    return this._id\n  }\n\n  /**\n   * Gets the custom data attached to this stack.\n   */\n  public get data(): D {\n    return this._data\n  }\n\n  /**\n   * Attach custom data to this stack.\n   */\n  public set data(data: D) {\n    this._data = data\n  }\n\n  /**\n   * Gets the display title of this stack\n   */\n  public get title(): string {\n    return this._title\n  }\n\n  /**\n   * Sets the display title of this stack\n   */\n  public set title(title: string) {\n    this._title = title\n  }\n\n  /**\n   * Observable stream of the current cards in this stack\n   */\n  public get cards(): Observable<T[]> {\n    return this._cards.asObservable()\n  }\n\n  public get cardsSnapshot(): T[] {\n    return [...this._cards.getValue()]\n  }\n\n  public get collapsed(): Observable<boolean> {\n    return this._collapsed.asObservable()\n  }\n\n  public set isCollapsed(state: boolean) {\n    this._collapsed.next(state)\n  }\n\n  public get isCollapsed(): boolean {\n    return this._collapsed.getValue()\n  }\n\n  public set sort(sortFn: (a: T, b: T) => number) {\n    this._sort = sortFn\n  }\n\n  public get sort(): (a: T, b: T) => number {\n    return this._sort\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public clear() {\n    this.replaceCards([])\n  }\n\n  public replaceCards(newCards: T[]): void {\n    if (this._sort) {\n      newCards.sort(this._sort)\n    }\n\n    this._cards.next(newCards)\n  }\n\n  public addCard(card: T, desiredIndex?: number): void {\n    const cards = this.cardsSnapshot\n    if (desiredIndex === undefined || desiredIndex === null) {\n      cards.push(card)\n    } else {\n      const dummy = [card]\n      transferArrayItem(dummy, cards, 0, desiredIndex)\n    }\n    this.replaceCards(cards)\n  }\n\n  public removeCard(card: T): void {\n    this.replaceCards(this.cardsSnapshot.filter((c) => c !== card))\n  }\n\n  public moveCard(fromIndex: number, toIndex: number): void {\n    const snapshot = this.cardsSnapshot\n    moveItemInArray(snapshot, fromIndex, toIndex)\n    this.replaceCards(snapshot)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Directive,\n  HostBinding,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { MatCardAppearance, MatCard } from '@angular/material/card'\n\n@Directive({\n  selector: 'elder-padding, [elder-padding], [elderPadding]',\n  standalone: true,\n})\nexport class ElderPaddingDirective {\n  @Input('elderPadding')\n  @HostBinding('style.padding')\n  public padding = '8px'\n}\n\n/**\n * Title of a card, needed as it's used as a selector in the API.\n */\n@Directive({\n  selector: 'elder-card-title, [elder-card-title], [elderCardTitle]',\n  standalone: true,\n})\nexport class ElderCardTitleDirective {\n  @HostBinding('class.mat-subtitle-1') public readonly classTitle = true\n  @HostBinding('class.elder-card-title') public readonly classCardTitle = true\n}\n\n/**\n * Content of a card, needed as it's used as a selector in the API.\n */\n@Directive({\n  selector: 'elder-card-content, [elder-card-content], [elderCardContent]',\n  standalone: true,\n})\nexport class ElderCardContentDirective {\n  @HostBinding('class.elder-card-content') public readonly classCardContent = true\n\n  @Input()\n  @HostBinding('style.padding')\n  public padding = '4px 12px 4px 12px'\n}\n\n/**\n * Actions in the right top corner, needed as it's used as a selector in the API.\n */\n@Directive({\n  selector: 'elder-card-header-actions, [elder-card-header-actions], [elderCardHeaderActions]',\n  standalone: true,\n})\nexport class ElderCardHeaderActionsDirective {\n  @HostBinding('class.elder-card-header-actions') public readonly classHeaderActions = true\n}\n\n/**\n * Subsection title\n */\n@Directive({\n  selector: 'elder-card-subtitle, [elder-card-subtitle], [elderCardSubtitle]',\n  standalone: true,\n})\nexport class ElderCardSubtitleDirective {\n  @HostBinding('class.text-title-medium') public readonly classSubtitle = true\n  @HostBinding('class.elder-card-subtitle') public readonly classCardSubtitle = true\n}\n\n@Component({\n  selector: 'elder-card',\n  templateUrl: './elder-card.component.html',\n  styleUrls: ['./elder-card.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatCard],\n})\nexport class ElderCardComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _appearance: MatCardAppearance = 'outlined'\n\n  @HostBinding('class.elder-card-host') public readonly classCardHost = true\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get appearance(): MatCardAppearance {\n    return this._appearance\n  }\n\n  @Input()\n  public set appearance(appearance: MatCardAppearance) {\n    this._appearance = appearance\n  }\n\n  /**\n   * @deprecated Switch to appearance=\"raised\"\n   */\n  @Input()\n  public set float(value: BooleanInput) {\n    this._appearance = coerceBooleanProperty(value) ? 'raised' : 'outlined'\n  }\n\n  /**\n   * @deprecated Switch to appearance=\"outlined\"\n   */\n  @Input()\n  public set flat(value: BooleanInput) {\n    this._appearance = coerceBooleanProperty(value) ? 'outlined' : 'raised'\n  }\n}\n","<mat-card class=\"full mat-typography\" [appearance]=\"appearance\">\n  <!-- If one does not want to use predefined card-sections. -->\n  <ng-content></ng-content>\n\n  <!-- Card Header -->\n  <ng-content select=\"elder-card-header\"></ng-content>\n\n  <!-- Card Content -->\n  <ng-content select=\"elder-card-content\"></ng-content>\n</mat-card>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef,\n} from '@angular/core'\nimport { CardDropEvent, CardStack } from '../card-stack'\nimport { Observable } from 'rxjs/internal/Observable'\nimport { first } from 'rxjs/operators'\nimport {\n  CdkDrag,\n  CdkDragDrop,\n  CdkDragEnter,\n  CdkDragExit,\n  CdkDropList,\n} from '@angular/cdk/drag-drop'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderStackCardDirective } from '../card-organizer/elder-stack-card.directive'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderCardComponent } from '../../cards/elder-card/elder-card.component'\nimport { MatDivider } from '@angular/material/divider'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton } from '@angular/material/button'\nimport { NgClass, NgTemplateOutlet, AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-card-stack',\n  templateUrl: './elder-card-stack.component.html',\n  styleUrls: ['./elder-card-stack.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatIconButton,\n    MatIcon,\n    MatDivider,\n    CdkDropList,\n    ElderCardComponent,\n    CdkDrag,\n    NgClass,\n    NgTemplateOutlet,\n    AsyncPipe,\n    TranslateModule,\n  ],\n})\nexport class ElderCardStackComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger('ElderCardStackComponent')\n\n  private _stack: CardStack<any, any>\n\n  public cards$: Observable<any[]>\n\n  @Input()\n  public stackId: string\n\n  @Input()\n  public headerEnabled = true\n\n  @Input()\n  public headerTitle: string\n\n  @Input()\n  public canRemove: boolean\n\n  @Input()\n  public canAdd = true\n\n  @Input()\n  public canDrag = true\n\n  @Input()\n  public removeConfirmation: (card: any) => Observable<boolean>\n\n  @Output()\n  public readonly requestNewCard = new EventEmitter<CardStack<any, any>>()\n\n  @Output()\n  public readonly requestRemoveCard = new EventEmitter<any>()\n\n  @Output()\n  public readonly cardClick = new EventEmitter<any>()\n\n  @Output()\n  public readonly cardDropped = new EventEmitter<CardDropEvent<any, any>>()\n\n  @Input()\n  public canEnterPredicate: (card: any, stack: CardStack<any, any>) => boolean\n\n  @Input()\n  public connectedTo: string[] = []\n\n  /**\n   * If enabled, the card stack will\n   * automatically handle card drag & drops\n   * and move card from one stack to another and move\n   * them inside a stack.\n   */\n  @Input()\n  public autoMoveCards = false\n\n  // Templates\n\n  @ContentChild(ElderStackCardDirective, { read: TemplateRef, static: true })\n  public cardTemplateQuery: TemplateRef<any>\n  private _cardTemplate: TemplateRef<any>\n\n  @Input()\n  public canCollapse = false\n\n  @Input()\n  public copyOnDrag = false\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this.stackId = 'id-' + Math.floor(Math.random() * 6 + 1)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set cardTemplate(template: TemplateRef<any>) {\n    this._cardTemplate = template\n  }\n\n  public get cardTemplate(): TemplateRef<any> {\n    return this._cardTemplate || this.cardTemplateQuery\n  }\n\n  public get stack(): CardStack<any, any> {\n    return this._stack\n  }\n\n  @Input()\n  public set stack(value: CardStack<any, any>) {\n    this._stack = value\n\n    if (this._stack) {\n      this.cards$ = this._stack.cards\n    } else {\n      this.cards$ = null\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API Drag & Drop                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public cardEntered(event: CdkDragEnter<any>): void {\n    // this.logger.debug('Drag enter:', event);\n  }\n\n  public cardExited(event: CdkDragExit<any>): void {\n    // this.logger.debug('Drag exit', event);\n  }\n\n  public cardDrop(event: CdkDragDrop<CardStack<any, any>>): void {\n    const cardDrop = new CardDropEvent(\n      event.previousContainer.data,\n      event.container.data,\n      event.item.data,\n      this.copyOnDrag,\n      event.previousIndex,\n      event.currentIndex,\n      event.isPointerOverContainer\n    )\n\n    if (this.autoMoveCards) {\n      this.handleCardDrop(cardDrop) // TODO Make configurable or disable when custom sort is enabled?\n    }\n\n    this.cardDropped.next(cardDrop)\n  }\n\n  public get enterPredicate(): (drag: CdkDrag<any>, drop: CdkDropList<any>) => boolean {\n    return (drag: CdkDrag<any>, drop: CdkDropList<any>) => {\n      if (this.canEnterPredicate) {\n        return this.canEnterPredicate(drag.data, drop.data)\n      }\n      return true\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onRequestNewCard(event: MouseEvent): void {\n    this.requestNewCard.next(this._stack)\n  }\n\n  public onRequestRemoveCard(event: MouseEvent, card: any): void {\n    if (event) {\n      event.stopPropagation()\n    }\n\n    if (this.removeConfirmation !== undefined) {\n      this.removeConfirmation(card)\n        .pipe(first())\n        .subscribe((confirmed) => {\n          if (confirmed) {\n            this.removeCard(card)\n          }\n        })\n    } else {\n      this.removeCard(card)\n    }\n  }\n\n  public onCardSelected(event: MouseEvent, card: any): void {\n    this.cardClick.next(card)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  private removeCard(card: any): void {\n    this._stack.removeCard(card)\n    this.requestRemoveCard.next(card)\n  }\n\n  /**\n   * React to drag and drop events -\n   * will move cards between stacks and sort them if possible.\n   * @param cardDrop\n   */\n  private handleCardDrop(cardDrop: CardDropEvent<any, any>): void {\n    if (cardDrop.fromStack === cardDrop.toStack && cardDrop.toStack === this._stack) {\n      // Drag & Drop inside the same stack -> sort\n\n      if (!this._stack.sort) {\n        // Only allow manual sort when the user did not provide\n        // a general sort function\n        this._stack.moveCard(cardDrop.fromIndex, cardDrop.toIndex)\n      }\n    } else {\n      // Dropped Card from another stack\n\n      if (!cardDrop.copy) {\n        cardDrop.fromStack.removeCard(cardDrop.card)\n      }\n      cardDrop.toStack.addCard(cardDrop.card, cardDrop.toIndex)\n    }\n  }\n}\n","<div class=\"layout-col full card-stack hoverme\">\n  <!-- Header -->\n  @if (headerEnabled) {\n    <header class=\"layout-row place-start-center flex-none gap-md stack-header p-md\">\n      <h3 class=\"mat-subtitle-2 noselect\">{{ headerTitle | translate }}</h3>\n      <small class=\"mat-caption noselect\">({{ (cards$ | async)?.length }})</small>\n      <span class=\"flex\"></span>\n      @if (canAdd) {\n        <button mat-icon-button type=\"button\" (click)=\"onRequestNewCard($event)\">\n          <mat-icon>add</mat-icon>\n        </button>\n      }\n    </header>\n  }\n  @if (headerEnabled) {\n    <mat-divider></mat-divider>\n  }\n\n  <!-- card list -->\n  <div class=\"layout-col flex card-container\">\n    <div\n      class=\"layout-col gap-sm scrollable p-sm card-list\"\n      [id]=\"stackId\"\n      cdkDropList\n      [cdkDropListDisabled]=\"!canDrag\"\n      [cdkDropListData]=\"stack\"\n      [cdkDropListConnectedTo]=\"connectedTo\"\n      [cdkDropListEnterPredicate]=\"enterPredicate\"\n      (cdkDropListEntered)=\"cardEntered($event)\"\n      (cdkDropListExited)=\"cardExited($event)\"\n      (cdkDropListDropped)=\"cardDrop($event)\"\n    >\n      <!-- card -->\n      @for (card of cards$ | async; track card; let i = $index) {\n        <elder-card\n          class=\"card flex-none\"\n          [ngClass]=\"cardClick.observed ? 'clickable' : 'unclickable'\"\n          cdkDrag\n          [cdkDragData]=\"card\"\n          (click)=\"onCardSelected($event, card)\"\n        >\n          <div class=\"layout-row place-between-center flex\">\n            <ng-container\n              *ngTemplateOutlet=\"\n                cardTemplate || simpleCardTemplate;\n                context: { $implicit: card, index: i }\n              \"\n            ></ng-container>\n            @if (canRemove) {\n              <button\n                mat-icon-button\n                type=\"button\"\n                class=\"hide\"\n                (click)=\"onRequestRemoveCard($event, card)\"\n              >\n                <mat-icon>close</mat-icon>\n              </button>\n            }\n          </div>\n        </elder-card>\n      }\n    </div>\n  </div>\n\n  <ng-template #simpleCardTemplate let-card>\n    <div class=\"layout-col flex\">\n      <p class=\"noselect\">{{ card }}</p>\n    </div>\n  </ng-template>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef,\n} from '@angular/core'\nimport { CardOrganizerData } from '../card-organizer-data'\nimport { CardDropEvent, CardStack } from '../card-stack'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Observable } from 'rxjs/internal/Observable'\nimport { ElderStackCardDirective } from './elder-stack-card.directive'\nimport { ElderCardStackComponent } from '../card-stack/elder-card-stack.component'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-card-organizer',\n  templateUrl: './elder-card-organizer.component.html',\n  styleUrls: ['./elder-card-organizer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [ElderCardStackComponent, AsyncPipe],\n})\nexport class ElderCardOrganizerComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _organizerModel: CardOrganizerData<any, any>\n\n  public stacks$: Observable<CardStack<any, any>[]>\n\n  @Input()\n  public canRemove = true\n\n  @Input()\n  public removeConfirmation: (card: any) => Observable<boolean>\n\n  @Input()\n  public copyOnDrag: boolean\n\n  /**\n   * If enabled, the card organizer will\n   * automatically handle card drag & drops\n   * and move card from one stack to another and move\n   * them inside a stack.\n   */\n  @Input()\n  public autoMoveCards = false\n\n  @Input()\n  public headerEnabled = true\n\n  @Input()\n  public canEnterPredicate: (card: any, stack: CardStack<any, any>) => boolean\n\n  @Output()\n  public readonly requestNewCard = new EventEmitter<CardStack<any, any>>()\n\n  @Output()\n  public readonly requestRemoveCard = new EventEmitter<any>()\n\n  @Output()\n  public readonly cardClick = new EventEmitter<any>()\n\n  @Output()\n  public readonly cardDropped = new EventEmitter<CardDropEvent<any, any>>()\n\n  @ContentChild(ElderStackCardDirective, { read: TemplateRef })\n  public stackCardTemplate: TemplateRef<any>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  @HostListener('document:keydown.shift', ['$event']) onKeydownHandler(event: KeyboardEvent) {\n    this.copyOnDrag = true\n  }\n\n  @HostListener('document:keyup.shift', ['$event']) onKeyupHandler(event: KeyboardEvent) {\n    this.copyOnDrag = false\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get organizerModel(): CardOrganizerData<any, any> {\n    return this._organizerModel\n  }\n\n  @Input()\n  public set organizerModel(value: CardOrganizerData<any, any>) {\n    this._organizerModel = value\n    if (this._organizerModel) {\n      this.stacks$ = this._organizerModel.stacks\n    } else {\n      this.stacks$ = null\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onRequestNewCard(stack: CardStack<any, any>): void {\n    this.requestNewCard.next(stack)\n  }\n\n  public onRequestRemoveCard(cardToDelete: any): void {\n    this.requestRemoveCard.next(cardToDelete)\n  }\n\n  public onCardClicked(clickedCard: any): void {\n    this.cardClick.next(clickedCard)\n  }\n\n  public onCardDropped(event: CardDropEvent<any, any>): void {\n    this.cardDropped.next(event)\n  }\n}\n","<div class=\"layout-row place-start-stretch gap-lg full p-md card-organizer\">\n  @for (stack of stacks$ | async; track stack) {\n    <elder-card-stack\n      class=\"flex\"\n      [stack]=\"stack\"\n      [stackId]=\"stack.id\"\n      [headerEnabled]=\"headerEnabled\"\n      [headerTitle]=\"stack.title\"\n      [canRemove]=\"canRemove\"\n      [cardTemplate]=\"stackCardTemplate\"\n      [removeConfirmation]=\"removeConfirmation\"\n      [autoMoveCards]=\"autoMoveCards\"\n      (requestNewCard)=\"onRequestNewCard($event)\"\n      (requestRemoveCard)=\"onRequestRemoveCard($event)\"\n      (cardClick)=\"onCardClicked($event)\"\n      [connectedTo]=\"organizerModel.stackIds | async\"\n      (cardDropped)=\"onCardDropped($event)\"\n      [canEnterPredicate]=\"canEnterPredicate\"\n      [copyOnDrag]=\"copyOnDrag\"\n    >\n    </elder-card-stack>\n  }\n</div>\n","import { Component, Input, ViewEncapsulation } from '@angular/core'\nimport { NgStyle } from '@angular/common'\n\n@Component({\n  selector: 'elder-card-header',\n  templateUrl: './elder-card-header.component.html',\n  styleUrls: ['./elder-card-header.component.css'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [NgStyle],\n})\nexport class ElderCardHeaderComponent {\n  @Input()\n  public padding = '15px 15px 5px 15px'\n}\n","<!-- Card Header -->\n<div class=\"layout-row place-start-center elder-card-header\" [ngStyle]=\"{ padding: padding }\">\n  <!-- Card Title -->\n  <ng-content select=\"elder-card-title\"> </ng-content>\n\n  <span class=\"flex\"></span>\n\n  <!-- Card Header Actions -->\n  <div class=\"layout-row place-end-center gap-md\">\n    <ng-content select=\"elder-card-header-actions\"></ng-content>\n  </div>\n</div>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { RouterModule } from '@angular/router'\nimport { TranslateModule } from '@ngx-translate/core'\nimport {\n  ElderCardComponent,\n  ElderCardContentDirective,\n  ElderCardHeaderActionsDirective,\n  ElderCardTitleDirective,\n  ElderCardSubtitleDirective,\n  ElderPaddingDirective,\n} from './elder-card.component'\nimport { ElderCardHeaderComponent } from './elder-card-header/elder-card-header.component'\nimport { MatCardModule } from '@angular/material/card'\n\nexport * from './elder-card.component'\nexport * from './elder-card-header/elder-card-header.component'\n\n@NgModule({\n  imports: [\n    // Angular\n    CommonModule,\n    RouterModule,\n    // Third Party\n    TranslateModule,\n    MatCardModule,\n    ElderCardComponent,\n    ElderCardTitleDirective,\n    ElderCardContentDirective,\n    ElderCardHeaderActionsDirective,\n    ElderCardSubtitleDirective,\n    ElderCardHeaderComponent,\n    ElderPaddingDirective,\n  ],\n  exports: [\n    ElderCardComponent,\n    ElderCardTitleDirective,\n    ElderCardContentDirective,\n    ElderCardHeaderActionsDirective,\n    ElderCardSubtitleDirective,\n    ElderCardHeaderComponent,\n    ElderPaddingDirective,\n  ],\n})\nexport class ElderCardModule {}\n","import { CardStack } from './card-stack'\nimport { Observable, BehaviorSubject } from 'rxjs'\nimport { CollectionUtil } from '../../common/utils/collection-util'\nimport { map } from 'rxjs/operators'\n\n/**\n * Represents the data-model of a data driven card organizer.\n *\n * This component organizes cards in card-stacks.\n *\n */\nexport class CardOrganizerData<T, D = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _stacks: BehaviorSubject<CardStack<T, D>[]>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(initialStacks?: CardStack<T, D>[], sort?: (a: T, b: T) => number) {\n    this._stacks = new BehaviorSubject<CardStack<T, D>[]>(initialStacks ? initialStacks : [])\n    this.sort = sort\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get stacks(): Observable<CardStack<T, D>[]> {\n    return this._stacks.asObservable()\n  }\n\n  public get stackIds(): Observable<string[]> {\n    return this.stacks.pipe(map((stacks) => stacks.map((s) => s.id)))\n  }\n\n  public get stacksSnapshot(): CardStack<T, D>[] {\n    return this._stacks.getValue()\n  }\n\n  public set sort(sort: (a: T, b: T) => number) {\n    this.stacksSnapshot.forEach((s) => (s.sort = sort))\n  }\n\n  public get cards(): T[] {\n    const cards: T[] = []\n    this.stacksSnapshot.forEach((stack) => cards.push(...stack.cardsSnapshot))\n    return cards\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Adds the given card to the stack with the given id.\n   * @param card The card data\n   * @param stackId The stack id\n   */\n  public addCard(stackId: string, card: T): void {\n    const stack = this.findStackById(stackId)\n    if (stack) {\n      stack.addCard(card)\n    }\n  }\n\n  /**\n   * Replaces all cards in the matching stacks, defined by the stack-id-getter\n   * @param cards\n   * @param stackIdGetter\n   */\n  public replaceStackCardsDynamic(cards: T[], stackIdGetter: (item: T) => string) {\n    const grouped = CollectionUtil.groupByKey<string, T>(cards, stackIdGetter)\n\n    this.stacksSnapshot.forEach((stack) => {\n      const newData = grouped.get(stack.id)\n      if (newData) {\n        stack.replaceCards(newData)\n      } else {\n        stack.clear()\n      }\n    })\n  }\n\n  /**\n   * Replace all cards in the given stack with the new cards.\n   * @param cards\n   * @param stackId\n   */\n  public replaceStackCards(stackId: string, cards: T[]) {\n    const stack = this.findStackById(stackId)\n    if (stack) {\n      stack.replaceCards(cards)\n    }\n  }\n\n  public findStackByData(data: D): CardStack<T, D> {\n    return this._stacks.getValue().find((s) => s.data === data)\n  }\n\n  public findStackById(id: string): CardStack<T, D> {\n    return this._stacks.getValue().find((s) => s.id === id)\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderCardOrganizerComponent } from './card-organizer/elder-card-organizer.component'\nimport { ElderCardStackComponent } from './card-stack/elder-card-stack.component'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatRippleModule } from '@angular/material/core'\nimport { MatDividerModule } from '@angular/material/divider'\nimport { MatIconModule } from '@angular/material/icon'\nimport { DragDropModule } from '@angular/cdk/drag-drop'\nimport { ElderCardModule } from '../cards/elder-card/elder-card.module'\nimport { ElderStackCardDirective } from './card-organizer/elder-stack-card.directive'\n\nexport * from './card-organizer-data'\nexport * from './card-stack'\nexport * from './card-organizer/elder-stack-card.directive'\nexport * from './card-organizer/elder-card-organizer.component'\nexport * from './card-stack/elder-card-stack.component'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatIconModule,\n    MatButtonModule,\n    MatDividerModule,\n    MatRippleModule,\n    DragDropModule,\n    TranslateModule,\n    ElderCardModule,\n    ElderCardOrganizerComponent,\n    ElderCardStackComponent,\n    ElderStackCardDirective,\n  ],\n  exports: [ElderCardOrganizerComponent, ElderCardStackComponent, ElderStackCardDirective],\n})\nexport class ElderCardOrganizerModule {}\n","import { SelectionModel } from '../../../common/selection/selection-model'\nimport { InjectionToken } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { IDataContext } from '../../../common/data/data-context/data-context'\n\nexport const ELDER_DATA_VIEW = new InjectionToken<IElderDataView>('Elder Data View')\n\nexport { ElderDataViewInteractionMode } from '../elder-data-view-interaction-mode'\n\nexport interface IElderDataView<T = any> {\n  readonly selectionModel: SelectionModel<T>\n  readonly dataContext$: Observable<IDataContext<T>>\n\n  hasItemFocus(item: T): boolean\n}\n","import { Observable } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { takeUntil } from 'rxjs/operators'\nimport { ElderDataViewBaseComponent } from './elder-data-view-base'\nimport { ElderDataViewOptionsProvider } from './elder-data-view-options-provider'\nimport { ElderDataViewOptions } from './elder-data-view-options'\n\nexport class DataViewOptionsProviderBinding {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private _optionsProvider: ElderDataViewOptionsProvider\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static of(\n    dataViewBaseComponent: ElderDataViewBaseComponent\n  ): DataViewOptionsProviderBinding {\n    return new DataViewOptionsProviderBinding(dataViewBaseComponent)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor(private readonly _dataViewBaseComponent: ElderDataViewBaseComponent) {\n    if (_dataViewBaseComponent == null) {\n      throw new Error('dataViewBaseComponent must not be null!')\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public dataViewOptionsProvider(optionsProvider: ElderDataViewOptionsProvider): this {\n    if (!optionsProvider) {\n      throw new Error('dataViewSelection must not be null!')\n    }\n    this._optionsProvider = optionsProvider\n    return this\n  }\n\n  public bindUntil(unsubscribe$: Observable<any>): this {\n    if (!this._optionsProvider) {\n      throw new Error('DataView must be defined to start binding. Use .dataView(dataView)!')\n    }\n\n    this._optionsProvider.options$\n      .pipe(takeUntil(unsubscribe$))\n      .subscribe((options) => this.applyOptions(options))\n\n    return this\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public applyOptions(options: ElderDataViewOptions) {\n    const dataCtx = this._dataViewBaseComponent.dataContext\n\n    if (dataCtx) {\n      dataCtx.filter.updateFilters(options.filters)\n      dataCtx.sort.updateSorts(options.sorts)\n    }\n\n    this._dataViewBaseComponent.interactionMode = options.interactionMode\n    this._dataViewBaseComponent.selectionMultiEnabled = options.selectionMultiEnabled\n\n    if (options.interactionMode === 'selection') {\n      this._dataViewBaseComponent.selectionVisible = true\n    }\n  }\n}\n","import { Sort } from '../../../common/data/sort'\nimport { Filter } from '../../../common/data/filters/filter'\nimport { ElderDataViewInteractionMode } from '../elder-data-view-interaction-mode'\n\n/**\n * Options for supporting data view components.\n */\nexport class ElderDataViewOptions {\n  public static defaultOptions(): ElderDataViewOptions {\n    return new ElderDataViewOptions([], [], false, 'open')\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly sorts: Sort[],\n    public readonly filters: Filter[],\n    public readonly selectionMultiEnabled: boolean,\n    public readonly interactionMode: ElderDataViewInteractionMode\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public withSorts(sorts: Sort[]): ElderDataViewOptions {\n    return new ElderDataViewOptions(\n      sorts,\n      this.filters,\n      this.selectionMultiEnabled,\n      this.interactionMode\n    )\n  }\n\n  public withFilters(filters: Filter[]): ElderDataViewOptions {\n    return new ElderDataViewOptions(\n      this.sorts,\n      filters,\n      this.selectionMultiEnabled,\n      this.interactionMode\n    )\n  }\n\n  public withSelectionMultiEnabled(selectionMultiEnabled: boolean): ElderDataViewOptions {\n    return new ElderDataViewOptions(\n      this.sorts,\n      this.filters,\n      selectionMultiEnabled,\n      this.interactionMode\n    )\n  }\n\n  public withInteractionMode(interactionMode: ElderDataViewInteractionMode): ElderDataViewOptions {\n    return new ElderDataViewOptions(\n      this.sorts,\n      this.filters,\n      this.selectionMultiEnabled,\n      interactionMode\n    )\n  }\n\n  public withOptions(options: ElderDataViewOptions): ElderDataViewOptions {\n    return new ElderDataViewOptions(\n      options.sorts ? options.sorts : this.sorts,\n      options.filters ? options.filters : this.filters,\n      options.selectionMultiEnabled ? options.selectionMultiEnabled : this.selectionMultiEnabled,\n      options.interactionMode ? options.interactionMode : this.interactionMode\n    )\n  }\n}\n","import { BehaviorSubject } from 'rxjs'\nimport { ElderDataViewOptions } from './elder-data-view-options'\n\nexport class ElderDataViewOptionsProvider {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly options$ = new BehaviorSubject<ElderDataViewOptions>(\n    ElderDataViewOptions.defaultOptions()\n  )\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get options(): ElderDataViewOptions {\n    return this.options$.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Example usage:\n   *\n   * this.updateOptions(\n   *      options => options.withInteractionMode('open')\n   *                        .withFilters([])\n   * )\n   *\n   * @param optionsFn function modifying the options\n   */\n  public updateOptions(optionsFn: (opt: ElderDataViewOptions) => ElderDataViewOptions): void {\n    this.options$.next(optionsFn(this.options$.getValue()))\n  }\n}\n","export enum ActivationEventSource {\n  USER_MOUSE_CLICK = 'USER_MOUSE_CLICK',\n  USER_KEYBOARD = 'USER_KEYBOARD',\n  SYSTEM = 'SYSTEM',\n}\n","import { IDataContext } from './../../../common/data/data-context/public_api'\nimport { IdExtractor } from '../../../common/data/datasource/entity-id-util'\n\nexport class DataContextRange<TEntity, TId> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly idExtractor: IdExtractor<TEntity>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public constructor(private readonly dc: IDataContext<TEntity>) {\n    this.idExtractor = (item): TId => dc.dataSource.getId(item) as TId\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public itemsByRange(start: TEntity, end: TEntity): TEntity[] {\n    return this.itemsByIdRange(this.getId(start), this.getId(end))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private itemsByIdRange(start: TId, end: TId): TEntity[] {\n    return this.itemsByIndexRange(this.itemIndexById(start), this.itemIndexById(end))\n  }\n\n  private itemsByIndexRange(anchor: number, target: number): TEntity[] {\n    if (anchor < 0 || target < 0) {\n      return []\n    }\n    if (anchor > target) {\n      return this.items.slice(target, anchor + 1)\n    } else {\n      return this.items.slice(anchor, target + 1)\n    }\n  }\n\n  private itemIndexById(id: TId): number {\n    return this.items.findIndex((it) => this.getId(it) === id)\n  }\n\n  private getId(entity: TEntity): TId {\n    return this.idExtractor(entity)\n  }\n\n  private get items(): TEntity[] {\n    return this.dc.snapshot.data\n  }\n}\n","import { IElderDataView } from './public_api'\nimport { ActivationModel } from '../common/activation/model/activation-model'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { ItemActivationEvent } from '../common/activation/model/item-activation-event'\nimport { ModifierKeyService } from '../../keyboard/modifier-key-state.service'\nimport { SelectionEventSource, SelectionModel } from '../../../common/selection/selection-model'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ActivationEventSource } from '../common/activation/model/activation-event-source'\nimport { filter } from 'rxjs/operators'\nimport { DataContextRange } from './data-context-range'\nimport { DestroyRef } from '@angular/core'\n\nexport class DataSelectionController<TEntity = any, TId = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly selectionModel: SelectionModel<TEntity>\n\n  private dataContextRange: DataContextRange<TEntity, TId>\n  private anchor: TEntity\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public constructor(\n    dataView: IElderDataView<TEntity>,\n    private readonly activationModel: ActivationModel<TEntity> | undefined,\n    private readonly modifierKeys: ModifierKeyService,\n    destroyRef: DestroyRef\n  ) {\n    this.selectionModel = dataView.selectionModel\n\n    const dc$ = dataView.dataContext$.pipe(filter((dc) => !!dc))\n\n    dc$.pipe(takeUntilDestroyed(destroyRef)).subscribe({\n      next: (dc) => (this.dataContextRange = new DataContextRange(dc)),\n    })\n    if (this.activationModel) {\n      this.activationModel.itemActivationEvents\n        .pipe(takeUntilDestroyed(destroyRef))\n        .subscribe((event) => this.onItemActivated(event))\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public userToggleSelection(entity: TEntity): void {\n    const modifierKeys = this.modifierKeys.current\n    this.anchorIfNecessary(entity)\n    if (modifierKeys.shift) {\n      this.handleRangeSelection(entity)\n    } else {\n      this.handleSingleSelection(entity)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private onItemActivated(event: ItemActivationEvent<TEntity>): void {\n    if (event.source !== ActivationEventSource.SYSTEM) {\n      this.anchorIfNecessary(event.item)\n      if (event.source === ActivationEventSource.USER_KEYBOARD) {\n        this.onItemActivatedByKeyboard(event)\n      }\n    }\n  }\n\n  private anchorIfNecessary(entity: TEntity): void {\n    const modifierKeys = this.modifierKeys.current\n    if (!this.anchor || !modifierKeys.shift) {\n      this.anchorItem(entity)\n    }\n  }\n\n  private onItemActivatedByKeyboard(event: ItemActivationEvent<TEntity>): void {\n    const modifierKeys = this.modifierKeys.current\n    if (modifierKeys.shift) {\n      this.selectItemsInRage(this.anchor, event.item)\n    }\n  }\n\n  private handleRangeSelection(entity: TEntity): void {\n    this.selectItemsInRage(this.anchor, entity)\n  }\n\n  private handleSingleSelection(entity: TEntity): void {\n    this.selectionModel.toggle(entity, {\n      source: SelectionEventSource.USER_MOUSE_CLICK,\n      info: 'DataViewInteractionController.toggle',\n    })\n  }\n\n  private selectItemsInRage(anchor: TEntity, target: TEntity): void {\n    const items = this.dataContextRange.itemsByRange(anchor, target)\n    this.selectionModel.replaceSelection(items, {\n      source: SelectionEventSource.SYSTEM,\n      info: 'selectionController.selectItemsInRage',\n    })\n  }\n\n  private anchorItem(item: TEntity): void {\n    this.anchor = item\n  }\n}\n","import { ActivationEventSource } from './activation-event-source'\n\nexport class ItemActivationEvent<T> {\n  constructor(\n    public readonly item: T,\n    public readonly source: ActivationEventSource,\n    public readonly focus: boolean\n  ) {}\n}\n","import { Inject, Injectable } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { ItemActivationEvent } from './item-activation-event'\nimport { ItemActivationOptions } from './item-activation-options'\nimport { ELDER_DATA_VIEW, IElderDataView } from '../../../base/elder-data-view'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { filter } from 'rxjs/operators'\nimport { IDataSource } from '../../../../../common/data/datasource/data-source'\n\n@Injectable()\nexport class ActivationModel<T = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly itemActivationEventSubject = new Subject<ItemActivationEvent<T>>()\n  private readonly _activeItem$ = new BehaviorSubject<T>(null)\n\n  private dataSource$ = new BehaviorSubject<IDataSource<T>>(undefined)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(@Inject(ELDER_DATA_VIEW) private readonly dataView: IElderDataView) {\n    dataView.dataContext$\n      .pipe(\n        takeUntilDestroyed(),\n        filter((dc) => !!dc)\n      )\n      .subscribe({\n        next: (dc) => this.dataSource$.next(dc.dataSource),\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get itemActivationEvents(): Observable<ItemActivationEvent<T>> {\n    return this.itemActivationEventSubject.asObservable()\n  }\n\n  public get activeItem$(): Observable<T> {\n    return this._activeItem$.asObservable()\n  }\n\n  public get activeItem(): T {\n    return this._activeItem$.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public activate(item: T, options: ItemActivationOptions): void {\n    this.updateActiveItem(item, options)\n  }\n\n  public isItemActive(item: T): boolean {\n    if (this.activeItem) {\n      return this.itemEquals(this.activeItem, item)\n    } else {\n      return false\n    }\n  }\n\n  public hasItemFocus(item: T): boolean {\n    return this.dataView.hasItemFocus(item)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private updateActiveItem(item: T, options: ItemActivationOptions) {\n    if (item !== this.activeItem) {\n      this._activeItem$.next(item)\n      this.log.debug('Set active item to ', item)\n      this.itemActivationEventSubject.next(\n        new ItemActivationEvent(item, options.source, options.focus)\n      )\n    }\n  }\n\n  private itemEquals(a: T, b: T): boolean {\n    return this.getId(a) === this.getId(b)\n  }\n\n  private getId(item: T): any {\n    if (item) {\n      const ds = this.dataSource$.getValue()\n      return ds?.getId(item)\n    } else {\n      return item\n    }\n  }\n}\n","import { Injectable, NgZone, OnDestroy } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\n\nexport class ModifierKeyState {\n  public static pristine(): ModifierKeyState {\n    return new ModifierKeyState(false, false, false, false)\n  }\n\n  constructor(\n    public readonly shift: boolean,\n    public readonly ctrl: boolean,\n    public readonly alt: boolean,\n    public readonly meta: boolean\n  ) {}\n\n  public equals(other: ModifierKeyState): boolean {\n    const otherState = other as ModifierKeyState\n    if (otherState) {\n      return (\n        this.shift === other.shift &&\n        this.ctrl === other.ctrl &&\n        this.alt === other.alt &&\n        this.meta === other.meta\n      )\n    }\n    return false\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ModifierKeyService implements OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly modifierState$ = new BehaviorSubject<ModifierKeyState>(\n    ModifierKeyState.pristine()\n  )\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private ngZone: NgZone) {\n    // Run outside Angular to avoid triggering change detection on every key press\n    this.ngZone.runOutsideAngular(() => {\n      window.addEventListener('mousedown', this.handleInputEvent)\n      window.addEventListener('keydown', this.handleInputEvent)\n      window.addEventListener('keyup', this.handleInputEvent)\n      window.addEventListener('blur', this.resetKeys) // Reset on window blur\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnDestroy(): void {\n    window.removeEventListener('mousedown', this.handleInputEvent)\n    window.removeEventListener('keydown', this.handleInputEvent)\n    window.removeEventListener('keyup', this.handleInputEvent)\n    window.removeEventListener('blur', this.resetKeys)\n    this.modifierState$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Returns an observable of the current modifier key state\n   */\n  public get modifierChanges$(): Observable<ModifierKeyState> {\n    return this.modifierState$.asObservable()\n  }\n\n  /**\n   * Returns the current state synchronously\n   */\n  public get current(): ModifierKeyState {\n    return this.modifierState$.value\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly handleInputEvent = (event: KeyboardEvent | MouseEvent): void => {\n    const newState = this.toKeyState(event)\n    const currentState = this.modifierState$.value\n    if (!currentState.equals(newState)) {\n      this.modifierState$.next(newState)\n    }\n  }\n\n  private toKeyState(event: KeyboardEvent | MouseEvent): ModifierKeyState {\n    return new ModifierKeyState(event.shiftKey, event.ctrlKey, event.altKey, event.metaKey)\n  }\n\n  private readonly resetKeys = (): void => {\n    this.modifierState$.next(ModifierKeyState.pristine())\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  Host,\n  Inject,\n  Injectable,\n  Injector,\n  OnInit,\n  Optional,\n  signal,\n  Signal,\n} from '@angular/core'\nimport { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { SelectionEventSource, SelectionModel } from '../../../common/selection/selection-model'\nimport { ElderDataViewInteractionMode } from '../elder-data-view-interaction-mode'\nimport { ELDER_DATA_VIEW, IElderDataView } from './elder-data-view'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { filter, map } from 'rxjs/operators'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { DataSelectionController } from './data-selection.controller'\nimport { ActivationModel } from '../common/activation/model/activation-model'\nimport { ModifierKeyService } from '../../keyboard/modifier-key-state.service'\n\n@Directive()\nexport class DataViewInteractionControllerDirective<T = any> implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _itemClickSubject = new Subject<T>()\n  public readonly selectionModel = signal<SelectionModel<T>>(undefined)\n\n  private selectionController: DataSelectionController\n\n  public interactionMode: ElderDataViewInteractionMode = 'open'\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly injector: Injector,\n    private readonly destroyRef: DestroyRef,\n    private readonly modifierKeys: ModifierKeyService\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit() {\n    const dataView = this.injector.get(ELDER_DATA_VIEW)\n    const activationModel = this.injector.get(ActivationModel, undefined, { optional: true })\n    this.selectionModel.set(dataView.selectionModel)\n\n    this.selectionController = new DataSelectionController(\n      dataView,\n      activationModel,\n      this.modifierKeys,\n      this.destroyRef\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Observable that emits when an item is clicked\n   */\n  public get itemClick(): Observable<T> {\n    return this._itemClickSubject.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onItemClick(entity: T, event: MouseEvent | KeyboardEvent): void {\n    if (entity) {\n      this.handlePrimaryAction(entity, event.shiftKey || event.metaKey || event.ctrlKey)\n    }\n    if (event.shiftKey) {\n      document.getSelection().removeAllRanges()\n    }\n  }\n\n  public onItemDoubleClick(entity: T): void {\n    if (entity) {\n      this.handleSecondaryAction(entity)\n    }\n  }\n\n  public onItemSelectionToggle(entity: T): void {\n    this.userToggleSelection(entity)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handlePrimaryAction(entity: T, metaModifier: boolean): void {\n    switch (this.interactionMode) {\n      case 'open':\n        if (this.selectionModel().hasValue || metaModifier) {\n          this.userToggleSelection(entity)\n        } else {\n          this._itemClickSubject.next(entity)\n        }\n        break\n\n      case 'selection':\n        this.userToggleSelection(entity)\n        break\n    }\n  }\n\n  private userToggleSelection(entity: T): void {\n    this.selectionController.userToggleSelection(entity)\n  }\n\n  private handleSecondaryAction(entity: T): void {\n    switch (this.interactionMode) {\n      case 'open':\n        break\n      case 'selection':\n        this._itemClickSubject.next(entity)\n        break\n    }\n  }\n}\n","import {\n  Directive,\n  input,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Signal,\n  untracked,\n} from '@angular/core'\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs'\nimport { filter, map, switchMap } from 'rxjs/operators'\nimport {\n  IDataContext,\n  IDataContextActivePage,\n  IDataContextContinuable,\n  isActivePagedDataContext,\n  isContinuableDataContext,\n} from '../../../common/data/data-context/data-context'\nimport { SelectionEventSource, SelectionModel } from '../../../common/selection/selection-model'\nimport { ElderDataViewInteractionMode, IElderDataView } from './elder-data-view'\nimport { ElderDataViewOptionsProvider } from './elder-data-view-options-provider'\nimport { DataViewOptionsProviderBinding } from './data-view-options-provider-binding'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { DataContextStatus } from '../../../common/data/data-context/data-context-status'\nimport { PageRequest } from '../../../common/data/page'\nimport { booleanTransformFn } from '../../../common/utils/signal-input'\nimport { DataViewInteractionControllerDirective } from './data-view-interaction-controller.directive'\n\n@Directive()\nexport abstract class ElderDataViewBaseComponent<T = any>\n  implements IElderDataView, OnInit, OnDestroy\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Underlying data context.\n   */\n  private readonly _dataContext$ = new BehaviorSubject<IDataContext<any>>(null)\n\n  /**\n   * Holds the current selection\n   */\n  public readonly selectionModel: SelectionModel<any>\n\n  @Input()\n  public set interactionMode(mode: ElderDataViewInteractionMode) {\n    this.interactionController.interactionMode = mode\n  }\n\n  /**\n   * Define if elder-table should clean up the\n   * data-context resources for you.\n   *\n   * In more advanced scenarios where you plan to reuse the same data-context\n   * set this to false and release the resources yourself. (dataContext.close)\n   */\n  public readonly cleanUp = input(true, { transform: booleanTransformFn })\n\n  public readonly dense = input(false, { transform: booleanTransformFn })\n\n  private readonly _itemClick: Observable<T>\n\n  private readonly EntityIdKeyFn = (entity: any) => (entity ? this.getId(entity) : 0)\n\n  protected readonly destroy$ = new Subject<void>()\n\n  public readonly dc: Signal<IDataContext<T> | undefined>\n  public readonly dcStatus: Signal<DataContextStatus>\n  public readonly total: Signal<string>\n  public readonly canLoadMore: Signal<boolean | undefined>\n  public readonly viewData: Signal<T[] | undefined>\n  public readonly currentPage: Signal<PageRequest | undefined>\n  public readonly currentChunkSize: Signal<number | undefined>\n  public readonly currentSelection: Signal<T[] | undefined>\n\n  @Output()\n  public readonly selectionSingleChange: Observable<any>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    selectionModel: SelectionModel<any>,\n    protected readonly dataViewOptionsProvider: ElderDataViewOptionsProvider,\n    protected readonly interactionController: DataViewInteractionControllerDirective<T>\n  ) {\n    if (!selectionModel) {\n      this.selectionModel = new SelectionModel<any>(false, [], this.EntityIdKeyFn)\n    } else {\n      this.selectionModel = selectionModel\n    }\n\n    this.selectionSingleChange = this.selectionModel.changed.pipe(\n      map((selection) => (selection.length > 0 ? selection[0] : null))\n    )\n\n    const dc$ = this.dataContext$.pipe(filter((dc) => !!dc))\n\n    this.dc = toSignal(this.dataContext$)\n    this.dcStatus = toSignal(dc$.pipe(switchMap((dc) => dc.status)))\n    this.total = toSignal(\n      dc$.pipe(\n        switchMap((dc) => dc.total),\n        map((total) => (total ? total + '' : '∞'))\n      )\n    )\n    this.canLoadMore = toSignal(dc$.pipe(switchMap((dc) => this.canLoadMoreObs(dc))))\n    this.viewData = toSignal(dc$.pipe(switchMap((dc) => dc.data)))\n    this.currentPage = toSignal(\n      dc$.pipe(\n        map((dc) => dc as IDataContextActivePage<T>),\n        switchMap((dc) => dc?.page)\n      )\n    )\n\n    this.currentChunkSize = toSignal(\n      dc$.pipe(\n        map((dc) => dc as IDataContextContinuable<T>),\n        switchMap((dc) => dc?.chunkSize$)\n      )\n    )\n\n    this.currentSelection = toSignal(this.selectionModel.selection)\n\n    this._itemClick = this.interactionController.itemClick\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    if (this.dataViewOptionsProvider) {\n      if (this.dataContext) {\n        DataViewOptionsProviderBinding.of(this)\n          .dataViewOptionsProvider(this.dataViewOptionsProvider)\n          .bindUntil(this.destroy$)\n      }\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n    this.autoCleanUp()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get dataContext$(): Observable<IDataContext<any>> {\n    return this._dataContext$.asObservable()\n  }\n\n  public get dataContext(): IDataContext<any> {\n    return this._dataContext$.getValue()\n  }\n\n  public set dataContext(data: IDataContext<any>) {\n    this._dataContext$.next(data)\n    this.onDataContextSet(data)\n  }\n\n  public get dataActivePaged(): IDataContextActivePage<any> {\n    return this.dataContext as IDataContextActivePage<any>\n  }\n\n  public get dataContinuable(): IDataContextContinuable<any> {\n    return this.dataContext as IDataContextContinuable<any>\n  }\n\n  public get isContinuable(): boolean {\n    if (!this.dataContext) {\n      return false\n    }\n    return isContinuableDataContext(this.dataContext)\n  }\n\n  public get isActivePaged(): boolean {\n    if (!this.dataContext) {\n      return false\n    }\n    return isActivePagedDataContext(this.dataContext)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Selection Properties                                                    *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set selectableEvaluatorFn(selectableEvaluatorFn: (entity: any) => boolean) {\n    this.selectionModel.selectableEvaluatorFn = selectableEvaluatorFn\n  }\n\n  @Input()\n  public set selection(selection: any[]) {\n    this.selectionModel.replaceSelection(selection, {\n      source: SelectionEventSource.SYSTEM,\n      info: 'set:ElderDataViewBaseComponent.selection',\n    })\n  }\n\n  @Output()\n  public get selectionChange(): Observable<any[]> {\n    return this.selectionModel.changed\n  }\n\n  @Input()\n  public set selectionMultiEnabled(enableMultiSelection: boolean) {\n    if (this.selectionModel) {\n      this.selectionModel.isMultipleSelection = enableMultiSelection\n    }\n  }\n\n  abstract get selectionVisible()\n\n  abstract set selectionVisible(selectionVisible: boolean)\n\n  /***************************************************************************\n   *                                                                         *\n   * On click properties                                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get itemClick(): Observable<any> {\n    return this._itemClick\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Event Entry Points                                                      *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Called after a new DataContext has been set.\n   * Subclasses may add additional behaviour at this stage.\n   * @param data\n   * @protected\n   */\n  protected onDataContextSet(data: IDataContext<T>): void {}\n\n  public onItemClick(entity: T, event: MouseEvent | KeyboardEvent): void {\n    this.interactionController.onItemClick(entity, event)\n  }\n\n  public onItemDoubleClick(entity: T): void {\n    this.interactionController.onItemDoubleClick(entity)\n  }\n\n  public getId(entity: T): any {\n    return this.dataContext?.dataSource?.getId(entity) || entity\n  }\n\n  public abstract hasItemFocus(item: T): boolean\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private canLoadMoreObs(dataContext: IDataContext<any>): Observable<boolean> {\n    if (isContinuableDataContext(dataContext)) {\n      return combineLatest([dataContext.loading, dataContext.hasMoreData]).pipe(\n        map(([loading, hasMoreData]) => !loading && hasMoreData)\n      )\n    } else {\n      return of(false)\n    }\n  }\n\n  /**\n   * Performs clean up of the current data context if auto clean up is enabled.\n   */\n  protected autoCleanUp(): void {\n    if (untracked(this.cleanUp) && this.dataContext) {\n      //this.logger.debug('Releasing DataContext resources to prevent memory leak. [cleanUp]=\"true\"');\n      this.dataContext.close()\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject } from 'rxjs'\nimport { Sort, SortDirection } from '../../../../common/data/sort'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatMenuTrigger, MatMenu, MatMenuItem } from '@angular/material/menu'\nimport { MatButton, MatIconButton } from '@angular/material/button'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-single-sort',\n  templateUrl: './elder-single-sort.component.html',\n  styleUrls: ['./elder-single-sort.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatButton,\n    MatMenuTrigger,\n    MatIcon,\n    MatMenu,\n    MatMenuItem,\n    MatIconButton,\n    AsyncPipe,\n    TranslateModule,\n  ],\n})\nexport class ElderSingleSortComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly sort$ = new BehaviorSubject<Sort>(Sort.NONE)\n\n  @Input()\n  public readonly availableSorts: string[] = []\n\n  @Output()\n  public readonly sortChange = new EventEmitter<Sort>()\n\n  @Input()\n  public translationPrefix = 'documents.sorts.'\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  ngOnInit() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set sort(sort: Sort) {\n    if (!sort) {\n      sort = Sort.NONE\n    }\n    this.sort$.next(sort)\n  }\n\n  public get sort(): Sort {\n    return this.sort$.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * API                                                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  public setSortProp(sortProp: string): void {\n    const sort = new Sort(sortProp, this.sort.dir)\n    this.setSort(sort)\n  }\n\n  public toggleSortDirection(event: Event): void {\n    event.stopPropagation()\n\n    let dir: SortDirection\n    if (this.sort.dir === 'asc') {\n      dir = 'desc'\n    } else {\n      dir = 'asc'\n    }\n    this.setSort(new Sort(this.sort.prop, dir))\n  }\n\n  private setSort(sort: Sort): void {\n    this.sort = sort\n    this.sortChange.emit(sort)\n  }\n}\n","@if (sort$ | async; as sort) {\n  <div class=\"layout-row place-start-center flex-none\">\n    <button mat-button type=\"button\" [matMenuTriggerFor]=\"menu\">\n      {{ translationPrefix + sort.prop | translate }}\n      <mat-icon style=\"font-size: 22px\">sort</mat-icon>\n      <mat-menu #menu=\"matMenu\">\n        @for (mysort of availableSorts; track mysort) {\n          <button mat-menu-item type=\"button\" (click)=\"setSortProp(mysort)\">\n            <mat-icon>sort</mat-icon>\n            <span [class.mat-body-strong]=\"sort.prop == mysort\">{{\n              translationPrefix + mysort | translate\n            }}</span>\n          </button>\n        }\n      </mat-menu>\n    </button>\n    <button mat-icon-button type=\"button\" (click)=\"toggleSortDirection($event)\">\n      <mat-icon style=\"font-size: 22px\">{{\n        sort.dir === 'asc' ? 'arrow_downward' : 'arrow_upward'\n      }}</mat-icon>\n    </button>\n  </div>\n}\n","import { Sort, SortDirection } from '../../../../common/data/sort'\nimport { SortUtil } from '../../../../common/utils/sort-util'\n\nexport class CompositeSort {\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static NONE = new CompositeSort('', [])\n\n  public static singleAsc(prop: string): CompositeSort {\n    return CompositeSort.single(new Sort(prop, 'asc'))\n  }\n\n  public static single(sort: Sort): CompositeSort {\n    return new CompositeSort(sort.prop, [sort])\n  }\n\n  public static composite(id: string, sorts: Sort[]): CompositeSort {\n    return new CompositeSort(id, sorts)\n  }\n\n  public static concatSortId(sorts: Sort[]): string {\n    return sorts.map((sort) => sort.prop).join('-')\n  }\n\n  public static coerce(availableSorts: string[] | CompositeSort[]): CompositeSort[] {\n    if (availableSorts && availableSorts.length > 0) {\n      if (availableSorts[0] instanceof CompositeSort) {\n        return availableSorts as CompositeSort[]\n      } else {\n        return (availableSorts as string[]).map((s) => CompositeSort.singleAsc(s))\n      }\n    } else {\n      return []\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly concatId: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly id: string,\n    public readonly sorts: Sort[]\n  ) {\n    this.concatId = CompositeSort.concatSortId(sorts)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * API                                                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  public sortsForDir(desiredDir: SortDirection): Sort[] {\n    if (this.needsToggle(desiredDir)) {\n      return this.sorts.map((sort) => SortUtil.toggleSort(sort))\n    } else {\n      return [...this.sorts]\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private needsToggle(desiredDir: SortDirection): boolean {\n    // We consider only the first sort dir, the others follow suit.\n    return !(this.sorts.length == 0 || this.sorts[0].dir === desiredDir)\n  }\n}\n","import { CompositeSort } from './composite-sort'\nimport { Sort } from '../../../../common/data/sort'\n\nexport class CompositeSortContext {\n  public static build(availableSorts: CompositeSort[]): CompositeSortContext {\n    const availableSortMap = new Map<string, CompositeSort>()\n    availableSorts.forEach((availableSort) => {\n      availableSortMap.set(availableSort.concatId, availableSort)\n    })\n    return new CompositeSortContext(availableSortMap)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  private constructor(private readonly availableSortMap: Map<string, CompositeSort>) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * API                                                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  public guessBest(sorts: Sort[]): CompositeSort | undefined {\n    if (sorts) {\n      return this.availableSortMap.get(CompositeSort.concatSortId(sorts))\n    }\n    return undefined\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  input,\n  model,\n  OnDestroy,\n  output,\n  signal,\n} from '@angular/core'\nimport { CompositeSort } from '../composite-sort'\nimport { MatButton, MatIconButton } from '@angular/material/button'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { Sort, SortDirection } from '../../../../../common/data/sort'\nimport { CompositeSortContext } from '../composite-sort-context'\nimport { SortUtil } from '../../../../../common/utils/sort-util'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n@Component({\n  selector: 'elder-composite-sort',\n  imports: [\n    MatButton,\n    MatIcon,\n    MatIconButton,\n    MatMenu,\n    MatMenuItem,\n    TranslateModule,\n    MatMenuTrigger,\n  ],\n  templateUrl: './elder-composite-sort.component.html',\n  styleUrl: './elder-composite-sort.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElderCompositeSortComponent implements OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private destroyed = false\n\n  public readonly selectedSort = signal<CompositeSort>(CompositeSort.NONE)\n  public readonly selectedSortDirection = signal<SortDirection>('asc')\n\n  public readonly activeSorts = computed(() => {\n    const desiredDir = this.selectedSortDirection() ?? 'asc'\n    if (this.selectedSort()) {\n      // this.log.warn('selectedSort: ', this.selectedSort());\n      return this.selectedSort().sortsForDir(desiredDir)\n    } else {\n      return []\n    }\n  })\n\n  public availableSorts = input.required<CompositeSort[]>()\n  public availableSortCtx = computed(() => CompositeSortContext.build(this.availableSorts()))\n\n  public sorts = model<Sort[]>([])\n  public sortsChange = output<Sort[]>()\n\n  public translationPrefix = input<string>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    effect(() => {\n      const activeSorts = this.activeSorts()\n      if (activeSorts && activeSorts.length > 0) {\n        this.sortsChange.emit(activeSorts)\n      }\n    })\n    effect(() => {\n      const availableCtx = this.availableSortCtx()\n      const sorts = this.sorts()\n      const best = availableCtx.guessBest(sorts)\n      if (best) {\n        this.selectedSort.set(best)\n        this.selectedSortDirection.set(sorts[0]?.dir ?? 'asc')\n      }\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnDestroy(): void {\n    this.destroyed = true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * API                                                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  public selectSort(namedSort: CompositeSort): void {\n    this.selectedSort.set(namedSort)\n  }\n\n  public toggleSortDirection(event: Event): void {\n    event.stopPropagation()\n    this.selectedSortDirection.set(SortUtil.toggleDir(this.selectedSortDirection()))\n  }\n\n  public writeSorts(sorts: Sort[]): void {\n    if (!this.destroyed) {\n      this.sorts.set(sorts)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","<div class=\"layout-row place-start-center flex-none\">\n  <button mat-button type=\"button\" [matMenuTriggerFor]=\"menu\">\n    {{ translationPrefix() + selectedSort().id | translate }}\n\n    <mat-icon style=\"font-size: 22px; height: 22px\">sort</mat-icon>\n\n    <mat-menu #menu=\"matMenu\">\n      @for (namedSort of availableSorts(); track namedSort.id) {\n        <button mat-menu-item type=\"button\" (click)=\"selectSort(namedSort)\">\n          <mat-icon>sort</mat-icon>\n          <span [class.mat-body-strong]=\"selectedSort()?.id === namedSort.id\">{{\n            translationPrefix() + namedSort.id | translate\n          }}</span>\n        </button>\n      }\n    </mat-menu>\n  </button>\n\n  <button mat-icon-button type=\"button\" (click)=\"toggleSortDirection($event)\">\n    <mat-icon style=\"font-size: 22px\">{{\n      selectedSortDirection() === 'asc' ? 'arrow_downward' : 'arrow_upward'\n    }}</mat-icon>\n  </button>\n</div>\n","import { Directive, input, OnInit } from '@angular/core'\nimport { IDataContext } from '../../../../common/data/data-context/data-context'\nimport { Sort } from '../../../../common/data/sort'\nimport { ElderCompositeSortComponent } from './elder-composite-sort/elder-composite-sort.component'\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\nimport { filter, switchMap } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Observable } from 'rxjs'\n\n@Directive({\n  selector: '[elderCompositeSortDc]',\n  standalone: true,\n})\nexport class ElderCompositeSortDcDirective implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n  public elderCompositeSortDc = input<IDataContext<any>>()\n  private controlSorts$: Observable<Sort[]>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly compositeSort: ElderCompositeSortComponent) {\n    compositeSort.sortsChange.subscribe((sorts) => this.applySortToDataContext(sorts))\n\n    this.controlSorts$ = toObservable(this.elderCompositeSortDc).pipe(\n      takeUntilDestroyed(),\n      filter((dc) => !!dc),\n      switchMap((dc) => dc.sort.sorts)\n    )\n  }\n\n  public ngOnInit(): void {\n    this.controlSorts$.subscribe({\n      next: (sorts) => this.writeSortToControl(sorts),\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private writeSortToControl(sorts: Sort[]): void {\n    // this.log.warn('Writing DC Sorts to CompositeSort Control', sorts);\n    this.compositeSort.writeSorts(sorts)\n  }\n\n  private applySortToDataContext(sorts: Sort[]): void {\n    const dc = this.elderCompositeSortDc()\n    if (dc) {\n      dc.sort.replaceSorts(sorts)\n    }\n  }\n}\n","import { MatDialogConfig } from '@angular/material/dialog'\n\nexport class ElderDialogConfig {\n  /**\n   * String displayed as title of dialog.\n   */\n  public title: string\n\n  /**\n   * Configuration object of Angular Material Dialog.\n   */\n  public config?: MatDialogConfig\n\n  /**\n   * Parameter object holding key value pairs to use for interpolation\n   * during translation.\n   */\n  public interpolateParams?: Object\n}\n","import { MatDialogRef, MatDialogClose } from '@angular/material/dialog'\nimport { Component } from '@angular/core'\nimport { ElderDialogConfig } from '../elder-dialog-config'\nimport { CdkTrapFocus } from '@angular/cdk/a11y'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton, MatButton } from '@angular/material/button'\nimport { ElderThemeDirective } from '../../theme/elder-theme.directive'\nimport { MatToolbar, MatToolbarRow } from '@angular/material/toolbar'\n\nexport class ConfirmDialogConfig extends ElderDialogConfig {\n  /**\n   * String appearing as message in the dialog.\n   */\n  public message: string\n\n  /**\n   * If true, dialog will show 'yes' and 'no' instead of 'ok' and 'cancel' as options.\n   */\n  public yesNo?: boolean\n}\n\n@Component({\n  selector: 'elder-confirm-dialog',\n  templateUrl: './elder-confirm-dialog.component.html',\n  styleUrls: ['./elder-confirm-dialog.component.scss'],\n  imports: [\n    MatToolbar,\n    ElderThemeDirective,\n    MatToolbarRow,\n    MatIconButton,\n    MatDialogClose,\n    MatIcon,\n    TranslateModule,\n    CdkTrapFocus,\n    MatButton,\n  ],\n})\nexport class ElderConfirmDialogComponent {\n  public title: string\n  public message: string\n  public yesNo = false\n\n  constructor(public dialogRef: MatDialogRef<ElderConfirmDialogComponent>) {}\n}\n","<div class=\"layout-col full\">\n  <mat-toolbar elderTheme class=\"flex-none\">\n    <mat-toolbar-row class=\"gap-sm\">\n      <button mat-icon-button type=\"button\" [matDialogClose]=\"false\">\n        <mat-icon>close</mat-icon>\n      </button>\n      <h3>{{ title | translate }}</h3>\n    </mat-toolbar-row>\n  </mat-toolbar>\n\n  <div class=\"layout-col flex p-md gap-md\">\n    <div class=\"flex\">\n      <p translate>{{ message }}</p>\n    </div>\n\n    <div class=\"layout-row place-end-center gap-md flex-none\" cdkTrapFocus>\n      <button type=\"button\" mat-button (click)=\"dialogRef.close(false)\">\n        {{ (yesNo ? 'actions.no' : 'actions.cancel') | translate }}\n      </button>\n\n      <button type=\"submit\" mat-flat-button cdkFocusInitial (click)=\"dialogRef.close(true)\">\n        {{ (yesNo ? 'actions.yes' : 'actions.ok') | translate }}\n      </button>\n    </div>\n  </div>\n</div>\n","import { Component, Inject, OnInit } from '@angular/core'\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogClose } from '@angular/material/dialog'\nimport { ElderDialogConfig } from '../elder-dialog-config'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatInput } from '@angular/material/input'\nimport { MatFormField } from '@angular/material/form-field'\nimport { CdkTrapFocus } from '@angular/cdk/a11y'\nimport { FormsModule } from '@angular/forms'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton, MatButton } from '@angular/material/button'\nimport { ElderThemeDirective } from '../../theme/elder-theme.directive'\nimport { MatToolbar, MatToolbarRow } from '@angular/material/toolbar'\n\nexport class QuestionDialogConfig extends ElderDialogConfig {\n  /**\n   * String appearing as question in the dialog.\n   */\n  public question: string\n}\n\n@Component({\n  selector: 'elder-question-dialog',\n  templateUrl: './elder-question-dialog.component.html',\n  styleUrls: ['./elder-question-dialog.component.scss'],\n  imports: [\n    MatToolbar,\n    ElderThemeDirective,\n    MatToolbarRow,\n    MatIconButton,\n    MatDialogClose,\n    MatIcon,\n    FormsModule,\n    CdkTrapFocus,\n    MatFormField,\n    MatInput,\n    MatButton,\n    TranslateModule,\n  ],\n})\nexport class ElderQuestionDialogComponent implements OnInit {\n  public answer: string\n\n  constructor(\n    public dialogRef: MatDialogRef<ElderQuestionDialogComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: any\n  ) {}\n\n  ngOnInit() {}\n\n  public confirm(event: Event) {\n    this.dialogRef.close(this.answer)\n  }\n\n  public cancel(event: Event): void {\n    this.dialogRef.close()\n  }\n\n  public get isValid(): boolean {\n    return !!this.answer\n  }\n}\n","<div class=\"layout-col full\">\n  <mat-toolbar elderTheme class=\"flex-none\">\n    <mat-toolbar-row class=\"gap-sm\">\n      <button mat-icon-button type=\"button\" [matDialogClose]=\"false\">\n        <mat-icon>close</mat-icon>\n      </button>\n      <h3>{{ data.title | translate }}</h3>\n    </mat-toolbar-row>\n  </mat-toolbar>\n\n  <form #f=\"ngForm\" class=\"layout-col flex p-md\" (ngSubmit)=\"confirm($event)\" cdkTrapFocus>\n    <div class=\"layout-col flex\">\n      <p>{{ data.question }}</p>\n\n      <mat-form-field class=\"full-width\">\n        <input\n          matInput\n          type=\"text\"\n          name=\"name\"\n          [(ngModel)]=\"answer\"\n          cdkFocusInitial\n          placeholder=\"{{ 'context.name' | translate }}\"\n          required\n        />\n      </mat-form-field>\n    </div>\n\n    <div class=\"layout-row place-end-center gap-md flex-none\">\n      <button mat-button type=\"button\" (click)=\"cancel($event)\">\n        {{ 'actions.cancel' | translate }}\n      </button>\n\n      <button mat-flat-button type=\"submit\" color=\"primary\" [disabled]=\"!isValid\">\n        {{ 'actions.ok' | translate }}\n      </button>\n    </div>\n  </form>\n</div>\n","import { AfterViewInit, Component, Inject, Input, OnInit } from '@angular/core'\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogClose } from '@angular/material/dialog'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatButton } from '@angular/material/button'\nimport { NgTemplateOutlet } from '@angular/common'\n\n@Component({\n  selector: 'elder-selection-dialog',\n  templateUrl: './elder-selection-dialog.component.html',\n  styleUrls: ['./elder-selection-dialog.component.scss'],\n  imports: [NgTemplateOutlet, MatButton, MatDialogClose, TranslateModule],\n})\nexport class ElderSelectionDialogComponent implements OnInit, AfterViewInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public title: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public dialogRef: MatDialogRef<ElderSelectionDialogComponent>,\n    @Inject(MAT_DIALOG_DATA)\n    public data: any\n  ) {}\n\n  ngOnInit() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public confirmSelection(): void {\n    this.dialogRef.close()\n  }\n\n  ngAfterViewInit(): void {\n    // this.dialogRef.updateSize('20vw', '20vh');\n  }\n}\n","<div class=\"layout-col full\">\n  <div class=\"layout-col flex-none\">\n    @if (title) {\n      <h2>{{ title | translate }}</h2>\n    }\n  </div>\n\n  <div class=\"layout-col flex\">\n    <ng-template [ngTemplateOutlet]=\"data.template\"></ng-template>\n  </div>\n\n  <div class=\"layout-row place-end-center gap-md\">\n    <button mat-button type=\"button\" mat-dialog-close>\n      {{ 'actions.cancel' | translate }}\n    </button>\n\n    <button\n      mat-flat-button\n      type=\"button\"\n      [disabled]=\"data.selectionModel.isEmpty()\"\n      (click)=\"confirmSelection()\"\n    >\n      {{ 'actions.select' | translate }}\n    </button>\n  </div>\n</div>\n","import { Directive, EventEmitter, Input, Output, TemplateRef } from '@angular/core'\nimport { MatDialog } from '@angular/material/dialog'\nimport { ElderSelectionDialogComponent } from './elder-selection-dialog/elder-selection-dialog.component'\nimport { SelectionModel } from '../../../common/selection/selection-model'\n\n@Directive({\n  selector: '[elderDialog]',\n  exportAs: 'elderSelection',\n  standalone: true,\n})\nexport class ElderSelectionDialogDirective<T = any> {\n  @Input()\n  public selectionModel: SelectionModel<T>\n\n  @Output()\n  public close: EventEmitter<T[]> = new EventEmitter()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private templateRef: TemplateRef<any>,\n    private dialog: MatDialog\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public open(): void {\n    const dialogRef = this.dialog.open(ElderSelectionDialogComponent, {\n      data: {\n        template: this.templateRef,\n        selectionModel: this.selectionModel,\n      },\n      width: '80vw',\n      height: '80vh',\n    })\n\n    dialogRef.afterClosed().subscribe((result) => this.close.emit(result))\n  }\n}\n","import { Component, Input, input, OnInit } from '@angular/core'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { booleanTransformFn } from '../../../common/utils/signal-input'\n\n@Component({\n  selector: 'elder-header',\n  templateUrl: './elder-header.component.html',\n  styleUrls: ['./elder-header.component.css'],\n  imports: [TranslateModule],\n})\nexport class ElderHeaderComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public header: string\n\n  @Input()\n  public subheader: string\n\n  public truncateHeader = input(false, { transform: booleanTransformFn })\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n}\n","<div class=\"layout-col\">\n  <h2 [class]=\"[truncateHeader() ? 'truncate-line' : undefined]\">\n    {{ header ? header : ('-' | translate) }}\n  </h2>\n  <span [class]=\"['mat-caption', truncateHeader() ? 'truncate-line' : undefined]\">{{\n    subheader ? subheader : ('-' | translate)\n  }}</span>\n</div>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { RouterModule } from '@angular/router'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderHeaderComponent } from './elder-header/elder-header.component'\n\nexport * from './elder-header/elder-header.component'\n\n@NgModule({\n  imports: [\n    // Angular\n    CommonModule,\n    RouterModule,\n    // Third Party\n    TranslateModule,\n    // Angular Material\n    ElderHeaderComponent,\n  ],\n  exports: [ElderHeaderComponent],\n})\nexport class ElderHeaderModule {}\n","import {\n  ElderConfirmDialogComponent,\n  ConfirmDialogConfig,\n} from './confirm-dialog/elder-confirm-dialog.component'\nimport { MatDialogRef, MatDialog, MatDialogConfig } from '@angular/material/dialog'\nimport { Injectable } from '@angular/core'\nimport {\n  ElderQuestionDialogComponent,\n  QuestionDialogConfig,\n} from './question-dialog/elder-question-dialog.component'\nimport { TranslateService } from '@ngx-translate/core'\nimport { Observable, of } from 'rxjs'\nimport { filter, map, switchMap } from 'rxjs/operators'\nimport { ElderDialogConfig } from './elder-dialog-config'\n\nexport interface ConfirmDeleteOptions {\n  /**\n   * How many items are about to be deleted?\n   */\n  deletionCount: number\n\n  /**\n   * Actually require the user to confirm deletion.\n   * Defaults to true.\n   */\n  confirmRemoval?: boolean\n\n  /**\n   * Skip delete confirmation even if confirmRemoval is true.\n   */\n  skipConfirm?: boolean\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderDialogService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly defaultDialogConfig: MatDialogConfig = {\n    role: 'dialog',\n    disableClose: false,\n    autoFocus: true,\n    restoreFocus: true,\n    closeOnNavigation: false,\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private dialog: MatDialog,\n    private translateService: TranslateService\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public confirmDelete(\n    options: ConfirmDeleteOptions,\n    confirmedFn: () => void,\n    canceledFn?: () => void\n  ): void {\n    const confirmRemoval = options.confirmRemoval ?? true\n\n    if (!options.skipConfirm && confirmRemoval) {\n      this.showConfirmDelete(options.deletionCount).subscribe({\n        next: (confirmed) => {\n          if (confirmed) {\n            confirmedFn()\n          } else {\n            if (canceledFn) {\n              canceledFn()\n            }\n          }\n        },\n      })\n    } else {\n      confirmedFn()\n    }\n  }\n\n  public showConfirmDelete(deletionCount: number): Observable<boolean> {\n    return this.showConfirm({\n      title: 'dialogs.confirm-deletion.title',\n      message: 'dialogs.confirm-deletion.message',\n      yesNo: true,\n      interpolateParams: { numOfItems: deletionCount },\n    })\n  }\n\n  /**\n   * Creates a modal confirmation dialog.\n   *\n   * @param config object for conform dialog\n   */\n  public showConfirm(config: ConfirmDialogConfig): Observable<boolean> {\n    if (!config) {\n      throw new Error('Argument must not be null: config')\n    }\n\n    const rawMessages = new Map<string, string>()\n    rawMessages.set('title', config.title)\n    rawMessages.set('message', config.message)\n\n    return this.resolveTranslatedMap(rawMessages, config.interpolateParams).pipe(\n      switchMap((messages) => {\n        const title = messages.get('title')\n        const message = messages.get('message')\n\n        let dialogRef: MatDialogRef<ElderConfirmDialogComponent>\n\n        dialogRef = this.dialog.open(ElderConfirmDialogComponent, this.matDialogConfig(config))\n        dialogRef.componentInstance.title = title\n        dialogRef.componentInstance.message = message\n        dialogRef.componentInstance.yesNo = config.yesNo\n\n        return dialogRef.afterClosed()\n      })\n    )\n  }\n\n  /**\n   * Creates a modal question dialog.\n   *\n   * @param config\n   */\n  public showQuestion(config: QuestionDialogConfig): Observable<string> {\n    if (!config) {\n      throw new Error('Argument must not be null: config')\n    }\n\n    const rawMessages = new Map<string, string>()\n    rawMessages.set('title', config.title)\n    rawMessages.set('question', config.question)\n\n    return this.resolveTranslatedMap(rawMessages, config.interpolateParams).pipe(\n      switchMap((messages) => {\n        const title = messages.get('title')\n        const question = messages.get('question')\n\n        const dlgConf = this.matDialogConfig(config)\n        dlgConf.data = {\n          title: title,\n          question: question,\n        }\n        const dialogRef = this.dialog.open(ElderQuestionDialogComponent, dlgConf)\n        return dialogRef.afterClosed().pipe(filter((response) => !!response))\n      })\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private resolveTranslatedMap(\n    messages: Map<string, string>,\n    interpolateParams?: object\n  ): Observable<Map<string, string>> {\n    const rawMessages = Array.from(messages.values())\n\n    return this.translateInterpolatedParams(interpolateParams).pipe(\n      switchMap((translatedParams) => this.translateService.get(rawMessages, translatedParams)),\n      map((translatedValues) => {\n        const translated = new Map<string, string>()\n        messages.forEach((rawValue, key) => {\n          translated.set(key, translatedValues[rawValue] || rawValue)\n        })\n        return translated\n      })\n    )\n  }\n\n  /**\n   * Translates a list of params\n   *\n   * @param interpolateParams\n   */\n  private translateInterpolatedParams(interpolateParams: any): Observable<string | any> {\n    if (!interpolateParams) {\n      return of({})\n    }\n\n    const values = Object.getOwnPropertyNames(interpolateParams)\n      .map((key) => interpolateParams[key])\n      .filter((value) => !!value)\n      .map((value) => value + '')\n\n    return this.translateService.get(values).pipe(\n      map((translated) => {\n        Object.getOwnPropertyNames(interpolateParams).forEach((key) => {\n          const value = interpolateParams[key]\n          interpolateParams[key] = translated[value]\n        })\n\n        return interpolateParams\n      })\n    )\n  }\n\n  private matDialogConfig(config: ElderDialogConfig): MatDialogConfig {\n    const matConfig = config.config ?? new MatDialogConfig()\n    matConfig.panelClass = 'custom-dialog-container'\n    matConfig.minWidth = '40vw'\n    matConfig.height = '40vh'\n    return matConfig\n  }\n}\n","import { NgModule } from '@angular/core'\n\nimport { ElderConfirmDialogComponent } from './confirm-dialog/elder-confirm-dialog.component'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatDialogModule } from '@angular/material/dialog'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatInputModule } from '@angular/material/input'\nimport { MatToolbarModule } from '@angular/material/toolbar'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { CommonModule } from '@angular/common'\nimport { FormsModule } from '@angular/forms'\nimport { ElderQuestionDialogComponent } from './question-dialog/elder-question-dialog.component'\nimport { A11yModule } from '@angular/cdk/a11y'\nimport { ElderSelectionDialogComponent } from './selection-dialog/elder-selection-dialog/elder-selection-dialog.component'\nimport { ElderSelectionDialogDirective } from './selection-dialog/elder-selection-dialog.directive'\nimport { ElderThemeModule } from '../theme/elder-theme.module'\nimport { ElderHeaderModule } from '../headers/elder-header.module'\n\nexport { ElderSelectionDialogComponent } from './selection-dialog/elder-selection-dialog/elder-selection-dialog.component'\nexport { ElderSelectionDialogDirective } from './selection-dialog/elder-selection-dialog.directive'\nexport { ElderDialogService, ConfirmDeleteOptions } from './elder-dialog.service'\nexport { ElderDialogConfig } from './elder-dialog-config'\n\nexport * from './confirm-dialog/elder-confirm-dialog.component'\nexport * from './question-dialog/elder-question-dialog.component'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatIconModule,\n    MatButtonModule,\n    MatDialogModule,\n    MatToolbarModule,\n    MatInputModule,\n    A11yModule,\n    TranslateModule,\n    ElderThemeModule,\n    ElderHeaderModule,\n    ElderConfirmDialogComponent,\n    ElderQuestionDialogComponent,\n    ElderSelectionDialogComponent,\n    ElderSelectionDialogDirective,\n  ],\n  exports: [\n    ElderConfirmDialogComponent,\n    ElderQuestionDialogComponent,\n    ElderSelectionDialogComponent,\n    ElderSelectionDialogDirective,\n  ],\n})\nexport class ElderDialogModule {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChildren,\n  Directive,\n  Inject,\n  Input,\n  OnInit,\n  Optional,\n  Output,\n  QueryList,\n  TemplateRef,\n} from '@angular/core'\nimport { SelectionEventSource, SelectionModel } from '../../../../common/selection/selection-model'\nimport { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { ElderDialogService } from '../../../dialogs/elder-dialog.module'\nimport { ELDER_DATA_VIEW, IElderDataView } from '../../base/elder-data-view'\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton } from '@angular/material/button'\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common'\n\nexport type ElderToolbarContentSlot =\n  | 'main'\n  | 'left'\n  | 'left.actions'\n  | 'center'\n  | 'right'\n  | 'right.actions'\n  | 'right.menu'\n\n/**\n * This directive projects content identified by a placeholder id\n * into the elder-data-toolbar at the corresponding ElderToolbarContentSlot.\n */\n@Directive({\n  selector: '[elderToolbarContent]',\n  standalone: true,\n})\nexport class ElderToolbarContentDirective {\n  @Input('elderToolbarContent')\n  public placeholderId: ElderToolbarContentSlot\n\n  constructor(public templateRef: TemplateRef<any>) {}\n}\n\n@Component({\n  selector: 'elder-data-toolbar',\n  templateUrl: './elder-data-toolbar.component.html',\n  styleUrls: ['./elder-data-toolbar.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgTemplateOutlet, MatIconButton, MatIcon, MatMenuTrigger, MatMenu, AsyncPipe],\n})\nexport class ElderDataToolbarComponent<T = any> implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _selectionModel: SelectionModel<T>\n\n  @Input()\n  public canAdd = true\n\n  @Input()\n  public canRemove = true\n\n  @Input()\n  public canMore = true\n\n  @Input()\n  public confirmRemoval = true\n\n  @Input()\n  public keepSelectionAfterRemoval = false\n\n  @Output()\n  public readonly requestNew = new Subject<any>()\n\n  @Output()\n  public readonly requestRemove = new Subject<T[]>()\n\n  @ContentChildren(ElderToolbarContentDirective)\n  public templates: QueryList<ElderToolbarContentDirective>\n\n  public selection$: Observable<T[]>\n\n  public readonly selectionFallback = new BehaviorSubject<T[]>([])\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Optional() selectionModel: SelectionModel<T>,\n    @Optional() @Inject(ELDER_DATA_VIEW) dataView: IElderDataView,\n    private dialogService: ElderDialogService\n  ) {\n    this.selection$ = this.selectionFallback.asObservable()\n\n    if (selectionModel) {\n      this.selectionModel = selectionModel\n    }\n\n    if (dataView) {\n      this.selectionModel = dataView.selectionModel\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set selectionModel(model: SelectionModel<T>) {\n    this._selectionModel = model\n    if (model) {\n      this.selection$ = model.selection\n    } else {\n      this.selection$ = this.selectionFallback.asObservable()\n    }\n  }\n\n  public get selectionModel(): SelectionModel<T> {\n    return this._selectionModel\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public getTemplate(placeholderId: ElderToolbarContentSlot): TemplateRef<any> {\n    if (!this.templates) {\n      return null\n    }\n\n    const template = this.templates.find((item) => item.placeholderId === placeholderId)\n    return template ? template.templateRef : null\n  }\n\n  public requestRemoveItems(items: T[], event?: MouseEvent): void {\n    this.dialogService.confirmDelete(\n      {\n        deletionCount: items.length,\n        confirmRemoval: this.confirmRemoval,\n        skipConfirm: event?.shiftKey,\n      },\n      () => this.emitRemove(items)\n    )\n  }\n\n  private emitRemove(items: T[]): void {\n    this.requestRemove.next(items)\n\n    if (!this.keepSelectionAfterRemoval) {\n      // Clear the selection after deleting items\n      if (this._selectionModel) {\n        this._selectionModel.deselect(items, {\n          source: SelectionEventSource.SYSTEM,\n          info: 'ElderDataToolbar.afterRemoveItems',\n        })\n      }\n    }\n  }\n}\n","<!-- Table Toolbar -->\n@if (selection$ | async; as selection) {\n  <div class=\"layout-row place-between-center gap-md px-sm full\">\n    <ng-container\n      *ngTemplateOutlet=\"getTemplate('main') || defaultContent; context: { $implicit: selection }\"\n    ></ng-container>\n  </div>\n}\n\n<!-- Default Templates -->\n\n<!-- Default Main Content -->\n<ng-template #defaultContent let-selection>\n  <!-- Left column -->\n  <div class=\"layout-row place-start-center\">\n    <ng-container\n      *ngTemplateOutlet=\"\n        getTemplate('left') || defaultLeftContent;\n        context: { $implicit: selection }\n      \"\n    ></ng-container>\n  </div>\n\n  <div class=\"layout-row place-center-center flex\">\n    <ng-container\n      *ngTemplateOutlet=\"\n        getTemplate('center') || defaultCenterContent;\n        context: { $implicit: selection }\n      \"\n    ></ng-container>\n  </div>\n\n  <!-- Right column -->\n  <div class=\"layout-row place-end-center\">\n    <ng-container\n      *ngTemplateOutlet=\"\n        getTemplate('right') || defaultRightContent;\n        context: { $implicit: selection }\n      \"\n    ></ng-container>\n  </div>\n</ng-template>\n\n<!-- Default Left Content -->\n<ng-template #defaultLeftContent let-selection>\n  <!-- Add Action -->\n  @if (canAdd) {\n    <button mat-icon-button type=\"button\" color=\"primary\" (click)=\"requestNew.next($event)\">\n      <mat-icon>add</mat-icon>\n    </button>\n  }\n\n  <!-- Placeholder for additional actions -->\n  <ng-container\n    *ngTemplateOutlet=\"getTemplate('left.actions'); context: { $implicit: selection }\"\n  ></ng-container>\n</ng-template>\n\n<!-- Default Center Content -->\n<ng-template #defaultCenterContent let-selection></ng-template>\n\n<!-- Default Right Content -->\n<ng-template #defaultRightContent let-selection>\n  <!-- Placeholder for additional actions -->\n  <ng-container\n    *ngTemplateOutlet=\"getTemplate('right.actions'); context: { $implicit: selection }\"\n  ></ng-container>\n\n  <!-- Delete Action -->\n  @if (canRemove) {\n    <button\n      mat-icon-button\n      type=\"button\"\n      color=\"primary\"\n      [disabled]=\"!selection?.length\"\n      (click)=\"requestRemoveItems(selection, $event)\"\n    >\n      <mat-icon>delete</mat-icon>\n    </button>\n  }\n\n  <!-- More Menu -->\n  <button\n    mat-icon-button\n    type=\"button\"\n    color=\"primary\"\n    [matMenuTriggerFor]=\"elderTableMenu\"\n    [disabled]=\"!canMore\"\n  >\n    <mat-icon>more_vert</mat-icon>\n    <mat-menu #elderTableMenu=\"matMenu\">\n      <ng-content select=\"[mat-menu-item]\"></ng-content>\n      <!-- Placeholder for mat menu items-->\n      <ng-container\n        *ngTemplateOutlet=\"getTemplate('right.menu'); context: { $implicit: selection }\"\n      ></ng-container>\n    </mat-menu>\n  </button>\n</ng-template>\n","import { Directive, Input } from '@angular/core'\n\n@Directive({\n  selector: '[elderBadge]',\n  standalone: true,\n  host: {\n    class: 'elder-badge',\n  },\n})\nexport class ElderBadgeDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Adds css class for dynamic sized matBadge                               *\n   *                                                                         *\n   **************************************************************************/\n}\n","export class MasterSelectionState {\n  constructor(\n    public readonly count: number,\n    public readonly allSelected: boolean,\n    public readonly someSelected: boolean,\n    public readonly anySelected: boolean,\n    public readonly isMultiSelection: boolean\n  ) {}\n}\n","import { Directive, ElementRef, HostListener, Input, Optional, Signal } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport {\n  SelectionEventSource,\n  SelectionModel,\n  SelectionOptions,\n} from '../../../../common/selection/selection-model'\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs'\nimport { IDataContext } from '../../../../common/data/data-context/data-context'\nimport { MasterSelectionState } from './master-selection-state'\nimport { filter, map, switchMap } from 'rxjs/operators'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { DomUtil } from '../../../../common/dom/dom-util'\n\n@Directive({\n  selector: '[elderDataContextSelection]',\n  exportAs: 'elderDataContextSelection',\n  standalone: true,\n})\nexport class DataContextSelectionDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _selectionModel$ = new BehaviorSubject<SelectionModel<any>>(null)\n  private readonly dataContext$ = new BehaviorSubject<IDataContext<any>>(null)\n\n  public readonly selectionState: Signal<MasterSelectionState>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Optional() selectionModel: SelectionModel<any>,\n    private elementRef: ElementRef<HTMLElement>\n  ) {\n    this._selectionModel$.next(selectionModel)\n\n    this.selectionState = toSignal(\n      this.buildSelectionState$(this._selectionModel$, this.dataContext$)\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input('elderDataContextSelectionModel')\n  public set selectionModel(model: SelectionModel<any>) {\n    this._selectionModel$.next(model)\n  }\n\n  public get selectionModel$(): Observable<SelectionModel<any>> {\n    return this._selectionModel$\n  }\n\n  public get selectionModel(): SelectionModel<any> {\n    return this._selectionModel$.getValue()\n  }\n\n  @Input('elderDataContextSelection')\n  public set dataContext(dataContext: IDataContext<any>) {\n    this.dataContext$.next(dataContext)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /** Selects all rows if they are not all selected; otherwise clear selection. */\n  public masterToggle(source: SelectionEventSource = SelectionEventSource.SYSTEM): void {\n    this.log.debug('masterToggle triggered, toggling all!')\n\n    const options: SelectionOptions = {\n      source: source,\n      info: 'masterToggle',\n    }\n\n    if (this.isAllSelectedSnapshot) {\n      this.selectionModel.clear(options)\n    } else {\n      const context = this.dataContext$.getValue()\n      if (context) {\n        const data = context.snapshot.data\n        this.log.debug('selecting all data', data)\n        this.selectionModel.select(data, options)\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Listeners                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('keydown', ['$event'])\n  public onKeydown(event: KeyboardEvent): void {\n    if (!this.shouldHandleSelectAllEvent(event)) {\n      return\n    }\n\n    // always prevent default and stop propagation\n    event.preventDefault()\n    event.stopPropagation()\n\n    // check for selectionMultiEnabled\n    if (this.selectionModel?.isMultipleSelection) {\n      this.masterToggle(SelectionEventSource.USER_KEYBOARD)\n    } else {\n      this.log.debug('multiple selection is disabled, skipping select all')\n    }\n  }\n\n  @HostListener('document:keydown', ['$event'])\n  public onDocumentKeydown(event: KeyboardEvent): void {\n    if (!this.shouldHandleSelectAllEvent(event)) {\n      return\n    }\n\n    // check if multiple selection is enabled\n    if (!this.selectionModel?.isMultipleSelection) {\n      this.log.debug('multiple selection is disabled, skipping select all')\n      return\n    }\n\n    // check if the element is visible\n    if (\n      !this.elementRef?.nativeElement ||\n      !DomUtil.isElementVisible(this.elementRef.nativeElement)\n    ) {\n      return\n    }\n\n    event.preventDefault()\n    event.stopPropagation()\n    this.masterToggle(SelectionEventSource.USER_KEYBOARD)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  /** Whether the number of selected elements matches the totalSnapshot number of selectable rows. */\n  private get isAllSelectedSnapshot(): boolean {\n    const numSelected = this.selectionModel.selectionSnapshot.length\n    const context = this.dataContext$.getValue()\n    const numRows = context ? context.snapshot.data.length : 0\n    const numUnselectable = context\n      ? context.snapshot.data.filter((i) => !this.selectionModel.isSelectable(i)).length\n      : 0\n    return numSelected >= numRows - numUnselectable // True if all selectable items are selected\n  }\n\n  private buildSelectionState$(\n    selectionModel$: Observable<SelectionModel<any>>,\n    dataContext$: Observable<IDataContext<any>>\n  ): Observable<MasterSelectionState> {\n    return combineLatest([selectionModel$, dataContext$]).pipe(\n      filter(([model, dc]) => !!model && !!dc),\n      switchMap(([model, dc]) => this.buildSelectionStateInner$(model, dc))\n    )\n  }\n\n  private buildSelectionStateInner$(\n    model: SelectionModel<any>,\n    dc: IDataContext<any>\n  ): Observable<MasterSelectionState> {\n    return combineLatest([model.selection, dc.data]).pipe(\n      map(([selection, currentData]) => {\n        const unselectable = currentData.filter((i) => !model.isSelectable(i))\n        return new MasterSelectionState(\n          selection.length,\n          selection.length >= currentData.length - unselectable.length,\n          selection.length > 0 && selection.length < currentData.length - unselectable.length,\n          selection.length > 0,\n          model.isMultipleSelection\n        )\n      })\n    )\n  }\n\n  /**\n   * Determines if a keyboard event should trigger the select-all functionality.\n   * Checks for Ctrl/Cmd+A and whether the target is in a text editing context.\n   */\n  private shouldHandleSelectAllEvent(event: KeyboardEvent): boolean {\n    // Check if pressed key is Ctrl/Cmd + A, if not, return false\n    const isCmdKeyPressed = event.ctrlKey || event.metaKey\n    const isAKeyPressed = event.key.toLowerCase() === 'a'\n    if (!isCmdKeyPressed || !isAKeyPressed) {\n      return false\n    }\n\n    // Check if target is in a text editing context, if so, return false\n    if (DomUtil.isInTextEditingContext(event.target as HTMLElement)) {\n      return false\n    }\n\n    return true\n  }\n}\n","import { ChangeDetectionStrategy, Component, Signal } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { DataContextSelectionDirective } from '../data-context-selection.directive'\nimport { MatBadge } from '@angular/material/badge'\nimport { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox'\nimport { MasterSelectionState } from '../master-selection-state'\nimport { ElderBadgeDirective } from '../../../../../components/badge/elder-badge.directive'\nimport { SelectionEventSource } from '../../../../../common/selection/selection-model'\n\n@Component({\n  selector: 'elder-selection-master-checkbox',\n  templateUrl: './elder-selection-master-checkbox.component.html',\n  styleUrls: ['./elder-selection-master-checkbox.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatCheckbox, MatBadge, ElderBadgeDirective],\n})\nexport class ElderSelectionMasterCheckboxComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n  public readonly selectionState: Signal<MasterSelectionState | undefined>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(public readonly dataContextSelection: DataContextSelectionDirective) {\n    this.selectionState = dataContextSelection.selectionState\n  }\n\n  public onCheckboxChange(event: MatCheckboxChange): void {\n    if (event) {\n      this.dataContextSelection.masterToggle(SelectionEventSource.USER_MOUSE_CLICK)\n    }\n  }\n}\n","@if (selectionState(); as selectionState) {\n  @if (selectionState.isMultiSelection) {\n    <div class=\"layout-row place-start-center\">\n      <mat-checkbox\n        (change)=\"onCheckboxChange($event)\"\n        [checked]=\"selectionState.allSelected\"\n        [indeterminate]=\"selectionState.someSelected\"\n        [matBadgeHidden]=\"selectionState.count === 0\"\n        [matBadge]=\"selectionState.count + ''\"\n        [matBadgeColor]=\"'accent'\"\n        [matBadgePosition]=\"'above before'\"\n        [matBadgeOverlap]=\"true\"\n        [matBadgeSize]=\"'small'\"\n        elderBadge\n      >\n      </mat-checkbox>\n    </div>\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'\nimport { BehaviorSubject } from 'rxjs'\nimport { IDataContext } from '../../../../common/data/data-context/data-context'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatIcon } from '@angular/material/icon'\nimport { NgTemplateOutlet, AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-data-context-state-indicator',\n  templateUrl: './data-context-state-indicator.component.html',\n  styleUrls: ['./data-context-state-indicator.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgTemplateOutlet, MatIcon, AsyncPipe, TranslateModule],\n})\nexport class DataContextStateIndicatorComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly dataContext$ = new BehaviorSubject<IDataContext<any>>(null)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set dataContext(dataContext: IDataContext<any>) {\n    this.dataContext$.next(dataContext)\n  }\n}\n","@if (dataContext$ | async; as dataContext) {\n  @if (dataContext) {\n    @if (dataContext.isStarted$ | async) {\n      @if (!(dataContext?.status | async)?.hasError) {\n        @if ((dataContext?.data | async)?.length === 0) {\n          <ng-template [ngTemplateOutlet]=\"dataContextNoData\"></ng-template>\n        }\n      } @else {\n        <ng-container\n          *ngTemplateOutlet=\"\n            indicator;\n            context: { icon: 'warning', iconColor: 'warn', text: 'Error while loading data' }\n          \"\n        >\n        </ng-container>\n      }\n    } @else {\n      <ng-container\n        *ngTemplateOutlet=\"\n          indicator;\n          context: { icon: 'warning', text: 'Data context not started' }\n        \"\n      >\n      </ng-container>\n    }\n  } @else {\n    <ng-container\n      *ngTemplateOutlet=\"indicator; context: { icon: 'warning', text: 'No data context' }\"\n    >\n    </ng-container>\n  }\n}\n\n<ng-template #dataContextNoData>\n  <ng-container *ngTemplateOutlet=\"indicator; context: { icon: 'info', text: 'No data available' }\">\n  </ng-container>\n</ng-template>\n\n<ng-template #indicator let-icon=\"icon\" let-iconColor=\"iconColor\" let-text=\"text\">\n  <div class=\"layout-col place-center-center full elder-dc-indicator-container mat-body-2\">\n    <div class=\"layout-row place-center-center gap-lg\">\n      <mat-icon [color]=\"iconColor\">{{ icon }}</mat-icon>\n      <span class=\"hint mat-body-2\">{{ text | translate }}</span>\n    </div>\n  </div>\n</ng-template>\n","import { ActivationEventSource } from './activation-event-source'\n\nexport class ItemActivationOptions {\n  constructor(\n    public readonly source: ActivationEventSource,\n    public readonly focus: boolean\n  ) {}\n}\n","/**\n * To support empty input attributes and fall back to a default value.\n * This is centralized in case Angular ever decides to change empty attributes\n * to another value than an empty string (undefined, null etc.)\n *\n * e.g.\n * <some-component directiveA> </some-component>\n *\n * .@Input(\"directiveA\")\n * public set valueA(input: SomeType | InputUtils): SomeType {\n *   return input instanceOf InputUtils ? SomeType.Empty() : input;\n * }\n *\n */\nexport type NoInputArgs = ''\n\nexport class InputUtils {\n  public static isNoInputArgs(input: any): input is NoInputArgs {\n    return input === ''\n  }\n}\n","import { Inject, Injectable, Optional } from '@angular/core'\nimport { ELDER_DATA_VIEW, IElderDataView } from '../../base/elder-data-view'\nimport { filter, map, switchMap, tap } from 'rxjs/operators'\nimport { BehaviorSubject } from 'rxjs'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { IDataContext } from '../../../../common/data/data-context/data-context'\nimport { ActivationModel } from './model/activation-model'\nimport { ElderActivationOptions } from './elder-activation-options'\nimport { ItemActivationOptions } from './model/item-activation-options'\nimport { ActivationEventSource } from './model/activation-event-source'\nimport { InputUtils, NoInputArgs } from '../../../../common/utils/input-utils'\n\n@Injectable()\nexport class DataViewActivationController<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private dataContext$ = new BehaviorSubject<IDataContext<T>>(undefined)\n  private dataInView$ = new BehaviorSubject<T[]>([])\n\n  private options: ElderActivationOptions = {\n    loop: false,\n    autoActivation: 'never',\n    autoActivateItem: 'first',\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Inject(ELDER_DATA_VIEW) dataView: IElderDataView,\n    private readonly activationModel: ActivationModel<T>\n  ) {\n    this.bindToViewData(dataView)\n  }\n\n  private bindToViewData(dataView: IElderDataView): void {\n    const dc$ = dataView.dataContext$.pipe(\n      takeUntilDestroyed(),\n      filter((dc) => !!dc)\n    )\n\n    dc$\n      .pipe(\n        tap((dc) => this.dataContext$.next(dc)),\n        switchMap((dc) => dc.data)\n      )\n      .subscribe((data) => {\n        this.dataInView$.next(data)\n        this.handleAutoActivations()\n      })\n\n    dc$\n      .pipe(\n        map((dc) => dc.dataSource),\n        switchMap((ds) => ds.dataChanged),\n        filter((event) => event.deletedIds?.length > 0)\n      )\n      .subscribe({\n        next: (deleteEvent) => {\n          deleteEvent.deletedIds.forEach((id) => this.deactivateById(id))\n        },\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public Activation API                                                   *\n   *                                                                         *\n   **************************************************************************/\n\n  public activationOptions(options: ElderActivationOptions | NoInputArgs): void {\n    if (!InputUtils.isNoInputArgs(options)) {\n      this.options = { ...this.options, ...options }\n    }\n  }\n\n  public activateAndFocus(item: T): void {\n    this.activate(item, new ItemActivationOptions(ActivationEventSource.SYSTEM, true))\n  }\n\n  public activate(item: T, options: ItemActivationOptions): void {\n    this.activationModel.activate(item, options)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public Data API                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public nextCloseTo(active: T): T {\n    const next = this.nextDataItemInternal(false)\n    if (next !== active) {\n      return next\n    }\n    return this.previousDataItemInternal(false)\n  }\n\n  public previousDataItem(): T {\n    return this.previousDataItemInternal(this.options.loop)\n  }\n\n  public nextDataItem(): T {\n    return this.nextDataItemInternal(this.options.loop)\n  }\n\n  public isItemActive(item: T): boolean {\n    return this.activationModel.isItemActive(item)\n  }\n\n  public hasItemFocus(item: T): boolean {\n    return this.activationModel.hasItemFocus(item)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  private get data(): T[] {\n    return this.dataInView$.value\n  }\n\n  public get activeItem(): T {\n    return this.activationModel.activeItem\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private previousDataItemInternal(loop: boolean): T {\n    const rows = this.data\n    let currentIndex = this.getCurrentIndex()\n    if (currentIndex > 0) {\n      --currentIndex\n    } else {\n      if (loop) {\n        currentIndex = rows.length - 1\n      }\n    }\n    return this.getItemAtIndex(currentIndex)\n  }\n\n  private nextDataItemInternal(loop: boolean): T {\n    const data = this.data\n    let currentIndex = this.getCurrentIndex()\n\n    if (currentIndex < data.length - 1) {\n      ++currentIndex\n    } else {\n      if (loop) {\n        currentIndex = 0\n      }\n    }\n    return this.getItemAtIndex(currentIndex)\n  }\n\n  private handleAutoActivations(): void {\n    switch (this.options.autoActivation) {\n      case undefined:\n      case 'never':\n        break\n      case 'always':\n        if (!this.isActiveItemValid()) {\n          this.autoActivateItem(this.options)\n        }\n        break\n      case 'once':\n        if (!this.hasActiveItem) {\n          this.autoActivateItem(this.options)\n        }\n        break\n    }\n  }\n\n  private isActiveItemValid(): boolean {\n    const active = this.activeItem\n    const dc = this.dataContext$.value\n    if (active && dc) {\n      const activeId = dc.dataSource.getId(active)\n      const found = dc.findById(activeId)\n      return !!found\n    }\n    return false\n  }\n\n  private autoActivateItem(options: ElderActivationOptions) {\n    switch (options.autoActivateItem) {\n      case 'first':\n        this.activateFirst()\n        break\n      case 'last':\n        this.activateLast()\n        break\n    }\n  }\n\n  private deactivateById(id: any) {\n    const active = this.activeItem\n    if (active) {\n      const activeId = this.getId(active)\n      if (activeId === id) {\n        this.activate(null, new ItemActivationOptions(ActivationEventSource.SYSTEM, false))\n      }\n    }\n  }\n\n  private get hasActiveItem(): boolean {\n    return !!this.activeItem\n  }\n\n  private activateFirst(): void {\n    const item = this.getItemAtIndex(0)\n    if (item) {\n      this.activate(item, new ItemActivationOptions(ActivationEventSource.SYSTEM, false))\n    }\n  }\n\n  private activateLast(): void {\n    if (this.data) {\n      const item = this.getItemAtIndex(this.data.length - 1)\n      if (item) {\n        this.activate(item, new ItemActivationOptions(ActivationEventSource.SYSTEM, false))\n      }\n    }\n  }\n\n  private getCurrentIndex(): number {\n    const activeItem = this.activeItem\n    if (activeItem) {\n      return this.findItemIndex(activeItem)\n    } else {\n      return -1\n    }\n  }\n\n  private getItemAtIndex(index: number): T | undefined {\n    return this.data[index]\n  }\n\n  private findItemIndex(item: T): number {\n    const needleId = this.getId(item)\n    return this.data.findIndex((itm) => this.itemEqualsId(itm, needleId))\n  }\n\n  private itemEqualsId(a: T, needleId: any): boolean {\n    return this.getId(a) === needleId\n  }\n\n  private getId(item: T): any {\n    if (item) {\n      const ds = this.dataContext$.value?.dataSource\n      return ds?.getId(item)\n    } else {\n      return item\n    }\n  }\n}\n","import { DestroyRef, Directive, HostListener, Input, Output } from '@angular/core'\nimport { ActivationModel } from './model/activation-model'\nimport { DataViewActivationController } from './data-view-activation-controller.service'\nimport { ElderActivationOptions } from './elder-activation-options'\nimport { NoInputArgs } from '../../../../common/utils/input-utils'\nimport { Observable } from 'rxjs'\nimport { ItemActivationEvent } from './model/item-activation-event'\nimport { ItemActivationOptions } from './model/item-activation-options'\nimport { ActivationEventSource } from './model/activation-event-source'\nimport { DataViewInteractionControllerDirective } from '../../base/data-view-interaction-controller.directive'\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'elder-table,elder-grid[activation]',\n  exportAs: 'elderDataActivation',\n  standalone: true,\n  providers: [ActivationModel, DataViewActivationController],\n})\nexport class ElderDataActivationDirective<T = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly interactionController: DataViewInteractionControllerDirective,\n    private readonly destroyRef: DestroyRef,\n    private readonly activationModel: ActivationModel<T>,\n    public readonly controller: DataViewActivationController<T>\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *.\n   * Host Listeners                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('keydown', ['$event'])\n  public onKeydown(event: KeyboardEvent) {\n    let newActiveItem: T\n    if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n      newActiveItem = this.controller.nextDataItem()\n    } else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {\n      newActiveItem = this.controller.previousDataItem()\n    }\n\n    if (newActiveItem) {\n      event.stopPropagation()\n      this.activate(\n        newActiveItem,\n        new ItemActivationOptions(ActivationEventSource.USER_KEYBOARD, true)\n      )\n    }\n\n    const active = this.activeItem\n    if (active) {\n      if (event.key === 'Enter') {\n        this.interactionController.onItemClick(active, event)\n        event.stopPropagation()\n      } else if (event.key === 'Spacebar' || event.key === ' ') {\n        this.interactionController.onItemSelectionToggle(active)\n        event.stopPropagation()\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input('activation')\n  public set activationOptions(options: ElderActivationOptions | NoInputArgs) {\n    this.controller.activationOptions(options)\n  }\n\n  @Output()\n  public get activeItemEventChange(): Observable<ItemActivationEvent<T>> {\n    return this.activationModel.itemActivationEvents\n  }\n\n  @Output()\n  public get activeItemChange(): Observable<T> {\n    return this.activationModel.activeItem$\n  }\n\n  public get activeItem(): T {\n    return this.activationModel.activeItem\n  }\n\n  @Input()\n  public set activeItem(item: T) {\n    this.activate(item, new ItemActivationOptions(ActivationEventSource.SYSTEM, true))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public activate(item: T, options: ItemActivationOptions): void {\n    this.activationModel.activate(item, options)\n  }\n}\n","import { IDataContext } from '../../../../../common/data/data-context/data-context'\n\nexport class DataViewDragEnteredEvent<T> {\n  constructor(\n    /** Data context into which the user has moved the item. */\n    public readonly context: IDataContext<T>,\n    /** Item that was moved into the container. */\n    public readonly item: T,\n    /** Index at which the item has entered the container. */\n    public readonly currentIndex: number\n  ) {}\n}\n","import { IDataContext } from '../../../../../common/data/data-context/data-context'\n\nexport class DataViewDragExitedEvent<T> {\n  constructor(\n    /** Data context from which the user has a removed an item. */\n    public readonly context: IDataContext<T>,\n    /** Item that was removed from the container. */\n    public readonly item: T\n  ) {}\n}\n","import { IDataContext } from '../../../../../common/data/data-context/data-context'\n\nexport class DataViewItemDropEvent<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    /**\n     * fromStack The stack where the card originated from\n     */\n    public readonly fromContext: IDataContext<T>,\n\n    /**\n     * toStack The stack where the card is dropped to\n     */\n    public readonly toContext: IDataContext<T>,\n    /**\n     * card The row-item domain model\n     */\n    public readonly item: T,\n    /**\n     *  fromIndex Index of the item when it was picked up fromContext.\n     */\n    public readonly fromIndex: number,\n    /**\n     * toIndex Current index of the item in toContext.\n     */\n    public readonly toIndex: number,\n    /**\n     * isPointerOverContainer Whether the user's pointer was over the container when the item was dropped.\n     */\n    public readonly isPointerOverContainer: boolean\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Returns true if the drop happened across drop contexts.\n   */\n  public isCrossContextDrop(): boolean {\n    return this.fromContext !== this.toContext\n  }\n\n  /**\n   * Returns true if the drop happened at the exact same position as the drag started\n   */\n  public isSamePositionDrop(): boolean {\n    return this.fromContext === this.toContext && this.fromIndex === this.toIndex\n  }\n\n  /**\n   * Returns message string stating the drag. Useful for logging.\n   */\n  public getDragLogMessage(): string {\n    if (this.isSamePositionDrop()) {\n      return (\n        'Item was dragged from context ' +\n        this.fromContext.id +\n        ' at index ' +\n        this.fromIndex +\n        ' but dropped at the same position.'\n      )\n    } else if (this.isCrossContextDrop()) {\n      return (\n        'Item was dragged from context ' +\n        this.fromContext.id +\n        ' at index ' +\n        this.fromIndex +\n        ' to context ' +\n        this.toContext.id +\n        ' at index ' +\n        this.toIndex\n      )\n    } else {\n      return (\n        'Item was dragged within context ' +\n        this.fromContext.id +\n        ' from index ' +\n        this.fromIndex +\n        ' to index ' +\n        this.toIndex\n      )\n    }\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { CdkDragDrop, CdkDragEnter, CdkDragExit, CdkDropList } from '@angular/cdk/drag-drop'\nimport { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { filter } from 'rxjs/operators'\nimport { IElderDataView } from '../../base/elder-data-view'\nimport { DataViewItemDropEvent } from './events/data-view-item-drop-event'\nimport { IDataContext } from '../../../../common/data/data-context/data-context'\nimport { DataViewDragEnteredEvent } from './events/data-view-drag-entered-event'\nimport { DataViewDragExitedEvent } from './events/data-view-drag-exited-event'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n/**\n * Controller service for a single data view with drag and drop support\n * (ElderDataViewDndDirective).\n */\n@Injectable()\nexport class DataViewDndControllerService<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _dropList$ = new BehaviorSubject<CdkDropList>(null)\n  private readonly _dataView$ = new BehaviorSubject<IElderDataView<T>>(null)\n\n  private readonly _canDragItemPredicate$ = new BehaviorSubject<(item: T) => boolean>(null)\n  private readonly _ignoreSamePositionDrops$ = new BehaviorSubject<boolean>(false)\n\n  public readonly itemDropped$ = new Subject<DataViewItemDropEvent<T>>()\n  public readonly dropListEntered$ = new Subject<DataViewDragEnteredEvent<T>>()\n  public readonly dropListExited$ = new Subject<DataViewDragExitedEvent<T>>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get dropList$(): Observable<CdkDropList> {\n    return this._dropList$.pipe(filter((dropList) => !!dropList))\n  }\n\n  public get canDragItemPredicate$(): Observable<(item: T) => boolean> {\n    return this._canDragItemPredicate$.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public registerDataView(dataView: IElderDataView<T>): void {\n    if (dataView === null) {\n      throw new Error('dataView must not be null!')\n    }\n    this._dataView$.next(dataView)\n  }\n\n  public register(cdkDropList: CdkDropList): void {\n    if (cdkDropList === null) {\n      throw new Error('cdkDropList must not be null!')\n    }\n    this._dropList$.next(cdkDropList)\n  }\n\n  public setCanDragItemPredicate(predicate: (item: T) => boolean): void {\n    this._canDragItemPredicate$.next(predicate)\n  }\n\n  public setIgnoreSamePositionDrops(ignoreSamePositionDrops: boolean): void {\n    this._ignoreSamePositionDrops$.next(ignoreSamePositionDrops)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Event Handling                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public onItemDropped(event: CdkDragDrop<IDataContext<T>>): void {\n    this.handleItemDropped(event)\n  }\n\n  public onDropListEntered(event: CdkDragEnter<IDataContext<T>, T>): void {\n    this.handleDropListEntered(event)\n  }\n\n  public onDropListExited(event: CdkDragExit<IDataContext<T>, T>): void {\n    this.handleDropListExited(event)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleItemDropped(cdkEvent: CdkDragDrop<IDataContext<T>>): void {\n    const event = this.buildItemDropEvent(cdkEvent)\n\n    if (event.isSamePositionDrop() && this._ignoreSamePositionDrops$.getValue()) {\n      return\n    }\n\n    this.itemDropped$.next(event)\n  }\n\n  private buildItemDropEvent(cdkEvent: CdkDragDrop<IDataContext<T>>): DataViewItemDropEvent<T> {\n    return new DataViewItemDropEvent(\n      cdkEvent.previousContainer.data,\n      cdkEvent.container.data,\n      cdkEvent.item.data,\n      cdkEvent.previousIndex,\n      cdkEvent.currentIndex,\n      cdkEvent.isPointerOverContainer\n    )\n  }\n\n  private handleDropListEntered(cdkEvent: CdkDragEnter<IDataContext<T>, T>): void {\n    this.dropListEntered$.next(this.buildDragEnteredEvent(cdkEvent))\n  }\n\n  private buildDragEnteredEvent(\n    cdkEvent: CdkDragEnter<IDataContext<T>, T>\n  ): DataViewDragEnteredEvent<T> {\n    return new DataViewDragEnteredEvent(\n      cdkEvent.container.data,\n      cdkEvent.item.data,\n      cdkEvent.currentIndex\n    )\n  }\n\n  private handleDropListExited(cdkEvent: CdkDragExit<IDataContext<T>, T>): void {\n    this.dropListExited$.next(this.buildDragExitedEvent(cdkEvent))\n  }\n\n  private buildDragExitedEvent(\n    cdkEvent: CdkDragExit<IDataContext<T>, T>\n  ): DataViewDragExitedEvent<T> {\n    return new DataViewDragExitedEvent(cdkEvent.container.data, cdkEvent.item.data)\n  }\n}\n","import { Directive, effect, inject, Inject, input, OutputRef, Signal } from '@angular/core'\nimport { CdkDrag, CdkDropList } from '@angular/cdk/drag-drop'\nimport { DataViewItemDropEvent } from './events/data-view-item-drop-event'\nimport { ELDER_DATA_VIEW, IElderDataView } from '../../base/elder-data-view'\nimport { DataViewDndControllerService } from './data-view-dnd-controller.service'\nimport { outputFromObservable, toSignal } from '@angular/core/rxjs-interop'\nimport { takeUntil } from 'rxjs/operators'\nimport { IDataContext } from '../../../../common/data/data-context/data-context'\nimport { Subject } from 'rxjs'\nimport { DataViewDragEnteredEvent } from './events/data-view-drag-entered-event'\nimport { DataViewDragExitedEvent } from './events/data-view-drag-exited-event'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { booleanTransformFn } from '../../../../common/utils/signal-input'\n\n/**\n * Directive adding drag and drop support on an Elder data view.\n */\n@Directive({\n  selector: '[elderDataViewDnd]',\n  providers: [DataViewDndControllerService],\n})\nexport class ElderDataViewDndDirective<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly dndController = inject(DataViewDndControllerService<T>)\n\n  private readonly _dataContext: Signal<IDataContext<T>>\n  private readonly _dropList: Signal<CdkDropList>\n\n  /** Used to disconnect obsolete event bindings. */\n  private readonly _unsubscribeEventBindings = new Subject<void>()\n\n  /** Controls if drag and drop is generally enabled or not. */\n  public readonly canDrag = input(false, { transform: booleanTransformFn })\n\n  /** Allows connecting different drop views together. */\n  public readonly dropConnectedTo = input<string[]>([])\n\n  /** Predicate to determine if an item is draggable or not. */\n  public readonly canDragItemPredicate = input<(item: T) => boolean>(() => true)\n\n  /** Predicate to determine if one can enter a drop view. */\n  public readonly canEnterPredicate = input<(item: T, context: IDataContext<T>) => boolean>(\n    () => true\n  )\n\n  /** If ture, will ignore drop events where the item was dropped at the same position from where it was dragged. */\n  public readonly ignoreSamePositionDrops = input(false, { transform: booleanTransformFn })\n\n  /** Fired when an item is dropped. */\n  public readonly itemDropped: OutputRef<DataViewItemDropEvent<T>> = outputFromObservable(\n    this.dndController.itemDropped$\n  )\n  /** Fired when a drop view is entered while dragging. */\n  public readonly dropListEntered: OutputRef<DataViewDragEnteredEvent<T>> = outputFromObservable(\n    this.dndController.dropListEntered$\n  )\n  /** Fired when a drop view is exited while dragging. */\n  public readonly dropListExited: OutputRef<DataViewDragExitedEvent<T>> = outputFromObservable(\n    this.dndController.dropListExited$\n  )\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(@Inject(ELDER_DATA_VIEW) readonly _dataView: IElderDataView<T>) {\n    this.dndController.registerDataView(_dataView)\n\n    this._dataContext = toSignal(this._dataView.dataContext$)\n    this._dropList = toSignal(this.dndController.dropList$)\n\n    effect(() => {\n      this.bindEvents(this._dropList())\n    })\n\n    effect(() => {\n      this.bindCanDrag(this._dropList(), this.canDrag())\n    })\n\n    effect(() => {\n      this.bindConnectedTo(this._dropList(), this.dropConnectedTo())\n    })\n\n    effect(() => {\n      this.bindCanEnterPredicate(this._dropList(), this.canEnterPredicate())\n    })\n\n    effect(() => {\n      this.bindData(this._dropList(), this._dataContext())\n    })\n\n    effect(() => {\n      this.controller.setCanDragItemPredicate(this.canDragItemPredicate())\n    })\n\n    effect(() => {\n      this.controller.setIgnoreSamePositionDrops(this.ignoreSamePositionDrops())\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get controller(): DataViewDndControllerService<T> {\n    return this.dndController\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private bindEvents(dropList: CdkDropList): void {\n    this._unsubscribeEventBindings.next()\n\n    if (dropList) {\n      dropList.dropped\n        .pipe(takeUntil(this._unsubscribeEventBindings))\n        .subscribe((event) => this.dndController.onItemDropped(event))\n\n      dropList.entered\n        .pipe(takeUntil(this._unsubscribeEventBindings))\n        .subscribe((event) => this.dndController.onDropListEntered(event))\n\n      dropList.exited\n        .pipe(takeUntil(this._unsubscribeEventBindings))\n        .subscribe((event) => this.dndController.onDropListExited(event))\n    }\n  }\n\n  private bindCanDrag(dropList: CdkDropList, canDrag: boolean): void {\n    if (dropList) {\n      dropList.disabled = !canDrag\n    }\n  }\n\n  private bindConnectedTo(dropList: CdkDropList, connectedTo: string[]): void {\n    if (dropList) {\n      dropList.connectedTo = connectedTo\n    }\n  }\n\n  private bindCanEnterPredicate(\n    dropList: CdkDropList,\n    canEnterPredicate: (item: T, context: IDataContext<T>) => boolean\n  ): void {\n    if (dropList && canEnterPredicate) {\n      dropList.enterPredicate = this.dropEnterPredicate(canEnterPredicate)\n    }\n  }\n\n  private dropEnterPredicate(\n    predicate: (item: T, context: IDataContext<T>) => boolean\n  ): (drag: CdkDrag, drop: CdkDropList) => boolean {\n    return (drag: CdkDrag, drop: CdkDropList) => {\n      if (predicate) {\n        return predicate(drag.data, drop.data)\n      }\n      return true\n    }\n  }\n\n  private bindData(cdkDropList: CdkDropList, dataContext: IDataContext<T>): void {\n    if (cdkDropList && dataContext) {\n      cdkDropList.data = dataContext\n    }\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { BehaviorSubject, mergeAll, mergeMap, Observable, Subject } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { DataViewItemDropEvent } from '../events/data-view-item-drop-event'\nimport { ElderDataViewDndDirective } from '../elder-data-view-dnd.directive'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\n\n/**\n * Controller service for a single DataViewDndGroup.\n */\n@Injectable()\nexport class DataViewDndGroupControllerService<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _dropViews$ = new BehaviorSubject<readonly ElderDataViewDndDirective<T>[]>([])\n\n  /**\n   * Subject emitting each time an item is dropped on any drop view of this group.\n   */\n  public readonly itemDropped$ = new Subject<DataViewItemDropEvent<T>>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this._dropViews$\n      .pipe(\n        takeUntilDestroyed(),\n        // merge all itemDropEvent streams from each child into one main itemDropEvent stream\n        mergeMap((views) => this.getItemDropObservables(views)),\n        mergeAll()\n      )\n      .subscribe((event) => this.handleItemDrop(event))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public setDropViews(dropViews: readonly ElderDataViewDndDirective<T>[]): void {\n    this._dropViews$.next(dropViews)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private getItemDropObservables(\n    views: readonly ElderDataViewDndDirective<T>[]\n  ): Observable<DataViewItemDropEvent<T>>[] {\n    return views.map((v) => this.getItemDropObservable(v))\n  }\n\n  private getItemDropObservable(\n    dropView: ElderDataViewDndDirective<T>\n  ): Observable<DataViewItemDropEvent<T>> {\n    return dropView.controller.itemDropped$.asObservable()\n  }\n\n  private handleItemDrop(dropEvent: DataViewItemDropEvent<T>): void {\n    this.itemDropped$.next(dropEvent)\n  }\n}\n","import { contentChildren, Directive, effect, inject, OutputRef } from '@angular/core'\nimport { CdkDropListGroup } from '@angular/cdk/drag-drop'\nimport { ElderDataViewDndDirective } from '../elder-data-view-dnd.directive'\nimport { DataViewItemDropEvent } from '../events/data-view-item-drop-event'\nimport { outputFromObservable } from '@angular/core/rxjs-interop'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { DataViewDndGroupControllerService } from './data-view-dnd-group-controller.service'\n\n/**\n * Directive to group multiple drop data view together.\n * Placing this directive to any element will automatically connect\n * all ElderDataViewDndDirective elements beneath it.\n */\n@Directive({\n  selector: '[elderDataViewDndGroup]',\n  hostDirectives: [CdkDropListGroup], // auto-connects all contained cdkDropLists\n  providers: [DataViewDndGroupControllerService],\n})\nexport class ElderDataViewDndGroupDirective<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly groupController = inject(DataViewDndGroupControllerService<T>)\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly dropViews = contentChildren(ElderDataViewDndDirective<T>, { descendants: true })\n\n  public readonly itemDropped: OutputRef<DataViewItemDropEvent<T>> = outputFromObservable(\n    this.groupController.itemDropped$\n  )\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    effect(() => {\n      this.groupController.setDropViews(this.dropViews())\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import { DataViewItemDropEvent } from '../events/data-view-item-drop-event'\nimport { isLocalListDataSource } from '../../../../../common/data/datasource/data-source'\nimport { LocalListDataSource } from '../../../../../common/data/datasource/local/local-list-data-source'\nimport { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { IDataContext } from '../../../../../common/data/data-context/data-context'\n\n/**\n * Support util for updating data view models\n * according to drop events.\n */\nexport class DataViewDndModelUtil {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private static readonly log = LoggerFactory.getLogger('DataViewDndModelUtil')\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static updateModel<T>(itemDropEvent: DataViewItemDropEvent<T>): void {\n    if (!this.supportsModelUpdate(itemDropEvent)) {\n      throw Error(\n        'Cannot handle item drop, since either source or target data source is not a local list'\n      )\n    }\n\n    const instructions = ViewDropModelUpdateInstruction.of(itemDropEvent)\n    if (itemDropEvent.isCrossContextDrop()) {\n      // Dragged from one context to another\n      this.moveItemAcrossContexts(instructions)\n    } else {\n      // Dragged and dropped inside the same context\n      this.moveItemWithinContext(instructions)\n    }\n  }\n\n  private static supportsModelUpdate(itemDropEvent: DataViewItemDropEvent<any>): boolean {\n    return (\n      isLocalListDataSource(itemDropEvent.fromContext.dataSource) ||\n      isLocalListDataSource(itemDropEvent.toContext.dataSource)\n    )\n  }\n\n  private static moveItemAcrossContexts<T>(instructions: ViewDropModelUpdateInstruction<T>): void {\n    transferArrayItem(\n      instructions.fromDataSource.data,\n      instructions.toDataSource.data,\n      instructions.fromIndex,\n      instructions.toIndex\n    )\n\n    instructions.fromContext.refresh()\n    instructions.toContext.refresh()\n  }\n\n  private static moveItemWithinContext<T>(instructions: ViewDropModelUpdateInstruction<T>): void {\n    moveItemInArray(instructions.fromDataSource.data, instructions.fromIndex, instructions.toIndex)\n    instructions.fromContext.refresh()\n  }\n}\n\nexport class ViewDropModelUpdateInstruction<T> {\n  public static of<T>(dropEvent: DataViewItemDropEvent<T>): ViewDropModelUpdateInstruction<T> {\n    return new ViewDropModelUpdateInstruction(\n      dropEvent.item,\n      dropEvent.fromContext,\n      dropEvent.toContext,\n      dropEvent.fromIndex,\n      dropEvent.toIndex\n    )\n  }\n\n  constructor(\n    public readonly item: T,\n    public readonly fromContext: IDataContext<T>,\n    public readonly toContext: IDataContext<T>,\n    public readonly fromIndex: number,\n    public readonly toIndex: number\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get fromDataSource(): LocalListDataSource<T> {\n    return this.fromContext.dataSource as LocalListDataSource<T>\n  }\n\n  public get toDataSource(): LocalListDataSource<T> {\n    return this.toContext.dataSource as LocalListDataSource<T>\n  }\n}\n","import { Directive, Inject, Optional } from '@angular/core'\nimport { DataViewDndControllerService } from '../data-view-dnd-controller.service'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { DataViewItemDropEvent } from '../events/data-view-item-drop-event'\nimport { isLocalListDataSource } from '../../../../../common/data/datasource/data-source'\nimport { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { LocalListDataSource } from '../../../../../common/data/datasource/local/local-list-data-source'\nimport { ELDER_DATA_VIEW, IElderDataView } from '../../../base/elder-data-view'\nimport { IDataContext } from '../../../../../common/data/data-context/data-context'\nimport { DataViewDndModelUtil } from './data-view-dnd-model-util'\nimport { DataViewDndGroupControllerService } from '../grouping/data-view-dnd-group-controller.service'\nimport { ElderDataViewDndDirective } from '../elder-data-view-dnd.directive'\nimport { ElderDataViewDndGroupDirective } from '../grouping/elder-data-view-dnd-group.directive'\n\n/**\n * Adds support for automatic model updates\n * according to occurring drag and drop on data views.\n */\n@Directive({\n  selector: '[elderLocalDndSupport]',\n})\nexport class ElderLocalDndSupportDirective<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private dataContext: IDataContext<T>\n  private dataSource: LocalListDataSource<T>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Optional() readonly dropView: ElderDataViewDndDirective<T>,\n    @Optional() readonly dropGroup: ElderDataViewDndGroupDirective<T>,\n    @Optional() readonly dropViewController: DataViewDndControllerService<T>,\n    @Optional() readonly dropGroupController: DataViewDndGroupControllerService<T>,\n    @Optional() @Inject(ELDER_DATA_VIEW) readonly _dataView: IElderDataView<T>\n  ) {\n    if (dropView) {\n      this.initSingleDropViewModelTracking()\n    } else if (dropGroup) {\n      this.initDropGroupModelTracking()\n    } else {\n      throw Error(\n        'Directive must be placed next to ElderDataViewDndDirective or DataViewDropGroupDirective'\n      )\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Single Drop View Mode                                                   *\n   *                                                                         *\n   **************************************************************************/\n\n  private initSingleDropViewModelTracking(): void {\n    this._dataView.dataContext$.pipe(takeUntilDestroyed()).subscribe((dataContext) => {\n      this.dataContext = dataContext\n      if (dataContext && !isLocalListDataSource(dataContext.dataSource)) {\n        throw new Error(\n          'Cannot initialize single drop view model tracking. Unsupported dataSource.'\n        )\n      }\n\n      this.dataSource = dataContext?.dataSource as LocalListDataSource<T>\n    })\n\n    this.dropViewController.itemDropped$\n      .pipe(takeUntilDestroyed())\n      .subscribe((event) => this.handleItemDrop(event))\n  }\n\n  private handleItemDrop(itemDropEvent: DataViewItemDropEvent<T>): void {\n    if (!this.dataContext || !this.dataSource) {\n      this.log.error('Cannot handle itemDropEvent since either dataContext or dataSource is null.')\n      return\n    }\n\n    if (this.isSortDefined()) {\n      this.log.error(\n        'Cannot handle itemDropEvent since dataContext has an active sort definition:',\n        this.dataContext.sort\n      )\n      return\n    }\n\n    this.updateModel(itemDropEvent)\n  }\n\n  private isSortDefined(): boolean {\n    return !this.dataContext?.sort.isEmpty()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Drop Group Mode                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private initDropGroupModelTracking(): void {\n    this.dropGroupController.itemDropped$\n      .pipe(takeUntilDestroyed())\n      .subscribe((event) => this.handleGroupDrop(event))\n  }\n\n  private handleGroupDrop(itemDropEvent: DataViewItemDropEvent<T>): void {\n    this.updateModel(itemDropEvent)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private updateModel(itemDropEvent: DataViewItemDropEvent<T>): void {\n    DataViewDndModelUtil.updateModel(itemDropEvent)\n  }\n}\n","import { Directive, effect, input, Optional, signal, untracked } from '@angular/core'\nimport { CdkDrag } from '@angular/cdk/drag-drop'\nimport { DataViewDndControllerService } from './data-view-dnd-controller.service'\nimport { toSignal } from '@angular/core/rxjs-interop'\n\n/**\n * Adds drag and drop support for items of elder data view.\n */\n@Directive({\n  selector: '[elderDataViewItemDrag]',\n  hostDirectives: [CdkDrag], // adds cdkDrag to host\n})\nexport class ElderDataViewItemDragDirective<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /** The item that is being dragged. */\n  public readonly item = input.required<T>({ alias: 'elderDataViewItemDrag' })\n\n  /** Controls if the item can be dragged or not.\n   * We explicitly initialize with null and don't use booleanTransformFn since we need to know if the\n   * user defined this or if we should fall back to a superior predicate fn.\n   * */\n  public readonly canDragItem = input(null) // this is on purpose\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Optional() readonly dndController: DataViewDndControllerService<T>,\n    readonly cdkDrag: CdkDrag\n  ) {\n    const canDragItemPredicate = this.dndController\n      ? toSignal(dndController.canDragItemPredicate$)\n      : signal(null)\n\n    effect(() => {\n      this.bindCanDragItem(this.cdkDrag, this.canDragItem(), canDragItemPredicate())\n    })\n\n    effect(() => {\n      this.bindData(this.cdkDrag, this.item())\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private bindCanDragItem(\n    cdkDrag: CdkDrag,\n    canDragItem: boolean | null,\n    canDragItemPredicate?: (item: T) => boolean\n  ): void {\n    if (cdkDrag) {\n      let canDrag: boolean\n\n      if (canDragItem !== null) {\n        canDrag = canDragItem\n      } else if (canDragItemPredicate !== null) {\n        canDrag = canDragItemPredicate(untracked(this.item)) // we only want to read the signal here\n      } else {\n        canDrag = true // positive fall back since drag prevention is opt-in\n      }\n\n      cdkDrag.disabled = !canDrag\n    }\n  }\n\n  private bindData(cdkDrag: CdkDrag, item: T) {\n    if (cdkDrag) {\n      cdkDrag.data = item\n    }\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatBadgeModule } from '@angular/material/badge'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatCheckboxModule } from '@angular/material/checkbox'\nimport { MatDialogModule } from '@angular/material/dialog'\nimport { MatDividerModule } from '@angular/material/divider'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatMenuModule } from '@angular/material/menu'\nimport { MatProgressBarModule } from '@angular/material/progress-bar'\nimport { MatTooltipModule } from '@angular/material/tooltip'\nimport { RouterModule } from '@angular/router'\nimport {\n  ElderDataToolbarComponent,\n  ElderToolbarContentDirective,\n} from './elder-data-toolbar/elder-data-toolbar.component'\nimport { ElderSingleSortComponent } from './elder-single-sort/elder-single-sort.component'\nimport { ElderSelectionMasterCheckboxComponent } from './selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component'\nimport { DataContextSelectionDirective } from './selection/data-context-selection.directive'\nimport { DataContextStateIndicatorComponent } from './data-context-state-indicator/data-context-state-indicator.component'\nimport { ElderCompositeSortComponent } from './composite-sort/elder-composite-sort/elder-composite-sort.component'\nimport { ElderCompositeSortDcDirective } from './composite-sort/composite-sort-dc.directive'\nimport { ElderDataViewDndDirective } from './drag-and-drop/elder-data-view-dnd.directive'\nimport { ElderDataViewItemDragDirective } from './drag-and-drop/elder-data-view-item-drag.directive'\nimport { ElderLocalDndSupportDirective } from './drag-and-drop/local-data/elder-local-dnd-support.directive'\nimport { DragDropModule } from '@angular/cdk/drag-drop'\nimport { ElderDataViewDndGroupDirective } from './drag-and-drop/grouping/elder-data-view-dnd-group.directive'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    RouterModule,\n    // Material\n    MatDividerModule,\n    MatCheckboxModule,\n    MatMenuModule,\n    MatButtonModule,\n    MatIconModule,\n    MatBadgeModule,\n    MatProgressBarModule,\n    MatDialogModule,\n    MatTooltipModule,\n    // translations\n    TranslateModule,\n    DragDropModule,\n    ElderDataToolbarComponent,\n    ElderToolbarContentDirective,\n    ElderSingleSortComponent,\n    ElderCompositeSortComponent,\n    ElderCompositeSortDcDirective,\n    ElderSelectionMasterCheckboxComponent,\n    DataContextSelectionDirective,\n    DataContextStateIndicatorComponent,\n    ElderDataViewDndDirective,\n    ElderDataViewItemDragDirective,\n    ElderLocalDndSupportDirective,\n    ElderDataViewDndGroupDirective,\n  ],\n  exports: [\n    ElderDataToolbarComponent,\n    ElderToolbarContentDirective,\n    ElderSingleSortComponent,\n    ElderCompositeSortComponent,\n    ElderCompositeSortDcDirective,\n    ElderSelectionMasterCheckboxComponent,\n    DataContextSelectionDirective,\n    DataContextStateIndicatorComponent,\n    ElderDataViewDndDirective,\n    ElderDataViewItemDragDirective,\n    ElderLocalDndSupportDirective,\n    ElderDataViewDndGroupDirective,\n  ],\n})\nexport class ElderDataCommonModule {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  input,\n  output,\n  untracked,\n} from '@angular/core'\nimport { MatFormField } from '@angular/material/form-field'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton } from '@angular/material/button'\nimport { MatOption, MatSelect } from '@angular/material/select'\n\n@Component({\n  selector: 'elder-continuator',\n  imports: [MatFormField, MatIcon, MatIconButton, MatSelect, MatOption],\n  templateUrl: './elder-continuator.component.html',\n  styleUrl: './elder-continuator.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElderContinuatorComponent {\n  public readonly loadedCount = input<number>(undefined)\n  public readonly total = input<string | number>(undefined)\n  public readonly canLoadMore = input<boolean>(true)\n\n  public readonly chunkSizeOptions = input<number[]>(undefined)\n  public readonly chunkSize = input<number>(undefined)\n\n  public readonly canModifyChunkSize = computed<boolean>(() => {\n    const options = this.chunkSizeOptions()\n    return options && options.length > 0\n  })\n\n  public readonly loadMoreRequested = output<void>()\n  public readonly chunkSizeChange = output<number>()\n\n  public onChunkSizeChange(newSize: undefined | number): void {\n    if (newSize && newSize !== untracked(this.chunkSize)) {\n      this.chunkSizeChange.emit(newSize)\n    }\n  }\n}\n","<div class=\"layout-row place-end-center gap-md flex-none\">\n  <mat-form-field class=\"elder-chunk-size-select\" subscriptSizing=\"dynamic\">\n    <mat-select\n      [value]=\"chunkSize()\"\n      [placeholder]=\"chunkSize() + ''\"\n      [disabled]=\"!canModifyChunkSize()\"\n      (valueChange)=\"onChunkSizeChange($event)\"\n    >\n      @for (sizeOption of chunkSizeOptions(); track sizeOption) {\n        <mat-option [value]=\"sizeOption\">{{ sizeOption }}</mat-option>\n      }\n    </mat-select>\n  </mat-form-field>\n\n  <span class=\"mat-caption noselect loaded-info-text\"> {{ loadedCount() }} / {{ total() }} </span>\n\n  <button\n    mat-icon-button\n    type=\"button\"\n    color=\"primary\"\n    [disabled]=\"!canLoadMore()\"\n    (click)=\"loadMoreRequested.emit()\"\n  >\n    <mat-icon>keyboard_arrow_down</mat-icon>\n  </button>\n</div>\n","import {\n  DestroyRef,\n  Directive,\n  effect,\n  ElementRef,\n  HostListener,\n  input,\n  OnInit,\n  Optional,\n  Renderer2,\n  signal,\n  untracked,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ItemActivationOptions } from '../common/activation/model/item-activation-options'\nimport { ActivationEventSource } from '../common/activation/model/activation-event-source'\nimport { ActivationModel } from '../common/activation/model/activation-model'\nimport { ItemActivationEvent } from '../common/activation/model/item-activation-event'\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop'\nimport { combineLatestWith, filter, switchMap } from 'rxjs/operators'\nimport { DataContextSelectionDirective } from '../common/selection/data-context-selection.directive'\nimport { Observable } from 'rxjs'\n\n@Directive({\n  selector: 'tr[elderTableRow]',\n  exportAs: 'elderTableRow',\n  standalone: true,\n})\nexport class ElderTableRowDirective<T> implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _activated = false\n\n  public readonly entity = input.required<T>({ alias: 'elderTableRow' })\n  public readonly highlightSelection = input<boolean>(false)\n\n  private readonly _focused = signal<boolean>(false)\n\n  private readonly highlightSelection$: Observable<boolean>\n  private readonly entity$: Observable<T>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly rowRef: ElementRef<HTMLTableRowElement>,\n    private readonly destroyRef: DestroyRef,\n    private readonly renderer: Renderer2,\n    @Optional() private readonly activationModel: ActivationModel,\n    private readonly dataContextSelection: DataContextSelectionDirective\n  ) {\n    this.highlightSelection$ = toObservable(this.highlightSelection)\n    this.entity$ = toObservable(this.entity)\n\n    if (activationModel) {\n      this.enableRowFocus(true)\n      this.activationModel.itemActivationEvents.subscribe({\n        next: (event) => this.handleActivationEvent(event),\n      })\n    }\n\n    effect(() => {\n      const entity = this.entity()\n      this.updateRowActivation()\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.bindHighlightSelection()\n  }\n\n  private bindHighlightSelection(): void {\n    this.highlightSelection$\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        filter((highlightSelection) => !!highlightSelection),\n        switchMap((_) => this.dataContextSelection.selectionModel$),\n        filter((selectionModel) => !!selectionModel),\n        combineLatestWith(this.entity$),\n        switchMap(([model, entity]) => model.observeSelection(entity))\n      )\n      .subscribe({\n        next: (selected) => this.updateHostClass('elder-table-row-selected', selected),\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Listener                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('focus', ['$event'])\n  public onFocus(event: any): void {\n    this._focused.set(true)\n  }\n\n  @HostListener('blur', ['$event'])\n  public onBlur(event: any): void {\n    this._focused.set(false)\n  }\n\n  @HostListener('click', ['$event'])\n  public onClick() {\n    this.logger.debug('row clicked')\n    if (this.activationModel) {\n      this.activationModel.activate(\n        untracked(this.entity),\n        new ItemActivationOptions(ActivationEventSource.USER_MOUSE_CLICK, true)\n      )\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Bindings                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  private get activated() {\n    return this._activated\n  }\n\n  private set activated(enabled: boolean) {\n    if (this._activated !== enabled) {\n      this._activated = enabled\n      this.updateHostClass('elder-table-row-activated', enabled)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get hasFocus(): boolean {\n    return untracked(this._focused)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public bringToView(): void {\n    const row = this.rowRef.nativeElement\n    // scroll-snap-align: start;\n    row.scrollIntoView({\n      block: 'nearest', // vertical alignment\n      inline: 'nearest', // horizontal alignment\n    })\n  }\n\n  public focus(): void {\n    const row = this.rowRef.nativeElement\n    // Only focus this row if none of its children already have focus!\n    if (!row.contains(document.activeElement)) {\n      row.focus()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleActivationEvent(event: ItemActivationEvent<T>): void {\n    const activated = this.updateRowActivation()\n    if (activated) {\n      if (!this.hasFocus) {\n        this.bringToView()\n      }\n    }\n\n    if (event.focus) {\n      if (this.isItemActive()) {\n        this.focus()\n      }\n    }\n  }\n\n  private isItemActive(): boolean {\n    if (this.activationModel) {\n      const entity = untracked(this.entity)\n      if (entity) {\n        return this.activationModel.isItemActive(entity)\n      }\n    }\n    return false\n  }\n\n  private updateRowActivation(): boolean {\n    if (this.isItemActive()) {\n      if (!this.activated) {\n        this.activated = true\n        this.logger.debug('Activated row: ', {\n          entity: untracked(this.entity),\n          activeItem: this.activationModel.activeItem,\n          row: this,\n        })\n        if (!this.hasFocus) {\n          this.bringToView()\n        }\n        return true\n      }\n    } else {\n      this.activated = false\n    }\n    return false\n  }\n\n  private enableRowFocus(enable: boolean): void {\n    // Make the rows focusable on click (but not on tabs)\n    if (enable) {\n      this.renderer.setAttribute(this.rowRef.nativeElement, 'tabIndex', '-1')\n    } else {\n      this.renderer.removeAttribute(this.rowRef.nativeElement, 'tabIndex')\n    }\n  }\n\n  private updateHostClass(cssClass: string, enabled: boolean): void {\n    if (enabled) {\n      this.renderer.addClass(this.rowRef.nativeElement, cssClass)\n    } else {\n      this.renderer.removeClass(this.rowRef.nativeElement, cssClass)\n    }\n  }\n}\n","import { CdkColumnDef } from '@angular/cdk/table'\nimport { ElderTableColumnDirective } from '../elder-table-column.directive'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { naturalValueComparator } from '../../../../common/data/field-comparator'\n\nexport type ColumnPositionInsert = 'start' | 'end' | 'before' | 'after'\n\nexport class ColumnPositionSpec {\n  public static relativeToColumn(col: string, position: ColumnPositionInsert): ColumnPositionSpec {\n    return new ColumnPositionSpec(position, col)\n  }\n\n  public static relativeToPrevGroup(position: ColumnPositionInsert): ColumnPositionSpec {\n    return new ColumnPositionSpec(position, null)\n  }\n\n  constructor(\n    public readonly position: ColumnPositionInsert,\n    public readonly relativeTo: string | null\n  ) {}\n}\n\nexport class ElderColumnGroup {\n  constructor(\n    public readonly groupIndex: number,\n    public readonly columnsPosition: ColumnPositionSpec,\n    public readonly columns: ElderTableColumnDirective[]\n  ) {}\n}\n\nexport interface ArrayBounds {\n  startIndex: number\n  endIndex: number\n}\n\nexport class ElderColumnLayout {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public layoutColumns(colGroups: ElderColumnGroup[]): CdkColumnDef[] {\n    const sortedCols = this.renderColumns(colGroups)\n    // Support absolute column positioning\n    const cdkCols = sortedCols.map((col) => col.cdkColumn)\n    return cdkCols\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private renderColumns(colGroups: ElderColumnGroup[]): ElderTableColumnDirective[] {\n    const groupHierarchy = this.sortGroupsByIndex(colGroups)\n\n    const sorted: ElderTableColumnDirective[] = []\n\n    // Now we can insert groups in defined order\n    let previousIndex = <ArrayBounds>{\n      startIndex: 0,\n      endIndex: 0,\n    }\n\n    for (const grp of groupHierarchy) {\n      // grp defined position relative to prev group\n      previousIndex = this.insertColumnsAt(sorted, grp.columns, grp.columnsPosition, previousIndex)\n    }\n    return sorted\n  }\n\n  private insertColumnsAt(\n    existingColumns: ElderTableColumnDirective[],\n    groupItems: ElderTableColumnDirective[],\n    positionSpec: ColumnPositionSpec,\n    previousGroup: ArrayBounds\n  ): ArrayBounds {\n    let insertIndex: number\n\n    if (positionSpec.relativeTo) {\n      insertIndex = this.calcInsertIndexRelativeToColumn(\n        positionSpec.position,\n        positionSpec.relativeTo,\n        existingColumns\n      )\n    } else {\n      insertIndex = this.calcInsertIndexRelativeToPreviousGroup(\n        positionSpec.position,\n        existingColumns,\n        previousGroup\n      )\n    }\n\n    existingColumns.splice(insertIndex, 0, ...groupItems)\n    return <ArrayBounds>{\n      startIndex: insertIndex,\n      endIndex: insertIndex + groupItems.length,\n    }\n  }\n\n  private calcInsertIndexRelativeToColumn(\n    position: ColumnPositionInsert,\n    relativeToCol: string,\n    existingColumns: ElderTableColumnDirective[]\n  ): number {\n    const relativeIndex = existingColumns.findIndex((c) => c.cdkColumn.name === relativeToCol)\n\n    switch (position) {\n      case 'start':\n      case 'after':\n        // after relative\n        return relativeIndex + 1\n      case 'before':\n      case 'end':\n        // before relative\n        return relativeIndex\n    }\n  }\n\n  private calcInsertIndexRelativeToPreviousGroup(\n    position: ColumnPositionInsert,\n    existingColumns: ElderTableColumnDirective[],\n    previousGroup: ArrayBounds\n  ): number {\n    switch (position) {\n      case 'start':\n        return 0\n      case 'end':\n        return existingColumns.length\n      case 'after':\n        // after relative to previous group\n        return previousGroup.endIndex\n      case 'before':\n        // before relative to previous group\n        return previousGroup.startIndex\n    }\n  }\n\n  private sortGroupsByIndex(colGroups: ElderColumnGroup[]): ElderColumnGroup[] {\n    return colGroups\n      .sort((a, b) => {\n        return naturalValueComparator(a.groupIndex, b.groupIndex)\n      })\n      .reverse()\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs'\nimport { CdkColumnDef, CdkRowDef } from '@angular/cdk/table'\nimport { map } from 'rxjs/operators'\nimport { ReactiveMap } from '../../../../common/reactive-map'\nimport { MatSort } from '@angular/material/sort'\nimport { UuidUtil } from '../../../../common/utils/uuid-util'\nimport { naturalValueComparator } from '../../../../common/data/field-comparator'\nimport { CollectionUtil } from '../../../../common/utils/collection-util'\nimport { ElderColumnGroup, ElderColumnLayout } from './elder-column-layout'\n\nexport class ElderTableGroup {\n  public static create(groupIndex: number): ElderTableGroup {\n    return ElderTableGroup.of(UuidUtil.weakUuid4(), groupIndex)\n  }\n\n  public static of(id: string, groupIndex: number): ElderTableGroup {\n    return new ElderTableGroup(id, groupIndex)\n  }\n\n  constructor(\n    public readonly id: string,\n    public readonly index: number\n  ) {}\n}\n\n@Injectable()\nexport class ElderTableModel<T = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly elderColumnLayout = new ElderColumnLayout()\n\n  private readonly _groups = new Map<string, ElderTableGroup>()\n  private readonly _columnGroups = new ReactiveMap<string, ElderColumnGroup>()\n  private readonly _rowDefGroups = new ReactiveMap<string, CdkRowDef<T>[]>()\n  private readonly _sortGroups = new ReactiveMap<string, MatSort>()\n\n  public readonly selectionVisible$ = new BehaviorSubject<boolean>(false)\n\n  /**\n   * The columns to display explicitly set by the user.\n   * We need to support inserting display columns by index or anchored to existing ones.\n   * before([columns])\n   * after()\n   * start()\n   * end([])\n   * @private\n   */\n  private readonly displayedColumns$ = new BehaviorSubject<string[]>(undefined)\n\n  public readonly displayedColumnsInner$: Observable<string[]>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this.displayedColumnsInner$ = this.renderDisplayedColumns(\n      this.displayedColumns$,\n      this.columnDefs$,\n      this.selectionVisible$\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public set selectionVisible(visible: boolean) {\n    this.selectionVisible$.next(visible)\n  }\n\n  public get selectionVisible(): boolean {\n    return this.selectionVisible$.getValue()\n  }\n\n  public set displayedColumns(columns: string[]) {\n    this.displayedColumns$.next(columns)\n  }\n\n  public get displayedColumns(): string[] {\n    return this.displayedColumns$.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Rendered Properties                                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  public get columnDefs$(): Observable<CdkColumnDef[]> {\n    return this._columnGroups.values$.pipe(\n      map((groups) => this.elderColumnLayout.layoutColumns(groups))\n    )\n  }\n\n  public get rowDefs$(): Observable<CdkRowDef<T>[]> {\n    return this.sortAndFlatten(this._rowDefGroups)\n  }\n\n  public get sorts$(): Observable<MatSort[]> {\n    return this._sortGroups.values$\n  }\n\n  // ---\n\n  private valuesSortedByGroupIndex<TValue>(\n    myMap: Map<string, TValue>,\n    groups: Map<string, ElderTableGroup>\n  ): TValue[] {\n    return Array.from(myMap.entries())\n      .sort(([a_key], [b_key]) => {\n        const grpAIndex = groups.get(a_key)?.index ?? 0\n        const grpBIndex = groups.get(b_key)?.index ?? 0\n        return naturalValueComparator(grpAIndex, grpBIndex)\n      })\n      .map(([a_key, a_value]) => a_value)\n  }\n\n  private sortAndFlatten<TValue>(reactMap: ReactiveMap<string, TValue[]>): Observable<TValue[]> {\n    return reactMap.map$.pipe(\n      map((myMap) => this.valuesSortedByGroupIndex(myMap, this._groups)),\n      map((columns) => CollectionUtil.flatten(columns))\n    )\n  }\n\n  /*\n  public get sortHeaders$(): Observable<MatSortHeader[]> {\n    return this._sortGroups.values$.pipe(\n      map(groups => this.flattenDefs(groups))\n    );\n  }*/\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public registerGroup(group: ElderTableGroup): void {\n    // TODO\n    this._groups.set(group.id, group)\n  }\n\n  public updateColumnGroup(group: ElderTableGroup, columnGroup: ElderColumnGroup): void {\n    this._columnGroups.set(group.id, columnGroup)\n  }\n\n  public updateRowDefs(group: ElderTableGroup, rows: CdkRowDef<T>[]): void {\n    this._rowDefGroups.set(group.id, rows)\n  }\n\n  public updateSortGroup(group: ElderTableGroup, sort: MatSort): void {\n    this._sortGroups.set(group.id, sort)\n  }\n\n  public clearColumnDefGroup(group: ElderTableGroup) {\n    this._columnGroups.delete(group.id)\n  }\n\n  public clearRowDefGroup(group: ElderTableGroup) {\n    this._rowDefGroups.delete(group.id)\n  }\n\n  public clearSortGroup(group: ElderTableGroup) {\n    this._sortGroups.delete(group.id)\n  }\n\n  public deRegisterGroup(group: ElderTableGroup) {\n    this.clearColumnDefGroup(group)\n    this.clearRowDefGroup(group)\n    this.clearSortGroup(group)\n    this._groups.delete(group.id)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private renderDisplayedColumns(\n    userDefinedColumns$: Observable<string[]>,\n    columnDefs$: Observable<CdkColumnDef[]>,\n    selectionVisible$: Observable<boolean>\n  ): Observable<string[]> {\n    return combineLatest([userDefinedColumns$, columnDefs$, selectionVisible$]).pipe(\n      map(([displayedColumns, columnDefs, selectionVisible]) => {\n        let columns = displayedColumns\n        if (!columns) {\n          columns = []\n          // If the user did not define columns to display\n          // Assume he wants all his own columns in given order\n          if (columnDefs) {\n            columnDefs.forEach((col) => {\n              columns.push(col.name)\n            })\n          }\n        }\n        if (this.selectionVisible) {\n          columns = ['select', ...columns]\n        }\n        return columns\n      })\n    )\n  }\n}\n","import { ElderTableModel } from './elder-table-model'\nimport { Optional, Provider, SkipSelf } from '@angular/core'\n\nexport function existingOrNewElderTableModel(\n  modelProvider: ElderTableModel | null\n): ElderTableModel {\n  return modelProvider ?? newElderTableModel()\n}\n\nexport function newElderTableModel(): ElderTableModel {\n  return new ElderTableModel()\n}\n\nexport class ElderTableProviders {\n  /**\n   * Uses the existing ElderTableModel from a parent if available.\n   * Otherwise, creates a new ElderTableModel and provides it.\n   */\n  public static readonly ExistingOrNewTableModel = <Provider>{\n    provide: ElderTableModel,\n    useFactory: existingOrNewElderTableModel,\n    deps: [[new Optional(), new SkipSelf(), ElderTableModel]],\n  }\n\n  /**\n   * Creates a new ElderTableModel root and provides it,\n   * even if there is an existing parent table model.\n   */\n  public static readonly NewTableModelRoot = <Provider>{\n    provide: ElderTableModel,\n    useFactory: newElderTableModel,\n  }\n\n  /**\n   * If there is an existing ElderTableModel service provided, clears it.\n   *\n   * Child components will therefore be blocked from accessing any parent TableModel service\n   * and are instead forced to create their own.\n   *\n   * This supports nesting ElderTable without sharing the table model / columns.\n   */\n  public static readonly ClearTableModel = <Provider>{\n    provide: ElderTableModel,\n    useValue: null,\n  }\n}\n","import { CdkColumnDef, CdkRowDef, CdkTable } from '@angular/cdk/table'\nimport { ElderTableModel } from './elder-table-model'\nimport { Observable } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n/**\n * Binds the elder table model to the CDK table.\n */\nexport class ElderTableModelCdkTableBinding {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private cdkTable: CdkTable<any>\n\n  private _currentColumnDefs: CdkColumnDef[] = []\n  private _currentRowDefs: CdkRowDef<any>[] = []\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static of(tableModel: ElderTableModel): ElderTableModelCdkTableBinding {\n    return new ElderTableModelCdkTableBinding(tableModel)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly tableModel: ElderTableModel) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public table(table: CdkTable<any>): this {\n    if (!table) {\n      throw new Error('CdkTable must not be null!')\n    }\n    this.cdkTable = table\n    return this\n  }\n\n  public bindUntil(destroy$: Observable<any>): this {\n    if (!this.cdkTable) {\n      throw new Error('CdkTable must be defined to start binding. Use .table(cdkTable)!')\n    }\n\n    this.tableModel.columnDefs$\n      .pipe(takeUntil(destroy$))\n      .subscribe((columnDefs) => this.applyColumnDefs(columnDefs))\n\n    this.tableModel.rowDefs$\n      .pipe(takeUntil(destroy$))\n      .subscribe((rowDefs) => this.applyRowDefs(rowDefs))\n\n    return this\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private applyColumnDefs(columnDefs: CdkColumnDef[]): void {\n    // remove columns not desired\n    this._currentColumnDefs\n      .filter((currentColumnDef) => columnDefs.indexOf(currentColumnDef) === -1)\n      .forEach((columnToRemove) => this.cdkTable.removeColumnDef(columnToRemove))\n\n    // add missing columns\n    columnDefs\n      .filter((desired) => this._currentColumnDefs.indexOf(desired) === -1)\n      .forEach((columnToAdd) => this.cdkTable.addColumnDef(columnToAdd))\n\n    // remember new state\n    this._currentColumnDefs = columnDefs\n  }\n\n  private applyRowDefs(rowDefs: CdkRowDef<any>[]): void {\n    // remove columns not desired\n    this._currentRowDefs\n      .filter((currentRowDef) => rowDefs.indexOf(currentRowDef) === -1)\n      .forEach((rowToRemove) => this.cdkTable.removeRowDef(rowToRemove))\n\n    // add missing columns\n    rowDefs\n      .filter((desired) => this._currentRowDefs.indexOf(desired) === -1)\n      .forEach((rowToAdd) => this.cdkTable.addRowDef(rowToAdd))\n\n    // remember new state\n    this._currentRowDefs = rowDefs\n  }\n}\n","import { Directive } from '@angular/core'\nimport { CdkColumnDef } from '@angular/cdk/table'\nimport { ColumnPositionSpec } from './model/elder-column-layout'\n\n@Directive({\n  selector: 'th[elderColumnDef]',\n  standalone: true,\n})\nexport class ElderTableColumnDirective {\n  private _columnPosition: ColumnPositionSpec\n\n  constructor(public readonly cdkColumn: CdkColumnDef) {}\n\n  /**\n   * Define the relative column position in the table\n   * Usage example:\n   * columnPosition=\"after:name\"\n   */\n  // @Input()\n  // public set columnPosition(val: ColumnPositionSpec) {\n  //   this._columnPosition = val;\n  // }\n\n  // public get columnPosition(): ColumnPositionSpec {\n  //   return this._columnPosition;\n  // }\n}\n","import { combineLatest, Observable, of } from 'rxjs'\nimport { QueryListBinding } from '../../../../common/utils/query-list-binding'\nimport { CdkColumnDef, CdkRowDef } from '@angular/cdk/table'\nimport { ElderTableGroup, ElderTableModel } from './elder-table-model'\nimport { QueryList } from '@angular/core'\nimport { MatSort } from '@angular/material/sort'\nimport { map, takeUntil } from 'rxjs/operators'\nimport { ColumnPositionSpec, ElderColumnGroup } from './elder-column-layout'\nimport { ElderTableColumnDirective } from '../elder-table-column.directive'\n\nexport class ElderTableModelQueryGroup {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private columnDefsQuery: QueryList<CdkColumnDef>\n  private elderColumnQuery: QueryList<ElderTableColumnDirective>\n  private rowDefsQuery: QueryList<CdkRowDef<any>>\n\n  private matSort: MatSort\n  private columnsPosition: ColumnPositionSpec\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static start(tableModel: ElderTableModel, groupIndex: number): ElderTableModelQueryGroup {\n    return new ElderTableModelQueryGroup(tableModel, ElderTableGroup.create(groupIndex))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly tableModel: ElderTableModel,\n    public readonly group: ElderTableGroup\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public withColumnDefs(\n    columnDefs: QueryList<CdkColumnDef>,\n    elderColumns: QueryList<ElderTableColumnDirective>\n  ): this {\n    this.columnDefsQuery = columnDefs\n    this.elderColumnQuery = elderColumns\n    return this\n  }\n\n  public withRowDefs(rowDefs: QueryList<CdkRowDef<any>>): this {\n    this.rowDefsQuery = rowDefs\n    return this\n  }\n\n  public withSort(matSort: MatSort): this {\n    this.matSort = matSort\n    return this\n  }\n\n  public withColumnsPosition(positionSpec: ColumnPositionSpec): this {\n    this.columnsPosition = positionSpec\n    return this\n  }\n\n  public bindUntil(destroy$: Observable<any>): this {\n    destroy$.subscribe(() => this.tableModel.deRegisterGroup(this.group))\n    this.tableModel.registerGroup(this.group)\n\n    this.bindMatAndElderColumns(this.columnDefsQuery, this.elderColumnQuery, destroy$).subscribe(\n      (elderColumns) => this.updateColumnDefs(elderColumns)\n    )\n\n    if (this.rowDefsQuery) {\n      QueryListBinding.of(this.rowDefsQuery)\n        .updated((rowDefs) => this.updateRowDefs(rowDefs))\n        .bindUntil(destroy$)\n    }\n\n    if (this.matSort) {\n      this.tableModel.updateSortGroup(this.group, this.matSort)\n    }\n\n    return this\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private bindMatAndElderColumns(\n    columnDefsQuery: QueryList<CdkColumnDef>,\n    elderColumnQuery: QueryList<ElderTableColumnDirective>,\n    destroy$: Observable<any>\n  ): Observable<ElderTableColumnDirective[]> {\n    const columnDefs$ = columnDefsQuery\n      ? QueryListBinding.asColdObservable(columnDefsQuery)\n      : of([])\n    const elderColumns$ = elderColumnQuery\n      ? QueryListBinding.asColdObservable(elderColumnQuery)\n      : of([])\n    return combineLatest([columnDefs$, elderColumns$]).pipe(\n      takeUntil(destroy$),\n      map(([columnDefs, elderColumns]) => this.asElderColumnsOnly(columnDefs, elderColumns))\n    )\n  }\n\n  private asElderColumnsOnly(\n    columnDefs: CdkColumnDef[],\n    elderColumns: ElderTableColumnDirective[]\n  ): ElderTableColumnDirective[] {\n    // TODO Support elderColumns definitions!\n    return this.convertToElderColumns(columnDefs)\n  }\n\n  private convertToElderColumns(columns: CdkColumnDef[]): ElderTableColumnDirective[] {\n    return columns.map((c) => new ElderTableColumnDirective(c))\n  }\n\n  private updateColumnDefs(columns: ElderTableColumnDirective[]): void {\n    this.tableModel.updateColumnGroup(\n      this.group,\n      new ElderColumnGroup(this.group.index, this.columnsPosition, columns)\n    )\n  }\n\n  private updateRowDefs(rows: CdkRowDef<any>[]): void {\n    this.tableModel.updateRowDefs(this.group, rows)\n  }\n}\n","import { Directive, TemplateRef, ViewContainerRef } from '@angular/core'\n\n/**\n * This directive projects marked content into a toolbar.\n */\n@Directive({\n  selector: '[elderTableToolbar]',\n  standalone: true,\n})\nexport class ElderTableToolbarDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n","import { Directive, ElementRef, Input, NgZone, OnDestroy, OnInit, Output } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, Observable, ReplaySubject, Subject } from 'rxjs'\nimport { debounceTime, filter, takeUntil, tap } from 'rxjs/operators'\nimport { lazySampleTime } from '../../common/rxjs/operators/lazy-sample'\n\n@Directive({\n  selector: '[elderInfiniteScroll]',\n  standalone: true,\n})\nexport class ElderInfiniteScrollDirective implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  @Input()\n  public listenToHost = true\n\n  @Input()\n  public eventThrottle = 180\n\n  @Input()\n  public offsetFactor = 1\n\n  @Input()\n  public ignoreScrollEvent = false\n\n  private scrollEventListenerOptions: AddEventListenerOptions\n\n  private readonly _zonedoutScrollEvents = new Subject<Event>()\n  private readonly _closeToEndSubject = new ReplaySubject<Event>(1)\n  private readonly _scrollingSubject = new BehaviorSubject(false)\n\n  private readonly destroy$ = new Subject<void>()\n  private _scrollContainer: HTMLElement\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly ngZone: NgZone,\n    private readonly hostRef: ElementRef\n  ) {\n    this.scrollEventListenerOptions = { capture: true, passive: true }\n\n    const scrollEvents$ = this._zonedoutScrollEvents.pipe(\n      takeUntil(this.destroy$),\n      filter((ev) => !!(ev.target as HTMLElement))\n    )\n\n    scrollEvents$\n      .pipe(\n        lazySampleTime(this.eventThrottle, true) // Relax\n      )\n      .subscribe((event) => {\n        const eventTarget = event.target as HTMLElement\n\n        if (this.isCloseToEnd(eventTarget)) {\n          // The zoned out events are not tracked by angular change detection for performance.\n          // After we have debounced and distilled out an interesting close-to-end event, we let angular know:\n          this._closeToEndSubject.next(event)\n        }\n      })\n\n    scrollEvents$\n      .pipe(\n        tap((ev) => {\n          if (!this._scrollingSubject.getValue()) {\n            this._scrollingSubject.next(true) // Scrolling Started\n          }\n        }),\n        debounceTime(300)\n      )\n      .subscribe((event) => {\n        if (this._scrollingSubject.getValue()) {\n          this._scrollingSubject.next(false) // Scrolling Ended\n        }\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life-Cycle Hooks                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    if (this.listenToHost && !this.scrollContainer) {\n      this.scrollContainer = this.hostRef.nativeElement\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n    this.unregister(this._scrollContainer)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get closeToEnd(): Observable<Event> {\n    return this._closeToEndSubject.asObservable()\n  }\n\n  /**\n   * Is the user currently scrolling?\n   */\n  @Output()\n  public get scrolling(): Observable<boolean> {\n    return this._scrollingSubject.asObservable()\n  }\n\n  @Input()\n  public set containerId(containerId: string) {\n    const scrollContainer = document.getElementById(containerId)\n    if (scrollContainer) {\n      this.scrollContainer = scrollContainer\n    } else {\n      this.logger.warn('Could not find scroll-container by id: ' + containerId)\n    }\n  }\n\n  @Input()\n  public set scrollContainer(container: HTMLElement) {\n    this.unregister(this._scrollContainer)\n    this._scrollContainer = container\n    this.register(this._scrollContainer)\n  }\n\n  public get scrollContainer(): HTMLElement {\n    return this._scrollContainer\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private register(scrollContainer: HTMLElement): void {\n    if (scrollContainer) {\n      // this.logger.debug('Registered on scroll container: ', this._scrollContainer);\n      this.ngZone.runOutsideAngular(() => {\n        // Attach the scroll event listener outside of Angular change detection zone\n        scrollContainer.addEventListener('scroll', this.scroll, this.scrollEventListenerOptions)\n      })\n    }\n  }\n\n  private unregister(scrollContainer: HTMLElement): void {\n    if (scrollContainer) {\n      window.removeEventListener('scroll', this.scroll, this.scrollEventListenerOptions)\n    }\n  }\n\n  private isCloseToEnd(el: HTMLElement): boolean {\n    if (el) {\n      const range = el.offsetHeight * this.offsetFactor\n      const total = el.scrollHeight\n      const current = el.scrollTop + el.offsetHeight\n      return total - current < range\n    } else {\n      return false\n    }\n  }\n\n  /**\n   * Scroll event handler, invoked outside of angular zone.\n   */\n  private scroll = (ev: Event): void => {\n    if (this.ignoreScrollEvent) {\n      return\n    }\n    this._zonedoutScrollEvents.next(ev)\n  }\n}\n","import { Directive, Optional } from '@angular/core'\nimport { DataViewDndControllerService } from '../../common/drag-and-drop/data-view-dnd-controller.service'\nimport { CdkDropList } from '@angular/cdk/drag-drop'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderTableComponent } from '../elder-table/elder-table.component'\n\n/**\n * Directive which defines its host table as a CdkDropList and connects\n * it with the drag and drop controller service of the parent data view.\n *\n * This is needed since our elder-table wraps the mat-table.\n * If we someday switch to a more composition-based approach we might not need this anymore.\n */\n@Directive({\n  selector: '[elderTableDropListConnector]',\n  hostDirectives: [CdkDropList], // adds ckdDropList to host\n})\nexport class ElderTableDropListConnectorDirective<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Optional() private readonly dndController: DataViewDndControllerService<T>,\n    readonly elderTable: ElderTableComponent,\n    readonly cdkDropList: CdkDropList\n  ) {\n    // we want drag and drop to be opt-in, so disable by default.\n    this.disableDrag(cdkDropList)\n\n    cdkDropList.id = elderTable.id()\n\n    if (this.dndController) {\n      this.dndController.register(cdkDropList)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private disableDrag(cdkDropList: CdkDropList): void {\n    cdkDropList.disabled = true\n  }\n}\n","import { ChangeDetectionStrategy, Component, input, Signal, untracked } from '@angular/core'\nimport { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop'\nimport { combineLatestWith, filter, map, switchMap } from 'rxjs/operators'\nimport { DataViewInteractionControllerDirective } from '../../../base/data-view-interaction-controller.directive'\n\n@Component({\n  selector: 'elder-table-selection-cell',\n  imports: [MatCheckbox],\n  templateUrl: './elder-table-selection-cell.component.html',\n  styleUrl: './elder-table-selection-cell.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElderTableSelectionCellComponent<T = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly entity = input.required<T>()\n  public readonly selected: Signal<boolean>\n  public readonly selectable: Signal<boolean>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly interactionController: DataViewInteractionControllerDirective<T>) {\n    const modelAndEntity$ = toObservable(this.interactionController.selectionModel).pipe(\n      takeUntilDestroyed(),\n      filter((model) => !!model),\n      combineLatestWith(toObservable(this.entity))\n    )\n\n    this.selected = toSignal(\n      modelAndEntity$.pipe(switchMap(([model, entity]) => model.observeSelection(entity)))\n    )\n\n    this.selectable = toSignal(\n      modelAndEntity$.pipe(map(([model, entity]) => model.isSelectable(entity)))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onCheckboxChange(event: MatCheckboxChange): void {\n    this.interactionController.onItemSelectionToggle(untracked(this.entity))\n  }\n}\n","<div class=\"layout-row place-start-center\">\n  <mat-checkbox\n    (click)=\"$event.stopPropagation()\"\n    (change)=\"onCheckboxChange($event)\"\n    [checked]=\"selected()\"\n    [disabled]=\"!selectable()\"\n  >\n  </mat-checkbox>\n</div>\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  OnDestroy,\n  Signal,\n  viewChild,\n} from '@angular/core'\nimport { MatPaginator } from '@angular/material/paginator'\nimport { ElderContinuatorComponent, ElderTableComponent } from '../../public_api'\nimport { MatTableDataContextBindingBuilder, PageRequest } from '../../../../common/data/public_api'\nimport { of, Subject } from 'rxjs'\nimport { toObservable } from '@angular/core/rxjs-interop'\n\n@Component({\n  selector: 'elder-table-navigation',\n  imports: [ElderContinuatorComponent, MatPaginator],\n  templateUrl: './table-navigation.component.html',\n  styleUrl: './table-navigation.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableNavigationComponent implements AfterViewInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  protected readonly matPaginator = viewChild(MatPaginator)\n  private readonly matPaginator$ = toObservable(this.matPaginator)\n  protected readonly elderContinuator = viewChild(ElderContinuatorComponent)\n  private readonly elderContinuator$ = toObservable(this.elderContinuator)\n\n  private readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(protected readonly elderTable: ElderTableComponent) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit(): void {\n    MatTableDataContextBindingBuilder.start(this.elderTable.dataContext$)\n      .withPaginator(this.matPaginator$)\n      .withContinuator(this.elderContinuator$)\n      .bindUntil(this.destroy$)\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get isContinuable(): boolean {\n    return this.elderTable.isContinuable\n  }\n\n  public get isActivePaged(): boolean {\n    return this.elderTable.isActivePaged\n  }\n\n  public get total(): Signal<string> {\n    return this.elderTable.total\n  }\n\n  public get viewData(): Signal<any[]> {\n    return this.elderTable.viewData\n  }\n\n  public get canLoadMore(): Signal<boolean> {\n    return this.elderTable.canLoadMore\n  }\n\n  public get pageSizeOptions(): Signal<number[]> {\n    return this.elderTable.pageSizeOptions\n  }\n\n  public get currentChunkSize(): Signal<number> {\n    return this.elderTable.currentChunkSize\n  }\n\n  public get currentPage(): Signal<PageRequest> {\n    return this.elderTable.currentPage\n  }\n\n  public loadMore(): void {\n    this.elderTable.dataContinuable.loadMore()\n  }\n}\n","@if (isContinuable) {\n  <elder-continuator\n    [loadedCount]=\"viewData()?.length\"\n    [total]=\"total()\"\n    [canLoadMore]=\"canLoadMore()\"\n    [chunkSizeOptions]=\"pageSizeOptions()\"\n    [chunkSize]=\"currentChunkSize()\"\n    (loadMoreRequested)=\"loadMore()\"\n  ></elder-continuator>\n} @else if (isActivePaged) {\n  @if (currentPage(); as page) {\n    <mat-paginator\n      class=\"flex-none\"\n      [length]=\"total()\"\n      [pageIndex]=\"page?.index\"\n      [pageSize]=\"page?.size\"\n      [pageSizeOptions]=\"pageSizeOptions()\"\n    >\n    </mat-paginator>\n  }\n}\n","import {\n  AfterContentInit,\n  ContentChildren,\n  Directive,\n  Input,\n  OnDestroy,\n  Optional,\n  QueryList,\n  SkipSelf,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { MatColumnDef, MatRowDef } from '@angular/material/table'\nimport { CdkColumnDef, CdkRowDef } from '@angular/cdk/table'\nimport { Subject } from 'rxjs'\nimport { ElderTableProviders } from './model/elder-table-model-provider'\nimport { ElderTableModel } from './model/elder-table-model'\nimport { ElderTableModelQueryGroup } from './model/elder-table-model-query-group'\nimport { MatSort } from '@angular/material/sort'\nimport { ElderTableColumnDirective } from './elder-table-column.directive'\nimport { ColumnPositionSpec } from './model/elder-column-layout'\n\n/**\n * Allows to extend an ElderTable from a parent component.\n *\n */\n@Directive({\n  selector: '[elderTableExtension]',\n  providers: [ElderTableProviders.ExistingOrNewTableModel],\n  standalone: true,\n})\nexport class ElderTableExtensionDirective implements AfterContentInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /**\n   * The index of this table group extension\n   * @private\n   */\n  private readonly _extensionGroupIndex: number\n\n  @ContentChildren(MatColumnDef)\n  public columnDefsQuery: QueryList<CdkColumnDef>\n\n  @ContentChildren(ElderTableColumnDirective)\n  public elderColumnsQuery: QueryList<ElderTableColumnDirective>\n\n  @ContentChildren(MatRowDef)\n  public rowDefsQuery: QueryList<CdkRowDef<any>>\n\n  @Input()\n  public columnsPosition: ColumnPositionSpec = ColumnPositionSpec.relativeToPrevGroup('start')\n\n  private readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly tableModel: ElderTableModel,\n    @Optional() private readonly _matSort: MatSort,\n    @Optional() @SkipSelf() private readonly parentExtension: ElderTableExtensionDirective\n  ) {\n    this._extensionGroupIndex = (parentExtension?.extensionGroupIndex ?? 0) + 1\n    if (this._matSort) {\n      this._matSort.disableClear = true\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterContentInit(): void {\n    ElderTableModelQueryGroup.start(this.tableModel, this.extensionGroupIndex)\n      .withColumnsPosition(this.columnsPosition)\n      .withColumnDefs(this.columnDefsQuery, this.elderColumnsQuery)\n      .withRowDefs(this.rowDefsQuery)\n      .withSort(this._matSort)\n      .bindUntil(this.destroy$)\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get extensionGroupIndex(): number {\n    return this._extensionGroupIndex\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import {\n  AfterContentInit,\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  contentChild,\n  ContentChildren,\n  Directive,\n  forwardRef,\n  input,\n  Input,\n  NgZone,\n  OnInit,\n  Optional,\n  QueryList,\n  Signal,\n  signal,\n  SkipSelf,\n  TemplateRef,\n  TrackByFunction,\n  untracked,\n  ViewChild,\n  ViewChildren,\n  ViewContainerRef,\n} from '@angular/core'\nimport { MatTableDataContextBindingBuilder } from '../../../../common/data/data-context/mat-table-data-context-binding'\nimport { MatSort } from '@angular/material/sort'\nimport {\n  MatCell,\n  MatCellDef,\n  MatColumnDef,\n  MatFooterCell,\n  MatFooterCellDef,\n  MatFooterRow,\n  MatFooterRowDef,\n  MatHeaderCell,\n  MatHeaderCellDef,\n  MatHeaderRow,\n  MatHeaderRowDef,\n  MatRow,\n  MatRowDef,\n  MatTable,\n} from '@angular/material/table'\nimport { IDataContext, isDataContext } from '../../../../common/data/data-context/data-context'\nimport { SelectionEventSource, SelectionModel } from '../../../../common/selection/selection-model'\nimport { BehaviorSubject, Subscription } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { CdkColumnDef, CdkRowDef, CdkTable } from '@angular/cdk/table'\nimport { DataContextBuilder } from '../../../../common/data/data-context/data-context-builder'\nimport { ELDER_DATA_VIEW } from '../../base/elder-data-view'\nimport { ElderTableRowDirective } from '../elder-table-row.directive'\nimport { IDataSource, isDataSource } from '../../../../common/data/datasource/data-source'\nimport { ElderDataViewBaseComponent } from '../../base/elder-data-view-base'\nimport { ElderTableModel } from '../model/elder-table-model'\nimport { ElderTableProviders } from '../model/elder-table-model-provider'\nimport { QueryListBinding } from '../../../../common/utils/query-list-binding'\nimport { ElderTableModelCdkTableBinding } from '../model/elder-table-model-cdk-table-binding'\nimport { ElderTableModelQueryGroup } from '../model/elder-table-model-query-group'\nimport { ElderTableExtensionDirective } from '../elder-table-extension.directive'\nimport { ElderTableColumnDirective } from '../elder-table-column.directive'\nimport { ColumnPositionSpec } from '../model/elder-column-layout'\nimport { ElderTableToolbarDirective } from './elder-table-toolbar.directive'\nimport { ElderDataViewOptionsProvider } from '../../base/elder-data-view-options-provider'\nimport { MatProgressBar } from '@angular/material/progress-bar'\nimport { DataContextStateIndicatorComponent } from '../../common/data-context-state-indicator/data-context-state-indicator.component'\nimport { ElderSelectionMasterCheckboxComponent } from '../../common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component'\nimport { DataContextSelectionDirective } from '../../common/selection/data-context-selection.directive'\nimport { ElderInfiniteScrollDirective } from '../../../infinitescroll/elder-infinite-scroll.directive'\nimport { NgTemplateOutlet } from '@angular/common'\nimport { ElderDataViewItemDragDirective } from '../../common/drag-and-drop/elder-data-view-item-drag.directive'\nimport { ElderTableDropListConnectorDirective } from '../drag-and-drop/elder-table-drop-list-connector.directive'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { booleanTransformFn } from '../../../../common/utils/signal-input'\nimport { ElderTableSelectionCellComponent } from '../columns/elder-table-selection-cell/elder-table-selection-cell.component'\nimport { TableNavigationComponent } from '../table-navigation/table-navigation.component'\nimport { DataViewInteractionControllerDirective } from '../../base/data-view-interaction-controller.directive'\n\n/**\n * The table navigation bar, typically located below the table,\n * containing the pagination control and other table controls.\n * If omitted, the default template is used.\n */\n@Directive({\n  selector: '[elderTableNavigationBar]',\n  standalone: true,\n})\nexport class ElderTableNavigationBarDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n\n@Component({\n  selector: 'elder-table',\n  exportAs: 'elderTable',\n  templateUrl: './elder-table.component.html',\n  styleUrls: ['./elder-table.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    ElderTableProviders.ExistingOrNewTableModel,\n    {\n      provide: ELDER_DATA_VIEW,\n      useExisting: forwardRef(() => ElderTableComponent),\n    },\n  ],\n  hostDirectives: [DataViewInteractionControllerDirective],\n  imports: [\n    NgTemplateOutlet,\n    ElderInfiniteScrollDirective,\n    MatTable,\n    DataContextSelectionDirective,\n    MatColumnDef,\n    MatHeaderCellDef,\n    MatHeaderCell,\n    ElderSelectionMasterCheckboxComponent,\n    MatCellDef,\n    MatCell,\n    MatFooterCellDef,\n    MatFooterCell,\n    MatHeaderRowDef,\n    MatHeaderRow,\n    MatRowDef,\n    MatRow,\n    ElderTableRowDirective,\n    MatFooterRowDef,\n    MatFooterRow,\n    DataContextStateIndicatorComponent,\n    MatProgressBar,\n    ElderDataViewItemDragDirective,\n    ElderTableDropListConnectorDirective,\n    ElderTableSelectionCellComponent,\n    TableNavigationComponent,\n  ],\n})\nexport class ElderTableComponent<T = any>\n  extends ElderDataViewBaseComponent<T>\n  implements OnInit, AfterContentInit, AfterViewInit\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /**\n   * Load next chunk after current is done\n   */\n  private loadNextQueued = false\n\n  /// Table\n  @ViewChild(MatTable, { static: true })\n  public matTable: CdkTable<any>\n\n  public readonly pageSizeOptions = input<number[]>([30, 50, 100, 150, 250])\n\n  private readonly _matSort: MatSort\n\n  @ContentChildren(MatColumnDef)\n  public columnDefs: QueryList<CdkColumnDef>\n\n  @ContentChildren(ElderTableColumnDirective)\n  public elderColumns: QueryList<ElderTableColumnDirective>\n\n  @ContentChildren(MatRowDef)\n  public rowDefs: QueryList<CdkRowDef<any>>\n\n  /**\n   * ID of the table component.\n   */\n  public readonly id = input<string>()\n\n  /**\n   * Field to identify the data records (ID field).\n   * Note: This property is only considered in case the\n   * underlying data is an Array.\n   * In case of DataContext, the ID field needs to be defined in the context.\n   * In case of DataSource, the ID field is automatically picked from the DataSource.\n   */\n  @Input()\n  public idField: string\n\n  /**\n   * When this field is present and true,\n   * the coresponding row is marked to be in the processed of being removed.\n   *\n   * I.e. 'removing'\n   */\n  @Input()\n  public removingField: string = null\n\n  /**\n   * When this field is present and true,\n   * the corresponding row is hidden.\n   *\n   * I.e. 'deleted'\n   *\n   */\n  @Input()\n  public hiddenField: string = null\n\n  public readonly keepSelection = input(true, { transform: booleanTransformFn })\n\n  public readonly showFooterRow = input(false, { transform: booleanTransformFn })\n\n  public readonly denseHorizontal = input(false, { transform: booleanTransformFn })\n\n  public readonly hideHeaderRow = input(false, { transform: booleanTransformFn })\n\n  /**\n   * The table toolbar\n   */\n  @ContentChildren(ElderTableToolbarDirective, { read: TemplateRef })\n  public toolbarRowTemplateQuery: QueryList<TemplateRef<any>>\n  public readonly toolbarRowTemplates = signal<TemplateRef<any>[]>([])\n\n  public readonly navigationBar = contentChild(ElderTableNavigationBarDirective, {\n    read: TemplateRef,\n  })\n\n  /**\n   * Selection model life cycle\n   */\n  private selectionLifeCycle: Subscription\n\n  @ViewChildren(ElderTableRowDirective)\n  private rowsQuery: QueryList<ElderTableRowDirective<T>>\n\n  /**\n   * Gets the current rows of this table.\n   */\n  public readonly rows$ = new BehaviorSubject<ElderTableRowDirective<T>[]>([])\n\n  /**\n   * The index of this table group extension\n   * @private\n   */\n  private readonly _extensionGroupIndex: number\n  public readonly displayedColumnsInner: Signal<string[] | undefined>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly tableModel: ElderTableModel,\n    @Optional() selectionModel: SelectionModel<T>,\n    @Optional() @SkipSelf() dataViewOptionsProvider: ElderDataViewOptionsProvider,\n    @Optional() matSort: MatSort,\n    @Optional() @SkipSelf() private readonly parentExtension: ElderTableExtensionDirective,\n    private zone: NgZone,\n    interactionController: DataViewInteractionControllerDirective<T>\n  ) {\n    super(selectionModel, dataViewOptionsProvider, interactionController)\n    this._matSort = matSort\n    this._extensionGroupIndex = (parentExtension?.extensionGroupIndex ?? 0) + 1\n    if (this._matSort) {\n      this._matSort.disableClear = true\n    }\n\n    this.displayedColumnsInner = toSignal(tableModel.displayedColumnsInner$)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public override ngOnInit(): void {\n    super.ngOnInit()\n\n    ElderTableModelCdkTableBinding.of(this.tableModel).table(this.matTable).bindUntil(this.destroy$)\n  }\n\n  public ngAfterContentInit(): void {\n    ElderTableModelQueryGroup.start(this.tableModel, this._extensionGroupIndex)\n      .withColumnsPosition(ColumnPositionSpec.relativeToPrevGroup('start'))\n      .withColumnDefs(this.columnDefs, this.elderColumns)\n      .withRowDefs(this.rowDefs)\n      .withSort(this._matSort)\n      .bindUntil(this.destroy$)\n\n    QueryListBinding.of(this.toolbarRowTemplateQuery)\n      .updated((toolbarRows) => this.toolbarRowTemplates.set(toolbarRows))\n      .bindUntil(this.destroy$)\n  }\n\n  public ngAfterViewInit(): void {\n    MatTableDataContextBindingBuilder.start(this.dataContext$)\n      .withSorts(this.tableModel.sorts$)\n      .bindUntil(this.destroy$)\n\n    QueryListBinding.of(this.rowsQuery)\n      .updated((rows) => this.rows$.next(rows))\n      .bindUntil(this.destroy$)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set data(data: Array<T> | IDataSource<T> | IDataContext<T>) {\n    this.autoCleanUp()\n\n    let dc: IDataContext<T>\n\n    if (data instanceof Array) {\n      dc = DataContextBuilder.start<T>().localSort().buildLocal(data, this.idField) // Potential Memory leak (See autoCleanUp)\n      dc.start()\n    } else if (isDataSource(data)) {\n      dc = DataContextBuilder.start<T>().localSort().reloadOnLocalChanges().build(data) // Potential Memory leak (See autoCleanUp)\n      dc.start()\n    } else if (isDataContext(data)) {\n      dc = data\n    } else if (data === null || data === undefined) {\n      dc = DataContextBuilder.start<T>().buildEmpty()\n    } else {\n      throw new Error(\n        'The data must either be an Array, IDataSource or IDataContext, but was: ' + typeof data\n      )\n    }\n    this.dataContext = dc\n  }\n\n  protected override onDataContextSet(data: IDataContext<T>): void {\n    this.setupSelectionLifeCycle(data)\n    // this.selectionModel.clear(); // TODO Support changeable data-context for static array use case\n  }\n\n  @Input()\n  public set displayedColumns(displayedColumns: string[]) {\n    this.tableModel.displayedColumns = displayedColumns\n  }\n\n  public get displayedColumns(): string[] {\n    return this.tableModel.displayedColumns\n  }\n\n  /** Indicates if selection column is shown. */\n  @Input()\n  public set selectionVisible(visible: boolean) {\n    this.tableModel.selectionVisible = visible\n  }\n\n  public get selectionVisible(): boolean {\n    return this.tableModel.selectionVisible\n  }\n\n  /*\n  @Output()\n  public get activeItem(): Observable<any> {\n    return this.elderTableActivation.activeItem$;\n  }*/\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public requestMoreDataZoned(event: unknown): void {\n    if (this.dataContinuable.hasMoreDataSnapshot) {\n      if (this.dataContinuable.snapshot.isLoading) {\n        this.loadNextQueued = true\n      } else {\n        this.zone.run(() => {\n          this.dataContinuable.loadMore().subscribe((loaded) => {\n            if (this.loadNextQueued) {\n              this.loadNextQueued = false\n              this.requestMoreDataZoned(event)\n            }\n          })\n        })\n      }\n    } else {\n      this.loadNextQueued = false\n    }\n  }\n\n  public get trackByFn(): TrackByFunction<T> {\n    return (index: number, entity: T) => this.getId(entity)\n  }\n\n  public isDataValid(data: T[]): boolean {\n    return data?.length > 0\n  }\n\n  public hasItemFocus(item: T): boolean {\n    const row = this.getRowForItem(item)\n    return row?.hasFocus\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private setupSelectionLifeCycle(data: IDataContext<any>): void {\n    if (this.selectionLifeCycle) {\n      this.selectionLifeCycle.unsubscribe() // Clean up previous sub\n    }\n\n    this.selectionLifeCycle = data.data.pipe(takeUntil(this.destroy$)).subscribe((newData) => {\n      if (untracked(this.keepSelection)) {\n        // If keep selection enabled\n        if (this.selectionModel.hasValue) {\n          // Check that all selected values are still present or remove them\n          const existingIds = new Set<any>(newData.map((d) => this.getId(d)))\n\n          const noLongerAvailableIds = this.selectionModel.selectionSnapshot\n            .map((selected) => this.getId(selected))\n            .filter((selectedId) => !existingIds.has(selectedId))\n\n          this.selectionModel.deselectIds(noLongerAvailableIds, {\n            source: SelectionEventSource.SYSTEM,\n            info: 'table.keepSelection: YES => Deselecting only noLongerAvailableIds',\n          })\n        }\n      } else {\n        this.selectionModel.clear({\n          source: SelectionEventSource.SYSTEM,\n          info: 'table.keepSelection: no => Clearing on data change.',\n        })\n      }\n    })\n  }\n\n  private getRowForItem(item: T): ElderTableRowDirective<T> | null {\n    const rows = this.rows$.getValue()\n    return rows.find((r) => this.getId(untracked(r.entity)) === this.getId(item))\n  }\n}\n","<div class=\"full\" style=\"overflow: hidden\">\n  <div class=\"layout-col elder-table full\" [class.elder-table-dense-horizontal]=\"denseHorizontal()\">\n    <!-- Toolbar Rows -->\n    @for (toolbarRowTemplate of toolbarRowTemplates(); track toolbarRowTemplate) {\n      <ng-template\n        *ngTemplateOutlet=\"toolbarRowTemplate; context: { $implicit: this }\"\n      ></ng-template>\n    }\n\n    <!-- Scrollable Table -->\n    <div\n      class=\"elder-table-inner layout-col {{\n        isDataValid(viewData()) ? 'flex' : ''\n      }} scrollable elder-table-scroll\"\n      elderInfiniteScroll\n      [eventThrottle]=\"150\"\n      [offsetFactor]=\"2\"\n      [ignoreScrollEvent]=\"!isContinuable || !canLoadMore()\"\n      (closeToEnd)=\"requestMoreDataZoned($event)\"\n    >\n      <table\n        mat-table\n        [id]=\"id()\"\n        class=\"elder-mat-inner-table\"\n        [trackBy]=\"trackByFn\"\n        [dataSource]=\"$any(dc())\"\n        [elderDataContextSelection]=\"dc()\"\n        #dataSelection=\"elderDataContextSelection\"\n        [elderDataContextSelectionModel]=\"selectionModel\"\n        elderTableDropListConnector\n      >\n        <!-- selection Column -->\n        <ng-container matColumnDef=\"select\">\n          <th mat-header-cell *matHeaderCellDef>\n            <elder-selection-master-checkbox></elder-selection-master-checkbox>\n          </th>\n          <td mat-cell *matCellDef=\"let entity\">\n            <elder-table-selection-cell\n              [entity]=\"entity\"\n              class=\"elder-table-checkbox\"\n              [class.elder-table-checkbox-visible]=\"dataSelection.selectionState().anySelected\"\n            ></elder-table-selection-cell>\n          </td>\n          <td mat-footer-cell *matFooterCellDef></td>\n        </ng-container>\n\n        @if (!hideHeaderRow()) {\n          <tr mat-header-row *matHeaderRowDef=\"displayedColumnsInner(); sticky: true\"></tr>\n        }\n        <tr\n          mat-row\n          class=\"elder-table-row\"\n          *matRowDef=\"let entity; columns: displayedColumnsInner()\"\n          [elderDataViewItemDrag]=\"entity\"\n          [elderTableRow]=\"entity\"\n          [highlightSelection]=\"interactionMode === 'selection'\"\n          [class.dense]=\"dense()\"\n          [class.elder-row-hidden]=\"hiddenField && entity[hiddenField]\"\n          [class.elder-row-removing]=\"removingField && entity[removingField]\"\n          (click)=\"onItemClick(entity, $event)\"\n          (dblclick)=\"onItemDoubleClick(entity)\"\n        ></tr>\n        @if (showFooterRow()) {\n          <tr mat-footer-row *matFooterRowDef=\"displayedColumnsInner(); sticky: true\"></tr>\n        }\n      </table>\n    </div>\n\n    @if (!isDataValid(viewData())) {\n      <elder-data-context-state-indicator class=\"flex\" [dataContext]=\"dataContext\">\n      </elder-data-context-state-indicator>\n    }\n\n    <mat-progress-bar\n      class=\"flex-none mt-auto\"\n      [mode]=\"dcStatus()?.loading ? 'indeterminate' : 'determinate'\"\n      [color]=\"dcStatus()?.hasError ? 'warn' : 'primary'\"\n    >\n    </mat-progress-bar>\n\n    <ng-template\n      *ngTemplateOutlet=\"navigationBar() ?? defaultNavigationBar; context: { $implicit: this }\"\n    ></ng-template>\n  </div>\n</div>\n\n<ng-template #defaultNavigationBar>\n  <div class=\"layout-row flex-none place-end-center gap-md elder-table-navigation-bar\">\n    <elder-table-navigation></elder-table-navigation>\n  </div>\n</ng-template>\n","import { Directive, Host, OnDestroy, OnInit } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { MatAutocomplete } from '@angular/material/autocomplete'\nimport { Subject } from 'rxjs'\nimport { takeUntil, tap } from 'rxjs/operators'\nimport { ElderInfiniteScrollDirective } from './elder-infinite-scroll.directive'\n\n@Directive({\n  selector: 'mat-autocomplete[elderElderInfiniteAutocomplete]',\n  standalone: true,\n})\nexport class ElderInfiniteAutocompleteDirective implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly unsubscribe$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Host() public readonly autoComplete: MatAutocomplete,\n    @Host() public readonly infiniteScroll: ElderInfiniteScrollDirective\n  ) {\n    this.infiniteScroll.listenToHost = false // We find the scroll container with our own logic\n\n    this.autoComplete.opened\n      .pipe(\n        takeUntil(this.unsubscribe$),\n        tap(() => {\n          // Note: When autocomplete raises opened, panel is not yet created (by Overlay)\n          // Note: The panel will be available on next tick\n          // Note: The panel wil NOT open if there are no options to display\n          setTimeout(() => {\n            this.infiniteScroll.scrollContainer = this.autoComplete.panel.nativeElement\n          })\n        })\n      )\n      .subscribe()\n\n    this.autoComplete.closed\n      .pipe(\n        takeUntil(this.unsubscribe$),\n        tap(() => {\n          this.infiniteScroll.scrollContainer = null\n        })\n      )\n      .subscribe()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life-Cycle Hooks                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  public ngOnDestroy(): void {\n    this.unsubscribe$.next()\n    this.unsubscribe$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import { NgModule } from '@angular/core'\nimport { ElderInfiniteScrollDirective } from './elder-infinite-scroll.directive'\nimport { CommonModule } from '@angular/common'\nimport { ElderInfiniteAutocompleteDirective } from './elder-infinite-autocomplete.directive'\n\nexport { ElderInfiniteScrollDirective } from './elder-infinite-scroll.directive'\nexport { ElderInfiniteAutocompleteDirective } from './elder-infinite-autocomplete.directive'\n\n@NgModule({\n  exports: [ElderInfiniteScrollDirective, ElderInfiniteAutocompleteDirective],\n  imports: [CommonModule, ElderInfiniteScrollDirective, ElderInfiniteAutocompleteDirective],\n})\nexport class ElderInfiniteScrollModule {}\n","import { MatPaginatorIntl } from '@angular/material/paginator'\nimport { Injectable } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\n\n@Injectable()\nexport class ElderPaginatorIntl extends MatPaginatorIntl {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _itemCountSeparatorKey = 'paginator.itemCountSeparator'\n  private readonly _itemsPerPageKey = 'paginator.itemsPerPage'\n  private readonly _firstPageLabelKey = 'paginator.firstPage'\n  private readonly _lastPageKey = 'paginator.lastPage'\n  private readonly _nextPageKey = 'paginator.nextPage'\n  private readonly _previousPageKey = 'paginator.previousPage'\n\n  private itemCountSeparatorLabel: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public constructor(private translate: TranslateService) {\n    super()\n\n    this.translate.onLangChange.subscribe((e: Event) => {\n      this.translateLabels()\n    })\n\n    this.translateLabels()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public override getRangeLabel = (page: number, pageSize: number, length: number): string => {\n    if (length === 0 || pageSize === 0) {\n      return `0 ${this.itemCountSeparatorLabel} ${length}`\n    }\n\n    length = Math.max(length, 0)\n\n    const startIndex: number = page * pageSize\n    const endIndex: number =\n      startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize\n\n    return `${startIndex + 1} - ${endIndex} ${this.itemCountSeparatorLabel} ${length}`\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private translateLabels(): void {\n    const itemCountSeparatorLabel = this.translate.instant(this._itemCountSeparatorKey)\n    const itemsPerPageLabel = this.translate.instant(this._itemsPerPageKey)\n    const firstPageLabel = this.translate.instant(this._firstPageLabelKey)\n    const lastPageLabel = this.translate.instant(this._lastPageKey)\n    const nextPageLabel = this.translate.instant(this._nextPageKey)\n    const previousPageLabel = this.translate.instant(this._previousPageKey)\n\n    this.itemCountSeparatorLabel =\n      itemCountSeparatorLabel !== this._itemCountSeparatorKey ? itemCountSeparatorLabel : 'of'\n    this.itemsPerPageLabel = itemsPerPageLabel !== this._itemsPerPageKey ? itemsPerPageLabel : ''\n    this.firstPageLabel = firstPageLabel !== this._firstPageLabelKey ? firstPageLabel : 'First page'\n    this.lastPageLabel = lastPageLabel !== this._lastPageKey ? lastPageLabel : 'Last page'\n    this.nextPageLabel = nextPageLabel !== this._nextPageKey ? nextPageLabel : 'Next page'\n    this.previousPageLabel =\n      previousPageLabel !== this._previousPageKey ? previousPageLabel : 'Previous page'\n\n    this.changes.next()\n  }\n}\n","import { AfterViewInit, Directive, ElementRef, Input } from '@angular/core'\n\n@Directive({\n  selector: '[elderDelayedFocus]',\n  standalone: true,\n})\nexport class ElderDelayedFocusDirective implements AfterViewInit {\n  @Input()\n  public elderDelayedFocus: number\n\n  constructor(private el: ElementRef) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life cycle hooks                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit(): void {\n    setTimeout(() => {\n      this.focusFirstInput()\n    }, this.elderDelayedFocus || 500)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private focusFirstInput(): void {\n    if (this.el) {\n      console.log('ElderDelayedFocusDirective - focusing element ...')\n      this.el.nativeElement.focus()\n    } else {\n      console.warn('ElderDelayedFocusDirective - No element found to focus!')\n    }\n  }\n}\n","import { Directive, OnInit } from '@angular/core'\nimport { AbstractControl, NgControl } from '@angular/forms'\n\n/**\n * Applied to an form input, marks this control touched from the beginning.\n * This has the effect that validation will run its course from the start.\n */\n@Directive({\n  selector: '[elderTouched]',\n  standalone: true,\n})\nexport class ElderTouchedDirective implements OnInit {\n  constructor(private ngControl: NgControl) {}\n\n  ngOnInit(): void {\n    if (this.ngControl && this.ngControl.control) {\n      const control: AbstractControl = this.ngControl.control\n      control.markAsTouched()\n    }\n  }\n}\n","import { Directive } from '@angular/core'\nimport { ControlContainer, NgForm } from '@angular/forms'\n\n/**\n * This directive provides a parent form to any kind of nested control\n * container, like in nested components. This means that form elements\n * brought in by included components will be respected by parent forms,\n * e.g. for validation.\n */\n@Directive({\n  selector: '[elderPlugParentForm]',\n  providers: [\n    {\n      provide: ControlContainer,\n      useFactory: provideForm,\n      deps: [NgForm],\n    },\n  ],\n  standalone: true,\n})\nexport class ElderPlugParentFormDirective {}\n\nexport function provideForm(form: NgForm) {\n  return form\n}\n","import { Directive, HostListener } from '@angular/core'\n\n/**\n * This directive suppresses event propagation on click events.\n * I.e. when you have large clickable areas which itself has smaller buttons on it:\n *\n * <a href=\"/go/home\">\n *\n *  <button elderStopEventPropagation>X</button>\n * </a>\n *\n */\n@Directive({\n  selector: '[elderStopEventPropagation]',\n  standalone: true,\n})\nexport class ElderStopEventPropagationDirective {\n  @HostListener('click', ['$event'])\n  public onClick(event: any): void {\n    event.stopPropagation()\n  }\n}\n","import { Directive, Input, forwardRef } from '@angular/core'\nimport { Validator, AbstractControl, NG_VALIDATORS, Validators, ValidatorFn } from '@angular/forms'\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector:\n    '[matInput][min][formControlName],[matInput][min][formControl],[matInput][min][ngModel]',\n  providers: [\n    { provide: NG_VALIDATORS, useExisting: forwardRef(() => ElderMinValidator), multi: true },\n  ],\n  standalone: true,\n})\nexport class ElderMinValidator implements Validator {\n  private _validator: ValidatorFn\n\n  @Input()\n  public set min(value: string | number) {\n    let numValue: number\n\n    if (typeof value === 'string') {\n      numValue = parseInt(value, 10)\n    } else {\n      numValue = value\n    }\n\n    this._validator = Validators.min(numValue)\n  }\n\n  public validate(control: AbstractControl): { [key: string]: any } {\n    return this._validator(control)\n  }\n}\n","import { Directive, Input, forwardRef } from '@angular/core'\nimport { Validator, AbstractControl, NG_VALIDATORS, Validators, ValidatorFn } from '@angular/forms'\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector:\n    '[matInput][max][formControlName],[matInput][max][formControl],[matInput][max][ngModel]',\n  providers: [\n    { provide: NG_VALIDATORS, useExisting: forwardRef(() => ElderMaxValidator), multi: true },\n  ],\n  standalone: true,\n})\nexport class ElderMaxValidator implements Validator {\n  private _validator: ValidatorFn\n\n  @Input()\n  public set max(value: string | number) {\n    let numValue: number\n\n    if (typeof value === 'string') {\n      numValue = parseInt(value, 10)\n    } else {\n      numValue = value\n    }\n\n    this._validator = Validators.max(numValue)\n  }\n\n  public validate(control: AbstractControl): { [key: string]: any } {\n    return this._validator(control)\n  }\n}\n","import { AfterViewInit, Directive, HostBinding, Input } from '@angular/core'\nimport { MatFormField } from '@angular/material/form-field'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\n\n/**\n * Once declared on a MatFormField tag which includes a readonly input, the css class 'elder-form-field-label' will be added\n * and custom styling will be applied.\n *\n * Example Usage:\n *\n *  <mat-form-field elderFormFieldLabel>\n *    <input matInput placeholder=\"Readonly Input\" readonly=\"true\" value=\"Some Value\">\n *  </mat-form-field>\n *\n */\n@Directive({\n  selector: 'mat-form-field[elderFormFieldLabel]',\n  standalone: true,\n})\nexport class ElderFormFieldLabelDirective implements AfterViewInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _enabled: boolean\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private _matFormField: MatFormField) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Bindings                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostBinding('class.elder-form-field-label') get getFormFieldLabelStyle(): boolean {\n    return this.isLabelMode()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('elderFormFieldLabel')\n  public set enabled(enabled: BooleanInput) {\n    this._enabled = coerceBooleanProperty(enabled)\n  }\n\n  public get enabled(): boolean {\n    return this._enabled\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public isControlReadonly(): boolean {\n    const ctrl = this._matFormField._control\n    return (<any>ctrl)?.readonly\n  }\n\n  public isLabelMode(): boolean {\n    return this.enabled && this.isControlReadonly()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit(): void {\n    if (this.isLabelMode()) {\n      this._matFormField.floatLabel = 'always'\n      this._matFormField.subscriptSizing = 'dynamic' // Auto collapse hint/error line\n    }\n  }\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core'\n\n/**\n * Listens for keyboard events on the target element (or its children).\n */\n@Directive({\n  selector: '[elderKeyEvent]',\n  standalone: true,\n})\nexport class ElderKeyEventDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * If set, event will only be propagated if given key was pressed (optional).\n   */\n  @Input('elderKeyEventFilter')\n  public keyFilter: string\n\n  /**\n   * If set to true, directive will listen for 'keyDown' instead of 'keyUp' events.\n   * Defaults to false.\n   */\n  @Input('elderKeyEventDown')\n  public keyDown = false\n\n  /**\n   * If the event target should be extended by the children of the host element.\n   * If true, the event will also be propagated if the target was a child of the host element.\n   */\n  @Input('elderKeyEventChildren')\n  public includeChildren = true\n\n  /**\n   * Callback which is called if event is propagated (optional).\n   */\n  @Input('elderKeyEventCallback')\n  public callback: any\n\n  /**\n   * Fired if event is propagated.\n   */\n  @Output('onElderKeyEvent')\n  public keyEvent: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Listener                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('window:keyup', ['$event'])\n  public keyupEvent(event: KeyboardEvent) {\n    if (!this.keyDown) {\n      this.processEvent(event)\n    }\n  }\n\n  @HostListener('window:keydown', ['$event'])\n  public keydownEvent(event: KeyboardEvent) {\n    if (this.keyDown) {\n      this.processEvent(event)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private el: ElementRef) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private processEvent(event: KeyboardEvent): void {\n    // Only propagate if target is in scope.\n    if (this.isInScope(event)) {\n      // If keyFilter is set, only propagate if corresponding key was pressed.\n      if (this.keyFilter) {\n        if (event.key === this.keyFilter) {\n          this.propagateEvent(event)\n        }\n      } else {\n        // If no keyFilter is set, propagate without further checks.\n        this.propagateEvent(event)\n      }\n    }\n  }\n\n  private isInScope(event: KeyboardEvent): boolean {\n    const isTarget = event.target === this.el.nativeElement\n\n    if (this.includeChildren) {\n      return isTarget || this.el.nativeElement.contains(event.target)\n    } else {\n      return isTarget\n    }\n  }\n\n  private propagateEvent(event: KeyboardEvent): void {\n    // Emit event\n    this.keyEvent.emit(event)\n\n    // Call optional callback\n    if (this.callback) {\n      this.callback(event)\n    }\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { first } from 'rxjs/operators'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderClipboardService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Write text to the clipboard\n   */\n  public writeText(payload: string): Observable<string> {\n    const copiedEvent = new BehaviorSubject<string>(null)\n\n    const range = document.createRange()\n    range.selectNodeContents(document.body)\n    document.getSelection().addRange(range)\n\n    const listener = (e: ClipboardEvent) => {\n      const clipboard = e.clipboardData || (<any>window)['clipboardData']\n      clipboard.setData('text', payload)\n      e.preventDefault()\n      copiedEvent.next(payload)\n\n      document.removeEventListener('copy', listener, false)\n      document.getSelection().removeAllRanges()\n    }\n\n    document.addEventListener('copy', listener, false)\n    document.execCommand('copy')\n\n    return copiedEvent.pipe(first())\n  }\n}\n","import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core'\nimport { ElderClipboardService } from '../clipboard/elder-clipboard.service'\n\n@Directive({\n  selector: '[elderClipboardPut]',\n  standalone: true,\n})\nexport class ElderClipboardPutDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input('elderClipboardPut')\n  public payload: string\n\n  @Output()\n  public readonly clipboardCopied = new EventEmitter<string>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly elderClipboardService: ElderClipboardService) {}\n\n  @HostListener('click', ['$event'])\n  public onClick(event: MouseEvent): void {\n    event.preventDefault()\n\n    this.elderClipboardService\n      .writeText(this.payload.toString())\n      .subscribe((copied) => this.clipboardCopied.emit(this.payload))\n  }\n}\n","import { Directive, HostBinding } from '@angular/core'\n\n@Directive()\nexport abstract class ElderClassHostBindingBase {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly classToApplyWhenEnabled: string\n  private readonly classToApplyWhenDisabled: string\n\n  private _enabled: boolean\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(classToApplyWhenEnabled: string, classToApplyWhenDisabled: string = undefined) {\n    this.classToApplyWhenEnabled = classToApplyWhenEnabled\n    this.classToApplyWhenDisabled = classToApplyWhenDisabled\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Bindings                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostBinding('class')\n  public elementClass: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public set enabled(enabled: boolean) {\n    this._enabled = enabled\n    this.elementClass = enabled ? this.classToApplyWhenEnabled : this.classToApplyWhenDisabled\n  }\n\n  public get enabled(): boolean {\n    return this._enabled\n  }\n}\n","import { AfterViewInit, Directive, Input } from '@angular/core'\nimport { FloatLabelType, MatFormField, SubscriptSizing } from '@angular/material/form-field'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { ElderClassHostBindingBase } from './base/elder-class-hostbinding-base'\n\n/**\n * Once declared on a MatFormField tag, the css class 'elder-form-field-dense' will be added\n * and dense styling will be applied.\n *\n * Example Usage:\n *\n *  <mat-form-field elderDense>\n *    <input matInput placeholder=\"Some Input\" value=\"Some Value\">\n *  </mat-form-field>\n *\n */\n@Directive({\n  selector: 'mat-form-field[elderDense]',\n  standalone: true,\n})\nexport class ElderFormFieldDenseDirective\n  extends ElderClassHostBindingBase\n  implements AfterViewInit\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _subscriptSizing: SubscriptSizing = 'dynamic'\n  private _floatLabel: FloatLabelType = 'always'\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n  constructor(private _matFormField: MatFormField) {\n    super('elder-dense')\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set elderDense(enabled: BooleanInput) {\n    this.enabled = coerceBooleanProperty(enabled)\n  }\n\n  @Input()\n  public set subscriptSizing(sizing: SubscriptSizing) {\n    this._subscriptSizing = sizing\n  }\n\n  @Input()\n  public set floatLabel(sizing: FloatLabelType) {\n    this._floatLabel = sizing\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit(): void {\n    this.applyFormFieldConfig()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private applyFormFieldConfig(): void {\n    if (this.enabled) {\n      this._matFormField.subscriptSizing = this._subscriptSizing // Auto collapse hint/error line\n      this._matFormField.floatLabel = this._floatLabel // Always float label so it is not out of bounds\n    }\n  }\n}\n","import { Directive, Input } from '@angular/core'\nimport { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { ElderClassHostBindingBase } from './base/elder-class-hostbinding-base'\n\n/**\n * Once declared on a MatFormField tag which includes an input, the css class 'elder-input-no-spinner' will be added\n * which hides eventual spinners.\n *\n * Example Usage:\n *\n *\t<mat-form-field>\n *\t\t<input matInput elderNoSpinner placeholder=\"Input\" type=\"number\">\n *\t</mat-form-field>\n *\n */\n@Directive({\n  selector: 'input[elderNoSpinner]',\n  standalone: true,\n})\nexport class ElderFormFieldNoSpinnerDirective extends ElderClassHostBindingBase {\n  constructor() {\n    super('elder-input-no-spinner')\n  }\n\n  @Input()\n  public set elderNoSpinner(enabled: boolean | string) {\n    this.enabled = coerceBooleanProperty(enabled)\n  }\n}\n","import { Directive, Input } from '@angular/core'\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms'\nimport { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n/**\n * Validator which will when applied cause the 'required' validation to fail\n * if the host control is required and the given value is 0.\n */\n@Directive({\n  selector: '[elderRequiredIgnoreZeroValidator][ngModel]',\n  providers: [\n    { provide: NG_VALIDATORS, useExisting: ElderRequiredIgnoreZeroValidator, multi: true },\n  ],\n  standalone: true,\n})\nexport class ElderRequiredIgnoreZeroValidator implements Validator {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private _required: boolean\n  private _enabled: boolean\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input('elderRequiredIgnoreZeroValidator')\n  public set enabled(enabled: boolean) {\n    this._enabled = coerceBooleanProperty(enabled)\n  }\n\n  public get enabled(): boolean {\n    return this._enabled\n  }\n\n  @Input()\n  public set required(value: boolean) {\n    this._required = coerceBooleanProperty(value)\n  }\n\n  public get required(): boolean {\n    return this._required\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public validate(c: AbstractControl): ValidationErrors | any {\n    let result = {}\n\n    if (this.enabled && this.required && !c.value) {\n      result = Object.assign(result, { required: { valid: false } })\n    }\n    // this.log.info('\"' + c.value + '\" --> validate result: ' + JSON.stringify(result), c);\n    return result\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import { Directive, forwardRef, Input } from '@angular/core'\nimport {\n  AbstractControl,\n  NG_VALIDATORS,\n  ValidationErrors,\n  Validator,\n  ValidatorFn,\n} from '@angular/forms'\nimport { IDynamicValidationMessage } from '../strategies/dynamic-validation-message-strategy'\nimport { InputUtils, NoInputArgs } from '../../../../../common/utils/input-utils'\n\nexport class ElderMultipleOfUtil {\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static multipleOfValidator(factor: number | number[]): ValidatorFn {\n    return (c: AbstractControl) => {\n      const number = ElderMultipleOfUtil.extractNumericValue(c)\n      return ElderMultipleOfUtil.validateNumber(number, factor)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static validateNumber(value: number, factor: number | number[]): ValidationErrors | null {\n    //  const _factor = [factor].flatMap(f => f) es2019 must be set as compiler option\n    const _factor: number[] = typeof factor === 'number' ? [factor] : factor\n    return !_factor || _factor.reduce((acc, f) => !f || value % f === 0 || acc, false)\n      ? null\n      : {\n          forbiddenMultiple: <IDynamicValidationMessage>{\n            value: value,\n            allowed: factor,\n            message: 'validations.multipleOf',\n            messageParams: { multiples: factor },\n          },\n        }\n  }\n\n  private static extractNumericValue(c: AbstractControl): number {\n    let number: number\n    const valueType = typeof c.value\n    if (valueType === 'string' || valueType === 'number' || valueType === 'bigint') {\n      number = Number(c.value)\n    } else if (valueType === 'object') {\n      if (c.value?.value !== undefined) {\n        // Supports wrappers such as Quantity\n        number = Number(c.value?.value)\n      }\n    } else {\n      number = undefined\n    }\n    return number\n  }\n}\n\n@Directive({\n  selector:\n    '[elderMultipleOf][formControlName],[elderMultipleOf][formControl],[elderMultipleOf][ngModel]',\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => ElderMultipleOfValidator),\n      multi: true,\n    },\n  ],\n  standalone: true,\n})\nexport class ElderMultipleOfValidator implements Validator {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _factor: number | number[] | null = null\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public validate(control: AbstractControl): ValidationErrors | null {\n    if (this.factor) {\n      return ElderMultipleOfUtil.multipleOfValidator(this.factor)(control)\n    } else {\n      return null\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set elderMultipleOf(input: number | number[] | null | NoInputArgs) {\n    this._factor = InputUtils.isNoInputArgs(input) ? null : input\n  }\n\n  public get factor(): number | number[] | null {\n    return this._factor\n  }\n}\n","import { Directive, HostListener, Input } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\nexport interface Focusable {\n  focus(): void\n  [key: string]: any // Allow other properties\n}\n\n/**\n * This directive redirects the next focus element\n */\n@Directive({\n  selector: '[elderNextFocusable]',\n  exportAs: 'elderNextFocusable',\n  standalone: true,\n})\nexport class ElderNextFocusableDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /**\n   * Focus the given element next, if the nextElements are all unavailable.\n   * The element must be an HTMLElement or an object that has both focus() and hello properties.\n   */\n  private _element: HTMLElement | Focusable = null\n  private _enabled = true\n  private _nextElements: (HTMLElement | Focusable)[] = []\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input('elderNextFocusable')\n  public set nextElement(element: HTMLElement | Focusable) {\n    this._element = element\n  }\n\n  @Input('elderNextFocusableEnabled')\n  public set enabled(value: boolean) {\n    this._enabled = value\n  }\n\n  @Input('elderNextElements')\n  public set nextElements(elements: (HTMLElement | Focusable)[]) {\n    this._nextElements = elements\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Listeners                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('keydown', ['$event'])\n  public onKeyDown(event: KeyboardEvent): void {\n    if (this._enabled && this.areAllNextElementsNotFocusable()) {\n      if (event.key === 'Tab') {\n        event.preventDefault() // Prevent focusing next element.\n        this.focusNextSpecified()\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public focusNextSpecified(): void {\n    if (this._element) {\n      this._element.focus()\n    } else {\n      this.log.warn('Can not FOCUS next element, because no element has been specified!')\n    }\n  }\n\n  private areAllNextElementsNotFocusable(): boolean {\n    return this._nextElements.every((elem) => !this.isFocusable(elem))\n  }\n\n  private isFocusable(element: HTMLElement | Focusable): boolean {\n    if (element instanceof HTMLElement) {\n      if (element.hidden) {\n        return false\n      }\n      if (element instanceof HTMLInputElement) {\n        return !element.disabled\n      }\n      return true\n    }\n    // For non-HTMLElement elements, we assume they are focusable if they have a focus method\n    return true\n  }\n}\n","import { MatCheckbox } from '@angular/material/checkbox'\nimport { NgModel } from '@angular/forms'\nimport { ParseUtil } from '../../../../common/utils/parse-util'\nimport { UnreachableCaseError } from '../../../../common/exceptions/unreachable-case-error'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { Optional } from '@angular/core'\n\nexport enum TripleCheckboxState {\n  UNCHECKED = 0,\n  CHECKED = 1,\n  INDETERMINATE = 2,\n}\n\nexport class ElderTripleStateCheckboxController {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _stateChange: Observable<TripleCheckboxState>\n  private readonly _valueChange = new BehaviorSubject<boolean | undefined>(undefined)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public constructor(\n    private readonly checkbox: MatCheckbox,\n    @Optional() private readonly ngModel?: NgModel\n  ) {\n    if (this.ngModel) {\n      this._stateChange = this.ngModel.valueChanges.pipe(\n        takeUntilDestroyed(),\n        map((value) => this.controlValueToState(value))\n      )\n      this.stateChange.subscribe((value) => this.writeState(value))\n    } else {\n      this._stateChange = this._valueChange.pipe(\n        takeUntilDestroyed(),\n        map((value) => this.controlValueToState(value))\n      )\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get stateChange(): Observable<TripleCheckboxState> {\n    return this._stateChange\n  }\n\n  public get valueChange(): Observable<boolean | undefined> {\n    return this._valueChange.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public toggleNextState(): void {\n    const current = this.readState()\n    this.writeState((current + 1) % 3)\n  }\n\n  public writeState(state: TripleCheckboxState): void {\n    switch (state) {\n      case TripleCheckboxState.UNCHECKED:\n        this.writeValueToControlAndModel(false)\n        break\n      case TripleCheckboxState.CHECKED:\n        this.writeValueToControlAndModel(true)\n        break\n      case TripleCheckboxState.INDETERMINATE:\n        this.writeValueToControlAndModel(undefined)\n        break\n      default:\n        throw new UnreachableCaseError(state)\n    }\n  }\n\n  public readState(): TripleCheckboxState {\n    return this.controlValueToState(this.readControlValue())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private controlValueToState(value: any): TripleCheckboxState {\n    const state = ParseUtil.parseBoolOrUndefined(value)\n    switch (state) {\n      case false:\n        return TripleCheckboxState.UNCHECKED\n      case true:\n        return TripleCheckboxState.CHECKED\n      case undefined:\n        return TripleCheckboxState.INDETERMINATE\n      default:\n        throw new UnreachableCaseError(state)\n    }\n  }\n\n  private readControlValue(): any {\n    if (this.ngModel) {\n      return this.ngModel.viewModel\n    } else {\n      return this.checkbox.value\n    }\n  }\n\n  private writeValueToControlAndModel(value: boolean | undefined): void {\n    const isDefined = value !== undefined\n\n    this.checkbox.value = isDefined ? String(value) : undefined\n    this.checkbox.checked = !!value\n    this.checkbox.indeterminate = !isDefined\n\n    this._valueChange.next(value)\n    this.updateModelIfPresent(value)\n  }\n\n  private updateModelIfPresent(val: any): void {\n    if (this.ngModel !== null && this.ngModel.viewModel !== val) {\n      this.ngModel.control.setValue(val, {\n        onlySelf: false,\n        emitEvent: true,\n        emitModelToViewChange: true,\n        emitViewToModelChange: true,\n      })\n    }\n  }\n}\n","import { Directive, OnInit, Optional, Input, Output, EventEmitter } from '@angular/core'\nimport { MatCheckbox } from '@angular/material/checkbox'\nimport { NgModel } from '@angular/forms'\nimport { ParseUtil } from '../../../../common/utils/parse-util'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { UnreachableCaseError } from '../../../../common/exceptions/unreachable-case-error'\nimport {\n  ElderTripleStateCheckboxController,\n  TripleCheckboxState,\n} from './elder-triple-state-checkbox-controller'\n\n@Directive({\n  selector: 'mat-checkbox[elderTripleStateCheckbox]',\n  standalone: true,\n})\nexport class ElderTripleStateCheckboxDirective implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n  private readonly controller: ElderTripleStateCheckboxController\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  valueChange = new EventEmitter<boolean | undefined>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly checkbox: MatCheckbox,\n    @Optional() ngModel: NgModel\n  ) {\n    this.controller = new ElderTripleStateCheckboxController(checkbox, ngModel)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.controller.writeState(this.controller.readState())\n    this.checkbox.registerOnChange(() => this.toggleNextState())\n\n    // Subscribe to value changes from the controller\n    this.controller.valueChange.subscribe((value) => {\n      this.valueChange.emit(value)\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public toggleNextState(): void {\n    this.controller.toggleNextState()\n  }\n}\n","import { AfterContentInit, Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { fromEvent, Observable, Subject } from 'rxjs'\nimport { debounceTime, filter, takeUntil } from 'rxjs/operators'\n\n/**\n * Traps tab focus inside the host elements children.\n *\n * Unlike other approaches which rely on inserting (hidden) supporting elements,\n * this solution does not modify the DOM which improves the handling and robustness.\n *\n * Instead, the children of the trap-host are scanned and observed (highly optimized\n * via MutationObserver), and all focusable elements are collected.\n * Only on users tab input are the next viable focus target resolved, thus supporting\n * disabled or hidden elements properly.\n *\n */\n@Directive({\n  selector: '[elderTabFocusTrap]',\n  standalone: true,\n})\nexport class ElderTabFocusTrapDirective implements OnInit, OnDestroy, AfterContentInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n  private readonly keyDown$: Observable<KeyboardEvent>\n\n  private readonly destroy$ = new Subject<void>()\n\n  private _focusableElements: HTMLElement[] = []\n\n  private mutationObserver: MutationObserver\n  private readonly mutations$ = new Subject<MutationRecord[]>()\n\n  /**\n   * A query selector which matches all elements that technically can have focus.\n   * No checks if the elements are actually focusable due to disabled etc, which is handled later.\n   *\n   * https://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus\n   */\n  @Input()\n  public readonly focusableQuerySelector =\n    'a[href], area[href], button,' + ' textarea, input, select, [tabindex]'\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly hostRef: ElementRef<HTMLElement>) {\n    this.keyDown$ = fromEvent(hostRef.nativeElement, 'keydown') as Observable<KeyboardEvent>\n    this.mutationObserver = new MutationObserver((muts) => this.mutations$.next(muts))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.keyDown$\n      .pipe(\n        takeUntil(this.destroy$),\n        filter((e) => e.key === 'Tab')\n      )\n      .subscribe((keyDown) => this.onTabKeyDown(keyDown))\n\n    this.mutations$\n      .pipe(takeUntil(this.destroy$), debounceTime(10))\n      .subscribe((mutations) => this.updateFocusableElements(this.hostRef.nativeElement))\n  }\n\n  public ngAfterContentInit(): void {\n    this.mutationObserver.observe(this.hostRef.nativeElement, {\n      attributes: false,\n      childList: true,\n      subtree: true,\n      characterData: false,\n    })\n\n    this.updateFocusableElements(this.hostRef.nativeElement)\n  }\n\n  public ngOnDestroy(): void {\n    this.mutationObserver.disconnect()\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private onTabKeyDown(event: KeyboardEvent): void {\n    // Scan for the right now focusable bounds\n    const firstElement = this.firstTabFocusable(this._focusableElements)\n    const lastElement = this.lastTabFocusable(this._focusableElements)\n\n    this.log.debug('onTabKeyDown', {\n      firstFocusable: firstElement,\n      lastFocusable: lastElement,\n      elementCount: this._focusableElements.length,\n      elements: this._focusableElements,\n    })\n\n    if (event.shiftKey) {\n      // shift + tab\n      if (document.activeElement === firstElement) {\n        lastElement.focus()\n        event.preventDefault()\n      }\n    } else {\n      // tab\n      if (document.activeElement === lastElement) {\n        firstElement.focus()\n        event.preventDefault()\n      }\n    }\n  }\n\n  private firstTabFocusable(elements: HTMLElement[]): HTMLElement | null {\n    for (const element of elements) {\n      if (this.isFocusableByTab(element)) {\n        return element\n      }\n    }\n    return null\n  }\n\n  private lastTabFocusable(elements: HTMLElement[]): HTMLElement | null {\n    for (let i = elements.length; i > 0; i--) {\n      const element = elements[i - 1]\n      if (this.isFocusableByTab(element)) {\n        return element\n      }\n    }\n    return null\n  }\n\n  private updateFocusableElements(element: HTMLElement): void {\n    this._focusableElements = this.findAllFocusableElements(element) as HTMLElement[]\n    this.log.debug('updateFocusableElements', {\n      elements: this._focusableElements,\n    })\n  }\n\n  private findAllFocusableElements(parent: HTMLElement): Element[] {\n    const elements = parent.querySelectorAll(this.focusableQuerySelector)\n    return Array.from(elements)\n  }\n\n  private isFocusableByTab(element: HTMLElement): boolean {\n    return this.isFocusable(element) && element.tabIndex !== -1\n  }\n\n  private isFocusable(element: HTMLElement): boolean {\n    if (element) {\n      if (element.hidden) {\n        return false\n      }\n      if ((<any>element).disabled !== undefined) {\n        return !((<any>element).disabled as boolean)\n      }\n      return true\n    }\n    return false\n  }\n}\n","import { AfterViewInit, Directive, Input } from '@angular/core'\nimport { ElderClassHostBindingBase } from './base/elder-class-hostbinding-base'\nimport { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { MatFormField } from '@angular/material/form-field'\n\n/**\n * Once declared on a MatFormField tag, the css class 'elder-no-hint' will be added\n * and dense styling for the hint area will be applied.\n *\n * Example Usage:\n *\n *  <mat-form-field elderNoHint>\n *    <input matInput placeholder=\"Some Input\" value=\"Some Value\">\n *  </mat-form-field>\n *\n */\n@Directive({\n  selector: 'mat-form-field[elderNoHint]',\n  standalone: true,\n})\nexport class ElderFormFieldNoHintDirective\n  extends ElderClassHostBindingBase\n  implements AfterViewInit\n{\n  constructor(private _matFormField: MatFormField) {\n    super('elder-no-hint')\n  }\n\n  @Input()\n  public set elderNoHint(enabled: boolean | string) {\n    this.enabled = coerceBooleanProperty(enabled)\n  }\n\n  public ngAfterViewInit(): void {\n    if (this.enabled) {\n      this._matFormField.subscriptSizing = 'dynamic' // Auto collapse hint/error line\n    }\n  }\n}\n","import { Directive, HostListener, Input } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n/**\n * This directive prevents text input when it does not match\n * the specified regex pattern.\n */\n@Directive({\n  selector:\n    'textarea[elderInputPattern],input[elderInputPattern],elder-quantity-input[elderInputPattern]',\n  standalone: true,\n})\nexport class ElderInputPatternDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private pattern: RegExp\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Listeners                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('beforeinput', ['$event']) onBeforeInput(e: InputEvent): void {\n    if (e.inputType === 'insertText') {\n      if (!this.isValidText(e.data)) {\n        e.preventDefault()\n      }\n    }\n  }\n\n  @HostListener('paste', ['$event']) onPasteEvent(e: ClipboardEvent): void {\n    const clipboardData = e.clipboardData || (<any>window).clipboardData\n    const pastedData = clipboardData.getData('Text')\n    if (!this.isValidText(pastedData)) {\n      e.preventDefault()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set elderInputPattern(pattern: string) {\n    this.pattern = pattern ? new RegExp(pattern) : null\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private isValidText(text: string): boolean {\n    if (this.pattern) {\n      return this.pattern.test(text)\n    }\n    return true\n  }\n}\n","import { IValidationMessageStrategy } from '../validation-message-strategy'\nimport { ValidationErrors } from '@angular/forms'\n\nexport class FallbackValidationMessageStrategy implements IValidationMessageStrategy {\n  public renderMessage(validation: ValidationErrors): string {\n    return Object.keys(validation).toString()\n  }\n}\n","import { IValidationMessageStrategy } from '../validation-message-strategy'\nimport { ValidationErrors } from '@angular/forms'\nimport { Injectable } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CommonValidationMessageStrategy implements IValidationMessageStrategy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly translateService: TranslateService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public renderMessage(validation: ValidationErrors): string {\n    if (validation['required']) {\n      return this.translateService.instant('validations.required')\n    }\n\n    if (validation['min'] && validation['max']) {\n      return '>= ' + validation['min'].min + ' & <= ' + validation['max'].max\n    } else if (validation['min']) {\n      return '>= ' + validation['min'].min\n    } else if (validation['max']) {\n      return '<= ' + validation['max'].max\n    }\n\n    return undefined\n  }\n}\n","import { IValidationMessageStrategy } from '../validation-message-strategy'\nimport { ValidationErrors } from '@angular/forms'\nimport { Injectable } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\n\nexport interface IDynamicValidationMessage {\n  message: string\n  messageParams?: Object\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DynamicValidationMessageStrategy implements IValidationMessageStrategy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly translateService: TranslateService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public renderMessage(errors: ValidationErrors): string {\n    for (const key of Object.keys(errors)) {\n      if (errors[key].message) {\n        return this.renderDynamicMessage(errors[key] as IDynamicValidationMessage)\n      }\n    }\n    return undefined\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private renderDynamicMessage(message: IDynamicValidationMessage): string {\n    return this.translateService.instant(message.message, message.messageParams)\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { IValidationMessageStrategy } from './validation-message-strategy'\nimport { FallbackValidationMessageStrategy } from './strategies/fallback-validation-message-strategy'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ValidationErrors } from '@angular/forms'\nimport { CommonValidationMessageStrategy } from './strategies/common-validation-message-strategy'\nimport { DynamicValidationMessageStrategy } from './strategies/dynamic-validation-message-strategy'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ValidationMessageRendererService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly strategies: IValidationMessageStrategy[]\n  private readonly fallbackStrategy = new FallbackValidationMessageStrategy()\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    commonMessages: CommonValidationMessageStrategy,\n    dynamicMessages: DynamicValidationMessageStrategy\n  ) {\n    // TODO Allow registration via multi injection token\n    this.strategies = [commonMessages, dynamicMessages]\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public renderErrorMessage(errors: ValidationErrors): string {\n    let message: string\n    if (errors) {\n      for (const strategy of this.strategies) {\n        message = strategy.renderMessage(errors)\n        if (message) break\n      }\n      if (!message) {\n        message = this.fallbackStrategy.renderMessage(errors)\n        if (!message) {\n          message = 'invalid'\n        }\n      }\n      return message\n    } else {\n      return 'no error'\n    }\n  }\n}\n","import { AfterViewInit, ChangeDetectorRef, Directive, ElementRef, OnDestroy } from '@angular/core'\nimport { MatFormField } from '@angular/material/form-field'\nimport { AbstractControl, ValidationErrors } from '@angular/forms'\nimport { Subject } from 'rxjs'\nimport { combineLatestWith, debounceTime, takeUntil } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ValidationMessageRendererService } from './validation-message-renderer.service'\n\n@Directive({\n  selector: 'mat-error[elderValidationError]',\n  standalone: true,\n})\nexport class ElderValidationErrorDirective implements AfterViewInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly destroy$ = new Subject<void>()\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private currentTextContent: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly messageRenderer: ValidationMessageRendererService,\n    private readonly formField: MatFormField,\n    private readonly elementRef: ElementRef<HTMLElement>,\n    private readonly ref: ChangeDetectorRef\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit(): void {\n    const control = this.controlOfField(this.formField)\n    if (control) {\n      // Control is only available if formControl / ngModel is present\n      control.statusChanges\n        .pipe(takeUntil(this.destroy$), combineLatestWith(control.valueChanges), debounceTime(50))\n        .subscribe(() => this.checkAndUpdateError())\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private checkAndUpdateError(): void {\n    const control = this.controlOfField(this.formField)\n    if (control) {\n      const errors = control.errors\n      this.applyErrors(errors)\n    }\n  }\n\n  private applyErrors(errors: ValidationErrors) {\n    this.applyText(this.renderErrorMessage(errors))\n  }\n\n  private renderErrorMessage(errors: ValidationErrors): string {\n    return this.messageRenderer.renderErrorMessage(errors)\n  }\n\n  private controlOfField(formField: MatFormField): AbstractControl<any, any> | undefined {\n    const formFieldControl = formField?._control\n    return formFieldControl?.ngControl?.control\n  }\n\n  private applyText(text: string): void {\n    const hostElement = this.elementRef.nativeElement\n    this.updateTextContent(hostElement, text)\n  }\n\n  private updateTextContent(element: HTMLElement, text: string): void {\n    if (text !== this.currentTextContent) {\n      element.textContent = text\n      this.currentTextContent = text\n      this.ref.markForCheck()\n    }\n  }\n}\n","import { MatCheckbox } from '@angular/material/checkbox'\nimport { NgModel } from '@angular/forms'\nimport { ParseUtil } from '../../../../common/utils/parse-util'\nimport { UnreachableCaseError } from '../../../../common/exceptions/unreachable-case-error'\nimport { Observable } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\n\nexport enum ElderCheckboxState {\n  UNCHECKED = 0,\n  CHECKED = 1,\n}\n\nexport class ElderSingleStateCheckboxController {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _stateChange: Observable<ElderCheckboxState>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public constructor(\n    private readonly checkbox: MatCheckbox,\n    private readonly ngModel: NgModel\n  ) {\n    this._stateChange = this.ngModel.valueChanges.pipe(\n      takeUntilDestroyed(),\n      map((value) => this.controlValueToState(value))\n    )\n    this.stateChange.subscribe((value) => this.writeState(value))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get stateChange(): Observable<ElderCheckboxState> {\n    return this._stateChange\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public toggleNextState(): void {\n    const current = this.readState()\n    this.writeState((current + 1) % 2)\n  }\n\n  public writeState(state: ElderCheckboxState): void {\n    switch (state) {\n      case ElderCheckboxState.UNCHECKED:\n        this.writeValueToControlAndModel(undefined)\n        break\n      case ElderCheckboxState.CHECKED:\n        this.writeValueToControlAndModel(true)\n        break\n      default:\n        throw new UnreachableCaseError(state)\n    }\n  }\n\n  public readState(): ElderCheckboxState {\n    return this.controlValueToState(this.readControlValue())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private controlValueToState(value: any): ElderCheckboxState {\n    const state = ParseUtil.parseBoolOrUndefined(value)\n    switch (state) {\n      case undefined:\n      case false:\n        return ElderCheckboxState.UNCHECKED\n      case true:\n        return ElderCheckboxState.CHECKED\n      default:\n        throw new UnreachableCaseError(state)\n    }\n  }\n\n  private readControlValue(): any {\n    if (this.ngModel) {\n      return this.ngModel.viewModel\n    } else {\n      return this.checkbox.value\n    }\n  }\n\n  private writeValueToControlAndModel(value: boolean | undefined): void {\n    const isTrue = value === true\n\n    this.checkbox.value = isTrue ? String(value) : undefined\n    this.checkbox.checked = isTrue\n    this.checkbox.indeterminate = false\n    this.updateModelIfPresent(value)\n  }\n\n  private updateModelIfPresent(val: any): void {\n    if (this.ngModel !== null && this.ngModel.viewModel !== val) {\n      this.ngModel.control.setValue(val, {\n        onlySelf: false,\n        emitEvent: true,\n        emitModelToViewChange: true,\n        emitViewToModelChange: true,\n      })\n    }\n  }\n}\n","import { Directive, OnInit, Optional } from '@angular/core'\nimport { MatCheckbox } from '@angular/material/checkbox'\nimport { NgModel } from '@angular/forms'\nimport { ParseUtil } from '../../../../common/utils/parse-util'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { UnreachableCaseError } from '../../../../common/exceptions/unreachable-case-error'\nimport { ElderTripleStateCheckboxController } from './elder-triple-state-checkbox-controller'\nimport { ElderSingleStateCheckboxController } from './elder-single-state-checkbox-controller'\n\n@Directive({\n  selector: 'mat-checkbox[elderSingleStateCheckbox]',\n  standalone: true,\n})\nexport class ElderSingleStateCheckboxDirective implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n  private readonly controller: ElderSingleStateCheckboxController\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly checkbox: MatCheckbox,\n    ngModel: NgModel\n  ) {\n    this.controller = new ElderSingleStateCheckboxController(checkbox, ngModel)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.controller.writeState(this.controller.readState())\n    this.checkbox.registerOnChange(() => this.toggleNextState())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public toggleNextState(): void {\n    this.controller.toggleNextState()\n  }\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { ElderDelayedFocusDirective } from './elder-delayed-focus.directive'\nimport { ElderTouchedDirective } from './elder-touched.directive'\nimport { MatFormFieldModule } from '@angular/material/form-field'\nimport { ElderPlugParentFormDirective } from './elder-plug-parent-form.directive'\nimport { ElderStopEventPropagationDirective } from './elder-stop-event-propagation.directive'\nimport { ElderMinValidator } from './validation/validators/elder-min.validator'\nimport { ElderMaxValidator } from './validation/validators/elder-max.validator'\nimport { ElderFormFieldLabelDirective } from './elder-form-field-label.directive'\nimport { ElderKeyEventDirective } from './elder-key-event.directive'\nimport { ElderClipboardPutDirective } from './elder-clipboard-put.directive'\nimport { ElderFormFieldDenseDirective } from './elder-form-field-dense.directive'\nimport { ElderFormFieldNoSpinnerDirective } from './elder-form-field-no-spinner.directive'\nimport { ElderRequiredIgnoreZeroValidator } from './validation/validators/elder-required-ignore-zero.validator'\nimport { ElderMultipleOfValidator } from './validation/validators/elder-multiple-of.validator'\nimport { ElderNextFocusableDirective } from './elder-next-focusable.directive'\nimport { ElderTripleStateCheckboxDirective } from './checkbox/elder-triple-state-checkbox.directive'\nimport { ElderTabFocusTrapDirective } from './elder-tab-focus-trap.directive'\nimport { ElderFormFieldNoHintDirective } from './elder-form-field-no-hint.directive'\nimport { ElderInputPatternDirective } from './elder-input-pattern.directive'\nimport { ElderValidationErrorDirective } from './validation/elder-validation-error.directive'\nimport { ElderSingleStateCheckboxDirective } from './checkbox/elder-single-state-checkbox.directive'\n\nexport { ElderDelayedFocusDirective } from './elder-delayed-focus.directive'\nexport { ElderTouchedDirective } from './elder-touched.directive'\nexport { ElderPlugParentFormDirective } from './elder-plug-parent-form.directive'\nexport { ElderStopEventPropagationDirective } from './elder-stop-event-propagation.directive'\nexport * from './elder-form-field-label.directive'\nexport * from './validation/validators/elder-min.validator'\nexport * from './validation/validators/elder-max.validator'\nexport * from './elder-key-event.directive'\nexport * from './elder-clipboard-put.directive'\nexport * from './elder-form-field-dense.directive'\nexport * from './elder-form-field-no-hint.directive'\nexport * from './elder-form-field-no-spinner.directive'\nexport * from './validation/validators/elder-required-ignore-zero.validator'\nexport * from './validation/validators/elder-multiple-of.validator'\nexport * from './validation/elder-validation-error.directive'\nexport * from './elder-next-focusable.directive'\nexport * from './elder-tab-focus-trap.directive'\nexport * from './checkbox/elder-triple-state-checkbox.directive'\nexport * from './checkbox/elder-single-state-checkbox.directive'\nexport * from './elder-input-pattern.directive'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatFormFieldModule,\n    ElderDelayedFocusDirective,\n    ElderTouchedDirective,\n    ElderPlugParentFormDirective,\n    ElderStopEventPropagationDirective,\n    ElderMinValidator,\n    ElderMaxValidator,\n    ElderFormFieldLabelDirective,\n    ElderKeyEventDirective,\n    ElderClipboardPutDirective,\n    ElderFormFieldDenseDirective,\n    ElderFormFieldNoSpinnerDirective,\n    ElderRequiredIgnoreZeroValidator,\n    ElderMultipleOfValidator,\n    ElderNextFocusableDirective,\n    ElderTripleStateCheckboxDirective,\n    ElderSingleStateCheckboxDirective,\n    ElderTabFocusTrapDirective,\n    ElderFormFieldNoHintDirective,\n    ElderInputPatternDirective,\n    ElderValidationErrorDirective,\n  ],\n  exports: [\n    ElderDelayedFocusDirective,\n    ElderTouchedDirective,\n    ElderPlugParentFormDirective,\n    ElderStopEventPropagationDirective,\n    ElderMinValidator,\n    ElderMaxValidator,\n    ElderFormFieldLabelDirective,\n    ElderKeyEventDirective,\n    ElderClipboardPutDirective,\n    ElderFormFieldDenseDirective,\n    ElderFormFieldNoSpinnerDirective,\n    ElderRequiredIgnoreZeroValidator,\n    ElderMultipleOfValidator,\n    ElderNextFocusableDirective,\n    ElderTripleStateCheckboxDirective,\n    ElderSingleStateCheckboxDirective,\n    ElderTabFocusTrapDirective,\n    ElderFormFieldNoHintDirective,\n    ElderInputPatternDirective,\n    ElderValidationErrorDirective,\n  ],\n})\nexport class ElderFormsDirectivesModule {}\n","import { Directive, Input } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n/**\n * This directive projects marked content into a toolbar.\n * @deprecated No longer required, ElderTableComponent natively supports this now.\n */\n@Directive({\n  selector: '[elderTableSort]',\n  standalone: true,\n})\nexport class ElderTableSortDirective {\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n  @Input() elderTableSort: never // This line ensures the type mismatch\n  constructor() {\n    this.logger.warn(\n      '[elderTableSort] directive is no longer required. Use matSort on ElderTableComponent directly.'\n    )\n  }\n}\n","import { Directive, Optional } from '@angular/core'\nimport { MatSortHeader } from '@angular/material/sort'\n\n/**\n * This directive is meant to be placed on table cells containing numbers.\n * It will right align its content.\n */\n@Directive({\n  selector: '[elderNumberCell]',\n  host: {\n    '[class.elder-number-cell]': 'true',\n  },\n  standalone: true,\n})\nexport class ElderNumberCellDirective {\n  constructor(@Optional() private matSortHeader: MatSortHeader) {\n    if (matSortHeader) {\n      matSortHeader.arrowPosition = 'before'\n    }\n  }\n}\n","import { Directive, Input, Output } from '@angular/core'\nimport { ElderActivationOptions } from '../../common/activation/elder-activation-options'\nimport { NoInputArgs } from '../../../../common/utils/input-utils'\nimport { ElderDataActivationDirective } from '../../common/activation/elder-data-activation.directive'\nimport { Observable } from 'rxjs'\nimport { ItemActivationEvent } from '../../common/activation/model/item-activation-event'\nimport { ItemActivationOptions } from '../../common/activation/model/item-activation-options'\n\n@Directive({\n  selector: 'elder-table[elderTableActivation]',\n  exportAs: 'elderTableActivation',\n  standalone: true,\n  hostDirectives: [ElderDataActivationDirective],\n})\nexport class ElderTableActivationDirective<T> {\n  constructor(private readonly activation: ElderDataActivationDirective) {}\n\n  @Input('elderTableActivation')\n  public set activationOptions(options: ElderActivationOptions | NoInputArgs) {\n    this.activation.activationOptions = options\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get activeItemEventChange(): Observable<ItemActivationEvent<T>> {\n    return this.activation.activeItemEventChange\n  }\n\n  @Output()\n  public get activeItemChange(): Observable<T> {\n    return this.activation.activeItemChange\n  }\n\n  public get activeItem(): T {\n    return this.activation.activeItem\n  }\n\n  @Input()\n  public set activeItem(item: T) {\n    this.activation.activeItem = item\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public activate(item: T, options: ItemActivationOptions): void {\n    this.activation.activate(item, options)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import { Directive } from '@angular/core'\nimport { ElderTableProviders } from './model/elder-table-model-provider'\n\n/**\n * Forces a new Elder Table Model, thus breaking this component and its children from a potential parent elder-table.\n * With this, nested elder-tables are possible.\n */\n@Directive({\n  selector: '[elderTableRoot]',\n  providers: [ElderTableProviders.ClearTableModel],\n  standalone: true,\n})\nexport class ElderTableRootDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n}\n","import {\n  DestroyRef,\n  Directive,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnInit,\n  Output,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderDialogService } from '../../../dialogs/elder-dialog.service'\nimport { DataViewActivationController } from '../../common/activation/data-view-activation-controller.service'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { ElderTableComponent } from '../elder-table/elder-table.component'\n\nclass ActiveDeleted<T> {\n  constructor(\n    public readonly deleted: T,\n    public readonly next: T\n  ) {}\n}\n\n@Directive({\n  selector: '[elderDeleteActive]',\n  exportAs: 'elderDeleteActive',\n  standalone: true,\n})\nexport class ElderDeleteActiveDirective<T = any> implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private latestDeleteRequest: ActiveDeleted<T> = null\n\n  private readonly requestDelete = new EventEmitter<T>()\n\n  /**\n   * Emits when the active item should be deleted.\n   */\n  @Output()\n  public readonly elderDeleteActive = this.requestDelete\n\n  @Input()\n  public confirmDeletion = true\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly elderTable: ElderTableComponent,\n    private readonly destroyRef: DestroyRef,\n    private readonly activationController: DataViewActivationController<T>,\n    private readonly elderDialog: ElderDialogService\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.elderTable.rows$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n      next: (rows) => {\n        this.checkActivateNext()\n      },\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *.\n   * Host Listeners                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('keydown', ['$event'])\n  public onKeydown(event: KeyboardEvent) {\n    if (event.key === 'Backspace' || event.key === 'Delete') {\n      const active = this.activationController.activeItem\n      if (this.activationController.hasItemFocus(active)) {\n        event.stopPropagation()\n        this.elderDialog.confirmDelete(\n          {\n            deletionCount: 1,\n            confirmRemoval: this.confirmDeletion,\n            skipConfirm: event.shiftKey,\n          },\n          () => {\n            this.logger.debug('Deleting current row was requested: ', active)\n            this.emitDelete(active)\n          },\n          () => {\n            this.activationController.activateAndFocus(active)\n          }\n        )\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private checkActivateNext(): boolean {\n    if (this.latestDeleteRequest?.next) {\n      this.activationController.activateAndFocus(this.latestDeleteRequest.next)\n      this.latestDeleteRequest = null\n      return true\n    }\n    return false\n  }\n\n  private emitDelete(active: T): void {\n    this.latestDeleteRequest = new ActiveDeleted(\n      active,\n      this.activationController.nextCloseTo(active)\n    )\n    this.requestDelete.emit(active)\n  }\n}\n","import { Directive, Optional } from '@angular/core'\nimport { MatSortHeader } from '@angular/material/sort'\n\n/**\n * This directive is meant to be placed on table cells which content should\n * be centered.\n * It will center align its content.\n */\n@Directive({\n  selector: '[elderCenterCell]',\n  host: {\n    '[class.elder-center-cell]': 'true',\n  },\n  standalone: true,\n})\nexport class ElderCenterCellDirective {\n  constructor() {}\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderTableComponent } from './elder-table/elder-table.component'\nimport { TranslateModule, TranslateService } from '@ngx-translate/core'\nimport { MatBadgeModule } from '@angular/material/badge'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatCheckboxModule } from '@angular/material/checkbox'\nimport { MatDialogModule } from '@angular/material/dialog'\nimport { MatDividerModule } from '@angular/material/divider'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatMenuModule } from '@angular/material/menu'\nimport { MatPaginatorIntl, MatPaginatorModule } from '@angular/material/paginator'\nimport { MatProgressBarModule } from '@angular/material/progress-bar'\nimport { MatSortModule } from '@angular/material/sort'\nimport { MatTableModule } from '@angular/material/table'\nimport { MatTooltipModule } from '@angular/material/tooltip'\nimport { RouterModule } from '@angular/router'\nimport { FormsModule } from '@angular/forms'\nimport { CdkTableModule } from '@angular/cdk/table'\nimport { ElderInfiniteScrollModule } from '../../infinitescroll/elder-infinite-scroll.module'\nimport { ElderPaginatorIntl } from './elder-paginator-intl'\nimport { ElderDataCommonModule } from '../common/elder-data-common.module'\nimport { ElderFormsDirectivesModule } from '../../forms/directives/elder-forms-directives.module'\nimport { ElderTableSortDirective } from './elder-table-sort.directive'\nimport { ElderNumberCellDirective } from './elder-number-cell.directive'\nimport { ElderTableActivationDirective } from './activation/elder-table-activation.directive'\nimport { ElderTableRowDirective } from './elder-table-row.directive'\nimport { ElderTableExtensionDirective } from './elder-table-extension.directive'\nimport { ElderTableColumnDirective } from './elder-table-column.directive'\nimport { ElderTableRootDirective } from './elder-table-root.directive'\nimport { ElderTableToolbarDirective } from './elder-table/elder-table-toolbar.directive'\nimport { MatCardModule } from '@angular/material/card'\nimport { ElderDeleteActiveDirective } from './activation/elder-delete-active.directive'\nimport { ElderCenterCellDirective } from './elder-center-cell.directive'\nimport { DragDropModule } from '@angular/cdk/drag-drop'\nimport { ElderTableDropListConnectorDirective } from './drag-and-drop/elder-table-drop-list-connector.directive'\n\nexport * from './model/elder-table-model'\nexport * from './columns/elder-table-selection-cell/elder-table-selection-cell.component'\nexport * from './model/elder-table-model-provider'\nexport * from './model/elder-table-model-cdk-table-binding'\nexport * from './model/elder-table-model-query-group'\nexport * from './activation/public_api'\nexport * from './drag-and-drop/public_api'\nexport * from './elder-number-cell.directive'\nexport * from './elder-center-cell.directive'\nexport * from './elder-table/elder-table.component'\nexport * from './elder-table-sort.directive'\nexport * from './elder-table/elder-table-toolbar.directive'\nexport * from './elder-table-extension.directive'\nexport * from './elder-table-root.directive'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    RouterModule,\n    FormsModule,\n    // Material\n    MatDividerModule,\n    MatCheckboxModule,\n    MatButtonModule,\n    MatIconModule,\n    MatBadgeModule,\n    MatProgressBarModule,\n    CdkTableModule,\n    DragDropModule,\n    MatTableModule,\n    MatPaginatorModule,\n    MatSortModule,\n    MatDialogModule,\n    MatTooltipModule,\n    MatMenuModule,\n    // translations\n    TranslateModule,\n    ElderDataCommonModule,\n    ElderInfiniteScrollModule,\n    ElderFormsDirectivesModule,\n    MatCardModule,\n    ElderTableComponent,\n    ElderTableToolbarDirective,\n    ElderTableSortDirective,\n    ElderCenterCellDirective,\n    ElderNumberCellDirective,\n    ElderTableActivationDirective,\n    ElderTableRowDirective,\n    ElderTableExtensionDirective,\n    ElderTableColumnDirective,\n    ElderTableRootDirective,\n    ElderDeleteActiveDirective,\n    ElderTableDropListConnectorDirective,\n  ],\n  exports: [\n    ElderTableComponent,\n    ElderTableToolbarDirective,\n    ElderDataCommonModule,\n    ElderTableSortDirective,\n    ElderCenterCellDirective,\n    ElderNumberCellDirective,\n    ElderTableActivationDirective,\n    ElderTableExtensionDirective,\n    ElderTableRootDirective,\n    ElderDeleteActiveDirective,\n    ElderTableDropListConnectorDirective,\n  ],\n  providers: [\n    {\n      provide: MatPaginatorIntl,\n      deps: [TranslateService],\n      useClass: ElderPaginatorIntl,\n    },\n  ],\n})\nexport class ElderTableModule {}\n","import { Component, OnInit, Optional } from '@angular/core'\nimport { SelectionModel } from '../../../../common/selection/selection-model'\n\n@Component({\n  selector: 'elder-simple-selection-view',\n  templateUrl: './elder-simple-selection-view.component.html',\n  styleUrls: ['./elder-simple-selection-view.component.css'],\n  standalone: true,\n})\nexport class ElderSimpleSelectionViewComponent implements OnInit {\n  constructor(@Optional() selectionModel: SelectionModel<any>) {}\n\n  ngOnInit() {}\n}\n","<p>elder-simple-selection-view works!</p>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderSimpleSelectionViewComponent } from './elder-simple-selection-view.component'\nimport { RouterModule } from '@angular/router'\nimport { FormsModule } from '@angular/forms'\nimport { MatBadgeModule } from '@angular/material/badge'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatCheckboxModule } from '@angular/material/checkbox'\nimport { MatDialogModule } from '@angular/material/dialog'\nimport { MatDividerModule } from '@angular/material/divider'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatMenuModule } from '@angular/material/menu'\nimport { MatPaginatorModule } from '@angular/material/paginator'\nimport { MatProgressBarModule } from '@angular/material/progress-bar'\nimport { MatSortModule } from '@angular/material/sort'\nimport { MatTableModule } from '@angular/material/table'\nimport { MatTooltipModule } from '@angular/material/tooltip'\nimport { CdkTableModule } from '@angular/cdk/table'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderDataCommonModule } from '../../common/elder-data-common.module'\nimport { ElderInfiniteScrollModule } from '../../../infinitescroll/elder-infinite-scroll.module'\nimport { ElderFormsDirectivesModule } from '../../../forms/directives/elder-forms-directives.module'\n\nexport { ElderSimpleSelectionViewComponent } from './elder-simple-selection-view.component'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    RouterModule,\n    FormsModule,\n    // Material\n    MatDividerModule,\n    MatCheckboxModule,\n    MatButtonModule,\n    MatIconModule,\n    MatBadgeModule,\n    MatProgressBarModule,\n    CdkTableModule,\n    MatTableModule,\n    MatPaginatorModule,\n    MatSortModule,\n    MatDialogModule,\n    MatTooltipModule,\n    MatMenuModule,\n    // translations\n    TranslateModule,\n    ElderDataCommonModule,\n    ElderInfiniteScrollModule,\n    ElderFormsDirectivesModule,\n    ElderSimpleSelectionViewComponent,\n  ],\n  exports: [ElderSimpleSelectionViewComponent],\n})\nexport class ElderSimpleSelectionViewModule {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  HostListener,\n  input,\n  Optional,\n  Renderer2,\n  Signal,\n  signal,\n  untracked,\n  viewChild,\n} from '@angular/core'\nimport { ElderStopEventPropagationDirective } from '../../../forms/directives/elder-stop-event-propagation.directive'\nimport { MatCard } from '@angular/material/card'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton } from '@angular/material/button'\nimport { NgTemplateOutlet } from '@angular/common'\nimport { BooleanInput } from '@angular/cdk/coercion'\nimport { booleanTransformFn } from '../../../../common/utils/signal-input'\nimport { SelectionEventSource, SelectionModel } from '../../../../common/selection/selection-model'\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop'\nimport { ElderDataViewInteractionMode } from '../../elder-data-view-interaction-mode'\nimport { ActivationModel } from '../../common/activation/model/activation-model'\nimport { ItemActivationEvent } from '../../common/activation/model/item-activation-event'\nimport { ItemActivationOptions } from '../../common/activation/model/item-activation-options'\nimport { ActivationEventSource } from '../../common/activation/model/activation-event-source'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { switchMap } from 'rxjs'\nimport { DataViewInteractionControllerDirective } from '../../base/data-view-interaction-controller.directive'\n\n@Component({\n  selector: 'elder-tile',\n  imports: [ElderStopEventPropagationDirective, MatIcon, MatIconButton],\n  templateUrl: './elder-tile.component.html',\n  styleUrl: './elder-tile.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class ElderTileComponent<T = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly value = input.required<T>()\n  public readonly selectionEnabled = input(false, { transform: booleanTransformFn })\n\n  public readonly selectionModel: Signal<SelectionModel<T>>\n  public readonly selection: Signal<T[]>\n\n  public readonly interactionMode = input<ElderDataViewInteractionMode>('open')\n\n  public readonly outlined = input(false, { transform: booleanTransformFn })\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _activated = signal<boolean>(false)\n  private readonly _focused = signal<boolean>(false)\n  public readonly focusable: boolean = false\n\n  public readonly elderTileRef = viewChild<ElementRef>('elderTile')\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly interactionController: DataViewInteractionControllerDirective<T>,\n    @Optional() private readonly activationModel: ActivationModel\n  ) {\n    this.selectionModel = this.interactionController.selectionModel\n    this.selection = toSignal(\n      toObservable(this.selectionModel).pipe(switchMap((model) => model.selection))\n    )\n\n    if (activationModel) {\n      this.focusable = true\n      this.activationModel.itemActivationEvents.subscribe({\n        next: (event) => this.handleActivationEvent(event),\n      })\n\n      effect(() => {\n        this.updateTileActivation(this.value())\n      })\n    }\n  }\n\n  private handleActivationEvent(event: ItemActivationEvent<T>): void {\n    const value = untracked(this.value)\n    const activated = this.updateTileActivation(value)\n    if (activated) {\n      if (!this.hasFocus) {\n        this.bringToView()\n      }\n      if (event.focus) {\n        this.focus()\n      }\n    } else if (event.focus) {\n      if (this.isItemActive(value)) {\n        this.focus()\n      }\n    }\n  }\n\n  private isItemActive(value: T): boolean {\n    if (this.activationModel) {\n      if (value) {\n        return this.activationModel.isItemActive(value)\n      }\n    }\n    return false\n  }\n\n  private updateTileActivation(value: T): boolean {\n    if (this.isItemActive(value)) {\n      if (!untracked(this._activated)) {\n        this._activated.set(true)\n        if (!this.hasFocus) {\n          this.bringToView()\n        }\n        return true\n      }\n    } else {\n      this._activated.set(false)\n    }\n    return false\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Listener                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('focus', ['$event'])\n  public onFocus(event: any): void {\n    this._focused.set(true)\n  }\n\n  @HostListener('blur', ['$event'])\n  public onBlur(event: any): void {\n    this._focused.set(false)\n  }\n\n  @HostListener('click', ['$event'])\n  public onClick() {\n    this.logger.debug('row clicked')\n    if (this.activationModel) {\n      this.activationModel.activate(\n        this.value(),\n        new ItemActivationOptions(ActivationEventSource.USER_MOUSE_CLICK, true)\n      )\n    }\n  }\n\n  public get activated(): Signal<boolean> {\n    return this._activated\n  }\n\n  public get hasFocus(): boolean {\n    return untracked(this._focused)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public inSelectionMode(currentSelection: any[]): boolean {\n    if (untracked(this.interactionMode) === 'selection') {\n      return true\n    }\n    if (currentSelection && currentSelection.length > 0) {\n      return true\n    }\n    return false\n  }\n\n  public bringToView(): void {\n    const element = this.elderTileRef().nativeElement\n    // scroll-snap-align: start;\n    element.scrollIntoView({\n      block: 'nearest', // vertical alignment\n      inline: 'nearest', // horizontal alignment\n    })\n  }\n\n  public focus(): void {\n    const element = this.elderTileRef().nativeElement\n    // Only focus this row if none of its children already have focus!\n    if (!element.contains(document.activeElement)) {\n      element.focus({\n        preventScroll: false,\n      })\n    } else {\n      this.logger.warn('Skipped focusing tile since focus is already inside it!')\n    }\n  }\n\n  public onSelectButtonClick(event: MouseEvent): void {\n    this.interactionController.onItemSelectionToggle(this.value())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","<div\n  #elderTile\n  class=\"elder-tile full\"\n  [class.outlined]=\"outlined()\"\n  [class.activated]=\"activated()\"\n  [tabindex]=\"focusable ? -1 : undefined\"\n>\n  <div class=\"elder-tile-content\">\n    <ng-content></ng-content>\n    <!-- Overlay (Selection) -->\n\n    <div class=\"elder-tile-overlay elder-click-through\"></div>\n\n    @if (selectionEnabled()) {\n      @if (selection(); as selection) {\n        <div\n          class=\"elder-selection-overlay elder-click-through\"\n          [class.elder-selection-overlay-hidden]=\"!inSelectionMode(selection)\"\n          [class.elder-selection-overlay-visible]=\"inSelectionMode(selection)\"\n        >\n          <button\n            mat-icon-button\n            type=\"button\"\n            (click)=\"onSelectButtonClick($event)\"\n            elderStopEventPropagation\n            class=\"elder-tile-check\"\n          >\n            @let isSelected = selectionModel().isSelected(value());\n            <mat-icon [class.elder-selected]=\"isSelected\">\n              {{ isSelected ? 'check_circle' : 'radio_button_unchecked' }}\n            </mat-icon>\n          </button>\n        </div>\n      }\n    }\n  </div>\n</div>\n","export class GridRow<T> {\n  public constructor(\n    public readonly id: string,\n    public cells: T[]\n  ) {}\n}\n","import { GridRow } from './grid-row'\nimport { ElderDataViewBaseComponent } from '../../../base/elder-data-view-base'\n\nexport class GridRowLayoutBuilder<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  public constructor(private readonly dataView: ElderDataViewBaseComponent<T>) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public buildGridRows(items: T[], columnCount: number): GridRow<T>[] {\n    const rows: GridRow<T>[] = []\n\n    const rowCount = items.length / columnCount\n\n    for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n      const rowStartIndex = rowIndex * columnCount\n      const rowCells = items.slice(rowStartIndex, rowStartIndex + columnCount)\n\n      while (rowCells.length < columnCount) {\n        rowCells.push(null) // Fill up remaining\n      }\n      rows.push(new GridRow<T>(this.rowId(rowCells), rowCells))\n    }\n\n    return rows\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private rowId(cells: T[]): string {\n    if (cells.length === 0) {\n      return 'empty-row'\n    } else if (cells.length === 1) {\n      return this.getId(cells[0])\n    } else {\n      return cells\n        .map((cell) => {\n          if (cell) {\n            return this.getId(cell)\n          } else {\n            return '_'\n          }\n        })\n        .join('-')\n    }\n  }\n\n  private getId(item: T): string {\n    return this.dataView.getId(item)\n  }\n}\n","import { DestroyRef, Directive, effect, ElementRef, input, Output, Signal } from '@angular/core'\nimport { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { filter } from 'rxjs/operators'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { booleanTransformFn } from '../../../../common/utils/signal-input'\n\nexport interface ObservedElementDimension {\n  width: number\n  height: number\n}\n\n@Directive({\n  selector: '[elderResizeObserver]',\n})\nexport class ResizeObserverDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly resizeObserver: ResizeObserver\n  private readonly _currentDimension$ = new BehaviorSubject<ObservedElementDimension>(undefined)\n  private readonly _currentDimensionChange = new Subject<ObservedElementDimension>()\n  private observing = false\n\n  public readonly enabled = input(true, { transform: booleanTransformFn })\n\n  @Output()\n  public readonly dimensionChange: Observable<ObservedElementDimension> =\n    this._currentDimensionChange.asObservable()\n\n  @Output('elderResizeObserver')\n  public readonly currentDimension$: Observable<ObservedElementDimension> =\n    this._currentDimension$.pipe(filter((e) => !!e))\n\n  public readonly currentDimension: Signal<ObservedElementDimension>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly host: ElementRef,\n    private readonly destroyRef: DestroyRef\n  ) {\n    this.resizeObserver = new ResizeObserver((entries) => {\n      this.onElementResize(entries[0])\n    })\n    destroyRef.onDestroy(() => {\n      this.unobserve()\n    })\n\n    this.currentDimension = toSignal(this._currentDimension$)\n\n    effect(() => {\n      if (this.enabled()) {\n        this.observe()\n      } else {\n        this.unobserve()\n      }\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private observe(): void {\n    if (!this.observing) {\n      this.resizeObserver.observe(this.host.nativeElement, {\n        box: 'content-box',\n      })\n      this.observing = true\n    }\n  }\n\n  private unobserve(): void {\n    if (this.observing) {\n      this.resizeObserver.unobserve(this.host.nativeElement)\n    }\n  }\n\n  private onElementResize(entry: ResizeObserverEntry): void {\n    const dimensions = this.toElementDimension(entry)\n    this._currentDimension$.next(dimensions)\n    this._currentDimensionChange.next(dimensions)\n  }\n\n  private toElementDimension(entry: ResizeObserverEntry): ObservedElementDimension {\n    return {\n      width: entry.contentRect.width,\n      height: entry.contentRect.height,\n    }\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  Directive,\n  forwardRef,\n  input,\n  Input,\n  OnInit,\n  Optional,\n  Signal,\n  SkipSelf,\n  TemplateRef,\n  TrackByFunction,\n  untracked,\n  ViewChild,\n  viewChildren,\n  ViewContainerRef,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, combineLatest, Observable, of } from 'rxjs'\nimport {\n  IDataContext,\n  IDataContextContinuable,\n} from '../../../../common/data/data-context/data-context'\nimport {\n  CdkVirtualScrollViewport,\n  CdkFixedSizeVirtualScroll,\n  CdkVirtualForOf,\n} from '@angular/cdk/scrolling'\nimport { SelectionModel } from '../../../../common/selection/selection-model'\nimport {\n  combineLatestWith,\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  map,\n  share,\n  switchMap,\n  tap,\n} from 'rxjs/operators'\nimport { ELDER_DATA_VIEW } from '../../base/elder-data-view'\nimport { ElderDataViewBaseComponent } from '../../base/elder-data-view-base'\nimport { MatPaginator } from '@angular/material/paginator'\nimport { MatTableDataContextBindingBuilder } from '../../../../common/data/data-context/mat-table-data-context-binding'\nimport { ElderDataViewOptionsProvider } from '../../base/elder-data-view-options-provider'\nimport { MatProgressBar } from '@angular/material/progress-bar'\nimport { ElderInfiniteScrollDirective } from '../../../infinitescroll/elder-infinite-scroll.directive'\nimport { DataContextStateIndicatorComponent } from '../../common/data-context-state-indicator/data-context-state-indicator.component'\nimport { MatDivider } from '@angular/material/divider'\nimport { ElderSelectionMasterCheckboxComponent } from '../../common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component'\nimport { DataContextSelectionDirective } from '../../common/selection/data-context-selection.directive'\nimport { NgClass, NgTemplateOutlet } from '@angular/common'\nimport { ElderCompositeSortComponent } from '../../common/composite-sort/elder-composite-sort/elder-composite-sort.component'\nimport { CompositeSort } from '../../common/composite-sort/composite-sort'\nimport { ElderCompositeSortDcDirective } from '../../common/composite-sort/composite-sort-dc.directive'\nimport { UuidUtil } from '../../../../common/utils/uuid-util'\nimport { ElderTileComponent } from '../elder-tile/elder-tile.component'\nimport { booleanTransformFn } from '../../../../common/utils/signal-input'\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop'\nimport { ElderContinuatorComponent } from '../../common/elder-continuator/elder-continuator.component'\nimport { GridRow } from './layout/grid-row'\nimport { GridRowLayoutBuilder } from './layout/grid-row-layout-builder'\nimport {\n  ObservedElementDimension,\n  ResizeObserverDirective,\n} from '../../../layout/responsive/observer/resize-observer.directive'\nimport { DataViewInteractionControllerDirective } from '../../base/data-view-interaction-controller.directive'\n\n@Directive({\n  selector: '[elderGridTile]',\n  standalone: true,\n})\nexport class ElderGridTileDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n\n/**\n * This directive projects marked content into a toolbar.\n */\n@Directive({\n  selector: '[elderGridToolbar]',\n  standalone: true,\n})\nexport class ElderGridToolbarDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n\n@Component({\n  selector: 'elder-grid',\n  templateUrl: './elder-grid.component.html',\n  styleUrls: ['./elder-grid.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: ELDER_DATA_VIEW,\n      useExisting: forwardRef(() => ElderGridComponent),\n    },\n  ],\n  hostDirectives: [DataViewInteractionControllerDirective],\n  imports: [\n    DataContextSelectionDirective,\n    ElderSelectionMasterCheckboxComponent,\n    NgTemplateOutlet,\n    MatDivider,\n    DataContextStateIndicatorComponent,\n    CdkVirtualScrollViewport,\n    CdkFixedSizeVirtualScroll,\n    ElderInfiniteScrollDirective,\n    CdkVirtualForOf,\n    MatProgressBar,\n    MatPaginator,\n    ElderCompositeSortComponent,\n    ElderCompositeSortDcDirective,\n    ElderTileComponent,\n    ElderContinuatorComponent,\n    ResizeObserverDirective,\n  ],\n})\nexport class ElderGridComponent<T = any>\n  extends ElderDataViewBaseComponent<T>\n  implements OnInit, AfterViewInit\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private _staticColumnCount$ = new BehaviorSubject<number>(4)\n\n  /**\n   * Load next chunk after current is done\n   */\n  private loadNextQueued = false\n\n  public readonly scrollContainerId = 'documents-container-' + UuidUtil.weakUuid4()\n\n  public readonly TrackGridRowByIdFn: TrackByFunction<GridRow<T>> = (index, row) => row.id\n  public dataRows$: Observable<GridRow<T>[]>\n\n  @ContentChild(ElderGridTileDirective, { read: TemplateRef, static: true })\n  public tileTemplateQuery: TemplateRef<any>\n  private _tileTemplate: TemplateRef<any>\n\n  public readonly toolbarVisible = input(true, { transform: booleanTransformFn })\n  public readonly footerVisible = input(true, { transform: booleanTransformFn })\n\n  protected readonly containerDimensions$ = new BehaviorSubject<ObservedElementDimension>(null)\n  public readonly itemHeight = input<number>(250)\n  public readonly itemWidth = input<number>(300)\n  private readonly itemWidth$ = toObservable(this.itemWidth)\n\n  public readonly tileOutlined = input(false, { transform: booleanTransformFn })\n\n  public readonly responsiveColumnCount = input(true, { transform: booleanTransformFn })\n\n  @ViewChild('virtualScrollViewPort', { static: true })\n  public virtualScrollViewPort: CdkVirtualScrollViewport\n\n  public readonly tiles = viewChildren<ElderTileComponent>(ElderTileComponent)\n\n  public availableCompositeSorts: CompositeSort[] = []\n\n  @Input()\n  public set availableSorts(availableSorts: string[] | CompositeSort[]) {\n    this.availableCompositeSorts = CompositeSort.coerce(availableSorts)\n  }\n\n  @Input()\n  public sortTranslationPrefix = 'documents.sorts.'\n\n  @Input()\n  public hiddenField: string = null\n\n  @Input()\n  public selectionVisible = true\n\n  public readonly pageSizeOptions = input<number[]>([30, 50, 100, 150, 250])\n  @ViewChild(MatPaginator)\n  public matPaginator: MatPaginator\n  @ViewChild(ElderContinuatorComponent)\n  public elderContinuator: ElderContinuatorComponent\n\n  @ContentChild(ElderGridToolbarDirective, { read: TemplateRef, static: true })\n  public toolbarTemplateQuery: TemplateRef<any>\n  private _toolbarTemplate: TemplateRef<any>\n\n  public readonly activeColumnCount$: Observable<number>\n  public readonly activeColumnCount: Signal<number>\n\n  private readonly rowLayoutBuilder: GridRowLayoutBuilder<T>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Optional() selectionModel: SelectionModel<any>,\n    @Optional() @SkipSelf() dataViewOptionsProvider: ElderDataViewOptionsProvider,\n    interactionController: DataViewInteractionControllerDirective<T>\n  ) {\n    super(selectionModel, dataViewOptionsProvider, interactionController)\n\n    this.rowLayoutBuilder = new GridRowLayoutBuilder<T>(this)\n\n    const responsiveColumn$ = this.responsiveColumn().pipe(share())\n\n    this.activeColumnCount$ = toObservable(this.responsiveColumnCount).pipe(\n      switchMap((responsive) => {\n        if (responsive) {\n          return responsiveColumn$\n        } else {\n          return this._staticColumnCount$\n        }\n      })\n    )\n    this.activeColumnCount = toSignal(this.activeColumnCount$)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Lifecycle                                                               *\n   *                                                                         *\n   **************************************************************************/\n\n  public override ngOnInit(): void {\n    super.ngOnInit()\n\n    this.dataRows$ = combineLatest([\n      this.dataContext$.pipe(\n        filter((dc) => !!dc),\n        switchMap((dc) => dc.data)\n      ),\n      this.activeColumnCount$.pipe(distinctUntilChanged()),\n    ]).pipe(\n      // debounceTime(50),\n      map(([data, activeColumnCount]) =>\n        this.rowLayoutBuilder.buildGridRows(data, activeColumnCount)\n      )\n    )\n  }\n\n  public ngAfterViewInit(): void {\n    MatTableDataContextBindingBuilder.start(this.dataContext$)\n      .withPaginator(of(this.matPaginator))\n      .withContinuator(of(this.elderContinuator))\n      .bindUntil(this.destroy$)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set tileTemplate(template: TemplateRef<any>) {\n    this._tileTemplate = template\n  }\n\n  public get tileTemplate(): TemplateRef<any> {\n    return this._tileTemplate || this.tileTemplateQuery\n  }\n\n  @Input()\n  public set toolbarTemplate(template: TemplateRef<any>) {\n    this._toolbarTemplate = template\n  }\n\n  public get toolbarTemplate(): TemplateRef<any> {\n    return this._toolbarTemplate || this.toolbarTemplateQuery\n  }\n\n  @Input()\n  public set data(data: IDataContext<any>) {\n    this.dataContext = data\n  }\n\n  public get dataSnapshot(): IDataContextContinuable<any> {\n    return this.dataContinuable\n  }\n\n  @Input()\n  public set columnCount(count: number) {\n    this._staticColumnCount$.next(count)\n  }\n\n  public get columnCount(): number {\n    return this._staticColumnCount$.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public requestMoreDataZoned(event: unknown): void {\n    if (this.dataSnapshot.hasMoreDataSnapshot) {\n      if (this.dataSnapshot.snapshot.isLoading) {\n        this.loadNextQueued = true\n      } else {\n        this.dataSnapshot.loadMore().subscribe((loaded) => {\n          if (this.loadNextQueued) {\n            this.loadNextQueued = false\n            this.requestMoreDataZoned(event)\n          }\n        })\n      }\n    } else {\n      this.loadNextQueued = false\n    }\n  }\n\n  public isTileVisible(tile: any): boolean {\n    return tile && (this.hiddenField ? !tile[this.hiddenField] : true)\n  }\n\n  public hasItemFocus(item: T): boolean {\n    const tile = this.getTileForItem(item)\n    return tile?.hasFocus\n  }\n\n  protected trackCellId(index: number, item: T): string {\n    return item ? this.getId(item) : 'null-' + index\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private scrollTop() {\n    this.virtualScrollViewPort.scrollToIndex(0, 'smooth')\n  }\n\n  private responsiveColumn(): Observable<number> {\n    return this.containerDimensions$.pipe(\n      filter((d) => !!d),\n      combineLatestWith(this.itemWidth$.pipe(debounceTime(10))),\n      map(([dimensions, itemWidth]) => this.calcColumnCount(dimensions, itemWidth))\n    )\n  }\n\n  private calcColumnCount(\n    containerDimensions: ObservedElementDimension,\n    itemWidth: number\n  ): number {\n    return Math.max(Math.floor(containerDimensions.width / itemWidth), 1)\n  }\n\n  private getTileForItem(item: T): ElderTileComponent<T> | null {\n    const tiles = untracked(this.tiles)\n    return tiles.find((tile) => this.getId(untracked(tile.value)) === this.getId(item))\n  }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<div class=\"full elder-grid-component\">\n  @if (dc(); as dc) {\n    <!-- Grid Browser -->\n    <div\n      class=\"layout-col full elder-grid-container\"\n      [elderDataContextSelection]=\"dc\"\n      #dataSelection=\"elderDataContextSelection\"\n      [elderDataContextSelectionModel]=\"selectionModel\"\n    >\n      <!-- Toolbar Row -->\n      @if (toolbarVisible()) {\n        <div class=\"layout-row place-start-center flex-none elder-grid-toolbar\">\n          @if (selectionVisible) {\n            <div class=\"layout-col flex-none px-sm\">\n              <elder-selection-master-checkbox class=\"flex-none\"></elder-selection-master-checkbox>\n            </div>\n          }\n\n          <!-- Toolbar -->\n          @if (toolbarTemplate) {\n            <ng-template\n              *ngTemplateOutlet=\"toolbarTemplate; context: { $implicit: this }\"\n            ></ng-template>\n          }\n\n          @if (availableCompositeSorts && availableCompositeSorts.length > 0) {\n            <elder-composite-sort\n              class=\"flex-none\"\n              [availableSorts]=\"availableCompositeSorts\"\n              [translationPrefix]=\"sortTranslationPrefix\"\n              [elderCompositeSortDc]=\"dc\"\n            >\n            </elder-composite-sort>\n          }\n        </div>\n\n        <mat-divider></mat-divider>\n      }\n\n      <elder-data-context-state-indicator class=\"flex-none\" [dataContext]=\"dc\">\n      </elder-data-context-state-indicator>\n\n      <!-- [cdkDropListSortingDisabled]=\"true\" -->\n      <!-- cdkDropList -->\n      <cdk-virtual-scroll-viewport\n        class=\"layout-col flex elder-grid-browser\"\n        id=\"{{ scrollContainerId }}\"\n        [itemSize]=\"itemHeight()\"\n        [minBufferPx]=\"itemHeight() * 2\"\n        [maxBufferPx]=\"itemHeight() * 3\"\n        #virtualScrollViewPort\n        elderInfiniteScroll\n        [eventThrottle]=\"200\"\n        [offsetFactor]=\"2\"\n        [ignoreScrollEvent]=\"dcStatus()?.loading\"\n        [containerId]=\"scrollContainerId\"\n        [listenToHost]=\"false\"\n        (closeToEnd)=\"requestMoreDataZoned($event)\"\n        (elderResizeObserver)=\"containerDimensions$.next($event)\"\n      >\n        <!-- (scrolling)=\"onScrolling($event)\" -->\n\n        <div\n          *cdkVirtualFor=\"\n            let gridRow of dataRows$;\n            trackBy: TrackGridRowByIdFn;\n            templateCacheSize: 50\n          \"\n          class=\"elder-grid-tile-row\"\n          [style.height]=\"itemHeight() + 'px'\"\n          [style.--elder-grid-column-count]=\"activeColumnCount()\"\n        >\n          @for (tile of gridRow.cells; track trackCellId($index, tile)) {\n            <!-- Tile Cell -->\n            @if (isTileVisible(tile)) {\n              <elder-tile\n                class=\"elder-grid-tile\"\n                [value]=\"tile\"\n                [selectionEnabled]=\"selectionVisible\"\n                [outlined]=\"tileOutlined()\"\n                (click)=\"onItemClick(tile, $event)\"\n                (dblclick)=\"onItemDoubleClick(tile)\"\n              >\n                <ng-container\n                  *ngTemplateOutlet=\"\n                    tileTemplate || simpleTileTemplate;\n                    context: { $implicit: tile }\n                  \"\n                ></ng-container>\n              </elder-tile>\n            } @else {\n              <div class=\"elder-grid-tile-hidden\"></div>\n            }\n          }\n        </div>\n      </cdk-virtual-scroll-viewport>\n\n      <mat-progress-bar\n        class=\"flex-none\"\n        [mode]=\"dcStatus()?.loading ? 'indeterminate' : 'determinate'\"\n        [color]=\"dcStatus()?.hasError ? 'warn' : 'primary'\"\n      >\n      </mat-progress-bar>\n\n      <!-- Footer -->\n      @if (footerVisible()) {\n        <div class=\"layout-row place-end-center gap-md flex-none elder-grid-footer\">\n          <!-- Continuable -->\n          @if (isContinuable) {\n            <elder-continuator\n              [loadedCount]=\"viewData()?.length\"\n              [total]=\"total()\"\n              [canLoadMore]=\"canLoadMore()\"\n              [chunkSizeOptions]=\"pageSizeOptions()\"\n              [chunkSize]=\"currentChunkSize()\"\n              (loadMoreRequested)=\"dataSnapshot.loadMore()\"\n            ></elder-continuator>\n          } @else if (isActivePaged) {\n            @if (currentPage(); as page) {\n              <mat-paginator\n                class=\"flex-none\"\n                [length]=\"total()\"\n                [pageIndex]=\"page?.index\"\n                [pageSize]=\"page?.size\"\n                [pageSizeOptions]=\"pageSizeOptions()\"\n              >\n              </mat-paginator>\n            }\n          } @else {\n            <span class=\"mat-caption noselect pr-md\" style=\"color: var(--md-sys-color-outline)\">\n              {{ viewData()?.length }}\n            </span>\n          }\n        </div>\n      }\n    </div>\n  }\n</div>\n\n<ng-template #simpleTileTemplate let-tile>\n  @if (tile) {\n    <div class=\"layout-col place-center-center flex\" style=\"background-color: lightblue\">\n      <p class=\"noselect\">Tile: {{ tile }}</p>\n    </div>\n  }\n</ng-template>\n","import { Directive, Input, Output } from '@angular/core'\nimport { DataViewActivationController } from '../../common/activation/data-view-activation-controller.service'\nimport { ElderActivationOptions } from '../../common/activation/elder-activation-options'\nimport { InputUtils, NoInputArgs } from '../../../../common/utils/input-utils'\nimport { ElderDataActivationDirective } from '../../common/activation/elder-data-activation.directive'\nimport { Observable } from 'rxjs'\nimport { ItemActivationEvent } from '../../common/activation/model/item-activation-event'\nimport { ItemActivationOptions } from '../../common/activation/model/item-activation-options'\nimport { ActivationEventSource } from '../../common/activation/model/activation-event-source'\n\n@Directive({\n  selector: 'elder-grid[elderGridActivation]',\n  exportAs: 'elderGridActivation',\n  standalone: true,\n  hostDirectives: [ElderDataActivationDirective],\n})\nexport class ElderGridActivationDirective<T = any> {\n  constructor(private readonly activation: ElderDataActivationDirective) {}\n\n  @Input('elderGridActivation')\n  public set activationOptions(options: ElderActivationOptions | NoInputArgs) {\n    this.activation.activationOptions = options\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get activeItemEventChange(): Observable<ItemActivationEvent<T>> {\n    return this.activation.activeItemEventChange\n  }\n\n  @Output()\n  public get activeItemChange(): Observable<T> {\n    return this.activation.activeItemChange\n  }\n\n  public get activeItem(): T {\n    return this.activation.activeItem\n  }\n\n  @Input()\n  public set activeItem(item: T) {\n    this.activate(item, new ItemActivationOptions(ActivationEventSource.SYSTEM, true))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public activate(item: T, options: ItemActivationOptions): void {\n    this.activation.activate(item, options)\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport {\n  ElderGridComponent,\n  ElderGridTileDirective,\n  ElderGridToolbarDirective,\n} from './elder-grid/elder-grid.component'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatCommonModule } from '@angular/material/core'\nimport { MatDividerModule } from '@angular/material/divider'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatMenuModule } from '@angular/material/menu'\nimport { MatProgressBarModule } from '@angular/material/progress-bar'\nimport { MatSelectModule } from '@angular/material/select'\nimport { A11yModule } from '@angular/cdk/a11y'\nimport { DragDropModule } from '@angular/cdk/drag-drop'\nimport { ScrollingModule } from '@angular/cdk/scrolling'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderInfiniteScrollModule } from '../../infinitescroll/elder-infinite-scroll.module'\nimport { ElderFormsDirectivesModule } from '../../forms/directives/elder-forms-directives.module'\nimport { ElderDataCommonModule } from '../common/elder-data-common.module'\nimport { MatPaginatorModule } from '@angular/material/paginator'\nimport { MatCardModule } from '@angular/material/card'\nimport { ElderTileComponent } from './elder-tile/elder-tile.component'\nimport { ElderGridActivationDirective } from './activation/elder-grid-activation.directive'\n\nexport {\n  ElderGridTileDirective,\n  ElderGridToolbarDirective,\n  ElderGridComponent,\n} from './elder-grid/elder-grid.component'\n\nexport { ElderTileComponent } from './elder-tile/elder-tile.component'\n\nexport { ElderGridActivationDirective } from './activation/elder-grid-activation.directive'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatProgressBarModule,\n    MatMenuModule,\n    A11yModule,\n    MatDividerModule,\n    MatIconModule,\n    MatButtonModule,\n    MatSelectModule,\n    DragDropModule,\n    ScrollingModule,\n    TranslateModule,\n    ElderDataCommonModule,\n    ElderInfiniteScrollModule,\n    ElderFormsDirectivesModule,\n    MatPaginatorModule,\n    MatCardModule,\n    ElderTileComponent,\n    ElderGridComponent,\n    ElderGridTileDirective,\n    ElderGridToolbarDirective,\n    ElderGridActivationDirective,\n  ],\n  exports: [\n    ElderTileComponent,\n    ElderGridComponent,\n    ElderGridTileDirective,\n    ElderGridToolbarDirective,\n    ElderGridActivationDirective,\n  ],\n})\nexport class ElderGridModule {}\n","import { ActivationEventSource } from '../common/activation/model/activation-event-source'\n\nexport class MasterDetailActivationEvent<T> {\n  public readonly deactivate: boolean = false\n  constructor(\n    public readonly item: T,\n    public readonly creating: boolean,\n    public readonly source: ActivationEventSource\n  ) {\n    if (item === null || item === undefined) {\n      this.deactivate = true\n    }\n  }\n}\n","import { Injectable, OnDestroy } from '@angular/core'\nimport { BehaviorSubject, merge, Observable, Subject } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { filter, takeUntil } from 'rxjs/operators'\nimport { ElderMasterDetailMode } from './elder-master-detail-mode'\nimport { MasterDetailActivationEvent } from './master-detail-activation-event'\nimport { ActivationEventSource } from '../common/activation/model/activation-event-source'\n\nexport interface IMasterDetailActivationOptions {\n  source: ActivationEventSource\n  creating?: boolean\n}\n\n@Injectable()\nexport class ElderMasterDetailService<T> implements OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  protected readonly destroy$ = new Subject<void>()\n\n  public readonly mode$ = new BehaviorSubject<ElderMasterDetailMode>('DIALOG')\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n  private readonly _itemActivationRequest$ = new Subject<T>()\n\n  private readonly _activeItem$ = new BehaviorSubject<MasterDetailActivationEvent<T>>(null)\n  private readonly _creatingItem$ = new BehaviorSubject<MasterDetailActivationEvent<T>>(null)\n\n  private readonly _currentItem$ = new BehaviorSubject<T>(null)\n  private readonly _currentItemChange = new Subject<MasterDetailActivationEvent<T>>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    merge(this._creatingItem$, this._activeItem$)\n      .pipe(\n        filter((event) => event !== null),\n        takeUntil(this.destroy$)\n      )\n      .subscribe({\n        next: (creatingOrActive) => {\n          this._currentItem$.next(creatingOrActive.item)\n          this._currentItemChange.next(creatingOrActive)\n        },\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * The currently active or creating item.\n   */\n  public get currentItem$(): Observable<T> {\n    return this._currentItem$.asObservable()\n  }\n\n  public get currentItemSnapshot(): T {\n    return this._currentItem$.getValue()\n  }\n\n  public get currentItemChange(): Observable<MasterDetailActivationEvent<T>> {\n    return this._currentItemChange.asObservable()\n  }\n\n  public get itemActivationRequested(): Observable<T> {\n    return this._itemActivationRequest$.asObservable()\n  }\n\n  public onItemActivated(item: T, options: IMasterDetailActivationOptions) {\n    this._activeItem$.next(this.asEvent(item, options))\n  }\n\n  public requestItemActivation(item: T): void {\n    this._itemActivationRequest$.next(item)\n  }\n\n  public activateCreatingItem(item: T) {\n    this._creatingItem$.next(this.asEvent(item, { source: ActivationEventSource.USER_MOUSE_CLICK }))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private asEvent(\n    item: T,\n    options: IMasterDetailActivationOptions\n  ): MasterDetailActivationEvent<T> {\n    return new MasterDetailActivationEvent<T>(item, options.creating, options.source)\n  }\n}\n","import { Directive, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core'\nimport { ElderMasterDetailService } from './elder-master-detail.service'\nimport { BehaviorSubject, Subject } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { takeUntil } from 'rxjs/operators'\n\n@Directive({\n  selector: '[elderDataDetail]',\n  standalone: true,\n})\nexport class ElderDetailDirective<T> implements OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly activeDetailItem$ = new BehaviorSubject<T>(null)\n  private readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private masterDetailService: ElderMasterDetailService<T>,\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {\n    this.masterDetailService.currentItem$.pipe(takeUntil(this.destroy$)).subscribe({\n      next: (item) => {\n        this.activeDetailItem$.next(item)\n      },\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n}\n","import { Directive, TemplateRef, ViewContainerRef } from '@angular/core'\n\n@Directive({\n  selector: '[elderDataMaster]',\n  standalone: true,\n})\nexport class ElderMasterDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n","import { LoggerFactory } from '@elderbyte/ts-logger'\nimport { TemplateRef } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\n\n/**\n * Manages templates for different slots.\n * Supports global fallback templates for slots (default templates)\n */\nexport class TemplateSlotManager<TSlot> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /** Default templates (App Level) */\n  private readonly _defaultSlotTemplates = new Map<TSlot, TemplateRef<any>>()\n\n  /** Custom templates (Component Level) */\n  private readonly _slotTemplates = new Map<TSlot, TemplateRef<any>>()\n\n  private readonly _activeSlotTemplates = new Map<TSlot, BehaviorSubject<TemplateRef<any>>>()\n\n  /**\n   * Key: A synonym slot name\n   * Value: The primary slot the synonym is resolving to\n   */\n  private readonly _slotSynonyms = new Map<TSlot, TSlot>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructors                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Create a new Template Slot Manager.\n   * @param slotDefinitions Slot definitions, supporting synonyms\n   */\n  constructor(slotDefinitions: Array<TSlot | TSlot[]>) {\n    for (const slotDefinition of slotDefinitions) {\n      this.initSlot(slotDefinition)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Returns an observable which emits the current active template for the given slot\n   * over time.\n   */\n  public activeSlotTemplate(slot: TSlot): Observable<TemplateRef<any>> {\n    slot = this.resolveSlot(slot)\n    const activeColumn = this._activeSlotTemplates.get(slot)\n    if (activeColumn) {\n      return activeColumn.asObservable()\n    } else {\n      throw new Error('Could not find slot-template for slot ' + slot)\n    }\n  }\n\n  /**\n   * Registers the given template for the given slot.\n   *\n   * @param slot at which template should be placed\n   * @param template to set at slot\n   * @param isDefault if the given template should be used as global default\n   */\n  public registerSlotTemplate(slot: TSlot, template: TemplateRef<any>, isDefault = false): void {\n    slot = this.resolveSlot(slot)\n    if (isDefault) {\n      this._defaultSlotTemplates.set(slot, template)\n    } else {\n      this._slotTemplates.set(slot, template)\n    }\n    this.updateActiveSlotTemplate(slot)\n  }\n\n  /**\n   * Deregister the given template from the toolbar.\n   *\n   * @param template to deregister\n   * @param slot if set, the template will only be deregistered if it was registered at this slot (optional)\n   */\n  public deregisterSlotTemplate(template: TemplateRef<any>, slot?: TSlot) {\n    if (slot) {\n      slot = this.resolveSlot(slot)\n      if (this._slotTemplates.get(slot) === template) {\n        this.removeSlotTemplate(slot)\n      }\n    } else {\n      this._slotTemplates.forEach((value: TemplateRef<any>, key: TSlot) => {\n        if (value === template) {\n          this.removeSlotTemplate(key)\n        }\n      })\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private initSlot(slotDefinition: TSlot | TSlot[]): void {\n    let slot: TSlot\n    if (slotDefinition instanceof Array) {\n      slot = slotDefinition.shift()\n      this.registerSlotSynonyms(slot, slotDefinition)\n    } else {\n      slot = slotDefinition\n    }\n    this._activeSlotTemplates.set(slot, new BehaviorSubject<TemplateRef<any>>(null))\n  }\n\n  private registerSlotSynonyms(primarySlot: TSlot, synonyms: TSlot[]): void {\n    synonyms.forEach((synonym) => this._slotSynonyms.set(synonym, primarySlot))\n  }\n\n  private resolveSlot(slot: TSlot): TSlot {\n    return this._slotSynonyms.get(slot) ?? slot\n  }\n\n  private removeSlotTemplate(slot: TSlot): void {\n    this.logger.debug('Deregistering template slot at ', slot)\n    this._slotTemplates.delete(slot)\n    this.updateActiveSlotTemplate(slot)\n  }\n\n  private updateActiveSlotTemplate(slot: TSlot): void {\n    const active = this.findActiveTemplate(slot)\n    const activeSlotTemplate = this._activeSlotTemplates.get(slot)\n    if (activeSlotTemplate && activeSlotTemplate.getValue() !== active) {\n      activeSlotTemplate.next(active)\n    }\n  }\n\n  private findActiveTemplate(slot: TSlot): TemplateRef<any> {\n    return this._slotTemplates.has(slot)\n      ? this._slotTemplates.get(slot)\n      : this._defaultSlotTemplates.get(slot)\n  }\n}\n","import { Injectable, TemplateRef } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ToolbarColumnPosition } from './toolbar-column-position'\nimport { Observable } from 'rxjs'\nimport { TemplateSlotManager } from '../../../common/templates/template-slot-manager'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderToolbarService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly slotManager: TemplateSlotManager<ToolbarColumnPosition>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructors                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this.slotManager = new TemplateSlotManager([\n      'left',\n      'left.begin',\n      ['left.end', 'left.actions'],\n      'center',\n      'right',\n      ['right.begin', 'right.actions'],\n      'right.end',\n    ])\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Returns an observable which emits the current active template for the given position\n   * over time.\n   */\n  public activeColumnTemplate(position: ToolbarColumnPosition): Observable<TemplateRef<any>> {\n    return this.slotManager.activeSlotTemplate(position)\n  }\n\n  /**\n   * Registers the given template as toolbar column at the given position.\n   *\n   * @param position at which template should be placed\n   * @param template to set at position\n   * @param isDefault if the given template should be used as app default\n   */\n  public registerColumn(\n    position: ToolbarColumnPosition,\n    template: TemplateRef<any>,\n    isDefault = false\n  ): void {\n    this.slotManager.registerSlotTemplate(position, template, isDefault)\n  }\n\n  /**\n   * Deregister the given template from the toolbar.\n   *\n   * @param template to deregister\n   * @param position if set, the template will only be deregistered if it was registered at this position (optional)\n   */\n  public deregisterColumn(template: TemplateRef<any>, position?: ToolbarColumnPosition) {\n    this.slotManager.deregisterSlotTemplate(template, position)\n  }\n}\n","import { Directive, Input, OnDestroy, OnInit, TemplateRef } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderToolbarService } from './elder-toolbar.service'\nimport { ToolbarColumnPosition } from './toolbar-column-position'\n\n/**\n * This directive projects content identified by a placeholder id\n * into the elder-toolbar at the corresponding ToolbarColumnPosition.\n */\n@Directive({\n  selector: '[elderToolbarColumn]',\n  standalone: true,\n})\nexport class ElderToolbarColumnDirective implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /** Position at which column should be placed. */\n  @Input()\n  public elderToolbarColumn: ToolbarColumnPosition\n\n  /** If the column should be considered as default (fallback). */\n  @Input()\n  public elderToolbarDefault: boolean\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private toolbarService: ElderToolbarService,\n    public templateRef: TemplateRef<any>\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.logger.debug(\n      `Registering ${this.elderToolbarColumn} (default: ${this.elderToolbarDefault}}`\n    )\n    this.toolbarService.registerColumn(\n      this.elderToolbarColumn,\n      this.templateRef,\n      this.elderToolbarDefault\n    )\n  }\n\n  public ngOnDestroy(): void {\n    this.logger.debug(`Deregistering ${this.elderToolbarColumn}`)\n    this.toolbarService.deregisterColumn(this.templateRef, this.elderToolbarColumn)\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\nimport { WebLocalStorage } from '../../../common/webstorage/webstorage.service'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject } from 'rxjs'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderLanguageService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private LANGUAGE_STORAGE_KEY = 'language'\n\n  public readonly currentLanguage$: BehaviorSubject<string>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructors                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private translate: TranslateService,\n    private webStorage: WebLocalStorage\n  ) {\n    // this.translate.addLangs(['en', 'de']);\n    // this.translate.defaultLang = 'en';\n    this.currentLanguage$ = new BehaviorSubject<string>(this.translate.currentLang)\n    this.translate.onLangChange.subscribe((change) => this.currentLanguage$.next(change.lang))\n    this.applyPreferredLanguage()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Returns the key of the currently applied language.\n   *\n   * @returns language key\n   */\n  public get currentLanguage(): string {\n    return this.currentLanguage$.getValue()\n  }\n\n  /**\n   * Applies the given language which will immediately get apparent\n   * in the UI.\n   *\n   * @param lang language key\n   */\n  public set currentLanguage(lang: string) {\n    this.setLanguageAndRemember(lang)\n  }\n\n  /**\n   * Returns an array of all available language keys.\n   *\n   * @returns e.g. ['en', 'de', 'fr']\n   */\n  public get languages(): Array<string> {\n    return this.translate.getLangs()\n  }\n\n  /**\n   * Checks if the given language is currently active.\n   *\n   * @param lang language key\n   * @returns true if given language is currently active\n   */\n  public isLanguageActive(lang: string): boolean {\n    return this.currentLanguage === lang\n  }\n\n  /**\n   * Returns the key of the last applied language.\n   *\n   * @returns language key of last applied language\n   */\n  public get lastConfigured(): string | undefined {\n    return this.lookupPreferredLanguage()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public lookupPreferredLanguage(): string | undefined {\n    return this.webStorage.getItem(this.LANGUAGE_STORAGE_KEY)\n  }\n\n  public forgetPreferredLanguage(): void {\n    this.webStorage.removeItem(this.LANGUAGE_STORAGE_KEY)\n  }\n\n  public rememberPreferredLanguage(lang: string): void {\n    this.webStorage.setItem(this.LANGUAGE_STORAGE_KEY, lang)\n  }\n\n  public applyPreferredLanguage(): void {\n    const preferred = this.lookupPreferredLanguage()\n    if (preferred) {\n      this.setLanguage(preferred)\n    } else {\n      this.translate.use(this.translate.getBrowserLang())\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private setLanguageAndRemember(lang: string): void {\n    this.setLanguage(lang)\n    this.rememberPreferredLanguage(lang)\n  }\n\n  private setLanguage(lang: string): void {\n    this.translate.use(lang)\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core'\nimport { ElderLanguageService } from '../elder-language.service'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatOption } from '@angular/material/core'\nimport { FormsModule } from '@angular/forms'\nimport { MatSelect } from '@angular/material/select'\nimport { MatFormField } from '@angular/material/form-field'\nimport { MatButton } from '@angular/material/button'\nimport { MatIcon } from '@angular/material/icon'\n\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu'\n\n@Component({\n  selector: 'elder-language-switcher',\n  templateUrl: './elder-language-switcher.component.html',\n  styleUrls: ['./elder-language-switcher.component.scss'],\n  imports: [\n    MatMenu,\n    MatMenuItem,\n    MatIcon,\n    MatButton,\n    MatMenuTrigger,\n    MatFormField,\n    MatSelect,\n    FormsModule,\n    MatOption,\n    TranslateModule,\n  ],\n})\nexport class ElderLanguageSwitcherComponent implements OnInit {\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  @Input()\n  public slimMode: boolean\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructors                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(public language: ElderLanguageService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get currentLanguage(): string {\n    return this.language.currentLanguage\n  }\n\n  public set currentLanguage(lang: string) {\n    this.language.currentLanguage = lang\n  }\n\n  public get languages(): Array<string> {\n    return this.language.languages\n  }\n\n  public setLanguage(lang: string) {\n    this.currentLanguage = lang\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Lifecycle Hooks                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  ngOnInit() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public isLanguageActive(lang: string): boolean {\n    return this.language.isLanguageActive(lang)\n  }\n}\n","<mat-menu #languageMenu=\"matMenu\">\n  @for (lang of languages; track lang) {\n    <button mat-menu-item type=\"button\" (click)=\"currentLanguage = lang\">\n      <mat-icon>language</mat-icon>\n      <span class=\"text-body-large\" [class.active]=\"isLanguageActive(lang)\">{{\n        'language.' + lang | translate\n      }}</span>\n    </button>\n  }\n</mat-menu>\n\n@if (slimMode) {\n  <button mat-button type=\"button\" [matMenuTriggerFor]=\"languageMenu\">\n    <div class=\"layout-row place-start-center\">\n      <mat-icon>language</mat-icon>\n      <span class=\"language\">{{ currentLanguage }}</span>\n    </div>\n  </button>\n}\n\n@if (!slimMode) {\n  <mat-form-field>\n    <mat-select\n      placeholder=\"{{ 'language.language' | translate }}\"\n      name=\"language\"\n      [(ngModel)]=\"currentLanguage\"\n    >\n      @for (lang of languages; track lang) {\n        <mat-option [value]=\"lang\">{{ 'language.' + lang | translate }}</mat-option>\n      }\n    </mat-select>\n  </mat-form-field>\n}\n","import { Injectable } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router'\nimport { filter, map } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\nexport class ToolbarHeader {\n  constructor(public name: string) {}\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderToolbarTitleService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _title = new ToolbarHeader('')\n  private _titleChange: BehaviorSubject<ToolbarHeader>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private router: Router,\n    private activatedRoute: ActivatedRoute\n  ) {\n    this._titleChange = new BehaviorSubject<ToolbarHeader>(this._title)\n\n    router.events\n      .pipe(\n        filter((event) => event instanceof NavigationEnd),\n        map(() => this.activatedRoute)\n      )\n      .subscribe((active) => {\n        this.updateTitle(active)\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public set title(title: ToolbarHeader) {\n    this._title = title\n    this._titleChange.next(title)\n  }\n\n  public get title(): ToolbarHeader {\n    return this._title\n  }\n\n  public get titleChange(): Observable<ToolbarHeader> {\n    return this._titleChange\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public Api                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public updateTitle(activatedRoute: ActivatedRoute): void {\n    const title = this.resolveTitle(activatedRoute)\n\n    // this.logger.debug('Updating Title to: ' + title, activatedRoute);\n\n    this.title = new ToolbarHeader(title)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private resolveTitle(activatedRoute: ActivatedRoute): string {\n    let resolvedTitle = 'Loading ...'\n\n    while (activatedRoute) {\n      const point = activatedRoute.snapshot.data['title']\n      if (point) {\n        resolvedTitle = point\n      }\n      activatedRoute = activatedRoute.firstChild\n    }\n\n    return resolvedTitle\n  }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, OnInit } from '@angular/core'\nimport { ElderToolbarTitleService } from './elder-toolbar-title.service'\nimport { map } from 'rxjs/operators'\nimport { ActivatedRoute } from '@angular/router'\nimport { Observable } from 'rxjs'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-toolbar-title',\n  templateUrl: './elder-toolbar-title.component.html',\n  styleUrls: ['./elder-toolbar-title.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AsyncPipe, TranslateModule],\n})\nexport class ElderToolbarTitleComponent implements OnInit, AfterViewInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public title$: Observable<string>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private toolbarService: ElderToolbarTitleService,\n    private activatedRoute: ActivatedRoute\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Lifecycle                                                               *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.title$ = this.toolbarService.titleChange.pipe(map((tb) => tb.name))\n  }\n\n  public ngAfterViewInit(): void {\n    setTimeout(() => {\n      this.toolbarService.updateTitle(this.activatedRoute)\n    }, 10)\n  }\n}\n","<h3 class=\"mat-headline-6\">{{ title$ | async | translate }}</h3>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  input,\n  Input,\n  OnDestroy,\n  OnInit,\n  Signal,\n  TemplateRef,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderToolbarService } from '../elder-toolbar.service'\nimport { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { ToolbarColumnPosition } from '../toolbar-column-position'\nimport { ThemePalette } from '@angular/material/core'\nimport { ElderThemeService } from '../../../theme/elder-theme.service'\nimport { takeUntil } from 'rxjs/operators'\nimport { ElderLanguageSwitcherComponent } from '../../../i18n/language/language-switcher/elder-language-switcher.component'\nimport { ElderToolbarTitleComponent } from '../toolbar-title/elder-toolbar-title.component'\nimport { NgTemplateOutlet, AsyncPipe } from '@angular/common'\nimport { MatToolbar } from '@angular/material/toolbar'\nimport { toSignal } from '@angular/core/rxjs-interop'\n\n@Component({\n  selector: 'elder-toolbar',\n  templateUrl: './elder-toolbar.component.html',\n  styleUrls: ['./elder-toolbar.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatToolbar,\n    NgTemplateOutlet,\n    ElderToolbarTitleComponent,\n    ElderLanguageSwitcherComponent,\n  ],\n})\nexport class ElderToolbarComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly color = input<ThemePalette>('primary')\n\n  public readonly leftBegin: Signal<TemplateRef<any>>\n  public readonly left: Signal<TemplateRef<any>>\n  public readonly leftEnd: Signal<TemplateRef<any>>\n\n  public readonly center: Signal<TemplateRef<any>>\n\n  public readonly rightBegin: Signal<TemplateRef<any>>\n  public readonly right: Signal<TemplateRef<any>>\n  public readonly rightEnd: Signal<TemplateRef<any>>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private toolbarService: ElderToolbarService) {\n    this.leftBegin = toSignal(this.slotTemplate$('left.begin'))\n    this.left = toSignal(this.slotTemplate$('left'))\n    this.leftEnd = toSignal(this.slotTemplate$('left.end'))\n\n    this.center = toSignal(this.slotTemplate$('center'))\n\n    this.rightBegin = toSignal(this.slotTemplate$('right.begin'))\n    this.right = toSignal(this.slotTemplate$('right'))\n    this.rightEnd = toSignal(this.slotTemplate$('right.end'))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private slotTemplate$(slot: ToolbarColumnPosition): Observable<TemplateRef<any>> {\n    return this.toolbarService.activeColumnTemplate(slot)\n  }\n}\n","<div class=\"layout-row\">\n  <ng-content></ng-content>\n\n  <mat-toolbar class=\"layout-row place-start-center\" [color]=\"color()\">\n    <div class=\"layout-row place-start-center\">\n      <ng-container *ngTemplateOutlet=\"leftBegin()\"></ng-container>\n      <ng-container *ngTemplateOutlet=\"left() || defaultLeftColumnTemplate\"></ng-container>\n      <ng-container *ngTemplateOutlet=\"leftEnd() || defaultEmptyTemplate\"></ng-container>\n    </div>\n\n    <div class=\"layout-row place-center-center flex\">\n      <ng-container *ngTemplateOutlet=\"center() || defaultCenterColumnTemplate\"></ng-container>\n    </div>\n\n    <div class=\"layout-row place-end-center\">\n      <ng-container *ngTemplateOutlet=\"rightBegin() || defaultEmptyTemplate\"></ng-container>\n      <ng-container *ngTemplateOutlet=\"right() || defaultRightColumnTemplate\"></ng-container>\n      <ng-container *ngTemplateOutlet=\"rightEnd()\"></ng-container>\n    </div>\n\n    <!-- Default Templates -->\n\n    <ng-template #defaultLeftColumnTemplate>\n      <elder-toolbar-title></elder-toolbar-title>\n    </ng-template>\n\n    <ng-template #defaultCenterColumnTemplate></ng-template>\n\n    <ng-template #defaultEmptyTemplate></ng-template>\n\n    <ng-template #defaultRightColumnTemplate>\n      <elder-language-switcher [slimMode]=\"true\"></elder-language-switcher>\n    </ng-template>\n  </mat-toolbar>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Inject,\n  OnDestroy,\n  Optional,\n  TemplateRef,\n} from '@angular/core'\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'\nimport { BehaviorSubject, Subject } from 'rxjs'\nimport { ElderMasterDetailService } from '../elder-master-detail.service'\nimport { takeUntil } from 'rxjs/operators'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton } from '@angular/material/button'\nimport { ElderToolbarColumnDirective } from '../../../navigation/toolbar/elder-toolbar-column.directive'\nimport { ElderToolbarComponent } from '../../../navigation/toolbar/toolbar/elder-toolbar.component'\nimport { NgTemplateOutlet, AsyncPipe } from '@angular/common'\n\nexport interface IElderDetailDialogOptions<T = any> {\n  entity: T\n  detailTemplateRef: TemplateRef<any>\n}\n\n@Component({\n  selector: 'elder-detail-dialog',\n  templateUrl: './elder-detail-dialog.component.html',\n  styleUrls: ['./elder-detail-dialog.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    ElderToolbarComponent,\n    ElderToolbarColumnDirective,\n    MatIconButton,\n    MatIcon,\n    NgTemplateOutlet,\n    AsyncPipe,\n  ],\n})\nexport class ElderDetailDialogComponent<T = any> implements OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly destroy$ = new Subject<void>()\n  public readonly entity$ = new BehaviorSubject<T>(null)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Optional() public dialogRef: MatDialogRef<ElderDetailDialogComponent>,\n    @Optional() @Inject(MAT_DIALOG_DATA) public data: IElderDetailDialogOptions,\n    private masterDetailService: ElderMasterDetailService<T>\n  ) {\n    this.masterDetailService.currentItem$.pipe(takeUntil(this.destroy$)).subscribe({\n      next: (item) => {\n        this.entity$.next(item)\n      },\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public close() {\n    this.dialogRef.close(this.entity$.getValue())\n  }\n}\n","@if (entity$ | async; as entity) {\n  <div class=\"layout-col full\">\n    <span style=\"width: 100vw\"></span>\n    <!-- Header Section -->\n    <elder-toolbar class=\"gap-md\">\n      <button (click)=\"close()\" type=\"button\" mat-icon-button *elderToolbarColumn=\"'left.begin'\">\n        <mat-icon>close</mat-icon>\n      </button>\n    </elder-toolbar>\n    <div class=\"layout-row flex gap-md\">\n      <ng-container\n        *ngTemplateOutlet=\"data.detailTemplateRef; context: { $implicit: entity }\"\n      ></ng-container>\n    </div>\n  </div>\n}\n","import { Optional, Provider, SkipSelf } from '@angular/core'\nimport { ElderMasterDetailService } from './elder-master-detail.service'\n\nexport function existingOrNewMasterDetailService(\n  serviceProvider: ElderMasterDetailService<any> | null\n): ElderMasterDetailService<any> {\n  return serviceProvider ?? newMasterDetailService()\n}\n\nexport function newMasterDetailService(): ElderMasterDetailService<any> {\n  return new ElderMasterDetailService()\n}\n\nexport class ElderMasterDetailProvider<T> {\n  /**\n   * Uses the existing ElderMasterDetailService from a parent if available.\n   * Otherwise, creates a new ElderMasterDetailService and provides it.\n   */\n  public static readonly ExistingOrNewMasterDetailService = <Provider>{\n    provide: ElderMasterDetailService,\n    useFactory: existingOrNewMasterDetailService,\n    deps: [[new Optional(), new SkipSelf(), ElderMasterDetailService]],\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChildren,\n  HostBinding,\n  QueryList,\n} from '@angular/core'\nimport { ElderPaneComponent } from '../public_api'\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [],\n  selector: 'elder-basic-pane-layout',\n  host: {\n    class: 'elder-basic-pane-layout',\n  },\n  template: `\n    <!-- inline-html -->\n    <ng-content></ng-content>\n  `,\n  styles: `\n    :host {\n      display: flex;\n      flex-flow: row nowrap;\n      justify-content: flex-start;\n      padding: var(--elder-pane-padding);\n      gap: var(--elder-pane-gap);\n      align-items: stretch;\n    }\n  `,\n})\nexport class ElderBasicPaneLayoutComponent {\n  @HostBinding('class') class = ''\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  effect,\n  Input,\n  Signal,\n  TemplateRef,\n  untracked,\n  ViewContainerRef,\n} from '@angular/core'\nimport { ElderMasterDirective } from '../elder-master.directive'\nimport { ElderDetailDirective } from '../elder-detail.directive'\nimport { ElderMasterDetailService } from '../elder-master-detail.service'\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog'\nimport {\n  ElderDetailDialogComponent,\n  IElderDetailDialogOptions,\n} from '../elder-detail-dialog/elder-detail-dialog.component'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderMasterDetailMode } from '../elder-master-detail-mode'\nimport { ElderMasterDetailProvider } from '../elder-master-detail-provider'\nimport { NgTemplateOutlet } from '@angular/common'\nimport { ElderBasicPaneLayoutComponent } from '../../../layout/basic-pane-layout/basic-pane-layout.component'\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop'\nimport { MasterDetailActivationEvent } from '../master-detail-activation-event'\n\n@Component({\n  selector: 'elder-master-detail',\n  templateUrl: './elder-master-detail.component.html',\n  styleUrls: ['./elder-master-detail.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [ElderMasterDetailProvider.ExistingOrNewMasterDetailService],\n  imports: [NgTemplateOutlet, ElderBasicPaneLayoutComponent],\n  host: {\n    class: 'layout-col flex p-pane',\n  },\n})\nexport class ElderMasterDetailComponent<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  @ContentChild(ElderMasterDirective, { read: TemplateRef, static: false })\n  public master: TemplateRef<any>\n\n  @ContentChild(ElderDetailDirective, { read: TemplateRef, static: false })\n  public detail: TemplateRef<any>\n\n  public dialogRef: MatDialogRef<ElderDetailDialogComponent>\n\n  public readonly currentActive: Signal<T>\n  public readonly modeSig: Signal<ElderMasterDetailMode>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private masterDetailService: ElderMasterDetailService<T>,\n    public dialog: MatDialog,\n    private viewContainerRef: ViewContainerRef\n  ) {\n    this.modeSig = toSignal(this.masterDetailService.mode$)\n    this.currentActive = toSignal(this.masterDetailService.currentItem$)\n\n    effect(() => {\n      if (this.modeSig() === 'EMBEDDED') {\n        this.closeDialog()\n      }\n    })\n\n    this.masterDetailService.currentItemChange.pipe(takeUntilDestroyed()).subscribe({\n      next: (active) => this.onCurrentItemChange(active),\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set mode(mode: ElderMasterDetailMode) {\n    this.masterDetailService.mode$.next(mode)\n  }\n\n  public get mode(): ElderMasterDetailMode {\n    return this.masterDetailService.mode$.value\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private openDetailDialog(entity: T): void {\n    this.dialogRef = this.dialog.open(ElderDetailDialogComponent, {\n      viewContainerRef: this.viewContainerRef,\n      data: <IElderDetailDialogOptions>{\n        entity: entity,\n        detailTemplateRef: this.detail,\n      },\n      width: '80vw',\n      height: '80vh',\n      panelClass: 'custom-dialog-container',\n    })\n\n    this.dialogRef.afterClosed().subscribe((result) => {\n      this.log.debug('The dialog was closed')\n    })\n  }\n\n  private onCurrentItemChange(active: MasterDetailActivationEvent<T>) {\n    if (untracked(this.modeSig) === 'DIALOG') {\n      if (active.item) {\n        this.closeDialog()\n        this.openDetailDialog(active?.item)\n      } else {\n        this.closeDialog()\n      }\n    }\n  }\n\n  private closeDialog() {\n    if (this.dialogRef) {\n      this.dialogRef.close()\n    }\n  }\n}\n","<elder-basic-pane-layout class=\"flex p-0\">\n  <ng-container *ngTemplateOutlet=\"master\"></ng-container>\n\n  @if (modeSig() === 'EMBEDDED') {\n    @if (currentActive(); as currentActive) {\n      <ng-container\n        *ngTemplateOutlet=\"detail; context: { $implicit: currentActive }\"\n      ></ng-container>\n    }\n  }\n</elder-basic-pane-layout>\n","import { DestroyRef, Directive, OnInit } from '@angular/core'\nimport { ElderMasterDetailService } from './elder-master-detail.service'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderToastService } from '../../toasts/elder-toast.service'\nimport { ElderMasterDetailMode } from './elder-master-detail-mode'\nimport { ItemActivationOptions } from '../common/activation/model/item-activation-options'\nimport { ActivationEventSource } from '../common/activation/model/activation-event-source'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { DataViewActivationController } from '../common/activation/data-view-activation-controller.service'\nimport { ElderActivationOptions } from '../common/activation/elder-activation-options'\nimport { UnreachableCaseError } from '../../../common/exceptions/unreachable-case-error'\nimport { ActivationModel } from '../common/activation/model/activation-model'\n\n@Directive({\n  selector: '[elderMasterActivation]',\n  standalone: true,\n})\nexport class ElderMasterActivationDirective<T> implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private destroyRef: DestroyRef,\n    private toastService: ElderToastService,\n    private activationModel: ActivationModel<T>,\n    private activationController: DataViewActivationController<T>,\n    private masterDetailService: ElderMasterDetailService<T>\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.activationModel.itemActivationEvents.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n      next: (event) => {\n        this.log.debug('Table-Activation changed, notifying master-detail', event)\n        this.masterDetailService.onItemActivated(event.item, { source: event.source })\n      },\n      error: (err) => this.toastService.error('Failed to set active item', err),\n    })\n\n    this.masterDetailService.itemActivationRequested\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({\n        next: (item) => {\n          this.activationModel.activate(\n            item,\n            new ItemActivationOptions(ActivationEventSource.SYSTEM, true) // TODO keyboard, arrow?\n          ) // Maybe support activationRequest.source and map\n        },\n      })\n    this.masterDetailService.mode$\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe({ next: (mode) => this.onModeChange(mode) })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private onModeChange(mode: ElderMasterDetailMode): void {\n    this.activationController.activationOptions(this.activationOptions(mode))\n  }\n\n  private activationOptions(mode: ElderMasterDetailMode): ElderActivationOptions {\n    switch (mode) {\n      case 'EMBEDDED':\n        return {\n          autoActivation: 'once',\n          autoActivateItem: 'first',\n        }\n      case 'DIALOG':\n        return { autoActivation: 'never' }\n      default:\n        throw new UnreachableCaseError(mode)\n    }\n  }\n}\n","import { Directive, Input } from '@angular/core'\nimport {\n  FloatLabelType,\n  MatFormFieldAppearance,\n  MatFormFieldControl,\n} from '@angular/material/form-field'\nimport { ElderFromFieldBase } from './elder-from-field-base'\nimport { ThemePalette } from '@angular/material/core'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\n\n@Directive()\nexport abstract class ElderFromFieldCustomizableBase<\n  TValue,\n  TControl extends MatFormFieldControl<TValue>,\n> extends ElderFromFieldBase<TValue, TControl> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public label: string\n\n  @Input()\n  public appearance: MatFormFieldAppearance\n\n  /**\n   * Whether the label should always float ('always'), never float ('never')\n   * or float as the user types ('auto'). Defaults to 'auto'.\n   */\n  @Input()\n  public floatLabel: FloatLabelType\n\n  @Input()\n  public color: ThemePalette\n\n  @Input()\n  public placeholder: string\n\n  @Input()\n  public hint: string\n\n  @Input()\n  public icon: string\n\n  private _showIcon = true\n  private _showHint = false\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get showHint(): boolean {\n    return this._showHint\n  }\n\n  @Input()\n  public set showHint(value: BooleanInput) {\n    this._showHint = coerceBooleanProperty(value)\n  }\n\n  @Input()\n  public set showIcon(value: BooleanInput) {\n    this._showIcon = coerceBooleanProperty(value)\n  }\n  public get showIcon(): boolean {\n    return this._showIcon\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { Quantity } from '../../model/quantity'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderQuantityInputControlComponent } from '../quantity-input-control/elder-quantity-input-control.component'\nimport { ElderFromFieldCustomizableBase } from '../../../../common/forms/elder-from-field-customizable-base'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderValidationErrorDirective } from '../../../forms/directives/validation/elder-validation-error.directive'\nimport { MatIcon } from '@angular/material/icon'\n\nimport { MatFormField, MatLabel, MatPrefix, MatHint, MatError } from '@angular/material/form-field'\n\n@Component({\n  selector: 'elder-quantity-form-field',\n  templateUrl: './elder-quantity-form-field.component.html',\n  styleUrls: ['./elder-quantity-form-field.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatFormField,\n    MatLabel,\n    MatPrefix,\n    MatIcon,\n    MatHint,\n    MatError,\n    ElderValidationErrorDirective,\n    TranslateModule,\n  ],\n})\nexport class ElderQuantityFormFieldComponent extends ElderFromFieldCustomizableBase<\n  Quantity,\n  ElderQuantityInputControlComponent\n> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    super()\n    this.floatLabel = 'auto'\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n}\n","<mat-form-field [floatLabel]=\"floatLabel\" [appearance]=\"appearance\" [color]=\"color\">\n  @if (label) {\n    <mat-label>{{ label | translate }}</mat-label>\n  }\n\n  @if (showIcon && icon) {\n    <span matIconPrefix>\n      <mat-icon [inline]=\"true\">{{ icon }}</mat-icon>\n    </span>\n  }\n\n  <ng-content></ng-content>\n\n  @if (showHint) {\n    <mat-hint align=\"end\">\n      @if (hint) {\n        <span>{{ hint }}</span>\n      }\n    </mat-hint>\n  }\n\n  <mat-error elderValidationError></mat-error>\n</mat-form-field>\n","import { Unit } from './unit'\n\nexport class Quantity {\n  public value: number\n  public unit: Unit\n\n  public static zero(unit: Unit): Quantity {\n    return Quantity.from(unit)\n  }\n\n  public static from(unit: Unit, value: number = 0) {\n    const quantity = new Quantity()\n    quantity.value = value\n    quantity.unit = unit\n    return quantity\n  }\n}\n","import { Unit } from './unit'\nimport { Quantity } from './quantity'\n\nexport class Dimensions {\n  public length: number\n  public width: number\n  public height: number\n  public unit: Unit\n\n  public static zero(unit: Unit): Dimensions {\n    return Dimensions.from(unit, 0, 0, 0)\n  }\n\n  public static createLength(length: Quantity): Dimensions {\n    return Dimensions.from(length.unit, length.value, 0, 0)\n  }\n\n  public static from(unit: Unit, length: number, width: number, height: number): Dimensions {\n    const dim = new Dimensions()\n    dim.unit = unit\n    dim.length = length\n    dim.width = width\n    dim.height = height\n\n    return dim\n  }\n}\n","/**\n * Dimension of units.\n */\nexport enum UnitDimension {\n  Other = 'OTHER',\n\n  Inventory = 'INVENTORY',\n  Mass = 'MASS',\n  Time = 'TIME',\n  Length = 'LENGTH',\n  Volume = 'VOLUME',\n  Area = 'AREA',\n}\n","import { Unit } from './unit'\nimport { UnitDimension } from './unit-dimension'\n\nexport class UnitInfo {\n  public static info(\n    dimension: UnitDimension,\n    unitCode: Unit,\n    toBaseFactor: number = null\n  ): UnitInfo {\n    return new UnitInfo(dimension, unitCode, unitCode, toBaseFactor)\n  }\n\n  public static infoS(\n    dimension: UnitDimension,\n    unitCode: Unit,\n    unitSymbol: string,\n    toBaseFactor: number = null\n  ): UnitInfo {\n    return new UnitInfo(dimension, unitCode, unitSymbol, toBaseFactor)\n  }\n\n  constructor(\n    public readonly dimension: UnitDimension,\n    public readonly unit: Unit,\n    public readonly unitSymbol: string,\n    public readonly toBaseFactor: number | null\n  ) {}\n}\n\nexport class UnitDimensionInfo {\n  constructor(\n    public readonly dimension: UnitDimension,\n    public readonly baseUnit: Unit\n  ) {}\n}\n\nexport class UnitRegistry {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly UNIT_INFO: Map<Unit, UnitInfo> = new Map<Unit, UnitInfo>()\n  private readonly UNIT_DIMENSION_INFO: Map<UnitDimension, UnitDimensionInfo> = new Map<\n    UnitDimension,\n    UnitDimensionInfo\n  >()\n  private readonly UNIT_DIMENSION_UNITS: Map<UnitDimension, UnitInfo[]> = new Map<\n    UnitDimension,\n    UnitInfo[]\n  >()\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public getUnitDimension(unit: Unit): UnitDimension {\n    const info = this.getUnitInfo(unit)\n    return info?.dimension ?? UnitDimension.Other\n  }\n\n  public getBaseUnit(unit: Unit): Unit | null {\n    const unitInfo = this.getUnitInfo(unit)\n    return unitInfo ? this.getDimensionInfo(unitInfo.dimension)?.baseUnit : null\n  }\n\n  public getToBaseFactor(unit: Unit): number | null {\n    return this.getUnitInfo(unit)?.toBaseFactor\n  }\n\n  public getUnitSymbol(unit: Unit): string {\n    return this.getUnitInfo(unit)?.unitSymbol ?? (unit as string)\n  }\n\n  public getAllUnitInfos(): UnitInfo[] {\n    return Array.from(this.UNIT_INFO.values())\n  }\n\n  public getUnitInfosByDimension(dimension: UnitDimension): UnitInfo[] {\n    return this.UNIT_DIMENSION_UNITS.get(dimension)\n  }\n\n  public registerUnit(unitInfo: UnitInfo): void {\n    this.UNIT_INFO.set(unitInfo.unit, unitInfo)\n\n    if (!this.UNIT_DIMENSION_UNITS.has(unitInfo.dimension)) {\n      this.UNIT_DIMENSION_UNITS.set(unitInfo.dimension, [])\n    }\n    const units = this.UNIT_DIMENSION_UNITS.get(unitInfo.dimension)\n    units.push(unitInfo)\n  }\n\n  public registerUnitDimension(info: UnitDimensionInfo): void {\n    this.UNIT_DIMENSION_INFO.set(info.dimension, info)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Initializer                                                      *\n   *                                                                         *\n   **************************************************************************/\n\n  private getUnitInfo(unit: Unit): UnitInfo {\n    return this.UNIT_INFO.get(unit)\n  }\n\n  private getDimensionInfo(dim: UnitDimension): UnitDimensionInfo {\n    return this.UNIT_DIMENSION_INFO.get(dim)\n  }\n}\n","export type UnitCode = string\n\n/**\n * Represents a known Unit Code.\n *\n * Mostly SI units.\n *\n * Enum name: Unit name\n * Enum value: Unit code\n */\nexport enum Unit {\n  /***************************************************************************\n   *                                                                         *\n   * Inventory items                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * A piece (1 pc)\n   */\n  pc = 'stk',\n\n  /**\n   * A Tafel (1 pc)\n   */\n  tfl = 'tfl',\n\n  /**\n   * A dozen (12 pc)\n   */\n  doz = 'doz',\n\n  /**\n   * square dozen (144 pc)\n   */\n  gross = 'gro',\n\n  /***************************************************************************\n   *                                                                         *\n   * Mass                                                                    *\n   *                                                                         *\n   **************************************************************************/\n\n  // Milligram\n  mg = 'mg',\n\n  // Gram\n  g = 'g',\n\n  // Kilogram\n  kg = 'kg',\n\n  // Ton\n  t = 't',\n\n  /***************************************************************************\n   *                                                                         *\n   * Length                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  // Millimeter\n  mm = 'mm',\n\n  // Centimeter\n  cm = 'cm',\n\n  // Decimeter\n  dm = 'dm',\n\n  // Meter\n  m = 'm',\n\n  // Kilometer\n  km = 'km',\n\n  /***************************************************************************\n   *                                                                         *\n   * Area                                                                    *\n   *                                                                         *\n   **************************************************************************/\n\n  // Square millimetre\n  mm2 = 'mm2',\n\n  // Square centimetre\n  cm2 = 'cm2',\n\n  // Square decimetre\n  dm2 = 'dm2',\n\n  // Square Meter\n  m2 = 'm2',\n\n  // Square Kilo Meter\n  km2 = 'km2',\n\n  // Are\n  a = 'a',\n\n  // Hektare\n  ha = 'ha',\n\n  /***************************************************************************\n   *                                                                         *\n   * Volume                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  // Cubic millitmetre\n  mm3 = 'mm3',\n\n  // Cubic centimetre\n  cm3 = 'cm3',\n\n  // Cubic decimetre\n  dm3 = 'dm3',\n\n  // Cubic Meter\n  m3 = 'm3',\n\n  // Millilitre\n  ml = 'ml',\n\n  // Centilitre\n  cl = 'cl',\n\n  // Decilitre\n  dl = 'dl',\n\n  // Litre\n  l = 'l',\n\n  gal = 'gal',\n\n  /***************************************************************************\n   *                                                                         *\n   * Time                                                                    *\n   *                                                                         *\n   **************************************************************************/\n\n  // Second\n  sec = 's',\n\n  // Minute\n  min = 'min',\n\n  // Hour\n  h = 'h',\n\n  // Day\n  d = 'd',\n\n  // Week\n  wk = 'wk',\n\n  // Month\n  mo = 'mo',\n\n  // Year\n  yr = 'yr',\n\n  /***************************************************************************\n   *                                                                         *\n   * Temperature                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  kelvin = 'k',\n\n  /**\n   * Degree Celsius\n   */\n  celsius = 'cel',\n\n  /***************************************************************************\n   *                                                                         *\n   * Planar Angle                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Radian\n   */\n  rad = 'rad',\n\n  angle_degree = 'degh',\n  angle_minute = 'degm',\n  angle_second = 'degs',\n}\n","import { Injectable } from '@angular/core'\nimport { UnitDimensionInfo, UnitInfo, UnitRegistry } from './model/unit-registry'\nimport { UnitDimension } from './model/unit-dimension'\nimport { Unit } from './model/unit'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderUnitService {\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly registry = new UnitRegistry()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this.buildUnitDimensionInfoIndex().forEach((dim) => this.registry.registerUnitDimension(dim))\n\n    this.buildUnitInfo().forEach((unitInfo) => this.registry.registerUnit(unitInfo))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public getAllUnitInfos(): UnitInfo[] {\n    return this.registry.getAllUnitInfos()\n  }\n\n  public getBaseUnit(unit: Unit): Unit {\n    return this.registry.getBaseUnit(unit)\n  }\n\n  public getUnitDimension(unit: Unit): UnitDimension {\n    return this.registry.getUnitDimension(unit)\n  }\n\n  public getToBaseFactor(unit: Unit): number {\n    return this.registry.getToBaseFactor(unit)\n  }\n\n  public getUnitSymbol(unit: Unit): string {\n    return this.registry.getUnitSymbol(unit)\n  }\n\n  public getUnitInfosByDimension(dimension: UnitDimension): UnitInfo[] {\n    return this.registry.getUnitInfosByDimension(dimension)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildUnitDimensionInfoIndex(): Map<UnitDimension, UnitDimensionInfo> {\n    const map = new Map<UnitDimension, UnitDimensionInfo>()\n    map.set(UnitDimension.Other, new UnitDimensionInfo(UnitDimension.Other, null))\n    map.set(UnitDimension.Inventory, new UnitDimensionInfo(UnitDimension.Inventory, Unit.pc))\n    map.set(UnitDimension.Mass, new UnitDimensionInfo(UnitDimension.Mass, Unit.g))\n    map.set(UnitDimension.Time, new UnitDimensionInfo(UnitDimension.Time, Unit.sec))\n    map.set(UnitDimension.Length, new UnitDimensionInfo(UnitDimension.Length, Unit.m))\n    map.set(UnitDimension.Volume, new UnitDimensionInfo(UnitDimension.Volume, Unit.l))\n    map.set(UnitDimension.Area, new UnitDimensionInfo(UnitDimension.Area, Unit.m2))\n    return map\n  }\n\n  private buildUnitInfo(): UnitInfo[] {\n    const infos: UnitInfo[] = [\n      UnitInfo.infoS(UnitDimension.Inventory, Unit.pc, 'stk', 1.0),\n      UnitInfo.infoS(UnitDimension.Inventory, Unit.tfl, 'tfl', 1.0),\n      UnitInfo.infoS(UnitDimension.Inventory, Unit.doz, 'doz'), // we dont want auto conversions to this unit\n      UnitInfo.infoS(UnitDimension.Inventory, Unit.gross, 'gro'), // we dont want auto conversions to this unit\n\n      UnitInfo.infoS(UnitDimension.Mass, Unit.mg, 'mg', 0.001),\n      UnitInfo.infoS(UnitDimension.Mass, Unit.g, 'g', 1),\n      UnitInfo.infoS(UnitDimension.Mass, Unit.kg, 'kg', 1000),\n      UnitInfo.infoS(UnitDimension.Mass, Unit.t, 't', 1000 * 1000),\n\n      UnitInfo.infoS(UnitDimension.Length, Unit.mm, 'mm', 0.001),\n      UnitInfo.infoS(UnitDimension.Length, Unit.cm, 'cm', 0.01),\n      UnitInfo.infoS(UnitDimension.Length, Unit.dm, 'dm', 0.1),\n      UnitInfo.infoS(UnitDimension.Length, Unit.m, 'm', 1.0),\n      UnitInfo.infoS(UnitDimension.Length, Unit.km, 'km', 1000),\n\n      UnitInfo.infoS(UnitDimension.Area, Unit.mm2, 'mm²', 1e-6),\n      UnitInfo.infoS(UnitDimension.Area, Unit.cm2, 'cm²', 0.0001),\n      UnitInfo.infoS(UnitDimension.Area, Unit.dm2, 'dm²', 0.01),\n      UnitInfo.infoS(UnitDimension.Area, Unit.m2, 'm²', 1.0),\n      UnitInfo.infoS(UnitDimension.Area, Unit.km2, 'km²', 1000000),\n\n      UnitInfo.infoS(UnitDimension.Area, Unit.a, 'a', 100.0),\n      UnitInfo.infoS(UnitDimension.Area, Unit.ha, 'ha', 1000),\n\n      UnitInfo.infoS(UnitDimension.Volume, Unit.mm3, 'mm³', 1e-6),\n      UnitInfo.infoS(UnitDimension.Volume, Unit.cm3, 'cm³', 0.001),\n      UnitInfo.infoS(UnitDimension.Volume, Unit.dm3, 'dm³', 1),\n      UnitInfo.infoS(UnitDimension.Volume, Unit.m3, 'm³', 1000),\n\n      UnitInfo.infoS(UnitDimension.Volume, Unit.ml, 'ml', 0.001),\n      UnitInfo.infoS(UnitDimension.Volume, Unit.cl, 'cl', 0.01),\n      UnitInfo.infoS(UnitDimension.Volume, Unit.dl, 'dl', 0.1),\n      UnitInfo.infoS(UnitDimension.Volume, Unit.l, 'l', 1),\n\n      UnitInfo.infoS(UnitDimension.Volume, Unit.gal, 'gal', 3.78541),\n\n      UnitInfo.infoS(UnitDimension.Time, Unit.sec, 'sec', 1),\n      UnitInfo.infoS(UnitDimension.Time, Unit.min, 'min', 60),\n      UnitInfo.infoS(UnitDimension.Time, Unit.h, 'h', 60 * 60),\n      UnitInfo.infoS(UnitDimension.Time, Unit.d, 'd', 60 * 60 * 24),\n      UnitInfo.infoS(UnitDimension.Time, Unit.wk, 'd', 60 * 60 * 24 * 7),\n      UnitInfo.infoS(UnitDimension.Time, Unit.mo, 'mo', 60 * 60 * 24 * 7 * 4),\n      UnitInfo.infoS(UnitDimension.Time, Unit.yr, 'yr', 60 * 60 * 24 * 7 * 4 * 12),\n    ]\n    return infos\n  }\n}\n","import { Unit } from '../model/unit'\nimport { Quantity } from '../model/quantity'\nimport { UnitInfo } from '../model/unit-registry'\nimport { Injectable } from '@angular/core'\nimport { ElderUnitService } from '../elder-unit.service'\nimport { Dimensions } from '../model/dimensions'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { formatNumber } from '@angular/common'\nimport { QuantityPipeOptions } from '../elder-quantity.pipe'\n\ninterface QuantityWithBaseValue {\n  original: Quantity\n  baseValue: number\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderQuantityService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private static readonly EMPTY_STRING: string = ''\n  private static readonly SPACE_STRING: string = ' '\n\n  private static readonly DEFAULT_DIGITS: string = '1.0-1'\n\n  private readonly QUANTITY_CACHE_SIZE = 500\n  private readonly QUANTITY_CACHE = new Map<string, Quantity>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Builder support                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public createArea(length: Quantity, width: Quantity): Dimensions {\n    return this.createDimensions(length, width, Quantity.zero(length.unit))\n  }\n\n  public createDimensions(length: Quantity, width: Quantity, height: Quantity): Dimensions {\n    return Dimensions.from(\n      length.unit,\n      length.value,\n      this.convertToUnit(width, length.unit).value,\n      this.convertToUnit(height, length.unit).value\n    )\n  }\n\n  /**\n   * Returns a copy of the maximum (longest) edge of the dimensions.\n   *\n   * @param dimensions\n   */\n  public getMaxEdge(dimensions: Dimensions): Quantity {\n    if (!dimensions) {\n      return null\n    } else {\n      return Quantity.from(\n        dimensions.unit,\n        Math.max(dimensions.width, dimensions.length, dimensions.height)\n      )\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly unitService: ElderUnitService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public withUnit(quantity: Quantity, unit: Unit) {\n    return Quantity.from(unit, quantity.value)\n  }\n\n  public withValue(quantity: Quantity, value: number) {\n    return Quantity.from(quantity.unit, value)\n  }\n\n  public cacheLookup(lookup: Quantity): Quantity {\n    return this.QUANTITY_CACHE.get(this.getQuantityIdentifier(lookup))\n  }\n\n  public cacheUpdate(key: Quantity, value: Quantity) {\n    if (this.QUANTITY_CACHE.size >= this.QUANTITY_CACHE_SIZE) {\n      this.QUANTITY_CACHE.clear()\n    }\n    this.QUANTITY_CACHE.set(this.getQuantityIdentifier(key), value)\n  }\n\n  /**\n   * Multiplies a quantity with a multiplier and returns a quantity.\n   *\n   * Example:\n   * Quantity(10,'kg') * 3 = Quantity(30000,'g')\n   *\n   * @param quantity\n   * @param multiplier\n   */\n\n  public multiply(quantity: Quantity, multiplier: number): Quantity {\n    if (!quantity || !multiplier) {\n      return null\n    }\n    return Quantity.from(quantity.unit, quantity.value * multiplier)\n  }\n\n  /**\n   * Divides a quantity by another quantity and returns a scalar.\n   *\n   * Examples:\n   * Quantity(10,'kg') / Quantity(5,'kg') = 2\n   * Quantity(10,'kg') / Quantity(5,'g') = 2000\n   *\n   * @param dividend\n   * @param divisor\n   */\n  public divideByQuantity(dividend: Quantity, divisor: Quantity): number {\n    if (!dividend || !divisor) {\n      return null\n    }\n    const dividendNormal = this.toBaseUnitValue(dividend)\n    const divisorNormal = this.toBaseUnitValue(divisor)\n    return dividendNormal / divisorNormal\n  }\n\n  /**\n   * Sums up Quantities and returns a Quantity.\n   *\n   * Example:\n   * Quantity(10,'kg') + Quantity(5,'kg') + Quantity(5,'g') = Quantity(15005, 'g')\n   *\n   * @param quantities\n   */\n  public sum(quantities: Quantity[]): Quantity {\n    if (!quantities || quantities.length === 0) {\n      return null\n    }\n\n    const targetUnit = quantities[0].unit\n\n    return Quantity.from(\n      targetUnit,\n      quantities.reduce((total, add) => {\n        return total + this.convertToUnit(add, targetUnit).value\n      }, 0)\n    )\n  }\n\n  /**\n   * Subtracts a quantity from another quantity and returns a quantity.\n   *\n   * Example:\n   * Quantity(10,'kg') - Quantity(5,'g') = Quantity(9995, 'g')\n   *\n   * @param minuend\n   * @param subtrahend\n   */\n  public subtract(minuend: Quantity, subtrahend: Quantity): Quantity {\n    if (!minuend || !subtrahend) {\n      return null\n    }\n    return Quantity.from(\n      minuend.unit,\n      minuend.value - this.convertToUnit(subtrahend, minuend.unit).value\n    )\n  }\n\n  /**\n   * Subtracts a quantity from another quantity and returns a quantity.\n   *\n   * Example:\n   * Quantity(10,'kg') + Quantity(500,'g') = Quantity(10.5, 'kg')\n   *\n   * @param left\n   * @param right\n   */\n  public add(left: Quantity, right: Quantity): Quantity {\n    if (!left || !right) {\n      return null\n    }\n    return Quantity.from(left.unit, left.value - this.convertToUnit(right, left.unit).value)\n  }\n\n  /**\n   * Returns the max quantity of an array of quantities.\n   *\n   * Example:\n   * Quantity(10, 'm'), Quantity(2500, 'cm'), Quantity(0.003, 'km') = Quantity(2500, 'cm')\n   *\n   * @param quantities\n   */\n\n  public max(quantities: Quantity[]): Quantity {\n    if (!quantities || quantities.length == 0) {\n      return null\n    }\n\n    const helpers = quantities.map(\n      (quantity) =>\n        <QuantityWithBaseValue>{\n          original: quantity,\n          baseValue: this.toBaseUnitValue(quantity),\n        }\n    )\n\n    helpers.sort((a, b) => b.baseValue - a.baseValue)\n\n    return helpers[0].original\n  }\n\n  /**\n   * Transforms a quantity to another quantity of the same dimension by target-SI\n   *\n   * @param quantity\n   * @param targetUnit\n   */\n  public convertToUnit(quantity: Quantity, targetUnit: Unit): Quantity {\n    if (!quantity || !targetUnit) {\n      return null\n    }\n\n    if (quantity.unit === targetUnit) {\n      return Quantity.from(quantity.unit, quantity.value)\n    }\n\n    const targetBaseFactor = this.unitService.getToBaseFactor(targetUnit)\n\n    if (targetBaseFactor > 0) {\n      return Quantity.from(targetUnit, this.toBaseUnitValue(quantity) / targetBaseFactor)\n    } else {\n      this.logger.warn(\n        'Failed to convert quantity to target unit:' + targetUnit + '. Quantity: ',\n        quantity\n      )\n      return quantity\n    }\n  }\n\n  public toBaseUnitValue(quantity: Quantity): number {\n    const targetBaseFactor = this.unitService.getToBaseFactor(quantity.unit)\n    return quantity.value * targetBaseFactor\n  }\n\n  /**\n   * Returns a quantity in a normalized form.\n   * A cache is used to reduce calculations.\n   *\n   * 8500 kg -> 8.5 t\n   * 9000000 mm -> 9 km\n   * 1215 m -> 1.2 km\n   *\n   * @param quantity\n   */\n  public normalize(quantity: Quantity): Quantity {\n    // Check cache\n    const cachedItem = this.cacheLookup(quantity)\n\n    // Value is in cache\n    if (cachedItem) {\n      return cachedItem\n    } else {\n      const targetQuantity = this.normalizeInternal(quantity)\n\n      // Update cache\n      this.cacheUpdate(quantity, targetQuantity)\n\n      return targetQuantity\n    }\n  }\n\n  public transformQuantity(\n    quantity: Quantity,\n    normalize: boolean = true,\n    targetUnit?: Unit | string\n  ): Quantity {\n    if (!quantity) {\n      return null\n    }\n\n    if (normalize) {\n      return this.normalize(quantity)\n    } else if (targetUnit) {\n      return this.convertToUnit(quantity, <Unit>targetUnit)\n    } else {\n      return quantity\n    }\n  }\n\n  public formatQuantity(\n    quantity: Quantity | undefined,\n    locale: string,\n    normalize?: boolean | QuantityPipeOptions,\n    targetUnit?: Unit | string,\n    digitsInfo?: string\n  ): string {\n    digitsInfo ||= ElderQuantityService.DEFAULT_DIGITS\n\n    if (!quantity) {\n      return ElderQuantityService.EMPTY_STRING\n    }\n    const userOptions = ElderQuantityService.determineUserOptions(normalize, targetUnit, digitsInfo)\n\n    const quantityToDisplay: Quantity = this.transformQuantity(\n      quantity,\n      userOptions.normalize,\n      userOptions.targetUnit\n    )\n    const number = this.strToNumber(quantityToDisplay.value)\n    const suffix = this.determineSuffix(userOptions, quantityToDisplay)\n    return formatNumber(number, locale, userOptions.digitsInfo) + suffix\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private normalizeInternal(quantity: Quantity): Quantity {\n    // Given quantity value in base unit\n\n    const dimension = this.unitService.getUnitDimension(quantity.unit)\n\n    if (!dimension) {\n      return quantity\n    }\n\n    const baseValue = this.toBaseUnitValue(quantity)\n\n    let suitableUnit: UnitInfo\n\n    const dimensionUnits = this.unitService.getUnitInfosByDimension(dimension)\n\n    if (dimensionUnits) {\n      const factorSortedUnits = dimensionUnits.sort((a, b) => b.toBaseFactor - a.toBaseFactor)\n\n      for (const unitInfo of factorSortedUnits) {\n        const signedBaseValue = baseValue < 0 ? baseValue * -1 : baseValue\n        if (unitInfo.toBaseFactor <= signedBaseValue) {\n          suitableUnit = unitInfo\n          break\n        }\n      }\n    } else {\n      this.logger.debug(\n        'Could not find Dimension info for ' +\n          dimension +\n          '. (' +\n          quantity.unit +\n          ' --> ' +\n          dimension +\n          ')'\n      )\n    }\n\n    if (!suitableUnit) {\n      return quantity\n    }\n\n    const currentToBase = this.unitService.getToBaseFactor(quantity.unit)\n\n    // Ensure we prefer the initial unit if the actual value is not affected.\n    // This helps to be consistent and display the actual unit in rare cases when multiple unit alternatives exist (same factor)\n    if (suitableUnit.toBaseFactor === currentToBase) {\n      return quantity\n    } else {\n      return this.convertToUnit(quantity, suitableUnit.unit)\n    }\n  }\n\n  private getQuantityIdentifier(quantity: Quantity): string {\n    return quantity.value + '-' + quantity.unit\n  }\n\n  /**\n   * Adapted from @angular/common number_pipe.ts\n   */\n  private strToNumber(value: number | string): number {\n    // Convert strings to numbers\n    if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n      return Number(value)\n    }\n    if (typeof value !== 'number') {\n      throw new Error(`${value} is not a number`)\n    }\n    return value\n  }\n\n  private static determineUserOptions(\n    normalize: boolean | QuantityPipeOptions,\n    targetUnit: Unit | string,\n    digitsInfo: string\n  ): QuantityPipeOptions {\n    const userOptions =\n      normalize === undefined || typeof normalize === 'boolean'\n        ? <QuantityPipeOptions>{\n            normalize: normalize,\n            targetUnit: targetUnit,\n            digitsInfo: digitsInfo,\n          }\n        : normalize\n\n    if (userOptions.normalize === undefined && !userOptions.targetUnit) {\n      userOptions.normalize = true\n    }\n\n    if (userOptions.digitsInfo === undefined) {\n      userOptions.digitsInfo = ElderQuantityService.DEFAULT_DIGITS\n    }\n    return userOptions\n  }\n\n  private determineSuffix(userOptions: QuantityPipeOptions, quantityToDisplay: Quantity) {\n    if (!userOptions.hideUnit) {\n      return (\n        ElderQuantityService.SPACE_STRING + this.unitService.getUnitSymbol(quantityToDisplay.unit)\n      )\n    } else {\n      return ''\n    }\n  }\n}\n","import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core'\nimport { Quantity } from './model/quantity'\nimport { Unit } from './model/unit'\nimport { ElderQuantityService } from './util/elder-quantity.service'\n\nexport interface QuantityPipeOptions {\n  normalize?: boolean\n  targetUnit?: Unit | string\n  digitsInfo?: string\n  hideUnit?: boolean\n}\n\n@Pipe({\n  name: 'elderQuantity',\n  standalone: true,\n})\n/**\n *\n * Quantity Transformation Examples:\n *\n * 8500 kg -> 8.5 t\n * 9000000 mm -> 9 km\n * 1215 m -> 1.2 km\n */\nexport class ElderQuantityPipe implements PipeTransform {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Inject(LOCALE_ID) private _locale: string,\n    private readonly quantityService: ElderQuantityService\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  transform(\n    quantity?: Quantity,\n    normalize?: boolean | QuantityPipeOptions,\n    targetUnit?: Unit | string,\n    digitsInfo?: string\n  ): string {\n    return this.quantityService.formatQuantity(\n      quantity,\n      this._locale,\n      normalize,\n      targetUnit,\n      digitsInfo\n    )\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\nimport { Quantity } from './model/quantity'\nimport { Unit } from './model/unit'\nimport { ElderQuantityService } from './util/elder-quantity.service'\n\n@Pipe({\n  name: 'elderQuantityTransform',\n  standalone: true,\n})\nexport class ElderQuantityTransformPipe implements PipeTransform {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly quantityService: ElderQuantityService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public transform(\n    quantity: Quantity,\n    normalize: boolean = true,\n    targetUnit?: Unit | string\n  ): Quantity {\n    return this.quantityService.transformQuantity(quantity, normalize, targetUnit)\n  }\n}\n","import { Directive, TemplateRef, ViewContainerRef } from '@angular/core'\n\n@Directive({\n  selector: '[elderSelectValue]',\n  standalone: true,\n})\nexport class ElderSelectValueDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n","import { Component, OnInit, ChangeDetectionStrategy, TemplateRef, Inject } from '@angular/core'\nimport { SelectionModel } from '../../../../common/selection/selection-model'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogClose } from '@angular/material/dialog'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { NgTemplateOutlet, AsyncPipe } from '@angular/common'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton, MatButton } from '@angular/material/button'\nimport { ElderThemeDirective } from '../../../theme/elder-theme.directive'\nimport { MatToolbar } from '@angular/material/toolbar'\n\nexport interface ISelectionModelDialogOptions {\n  readonly selectionComponentTemplate: TemplateRef<any>\n}\n\n@Component({\n  selector: 'elder-templated-selection-dialog',\n  templateUrl: './templated-selection-dialog.component.html',\n  styleUrls: ['./templated-selection-dialog.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatToolbar,\n    ElderThemeDirective,\n    MatIconButton,\n    MatDialogClose,\n    MatIcon,\n    MatButton,\n    NgTemplateOutlet,\n    AsyncPipe,\n    TranslateModule,\n  ],\n})\nexport class TemplatedSelectionDialogComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private dialogRef: MatDialogRef<TemplatedSelectionDialogComponent>,\n    @Inject(MAT_DIALOG_DATA) public readonly data: ISelectionModelDialogOptions,\n    public readonly selectionModel: SelectionModel<any>\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Component Events                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n}\n","<div class=\"layout-col full\">\n  <mat-toolbar elderTheme class=\"flex-none\">\n    <button mat-icon-button type=\"button\" matDialogClose=\"\">\n      <mat-icon>close</mat-icon>\n    </button>\n    <span class=\"flex\"></span>\n    @if (selectionModel.selection | async; as selection) {\n      <button\n        mat-stroked-button\n        type=\"submit\"\n        [disabled]=\"!selection || selection.length === 0\"\n        [mat-dialog-close]=\"selection\"\n      >\n        {{ 'actions.select' | translate }}\n      </button>\n    }\n  </mat-toolbar>\n  <div class=\"layout-col flex\" style=\"overflow: hidden\">\n    <ng-container *ngTemplateOutlet=\"data.selectionComponentTemplate\"></ng-container>\n  </div>\n</div>\n","import { ChangeDetectorRef, Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog'\nimport {\n  ISelectionModelDialogOptions,\n  TemplatedSelectionDialogComponent,\n} from './templated-selection-dialog/templated-selection-dialog.component'\nimport { switchMap } from 'rxjs/operators'\nimport { EMPTY, Observable, of } from 'rxjs'\nimport {\n  KeyGetterFn,\n  SelectionEventSource,\n  SelectionModel,\n} from '../../../common/selection/selection-model'\nimport { Sort } from '../../../common/data/sort'\nimport { Filter } from '../../../common/data/filters/filter'\nimport { ElderTableProviders } from '../../data-view/table/model/elder-table-model-provider'\nimport { ElderDataViewOptionsProvider } from '../../data-view/base/elder-data-view-options-provider'\n\nexport function createSelectionModel(): SelectionModel<any> {\n  return new SelectionModel<any>()\n}\n\nexport function createDataViewOptionsProvider(): ElderDataViewOptionsProvider {\n  return new ElderDataViewOptionsProvider()\n}\n\n@Directive({\n  selector: '[elderSelectionModelPopup]',\n  exportAs: 'elderSelectionModelPopup',\n  providers: [\n    {\n      provide: SelectionModel,\n      useFactory: createSelectionModel,\n    },\n    {\n      provide: ElderDataViewOptionsProvider,\n      useFactory: createDataViewOptionsProvider,\n    },\n    ElderTableProviders.ClearTableModel, // Since this popup is frequently used inside an elder-table search box\n  ],\n  standalone: true,\n})\nexport class SelectionModelPopupDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private _transformerFn: (o: any) => any\n\n  @Input()\n  public set elderSelectionModelPopupTransform(fn: (o: any) => any) {\n    this._transformerFn = fn\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly templateRef: TemplateRef<any>,\n    private readonly viewContainer: ViewContainerRef,\n    private readonly dialog: MatDialog,\n    private readonly dataViewOptionsProvider: ElderDataViewOptionsProvider,\n    private readonly selectionModel: SelectionModel<any>,\n    private readonly changeDetectorRef: ChangeDetectorRef\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Let the user choose some entities and return the selection.\n   */\n  public choose(\n    keyGetter: KeyGetterFn<any>,\n    currentSelection: any[],\n    filters?: Filter[],\n    sorts?: Sort[],\n    multi = false\n  ): Observable<any[]> {\n    this.dataViewOptionsProvider.updateOptions((options) =>\n      options\n        .withFilters(filters || [])\n        .withSorts(sorts || [])\n        .withSelectionMultiEnabled(multi)\n        .withInteractionMode('selection')\n    )\n\n    this.selectionModel.isMultipleSelection = multi\n    this.selectionModel.keyGetterFn = keyGetter\n    this.selectionModel.replaceSelection(currentSelection, {\n      source: SelectionEventSource.SYSTEM,\n      info: 'selection-popup.init',\n    })\n\n    this.log.debug(\n      'Replaced selection popup with current ' + currentSelection.length + ' entities:',\n      currentSelection\n    )\n\n    const dialogRef = this.openSelectDialog()\n\n    // This fixes dialog rendering when the browser template\n    // view container is outside the invoking control, which\n    // happens when using ng-content projection.\n    this.changeDetectorRef.markForCheck()\n\n    return dialogRef.afterClosed().pipe(\n      switchMap((chosenEntities: any[]) => {\n        if (chosenEntities) {\n          return this._transformerFn\n            ? of(chosenEntities.map((value) => this._transformerFn(value)))\n            : of(chosenEntities)\n        } else {\n          return EMPTY\n        }\n      })\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private openSelectDialog(): MatDialogRef<TemplatedSelectionDialogComponent> {\n    return this.dialog.open(TemplatedSelectionDialogComponent, {\n      width: '90vw',\n      height: '90vh',\n      panelClass: 'custom-dialog-container',\n      data: <ISelectionModelDialogOptions>{\n        selectionComponentTemplate: this.templateRef,\n      },\n      viewContainerRef: this.viewContainer,\n    })\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core'\n\n@Component({\n  selector: 'elder-select-option',\n  templateUrl: './elder-select-option.component.html',\n  styleUrl: './elder-select-option.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class ElderSelectOptionComponent<TEntity> {\n  @Input()\n  public value: TEntity\n\n  @Input()\n  public label?: string\n\n  constructor() {}\n}\n","","import {\n  ContentChild,\n  ContentChildren,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  inject,\n  InjectionToken,\n  Input,\n  model,\n  NgZone,\n  Output,\n  Signal,\n  signal,\n  TemplateRef,\n  untracked,\n} from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { IDataContext } from '../../common/data/data-context/data-context'\nimport { IDataSource } from '../../common/data/datasource/data-source'\nimport { DataContextBuilder } from '../../common/data/data-context/data-context-builder'\nimport { Filter } from '../../common/data/filters/filter'\nimport { Sort } from '../../common/data/sort'\nimport { ElderSelectValueDirective } from './elder-select-value.directive'\nimport { SelectionModelPopupDirective } from './popup/selection-model-popup.directive'\nimport { DataContextStatus } from '../../common/data/data-context/data-context-status'\nimport { FilterContext } from '../../common/data/filters/filter-context'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { ElderFormFieldControlBase } from '../../common/forms/elder-form-field-control-base.directive'\nimport { NgControl } from '@angular/forms'\nimport { FocusMonitor } from '@angular/cdk/a11y'\nimport { TranslateService } from '@ngx-translate/core'\nimport { ElderSelectOptionComponent } from './multi/elder-chip-select-option/elder-select-option.component'\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop'\n\nexport type TextResolverFn = (value: any) => string\n\nexport class ElderSelectComponentState {\n  public static fromDataContext(dcState: DataContextStatus): ElderSelectComponentState {\n    if (dcState.loading) {\n      return ElderSelectComponentState.loading()\n    } else if (dcState.error) {\n      return ElderSelectComponentState.error(dcState.error)\n    } else {\n      return ElderSelectComponentState.idle()\n    }\n  }\n\n  public static idle(): ElderSelectComponentState {\n    return new ElderSelectComponentState(true, false, null)\n  }\n\n  public static loading(): ElderSelectComponentState {\n    return new ElderSelectComponentState(false, true, null)\n  }\n\n  public static error(error: any): ElderSelectComponentState {\n    let errorMsg: string\n    if (typeof error === 'object') {\n      errorMsg = JSON.stringify(error)\n    } else {\n      errorMsg = error\n    }\n    return new ElderSelectComponentState(false, false, errorMsg)\n  }\n\n  constructor(\n    public readonly idle: boolean,\n    public readonly loading: boolean,\n    public readonly error: string\n  ) {}\n}\n\nexport const ELDER_SELECT_BASE = new InjectionToken<ElderSelectBase<any, any, any>>(\n  'ElderSelectBase'\n)\n\n/**\n * Base component for Elder Selection Controls.\n *\n *  Elder Selection has the following abstract concept:\n *\n * - Suggestion-Model: A DataSource and derived DataContext for the (auto-complete) suggestions.\n *\n * @param TID Entity Id Type\n * @param T Entity Type\n * @param TValue Value backing the control. Can be the entity, the id or something else.\n */\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class ElderSelectBase<\n  TId,\n  TEntity,\n  TValue,\n> extends ElderFormFieldControlBase<TValue> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _logger = LoggerFactory.getLogger(this.constructor.name)\n  private readonly _filterContext = new FilterContext()\n  private _templateOptions$ = new BehaviorSubject<ElderSelectOptionComponent<TEntity>[]>([])\n\n  private _valueAsId: boolean\n\n  protected timeoutAfterMs = 5000\n\n  /**\n   * Define if elder-select should clean up the\n   * data-context resources for you.\n   *\n   * In more advanced scenarios where you plan to reuse the same data-context\n   * set this to false and release the resources yourself. (dataContext.close)\n   */\n  @Input()\n  public cleanUp = true\n\n  public readonly displayPropertyResolverS = model<TextResolverFn>(\n    (value: TEntity) => this.propertyStringValue(value, null),\n    {\n      alias: 'displayPropertyResolver',\n    }\n  )\n\n  public readonly displayPropertyResolver$ = toObservable(this.displayPropertyResolverS)\n\n  /**\n   * Entity DataContext, which is used\n   * to side load entities by id and also\n   * to load suggestions when auto-completing.\n   */\n  private readonly _dataContext = signal<IDataContext<TEntity>>(null)\n  public readonly dataContextS: Signal<IDataContext<TEntity>> = this._dataContext\n  public readonly dataContext$ = toObservable<IDataContext<TEntity>>(this._dataContext)\n\n  /**\n   * Page size. (Used for infinite scrolling chunks)\n   */\n  @Input()\n  public pageSize = 10\n\n  @Input()\n  public queryFilter = 'query'\n\n  @Input()\n  public sorts: Sort[] = []\n\n  @Input()\n  public icon: string\n\n  /**\n   * The option template to customize the ui look.\n   */\n  @ContentChild(ElderSelectValueDirective, { read: TemplateRef, static: true })\n  public valueTemplateQuery: TemplateRef<any>\n  private _valueTemplate: TemplateRef<any>\n\n  @ContentChild(SelectionModelPopupDirective)\n  public selectionPopup: SelectionModelPopupDirective\n\n  @Input()\n  public isOptionDisabledFn: (option: TEntity) => boolean\n\n  @Input()\n  public isOptionHiddenFn: (option: TEntity) => boolean\n\n  /**\n   * Emits an event when the user has clicked on the current\n   * selected entity.\n   */\n  @Output()\n  public readonly currentClicked = new EventEmitter<TEntity>()\n\n  public readonly state = signal<ElderSelectComponentState>(ElderSelectComponentState.idle())\n  public readonly state$ = toObservable<ElderSelectComponentState>(this.state)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor(controlType: string) {\n    super(controlType)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set valueAsId(valueAsId: BooleanInput) {\n    this._valueAsId = coerceBooleanProperty(valueAsId)\n  }\n\n  public get valueAsId(): boolean {\n    return this._valueAsId\n  }\n\n  /**\n   * The property used to display the values.\n   */\n  @Input()\n  public set displayProperty(property: string) {\n    this.displayPropertyResolverS.set((value) => this.propertyStringValue(value, property))\n  }\n\n  @Input()\n  public set displayPropertyResolver(resolver: TextResolverFn) {\n    this.displayPropertyResolverS.set(resolver)\n  }\n\n  @Input()\n  public set filters(filters: Filter[]) {\n    this.replaceFilters(filters)\n  }\n\n  public get filters(): Filter[] {\n    return this._filterContext.filtersSnapshot\n  }\n\n  @Input()\n  public set dataSource(source: IDataSource<TEntity>) {\n    this.dataContext = DataContextBuilder.start<TEntity>().pageSize(this.pageSize).build(source)\n  }\n\n  public get dataSource(): IDataSource<TEntity> {\n    return this.dataContext?.dataSource\n  }\n\n  @Input()\n  public set data(data: Array<TEntity> | IDataContext<TEntity>) {\n    this.autoCleanUp()\n\n    if (data instanceof Array) {\n      this.dataContext = DataContextBuilder.start<TEntity>().localSort().buildLocal(data) // Memory leak\n      this.dataContext.start()\n    } else {\n      if (data) {\n        this.dataContext = data\n      } else {\n        this.dataContext = DataContextBuilder.start<TEntity>().buildEmpty()\n      }\n    }\n  }\n\n  public set dataContext(data: IDataContext<TEntity>) {\n    this.autoCleanUp()\n    this._dataContext.set(data)\n    this.onDataContextChanged(data)\n  }\n\n  public get dataContext(): IDataContext<TEntity> {\n    return untracked(this._dataContext)\n  }\n\n  @Input()\n  public set valueTemplate(template: TemplateRef<any>) {\n    this._valueTemplate = template\n  }\n\n  public get valueTemplate(): TemplateRef<any> {\n    return this._valueTemplate || this.valueTemplateQuery\n  }\n\n  public override get errorState(): boolean {\n    return !!this.state().error || super.errorState\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onCurrentClicked(entity: TEntity): void {\n    if (entity !== undefined && entity !== null) {\n      this.currentClicked.emit(entity)\n    }\n  }\n\n  public updateFilter(updatedFilter?: Filter): void {\n    this._filterContext.updateFilter(updatedFilter)\n  }\n\n  public updateFilters(updatedFilters?: Filter[]): void {\n    this._filterContext.updateFilters(updatedFilters)\n  }\n\n  public replaceFilters(newFilters?: Filter[]) {\n    this._filterContext.replaceFilters(newFilters)\n  }\n\n  public clearFilters(): void {\n    this._filterContext.clear()\n  }\n\n  public updateState(state: ElderSelectComponentState): void {\n    if (state.error) {\n      this._logger.warn('updateState to Error: ' + state.error)\n    }\n    this.state.set(state)\n    this.emitStateChange()\n  }\n\n  public override get shouldLabelFloat(): boolean {\n    return this.errorState || !!this.icon || super.shouldLabelFloat\n  }\n\n  @ContentChildren(ElderSelectOptionComponent)\n  public set templateOptions$(comps: ElderSelectOptionComponent<TEntity>[]) {\n    this._templateOptions$.next(comps)\n  }\n\n  public get templateOptions$(): Observable<ElderSelectOptionComponent<TEntity>[]> {\n    return this._templateOptions$.asObservable()\n  }\n\n  public getEntityId(entity: TEntity): TId {\n    try {\n      return this.dataSourceOrThrow().getId(entity)\n    } catch (e) {\n      const errorMessage = e instanceof Error ? e.message : 'unknown'\n      throw new Error(\n        `Failed to extract id from entity since no dataSource is available! Caused by ${errorMessage}`\n      )\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Abstract API                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Occurs when the suggestions data-context has changed\n   */\n  protected abstract onDataContextChanged(data: IDataContext<TEntity>): void\n\n  /***************************************************************************\n   *                                                                         *\n   * Internal API                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  protected dataSourceOrThrow(): IDataSource<TEntity> {\n    if (this.dataContext) {\n      const dataSource = this.dataContext.dataSource\n      if (dataSource) {\n        return dataSource\n      } else {\n        throw new Error(\n          'The provided DataContext has not DataSource, which is required for valueAsId! ' +\n            typeof this.dataContext\n        )\n      }\n    } else {\n      throw new Error(\n        'No DataContext available! A DataContext (DataSource) is required for valueAsId!'\n      )\n    }\n  }\n\n  protected isEqual(a: TEntity, b: TEntity): boolean {\n    if (a === b) {\n      return true\n    }\n    if (this.isEmpty(a) && this.isEmpty(b)) {\n      // HACK: Handle empty string as undefined.\n      return true\n    }\n    return this.getEntityId(a) === this.getEntityId(b)\n  }\n\n  protected isEmpty(a: TEntity): boolean {\n    return a === null || a === undefined || <any>a === ''\n  }\n\n  /**\n   * Performs clean up of the current data context if auto clean up is enabled.\n   */\n  protected autoCleanUp(): void {\n    if (this.cleanUp && this.dataContext) {\n      this._logger.debug('Releasing DataContext resources to prevent memory leak. [cleanUp]=\"true\"')\n      this.dataContext.close()\n    }\n  }\n\n  protected propertyStringValue(entity: TEntity, property: string): string | null {\n    if (entity === null || entity === undefined) {\n      return null\n    }\n    let value: any\n    if (property) {\n      value = (<any>entity)[property]\n    } else if (this.isObject(entity)) {\n      value = JSON.stringify(entity)\n    } else {\n      value = entity\n    }\n    return String(value)\n  }\n\n  private isObject(val: any): boolean {\n    if (val === null) {\n      return false\n    }\n    return typeof val === 'function' || typeof val === 'object'\n  }\n}\n","import { Directive, HostListener, Input, OnDestroy, OnInit } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete'\nimport { ElderSuggestionPanelComponent } from './elder-autocomplete/elder-suggestion-panel.component'\nimport { merge, Subject } from 'rxjs'\nimport { debounceTime, filter, map, skipWhile, takeUntil } from 'rxjs/operators'\nimport { Filter } from '../../../common/data/filters/filter'\nimport { IDataContext } from '../../../common/data/data-context/data-context'\nimport { Sort } from '../../../common/data/sort'\n\n@Directive({\n  selector: '[elderAutocomplete]',\n  standalone: true,\n})\nexport class ElderAutocompleteDirective implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly ignoreKeys = ['ArrowRight', 'ArrowUp', 'ArrowDown', 'ArrowLeft']\n  public readonly inputKeyup$ = new Subject<KeyboardEvent>()\n\n  @Input()\n  public queryFilter = 'query'\n\n  @Input()\n  public filters: Filter[] = []\n\n  @Input()\n  public sorts: Sort[] = []\n\n  private _elderAutocomplete: ElderSuggestionPanelComponent\n\n  private readonly destroyMatAutoBinding$ = new Subject<void>()\n  private readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly autoCompleteTrigger: MatAutocompleteTrigger) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Listener                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('keyup', ['$event'])\n  public onKeyUp(event: KeyboardEvent) {\n    if (this.ignoreKeys.some((k) => k === event.key)) {\n      return\n    }\n    this.inputKeyup$.next(event)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    merge(\n      this.inputKeyup$.pipe(\n        skipWhile((e) => !this._elderAutocomplete.enabled),\n        debounceTime(150),\n        map((e) => (e?.target as HTMLInputElement)?.value)\n      ),\n      this.autocomplete.triggerReload$\n    )\n      .pipe(\n        takeUntil(this.destroy$),\n        filter((value) => !value || typeof value === 'string' || typeof value === 'number')\n      )\n      .subscribe((value) => this.updateSuggestions(value))\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n    this.destroyMatAutoBinding$.next()\n    this.destroyMatAutoBinding$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input('elderAutocomplete')\n  public set autocomplete(auto: ElderSuggestionPanelComponent) {\n    this._elderAutocomplete = auto\n    this.destroyMatAutoBinding$.next()\n    if (auto) {\n      auto.matAutocomplete$\n        .pipe(\n          takeUntil(this.destroyMatAutoBinding$),\n          filter((matAuto) => !!matAuto)\n        )\n        .subscribe((matAuto) => (this.autoCompleteTrigger.autocomplete = matAuto))\n    }\n  }\n\n  public get autocomplete(): ElderSuggestionPanelComponent {\n    return this._elderAutocomplete\n  }\n\n  public get dataContext(): IDataContext<any> {\n    return this._elderAutocomplete.dataContext\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private updateSuggestions(value: string | number | undefined | null): void {\n    const filters = [...this.filters, new Filter(this.queryFilter, <any>value)]\n    const sorts = this.sorts\n    if (this.dataContext) {\n      try {\n        this.dataContext.start(sorts, filters)\n      } catch (err) {\n        this.logger.error('Failed to start DC!', err)\n        // this.updateState(ElderSelectComponentState.error(err));\n      }\n    } else {\n      this.logger.warn('No DataContext available to update suggestions!')\n    }\n  }\n}\n","import { AfterViewInit, Directive, HostListener, Inject, OnDestroy, SkipSelf } from '@angular/core'\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete'\nimport { Subject } from 'rxjs/internal/Subject'\nimport { delay, map, takeUntil, tap } from 'rxjs/operators'\nimport { merge } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ValueAccessorBase } from '../../common/forms/value-accessor-base'\nimport { ELDER_SELECT_BASE, ElderSelectBase } from './elder-select-base'\nimport { MatOption } from '@angular/material/core'\nimport { isElderEntityValueAccessor } from '../../common/forms/elder-entity-value-accessor'\n\n@Directive({\n  selector: '[elderSelectOnTab]',\n  standalone: true,\n})\nexport class ElderSelectOnTabDirective<TEntity = any, TId = any, TValue = TEntity | TId>\n  implements AfterViewInit, OnDestroy\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly destroy$ = new Subject<void>()\n\n  private readonly controlValueAccessor: ValueAccessorBase<any>\n\n  /**\n   * Whether the autocomplete panel was open before the event\n   */\n  private panelOpen = false\n\n  /**\n   * Whether the user selected an option.\n   * (We want to ignore selections if there is already a selection present and the user tabs away)\n   */\n  private userInput = false\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly autoTrigger: MatAutocompleteTrigger,\n    @SkipSelf()\n    @Inject(ELDER_SELECT_BASE)\n    private readonly elderSelectBase: ElderSelectBase<any, any, any>\n  ) {\n    this.controlValueAccessor = elderSelectBase\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Event Listener                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('keydown.arrowup')\n  @HostListener('keydown.arrowdown')\n  public onOptionSelect() {\n    this.userInput = true\n  }\n\n  @HostListener('keydown.tab')\n  public onBlur(): void {\n    if (!this.panelOpen) {\n      return\n    }\n\n    if (!this.userInput) {\n      // The user did not select anything in the auto-complete\n\n      if (this.controlValueAccessor.value) {\n        this.logger.warn(\n          'Discarding TAB since the user did probably not intend to change the value! userInput:',\n          this.userInput\n        )\n        return\n      }\n\n      if (!this.elderSelectBase.required) {\n        // The user did not select any option and no current value is present.\n        // Since the input is NOT marked as required, we assume the user did not want to select a value\n        return\n      }\n    }\n\n    const activeOption = this.autoTrigger.activeOption as MatOption<TEntity>\n    if (activeOption) {\n      const entity = activeOption.value\n      this.writeEntity(entity)\n    }\n\n    this.reset()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit() {\n    const autocomplete = this.autoTrigger.autocomplete\n    merge(autocomplete.opened.pipe(map(() => true)), autocomplete.closed.pipe(map(() => false)))\n      .pipe(takeUntil(this.destroy$), delay(0))\n      .subscribe((value) => (this.panelOpen = value))\n\n    this.autoTrigger.optionSelections\n      .pipe(\n        // TODO https://github.com/angular/components/pull/14813\n        takeUntil(this.destroy$),\n        tap((opt) => this.logger.debug('[optionSelections] CHANGED ', opt)),\n        map((opt) => opt.isUserInput)\n      )\n      .subscribe((isUserInput) => (this.userInput = isUserInput))\n  }\n\n  public ngOnDestroy() {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private reset(): void {\n    this.userInput = false\n  }\n\n  private writeEntity(entity: TEntity): void {\n    const value = this.entityToValue(entity)\n    this.controlValueAccessor.updateValue(value)\n    this.autoTrigger.writeValue(value)\n    this.logger.warn('Wrote entity to control as value: ', value)\n  }\n\n  private entityToValue(entity: TEntity): TValue {\n    if (isElderEntityValueAccessor(this.controlValueAccessor)) {\n      // Since elder-select may use the entity id as value (valueAsId),\n      // we can not directly write to the value safely.\n      return this.controlValueAccessor.entityToValue(entity)\n    } else {\n      // By default, write the selected option to the control value\n      this.logger.warn(\n        '[controlValueAccessor] is not a ElderEntityValueAccessor!: ',\n        this.controlValueAccessor\n      )\n      return <any>entity\n    }\n  }\n}\n","import { ElderSuggestionPanelComponent } from './elder-suggestion-panel.component'\n\nexport class ElderAutocompleteOptionSelected<T = any, TId = any> {\n  constructor(\n    public readonly source: ElderSuggestionPanelComponent<T, TId>,\n    public readonly entityId: TId,\n    public readonly entity: T,\n    public readonly optionValue: any\n  ) {}\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  DestroyRef,\n  Input,\n  NgZone,\n  Output,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs'\nimport {\n  IDataContext,\n  isContinuableDataContext,\n} from '../../../../common/data/data-context/data-context'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { filter, map, switchMap } from 'rxjs/operators'\nimport { runInZone } from '../../../../common/utils/ng-zone-utils'\nimport { DataContextStatus } from '../../../../common/data/data-context/data-context-status'\nimport { MatAutocomplete, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'\nimport { ElderSelectValueDirective } from '../../../select/elder-select-value.directive'\nimport { ElderAutocompleteOptionSelected } from './elder-autocomplete-option-selected'\nimport { IDataSource } from '../../../../common/data/datasource/data-source'\nimport { DataContextBuilder } from '../../../../common/data/data-context/data-context-builder'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { MatProgressBar } from '@angular/material/progress-bar'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatOption } from '@angular/material/core'\nimport { NgTemplateOutlet, AsyncPipe } from '@angular/common'\nimport { ElderInfiniteScrollDirective } from '../../../infinitescroll/elder-infinite-scroll.directive'\nimport { ElderInfiniteAutocompleteDirective } from '../../../infinitescroll/elder-infinite-autocomplete.directive'\n\ntype TextResolverFn = (value: any) => string\n\n@Component({\n  selector: 'elder-suggestion-panel',\n  exportAs: 'elderSuggestionPanel',\n  templateUrl: './elder-suggestion-panel.component.html',\n  styleUrls: ['./elder-suggestion-panel.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatAutocomplete,\n    ElderInfiniteAutocompleteDirective,\n    ElderInfiniteScrollDirective,\n    MatOption,\n    MatIcon,\n    NgTemplateOutlet,\n    MatProgressBar,\n    AsyncPipe,\n  ],\n})\nexport class ElderSuggestionPanelComponent<T = any, TId = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n  private readonly PAGE_SIZE = 10\n\n  /**\n   * Is this auto-complete enabled?\n   */\n  private _enabled = true\n\n  /**\n   * The value template to customize the ui look.\n   */\n  @ContentChild(ElderSelectValueDirective, { read: TemplateRef, static: true })\n  public valueTemplateQuery: TemplateRef<any>\n  private _valueTemplate: TemplateRef<any>\n\n  /**\n   * The underlying Material Autocomplete\n   */\n  public readonly matAutocomplete$ = new BehaviorSubject<MatAutocomplete>(null)\n\n  @ViewChild('auto')\n  public set matAutocomplete(auto: MatAutocomplete) {\n    this.matAutocomplete$.next(auto)\n  }\n\n  @Input()\n  public isOptionDisabledFn: (option: T) => boolean\n\n  @Input()\n  public isOptionHiddenFn: (option: T) => boolean\n\n  @Input()\n  public optionValueConverterFn: (option: T) => any\n\n  /**\n   * The DataContext which holds the autocomplete suggestions.\n   */\n  public readonly dataContext$ = new BehaviorSubject<IDataContext<T>>(null)\n  public readonly dataSource$ = new BehaviorSubject<IDataSource<T>>(null)\n\n  public readonly triggerReload$ = new Subject<any>()\n\n  public readonly displayPropertyResolver$ = new BehaviorSubject<TextResolverFn>((value: T) =>\n    this.propertyStringValue(value, null)\n  )\n\n  public readonly dataState$: Observable<DataContextStatus>\n\n  public readonly availableSuggestions$: Observable<T[]>\n\n  @Output()\n  public readonly optionSelected = new Subject<ElderAutocompleteOptionSelected>()\n\n  private readonly hiddenOptionsCount$ = new BehaviorSubject<number>(0)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly zone: NgZone,\n    private destroyRef: DestroyRef\n  ) {\n    this.dataState$ = this.dataContext$.pipe(\n      filter((dc) => !!dc),\n      switchMap((dc) => dc.status),\n      runInZone(this.zone)\n    )\n\n    this.availableSuggestions$ = this.dataContext$.pipe(\n      switchMap((dc) => (dc ? dc.data : of([]))),\n      runInZone(this.zone)\n    )\n\n    this.availableSuggestions$\n      .pipe(\n        takeUntilDestroyed(destroyRef),\n        map((suggestions) => suggestions.filter((suggestion) => this.isOptionHidden(suggestion))),\n        map((suggestion) => suggestion.length)\n      )\n      .subscribe((count) => this.hiddenOptionsCount$.next(count))\n\n    combineLatest([this.dataSource$, this.triggerReload$])\n      .pipe(\n        takeUntilDestroyed(destroyRef),\n        filter(([ds]) => !!ds)\n      )\n      .subscribe(([ds]) => {\n        this.dataContext$.next(this.buildDataContextWithPageSize(ds))\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set enabled(value: BooleanInput) {\n    this._enabled = coerceBooleanProperty(value)\n  }\n\n  public get enabled(): boolean {\n    return this._enabled\n  }\n\n  @Input()\n  public set valueTemplate(template: TemplateRef<any>) {\n    this._valueTemplate = template\n  }\n\n  public get valueTemplate(): TemplateRef<any> {\n    return this._valueTemplate || this.valueTemplateQuery\n  }\n\n  public get dataContext(): IDataContext<T> {\n    return this.dataContext$.getValue()\n  }\n\n  @Input()\n  public set dataSource(dataSource: IDataSource<T>) {\n    if (dataSource) {\n      this.dataSource$.next(dataSource)\n    }\n  }\n\n  public get dataSource(): IDataSource<T> {\n    return this.dataSource$.getValue()\n  }\n\n  @Input()\n  public set displayPropertyResolver(resolver: TextResolverFn) {\n    this.displayPropertyResolver$.next(resolver)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n    const option = event.option\n    const id = option.id as unknown as TId\n    this.optionSelected.next(\n      new ElderAutocompleteOptionSelected(\n        this,\n        id,\n        this.getEntityById(id) ?? option.value,\n        option.value\n      )\n    )\n  }\n\n  private getEntityById(id: TId): T | undefined {\n    const dc = this.dataContext\n    if (dc) {\n      return dc.snapshot.data.find((e) => this.getId(e) === id)\n    }\n    return undefined\n  }\n\n  public onAutocompleteOpened(event: any): void {\n    if (this.enabled) {\n      this.triggerReload$.next(null)\n    } else {\n      this.logger.error('Autocomplete opened -> BUT DISABLED!!', event)\n    }\n  }\n\n  public onAutoCompleteCloseToEnd(): void {\n    // this.logger.debug('Autocomplete is close to end!');\n    if (isContinuableDataContext(this.dataContext)) {\n      if (!this.dataContext.snapshot.isLoading) {\n        this.dataContext.loadMore()\n      }\n    }\n  }\n\n  public getIdAsString(value: T): string {\n    return String(this.getId(value))\n  }\n\n  public getId(value: T): TId {\n    return this.dataContext?.dataSource?.getId(value) || value\n  }\n\n  public isOptionAvailable(option: T): boolean {\n    if (this.isOptionDisabledFn) {\n      return !this.isOptionDisabledFn(option)\n    } else {\n      return true\n    }\n  }\n\n  public isOptionVisible(option: T): boolean {\n    if (this.isOptionHiddenFn) {\n      return !this.isOptionHiddenFn(option)\n    } else {\n      return true\n    }\n  }\n\n  public isOptionHidden(option: T): boolean {\n    if (this.isOptionHiddenFn) {\n      return this.isOptionHiddenFn(option)\n    } else {\n      return false\n    }\n  }\n\n  public toOptionValue(option: T): any {\n    if (this.optionValueConverterFn) {\n      return this.optionValueConverterFn(option)\n    } else {\n      return option\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * TODO Duplicate in elder-select\n   */\n  private propertyStringValue(value: T, property: string): string | null {\n    if (value === null || value === undefined) {\n      return null\n    }\n\n    if (property) {\n      return (<any>value)[property]\n    }\n\n    return String(value)\n  }\n\n  private buildDataContextWithPageSize(dataSource: IDataSource<T>): IDataContext<T> {\n    if (this.dataContext) {\n      this.dataContext.close()\n    }\n    return DataContextBuilder.start<T>().pageSize(this.calculatePageSize()).build(dataSource)\n  }\n\n  private calculatePageSize(): number {\n    return this.PAGE_SIZE + this.hiddenOptionsCount$.getValue()\n  }\n}\n","<mat-autocomplete\n  #auto=\"matAutocomplete\"\n  panelWidth=\"auto\"\n  [autoActiveFirstOption]=\"true\"\n  (opened)=\"onAutocompleteOpened($event)\"\n  (optionSelected)=\"onOptionSelected($event)\"\n  elderInfiniteScroll\n  elderElderInfiniteAutocomplete\n  (closeToEnd)=\"onAutoCompleteCloseToEnd()\"\n>\n  @if (dataContext$ | async; as dc) {\n    @if (dc.isClosed) {\n      <mat-option disabled>\n        <div class=\"layout-row place-start-center gap-sm\">\n          <mat-icon color=\"warn\">warning</mat-icon>\n          <span class=\"mat-caption\">DataContext Closed!</span>\n        </div>\n      </mat-option>\n    }\n\n    @if (availableSuggestions$ | async; as suggestions) {\n      @if (suggestions.length === 0) {\n        <mat-option disabled>No Data.</mat-option>\n      }\n\n      @for (suggestion of suggestions; track getIdAsString(suggestion)) {\n        @if (isOptionVisible(suggestion)) {\n          <mat-option\n            [value]=\"toOptionValue(suggestion)\"\n            [id]=\"getIdAsString(suggestion)\"\n            [disabled]=\"!isOptionAvailable(suggestion)\"\n          >\n            <ng-container\n              *ngTemplateOutlet=\"\n                valueTemplate || simpleValueTemplate;\n                context: { $implicit: suggestion }\n              \"\n            >\n            </ng-container>\n            <!--\n            <span class=\"mat-caption\">value: {{toOptionValue(suggestion)}}</span>\n            -->\n          </mat-option>\n        }\n      }\n    }\n  } @else {\n    <mat-option disabled>\n      <span class=\"mat-caption\">\n        No DataContext!\n        @if (dataSource$ | async; as ds) {\n          (DataSource: {{ ds ? 'available' : 'missing' }})\n          {{ enabled ? 'Autocomplete Enabled' : 'Autocomplete DISABLED' }}\n        }\n      </span>\n    </mat-option>\n  }\n\n  @if (dataState$ | async; as state) {\n    @if (!state.idle || state.loading) {\n      <mat-option disabled>\n        <mat-progress-bar\n          [value]=\"100\"\n          [mode]=\"state.loading ? 'query' : 'determinate'\"\n          [color]=\"state.error ? 'warn' : 'primary'\"\n        ></mat-progress-bar>\n      </mat-option>\n    }\n  }\n</mat-autocomplete>\n\n<ng-template #simpleValueTemplate let-value>\n  @if (displayPropertyResolver$ | async; as propertyResolver) {\n    <span class=\"noselect\">{{ propertyResolver(value) }}</span>\n  }\n</ng-template>\n","// shared.service.ts\nimport { Injectable } from '@angular/core'\nimport { BehaviorSubject } from 'rxjs'\n\n@Injectable()\nexport class ElderAutoSelectFirstService<TEntity> {\n  private readonly _firstItem$ = new BehaviorSubject<TEntity>(null)\n  private readonly _enabled$ = new BehaviorSubject<boolean>(false)\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public suggestFirstItem(entity: TEntity) {\n    this._firstItem$.next(entity)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public set enabled(enabled: boolean) {\n    this._enabled$.next(enabled)\n  }\n\n  public get enabled$() {\n    return this._enabled$.asObservable()\n  }\n\n  public get firstItem$() {\n    return this._firstItem$\n  }\n}\n","import { DestroyRef, Directive, Optional } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderSuggestionPanelComponent } from '../../input/autocomplete/elder-autocomplete/elder-suggestion-panel.component'\nimport { ElderAutoSelectFirstService } from './elder-auto-select-first.service'\nimport { IDataContext } from '../../../common/data/data-context/data-context'\nimport { Observable, of } from 'rxjs'\nimport { catchError, filter, first, map, timeout } from 'rxjs/operators'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\n\n@Directive({\n  selector: '[elderAutoSelectSuggestFirst]',\n  standalone: true,\n})\nexport class ElderAutoSelectSuggestFirstDirective<TEntity = any, TId = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly elderAutoComplete: ElderSuggestionPanelComponent<TEntity, TId>,\n    @Optional() private readonly autoSelectFirstService: ElderAutoSelectFirstService<TEntity>,\n    private readonly destroyRef: DestroyRef\n  ) {\n    if (autoSelectFirstService) {\n      this.subscribeToAutoSelectFirstService()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private subscribeToAutoSelectFirstService() {\n    this.autoSelectFirstService.enabled$\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        filter((enabled) => enabled)\n      )\n      .subscribe((enabled) => this.suggestFirstItem())\n  }\n\n  private suggestFirstItem(): void {\n    this.log.debug('Suggesting first item to be selected...')\n    this.selectFirstItemInDataContext(this.elderAutoComplete.dataContext).subscribe((entity) =>\n      this.autoSelectFirstService.suggestFirstItem(entity)\n    )\n  }\n\n  private selectFirstItemInDataContext<TEntity, TId>(\n    suggestionsDc: IDataContext<TEntity>\n  ): Observable<TEntity> {\n    return suggestionsDc?.isStarted ? this.firstItemInDataContextSoon(suggestionsDc) : of(null)\n  }\n\n  private firstItemInDataContextSoon<TEntity>(\n    dataContext: IDataContext<TEntity>\n  ): Observable<TEntity | null> {\n    return dataContext.data.pipe(\n      filter((data) => data && data.length > 0),\n      map((data) => data[0]),\n      timeout(250),\n      catchError((timeoutError) => {\n        this.log.warn(\n          'Gave up waiting for DataContext items, timeout reached. Falling back to sugestion lookup.',\n          timeoutError\n        )\n        return of(null)\n      }),\n      first()\n    )\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  forwardRef,\n  HostBinding,\n  Input,\n  NgZone,\n  Optional,\n  Output,\n  Self,\n  ViewChild,\n  ViewEncapsulation,\n  OnDestroy,\n  signal,\n  untracked,\n  computed,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { IDataContext } from '../../../../common/data/data-context/data-context'\nimport { BehaviorSubject, combineLatest, EMPTY, Observable } from 'rxjs'\nimport {\n  map,\n  takeUntil,\n  tap,\n  skip,\n  filter,\n  switchMap,\n  take,\n  timeout,\n  catchError,\n} from 'rxjs/operators'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete'\nimport {\n  ELDER_SELECT_BASE,\n  ElderSelectBase,\n  ElderSelectComponentState,\n  TextResolverFn,\n} from '../../elder-select-base'\nimport { IElderEntityValueAccessor } from '../../../../common/forms/elder-entity-value-accessor'\nimport { MatFormFieldControl } from '@angular/material/form-field'\nimport { NgControl, FormsModule } from '@angular/forms'\nimport { FocusMonitor } from '@angular/cdk/a11y'\nimport { TranslateService, TranslateModule } from '@ngx-translate/core'\nimport { ElderAutocompleteOptionSelected } from '../../../input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected'\nimport { ElderStopEventPropagationDirective } from '../../../forms/directives/elder-stop-event-propagation.directive'\nimport { MatIconButton } from '@angular/material/button'\nimport { ElderAutocompleteDirective } from '../../../input/autocomplete/elder-autocomplete.directive'\nimport { ElderSelectOnTabDirective } from '../../elder-select-on-tab.directive'\nimport { MatInput } from '@angular/material/input'\nimport { MatTooltip } from '@angular/material/tooltip'\nimport { MatIcon } from '@angular/material/icon'\nimport { AsyncPipe } from '@angular/common'\nimport { ElderSuggestionPanelComponent } from '../../../input/autocomplete/elder-autocomplete/elder-suggestion-panel.component'\nimport { ElderAutoSelectSuggestFirstDirective } from '../../auto/elder-auto-select-suggest-first.directive'\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\n\nclass EntityContext<T> {\n  constructor(\n    public readonly value: T,\n    public readonly displayText: string,\n    public readonly displayRemove: boolean\n  ) {}\n}\n\n/**\n * The elder-select control allows to select a single\n * entity.\n *\n * Primary focus is on easy usage for common scenarios:\n *\n * - Integrated into angular forms and validation\n * - Support entity id handling, input / output is the entity id vs full value.\n *\n */\n@Component({\n  selector: 'elder-select',\n  templateUrl: './elder-select.component.html',\n  styleUrls: ['./elder-select.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    { provide: MatFormFieldControl, useExisting: ElderSelectComponent },\n    {\n      provide: ELDER_SELECT_BASE,\n      useExisting: forwardRef(() => ElderSelectComponent),\n    },\n  ],\n  imports: [\n    MatIcon,\n    MatTooltip,\n    MatInput,\n    MatAutocompleteTrigger,\n    FormsModule,\n    ElderSelectOnTabDirective,\n    ElderAutocompleteDirective,\n    ElderSuggestionPanelComponent,\n    MatIconButton,\n    ElderStopEventPropagationDirective,\n    TranslateModule,\n    ElderAutoSelectSuggestFirstDirective,\n  ],\n})\nexport class ElderSelectComponent<TEntity = any, TId = any, TValue = TEntity | TId>\n  extends ElderSelectBase<TId, TEntity, TValue>\n  implements IElderEntityValueAccessor<TEntity, TId, TValue>, OnDestroy\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _allowNull = false\n\n  @ViewChild('input')\n  public inputRef: ElementRef<HTMLInputElement>\n\n  /**\n   * String to display for the 'nothing' / null value.\n   */\n  @Input()\n  public nullDisplay = '-'\n\n  @Output()\n  public readonly entityIdChange: Observable<TId>\n\n  /**\n   * Similar to entity-id change, but emits only when the user\n   * has updated the value.\n   */\n  @Output()\n  public readonly entityIdUpdated: Observable<TId>\n\n  @Output()\n  public readonly entityChange: Observable<TEntity>\n\n  /**\n   * Similar to entity change, but emits only when the user\n   * has updated the value.\n   */\n  @Output()\n  public readonly entityUpdated: Observable<TEntity>\n\n  public readonly entityS = signal<TEntity>(undefined)\n\n  @Output('entity')\n  public readonly entity$ = toObservable<TEntity>(this.entityS)\n\n  private _autocomplete = false\n\n  public readonly entityWrapped = computed<EntityContext<TEntity>>(() =>\n    this.buildEntityContext(this.entityS(), this.displayPropertyResolverS())\n  )\n\n  public readonly inputText = computed<string>(() => {\n    const ctx = this.entityWrapped()\n    return ctx.value ? ctx.displayText : null\n  })\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    super('single-select')\n\n    this.entityIdChange = this.valueChange.pipe(map((v) => this.entityIdFromValue(v)))\n\n    this.entityChange = this.entity$.pipe(\n      skip(1) // Skip the initial or current value\n    )\n\n    this.entityIdUpdated = this.valueUpdated.pipe(map((value) => this.entityIdFromValue(value)))\n\n    this.entityUpdated = this.entityIdUpdated.pipe(\n      switchMap((entityId) => this.awaitEntityWithId(entityId, this.timeoutAfterMs)),\n      catchError((err) => {\n        this.logger.warn(`awaitEntityWithId -> timed out after: ${this.timeoutAfterMs}`, err)\n        return EMPTY\n      })\n    )\n  }\n\n  private buildEntityContext(\n    entity: TEntity,\n    displayPropertyFn: TextResolverFn\n  ): EntityContext<TEntity> {\n    return new EntityContext<TEntity>(entity, displayPropertyFn(entity), entity && this.allowNull)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnDestroy(): void {\n    this.autoCleanUp()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Bindings                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostBinding('class') get hostClass(): string {\n    return 'elder-select-base elder-select'\n  }\n\n  @HostBinding('class.mat-select-disabled') get disabledClass(): boolean {\n    return this.disabled\n  }\n\n  @HostBinding('class.mat-select-invalid') get errorStateClass(): boolean {\n    return this.errorState\n  }\n\n  @HostBinding('class.mat-select-required') get requiredClass(): boolean {\n    return this.required\n  }\n\n  @HostBinding('class.mat-select-empty') get emptyClass(): boolean {\n    return this.empty\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Behaviour Properties                                                    *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set autocomplete(value: BooleanInput) {\n    this._autocomplete = coerceBooleanProperty(value)\n  }\n\n  public get autocomplete(): boolean {\n    return this._autocomplete\n  }\n\n  /**\n   * Allows the user to select 'nothing' / null.\n   */\n  @Input()\n  public set allowNull(val: BooleanInput) {\n    this._allowNull = coerceBooleanProperty(val)\n  }\n\n  public get allowNull(): boolean {\n    return this._allowNull\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set entity(entity: TEntity) {\n    this.entityS.set(entity)\n    this.writeValueInternal(this.entityToValue(entity))\n    this.onEntityValueReady()\n  }\n\n  public get entity(): TEntity {\n    return untracked(this.entityS)\n  }\n\n  @Input()\n  public set entityId(id: TId) {\n    if (this.valueAsId) {\n      this.writeValueInternal((<any>id) as TValue)\n    } else {\n      this.selectEntityById(id)\n    }\n  }\n\n  public get entityId(): TId {\n    return this.entityIdFromValue(this.value)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onInputBlur(event: FocusEvent): void {\n    const input = event.target as HTMLInputElement\n    input.value = untracked(this.inputText)\n  }\n\n  public onInputFocus(autoTrigger: MatAutocompleteTrigger): void {\n    if (!this._autocomplete) {\n      this.openPanel(autoTrigger)\n    }\n  }\n\n  public get isOptionDisabledInternalFn(): (option: TEntity) => boolean {\n    return (option: TEntity) => {\n      if (!this.isEntitySelected(option)) {\n        if (this.isOptionDisabledFn) {\n          return this.isOptionDisabledFn(option)\n        } else {\n          return false\n        }\n      }\n      return true\n    }\n  }\n\n  public get isOptionHiddenInternalFn(): (option: TEntity) => boolean {\n    return (option: TEntity) => {\n      if (this.isOptionHiddenFn) {\n        return this.isOptionHiddenFn(option)\n      } else {\n        return false\n      }\n    }\n  }\n\n  public togglePanel(autoTrigger: MatAutocompleteTrigger): void {\n    if (autoTrigger.autocomplete.isOpen) {\n      autoTrigger.closePanel()\n    } else {\n      this.openPanel(autoTrigger)\n    }\n  }\n\n  public openPanel(autoTrigger: MatAutocompleteTrigger): void {\n    if (this.isLocked) {\n      this.logger.debug('Prevented opening autocomplete since select is locked!', autoTrigger)\n      return\n    }\n\n    this.logger.debug('Requesting to open auto-complete panel...', autoTrigger)\n    if (this.dataContext) {\n      try {\n        this.dataContext.start(this.sorts, this.filters)\n      } catch (err) {\n        this.logger.error('Failed to start DC!', err)\n        this.updateState(ElderSelectComponentState.error(err))\n      }\n    }\n    autoTrigger.openPanel()\n  }\n\n  public onInputClicked(autoTrigger: MatAutocompleteTrigger): void {\n    // this.logger.debug('onInputClicked, locked: ' + this.isLocked + ', autocomplete: ' + this.autocomplete, autoTrigger);\n    if (this.isLocked || this.autocomplete) {\n      return\n    }\n    this.openPanel(autoTrigger)\n    // this.togglePanel(autoTrigger);\n  }\n\n  public onOptionSelected(optionSelected: ElderAutocompleteOptionSelected<TEntity, TId>): void {\n    if (this.isLocked) {\n      this.logger.warn('Prevented selection option since this select is locked!')\n      return\n    }\n    const selectedEntity = optionSelected.entity\n    if (this.isEntitySelected(selectedEntity)) {\n      this.writeValueInternal(null) // HACK: Ensure we trigger view redraw\n    }\n    this.updateValueByEntity(selectedEntity)\n  }\n\n  public openSelectionPopup(event: Event): void {\n    if (this.selectionPopup) {\n      this.selectionPopup\n        .choose(\n          (e: TEntity) => this.getEntityId(e),\n          [], // TODO Or use current entity?\n          this.filters,\n          this.sorts,\n          false\n        )\n        .subscribe((selection: TEntity[]) => {\n          this.updateValueByEntity(selection[0])\n        })\n    } else {\n      this.logger.warn(\n        'Cant open selection browser popup, since [SelectionModelPopupDirective] was not found!'\n      )\n    }\n  }\n\n  public clear(event?: Event): void {\n    this.updateValue(null)\n  }\n\n  public updateValueByEntity(entity: TEntity): void {\n    this.entityS.set(entity)\n    this.updateValue(this.entityToValue(entity))\n  }\n\n  public focus(options?: FocusOptions) {\n    this.inputRef?.nativeElement?.focus(options)\n  }\n\n  public blur() {\n    this.inputRef?.nativeElement?.blur()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Abstract Implementation                                                 *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Occurs when the suggestions data-context has changed\n   */\n  protected onDataContextChanged(data: IDataContext<TEntity>): void {\n    if (this.valueAsId) {\n      this.selectEntityById(this.entityId)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  protected override valuesEquals(a: TValue, b: TValue): boolean {\n    return this.entityIdFromValue(a) === this.entityIdFromValue(b)\n  }\n\n  private awaitEntityWithId(entityId: TId, timeoutMs: number): Observable<TEntity> {\n    return this.entity$.pipe(\n      filter((entity) => this.getEntityId(entity) === entityId),\n      take(1),\n      timeout(timeoutMs)\n    )\n  }\n\n  private isEntitySelected(entity: TEntity): boolean {\n    return this.getEntityId(entity) === this.entityId\n  }\n\n  private entityIdFromValue(value: TValue): TId {\n    if (this.valueAsId) {\n      return (<any>value) as TId\n    } else {\n      const entity = (<any>value) as TEntity\n      return this.getEntityId(entity)\n    }\n  }\n\n  private selectEntityById(id: TId): void {\n    const currentEntity = this.entity\n    if (currentEntity && this.getEntityId(currentEntity) === id) {\n      this.onEntityValueReady()\n      return // Entity already loaded\n    }\n\n    if (id === null || id === undefined || id === '') {\n      if (currentEntity !== null && currentEntity !== undefined) {\n        this.entity = null\n      }\n    } else {\n      if (this.dataContext) {\n        const existing = this.findInDataContext(id)\n        if (existing) {\n          this.entity = existing\n        } else {\n          this.loadEntityById(id)\n        }\n      } else {\n        this.updateState(\n          ElderSelectComponentState.error(\n            'Failed to select value by Id: ' + id + ' - DataContext not available.'\n          )\n        )\n      }\n    }\n  }\n\n  private loadEntityById(id: TId): void {\n    this.updateState(ElderSelectComponentState.loading())\n    this.dataSourceOrThrow()\n      .findById(<any>id)\n      .subscribe({\n        next: (entity) => {\n          this.logger.debug('Loaded missing entity by id ' + id + ':', entity)\n          this.entity = entity\n        },\n        error: (err) => {\n          this.logger.error('Failed to load entity by id ' + id, err)\n          this.updateState(ElderSelectComponentState.error(err))\n        },\n      })\n  }\n\n  private onEntityValueReady(): void {\n    this.updateState(ElderSelectComponentState.idle())\n  }\n\n  private findInDataContext(id: TId): TEntity | null {\n    return this.dataContext.snapshot.data.find((v) => this.getEntityId(v) === id)\n  }\n\n  public entityToValue(entity: TEntity): TValue {\n    if (this.valueAsId) {\n      const id = this.getEntityId(entity)\n      return (<any>id) as TValue\n    } else {\n      return (<any>entity) as TValue\n    }\n  }\n\n  /**\n   * This method is invoked after a value has been written to this control.\n   *\n   */\n  protected override writeToControl(value: TValue): void {\n    if (this.valueAsId) {\n      const entityId = (<any>value) as TId\n      // Value was written as entity id, ensure we select entity by id\n      this.logger.debug('writeToControl: value was written as id: ' + entityId, value)\n      this.selectEntityById(entityId)\n    } else {\n      // Value was written as entity, ensure entity is updated\n      const currentEntity = this.entity\n      const newEntity = (<any>value) as TEntity\n      this.logger.debug(\n        'writeToControl: value was written as entity: ' + JSON.stringify(newEntity),\n        value\n      )\n      if (!this.isEqual(currentEntity, newEntity)) {\n        this.entityS.set(newEntity)\n      } else {\n        this.logger.debug('Ignored written entity as it is already set to entity$.')\n      }\n    }\n    super.writeToControl(value)\n  }\n}\n","@if (entityWrapped(); as entityWrapper) {\n  <div class=\"layout-row place-start-center elder-flex-control\">\n    @if (state(); as state) {\n      @if (state?.error || icon) {\n        <div class=\"elder-input-prefix-icon-container flex-none\">\n          @if (icon) {\n            <mat-icon\n              disabled\n              class=\"elder-mdc-control-icon elder-icon-small noselect clickable-icon\"\n              [class.loading]=\"state.loading\"\n              [color]=\"state?.error ? 'warn' : focused ? 'primary' : undefined\"\n              (click)=\"onCurrentClicked(entity)\"\n            >\n              {{ icon }}\n            </mat-icon>\n          } @else if (state?.error) {\n            <mat-icon\n              class=\"elder-mdc-control-icon elder-icon-small noselect\"\n              color=\"warn\"\n              [matTooltip]=\"state?.error\"\n            >\n              warning\n            </mat-icon>\n          }\n        </div>\n      }\n    }\n\n    <!-- A dynamic input -->\n    <input\n      #input\n      matInput\n      type=\"text\"\n      class=\"flex-grow elder-select-input mdc-text-field__input\"\n      [disabled]=\"!!disabled\"\n      [required]=\"!!required\"\n      [readonly]=\"readonly || !autocomplete\"\n      [name]=\"controlName + '-inner-input'\"\n      [placeholder]=\"placeholderS() | translate\"\n      [matAutocomplete]\n      #autoTrigger=\"matAutocompleteTrigger\"\n      [elderAutocomplete]=\"elderAuto\"\n      [queryFilter]=\"queryFilter\"\n      [filters]=\"filters\"\n      [sorts]=\"sorts\"\n      elderSelectOnTab\n      [class.elder-select-dropdown-input]=\"!autocomplete\"\n      [ngModel]=\"inputText()\"\n      [ngModelOptions]=\"{ standalone: true, updateOn: 'submit' }\"\n      (blur)=\"onInputBlur($event)\"\n      (focus)=\"onInputFocus(autoTrigger)\"\n      (click)=\"onInputClicked(autoTrigger)\"\n    />\n\n    <elder-suggestion-panel\n      #elderAuto=\"elderSuggestionPanel\"\n      [dataSource]=\"dataContextS()?.dataSource\"\n      [valueTemplate]=\"valueTemplate\"\n      enabled\n      [displayPropertyResolver]=\"displayPropertyResolverS()\"\n      [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n      [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n      elderAutoSelectSuggestFirst\n      (optionSelected)=\"onOptionSelected($any($event))\"\n    ></elder-suggestion-panel>\n\n    <div class=\"layout-row place-start-center flex-none\">\n      @if (!selectionPopup && !autocomplete && !entityWrapper.displayRemove) {\n        <mat-icon\n          class=\"elder-mdc-control-icon elder-select-arrow noselect\"\n          (click)=\"onInputClicked(autoTrigger)\"\n        >\n          arrow_drop_down\n        </mat-icon>\n      }\n\n      @if (selectionPopup && !entityWrapper.displayRemove) {\n        <button\n          mat-icon-button\n          type=\"button\"\n          class=\"elder-control-icon-button\"\n          [disabled]=\"isLocked\"\n          (click)=\"openSelectionPopup($event)\"\n          aria-label=\"Search\"\n          elderStopEventPropagation\n          tabIndex=\"-1\"\n        >\n          <mat-icon class=\"elder-mdc-control-icon\">search</mat-icon>\n        </button>\n      }\n\n      @if (entityWrapper.displayRemove && !this.readonlyS()) {\n        <button\n          mat-icon-button\n          type=\"button\"\n          class=\"elder-control-icon-button\"\n          [disabled]=\"isLockedS()\"\n          (click)=\"clear($event)\"\n          aria-label=\"Clear\"\n          elderStopEventPropagation\n          tabIndex=\"-1\"\n        >\n          <mat-icon class=\"elder-mdc-control-icon\">close</mat-icon>\n        </button>\n      }\n    </div>\n  </div>\n}\n","import { Directive, Input } from '@angular/core'\nimport { ElderSelectComponent } from '../../select/single/elder-select/elder-select.component'\nimport { ElderUnitService } from '../elder-unit.service'\nimport { LocalListDataSource } from '../../../common/data/datasource/local/local-list-data-source'\nimport { Unit } from '../model/unit'\nimport { UnitDimension } from '../model/unit-dimension'\nimport { Filter } from '../../../common/data/filters/filter'\nimport { SortUtil } from '../../../common/utils/sort-util'\nimport { FilterUtil } from '../../../common/utils/filter/filter-util'\n\n@Directive({\n  selector: '[elderUnitSelect]',\n  standalone: true,\n})\nexport class ElderUnitSelectDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private select: ElderSelectComponent,\n    private unitService: ElderUnitService\n  ) {\n    this.select.placeholder = 'context.unit'\n    this.select.displayProperty = 'unitSymbol'\n    this.select.dataSource = LocalListDataSource.from(\n      unitService.getAllUnitInfos(),\n      'unit',\n      SortUtil.sortData,\n      FilterUtil.filterData\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set unitDimension(unitDimension: UnitDimension) {\n    if (unitDimension) {\n      this.select.filters = [new Filter('dimension', unitDimension)]\n    } else {\n      this.resetFilters()\n    }\n  }\n\n  @Input()\n  public set baseUnit(baseUnit: Unit) {\n    if (baseUnit) {\n      this.unitDimension = this.unitService.getUnitDimension(baseUnit)\n    } else {\n      this.resetFilters()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private resetFilters() {\n    this.select.filters = []\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Input,\n  NgZone,\n  OnInit,\n  Optional,\n  Output,\n  Self,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core'\nimport { ElderFormFieldControlBase } from '../../../../common/forms/elder-form-field-control-base.directive'\nimport { Quantity } from '../../model/quantity'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { FocusMonitor } from '@angular/cdk/a11y'\nimport { TranslateModule, TranslateService } from '@ngx-translate/core'\nimport { FormsModule, NgControl } from '@angular/forms'\nimport { MatFormFieldControl } from '@angular/material/form-field'\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs'\nimport { filter, map } from 'rxjs/operators'\nimport { ElderUnitService } from '../../elder-unit.service'\nimport { AsyncPipe, formatNumber } from '@angular/common'\nimport { MatInput } from '@angular/material/input'\nimport { Unit } from '../../model/unit'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { ElderFormFieldNoSpinnerDirective } from '../../../forms/directives/elder-form-field-no-spinner.directive'\n\n@Component({\n  selector: 'elder-quantity-input',\n  templateUrl: './elder-quantity-input-control.component.html',\n  styleUrls: ['./elder-quantity-input-control.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: MatFormFieldControl, useExisting: ElderQuantityInputControlComponent }],\n  imports: [MatInput, FormsModule, ElderFormFieldNoSpinnerDirective, AsyncPipe, TranslateModule],\n})\nexport class ElderQuantityInputControlComponent\n  extends ElderFormFieldControlBase<Quantity>\n  implements OnInit\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  @ViewChild('input')\n  public inputRef: ElementRef<HTMLInputElement>\n  private readonly quantityInput$ = new BehaviorSubject<MatInput>(null)\n\n  /**\n   * Display format for the quantity value:\n   * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}\n   */\n  @Input()\n  public displayFormat: string = null\n\n  public readonly formattedValue$: Observable<string | number>\n\n  public readonly unitSymbol$: Observable<string>\n\n  private afterInit = false\n  private initialUnit: Unit\n  private initialQtyValue: number\n\n  private _hideUnit = false\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly unitService: ElderUnitService) {\n    super('quantity-input')\n\n    this.unitSymbol$ = this.value$.pipe(\n      map((v) => v?.unit),\n      map((unit) => {\n        if (unit) {\n          return this.unitService.getUnitSymbol(unit)\n        } else {\n          return ''\n        }\n      })\n    )\n\n    this.formattedValue$ = combineLatest([\n      this.quantityInput$.pipe(filter((input) => !!input)),\n      this.value$,\n    ]).pipe(\n      map(([input, quantity]) => {\n        const qtyValue = quantity?.value\n        if (!input?.focused && this.displayFormat && qtyValue) {\n          return formatNumber(qtyValue, 'en', this.displayFormat)\n            .replace(\"'\", '')\n            .replace('’', '')\n            .replace(',', '')\n        } else {\n          return qtyValue\n        }\n      })\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.value = Quantity.from(this.initialUnit, this.initialQtyValue)\n    this.afterInit = true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @ViewChild('quantityMatInput')\n  public set quantityInput(input: MatInput) {\n    this.quantityInput$.next(input)\n  }\n\n  @Output()\n  public get quantityValueChange(): Observable<number | null> {\n    return this.valueChange.pipe(map((q) => q?.value))\n  }\n\n  public get quantityValue(): number {\n    return this.value?.value\n  }\n\n  @Input()\n  public set quantityValue(quantityValue: number) {\n    if (this.afterInit) {\n      this.value = Quantity.from(this.value?.unit, quantityValue)\n    } else {\n      this.initialQtyValue = quantityValue\n    }\n  }\n\n  @Input()\n  public set unit(unit: Unit) {\n    if (this.afterInit) {\n      this.value = Quantity.from(unit, this.value?.value)\n    } else {\n      this.initialUnit = unit\n    }\n  }\n\n  @Output()\n  public get unitChange(): Observable<Unit | null> {\n    return this.valueChange.pipe(map((q) => q?.unit))\n  }\n\n  public get unit(): Unit {\n    return this.value?.unit\n  }\n\n  @Input()\n  public set hideUnit(hide: BooleanInput) {\n    this._hideUnit = coerceBooleanProperty(hide)\n  }\n\n  public get hideUnit() {\n    return this._hideUnit\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onQuantityValueChanged(value: number): void {\n    this.updateValue(Quantity.from(this.value?.unit, value))\n  }\n\n  public blur(): void {\n    this.inputRef?.nativeElement?.blur()\n  }\n\n  public focus(options: FocusOptions | undefined): void {\n    this.inputRef?.nativeElement?.focus(options)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Internal methods                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  protected override valuesEquals(a: Quantity, b: Quantity): boolean {\n    if (a === b) {\n      return true\n    }\n    return a?.value === b?.value && a?.unit === b?.unit\n  }\n}\n","<div class=\"layout-row place-start-baseline elder-flex-control\">\n  <input\n    #input\n    matInput\n    type=\"number\"\n    elderNoSpinner\n    #quantityMatInput=\"matInput\"\n    class=\"flex-grow elder-quantity-input mdc-text-field__input\"\n    [disabled]=\"!!disabled\"\n    [readonly]=\"readonly\"\n    [name]=\"controlName + '-inner-input'\"\n    [placeholder]=\"placeholderS() | translate\"\n    [ngModel]=\"formattedValue$ | async\"\n    [ngModelOptions]=\"{ standalone: true, updateOn: 'change' }\"\n    (ngModelChange)=\"onQuantityValueChanged($event)\"\n  />\n  @if (!hideUnit) {\n    <span class=\"mat-small elder-quantity-unit\">{{ unitSymbol$ | async }}</span>\n  }\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Input,\n  NgZone,\n  OnInit,\n  Optional,\n  Output,\n  Self,\n  ViewEncapsulation,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { MatFormFieldAppearance, MatFormFieldControl } from '@angular/material/form-field'\nimport { Dimensions } from '../../model/dimensions'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { Unit } from '../../model/unit'\nimport { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { ThemePalette } from '@angular/material/core'\nimport { ElderFormFieldControlBase } from '../../../../common/forms/elder-form-field-control-base.directive'\nimport { FocusMonitor } from '@angular/cdk/a11y'\nimport { TranslateService, TranslateModule } from '@ngx-translate/core'\nimport { NgControl } from '@angular/forms'\nimport { ElderQuantityInputControlComponent } from '../../quantity-input/quantity-input-control/elder-quantity-input-control.component'\nimport { AsyncPipe } from '@angular/common'\n\ntype DimensionsMode = 'length' | 'width' | 'height' | 'area' | 'volume'\n\nclass DimensionsContext {\n  public static of(mode: DimensionsMode): DimensionsContext {\n    switch (mode) {\n      case 'length':\n        return new DimensionsContext(true, false, false)\n      case 'width':\n        return new DimensionsContext(false, true, false)\n      case 'height':\n        return new DimensionsContext(false, false, true)\n      case 'area':\n        return new DimensionsContext(true, true, false)\n      case 'volume':\n        return new DimensionsContext(true, true, true)\n    }\n  }\n\n  constructor(\n    public readonly lengthActive: boolean,\n    public readonly widthActive: boolean,\n    public readonly heightActive: boolean\n  ) {}\n\n  public get isLengthLast(): boolean {\n    return this.lengthActive && !this.widthActive && !this.heightActive\n  }\n  public get isWidthLast(): boolean {\n    return this.widthActive && !this.heightActive\n  }\n  public get isHeightLast(): boolean {\n    return this.heightActive\n  }\n\n  public get isHeightFirst(): boolean {\n    return !this.lengthActive && !this.widthActive && this.heightActive\n  }\n  public get isWidthFirst(): boolean {\n    return !this.lengthActive && this.widthActive\n  }\n  public get isLengthFirst(): boolean {\n    return this.lengthActive\n  }\n}\n\n@Component({\n  selector: 'elder-dimensions-input',\n  templateUrl: './elder-dimensions-input.component.html',\n  styleUrls: ['./elder-dimensions-input.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: MatFormFieldControl, useExisting: ElderDimensionsInputComponent }],\n  imports: [ElderQuantityInputControlComponent, AsyncPipe, TranslateModule],\n})\nexport class ElderDimensionsInputComponent\n  extends ElderFormFieldControlBase<Dimensions>\n  implements OnInit\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private _requiredLength = false\n  private _requiredWidth = false\n  private _requiredHeight = false\n\n  @Input()\n  public name: string\n\n  @Input()\n  public appearance: MatFormFieldAppearance\n\n  @Input()\n  public color: ThemePalette\n\n  @Input()\n  public placeholderLength: string\n\n  @Input()\n  public placeholderWidth: string\n\n  @Input()\n  public placeholderHeight: string\n\n  /**\n   * Display format for the quantity value:\n   * {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}\n   */\n  @Input()\n  public displayFormat: string = null\n\n  private readonly defaultMode: DimensionsMode = 'volume'\n  private readonly mode$ = new BehaviorSubject<DimensionsMode>(this.defaultMode)\n  readonly context$ = new BehaviorSubject<DimensionsContext>(DimensionsContext.of(this.defaultMode))\n\n  private afterInit = false\n  private initialUnit: Unit\n  private initialLength: number\n  private initialWidth: number\n  private initialHeight: number\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    super('dimensions-input')\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.value = Dimensions.from(\n      this.initialUnit,\n      this.initialLength,\n      this.initialWidth,\n      this.initialHeight\n    )\n    this.afterInit = true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n  @Input()\n  public set mode(mode: DimensionsMode) {\n    this.mode$.next(mode ?? this.defaultMode)\n    this.context$.next(DimensionsContext.of(this.mode$.getValue()))\n  }\n\n  public get mode(): DimensionsMode {\n    return this.mode$.getValue()\n  }\n\n  @Input()\n  public set requiredLength(value: boolean) {\n    this._requiredLength = coerceBooleanProperty(value)\n  }\n\n  public get requiredLength(): boolean {\n    return this._requiredLength\n  }\n\n  @Input()\n  public set requiredWidth(value: boolean) {\n    this._requiredWidth = coerceBooleanProperty(value)\n  }\n\n  public get requiredWidth(): boolean {\n    return this._requiredWidth\n  }\n\n  @Input()\n  public set requiredHeight(value: boolean) {\n    this._requiredHeight = coerceBooleanProperty(value)\n  }\n\n  public get requiredHeight(): boolean {\n    return this._requiredHeight\n  }\n\n  @Output()\n  public get unitChange(): Observable<Unit | null> {\n    return this.valueChange.pipe(map((d) => d?.unit))\n  }\n\n  public get unit(): Unit {\n    return this.value?.unit\n  }\n\n  @Input()\n  public set unit(unit: Unit) {\n    if (this.afterInit) {\n      this.value = Dimensions.from(unit, this.value?.length, this.value?.width, this.value?.height)\n    } else {\n      this.initialUnit = unit\n    }\n  }\n\n  @Output()\n  public get lengthValueChange(): Observable<number | null> {\n    return this.valueChange.pipe(map((d) => d?.length))\n  }\n\n  public get lengthValue(): number | null {\n    return this.value?.length\n  }\n\n  @Input()\n  public set lengthValue(lengthValue: number | null) {\n    if (this.afterInit) {\n      this.value = this.dimensionsOfLength(lengthValue)\n    } else {\n      this.initialLength = lengthValue\n    }\n  }\n\n  @Output()\n  public get widthValueChange(): Observable<number | null> {\n    return this.valueChange.pipe(map((d) => d?.width))\n  }\n\n  public get widthValue(): number | null {\n    return this.value?.width\n  }\n\n  @Input()\n  public set widthValue(widthValue: number | null) {\n    if (this.afterInit) {\n      this.value = this.dimensionsOfWidth(widthValue)\n    } else {\n      this.initialWidth = widthValue\n    }\n  }\n\n  @Output()\n  public get heightValueChange(): Observable<number | null> {\n    return this.valueChange.pipe(map((d) => d?.height))\n  }\n\n  public get heightValue(): number | null {\n    return this.value?.height\n  }\n\n  @Input()\n  public set heightValue(heightValue: number | null) {\n    if (this.afterInit) {\n      this.value = this.dimensionsOfHeight(heightValue)\n    } else {\n      this.initialHeight = heightValue\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onLengthValueChanged(value: number): void {\n    this.updateValue(this.dimensionsOfLength(value))\n  }\n\n  public onWidthValueChanged(value: number): void {\n    this.updateValue(this.dimensionsOfWidth(value))\n  }\n\n  public onHeightValueChanged(value: number): void {\n    this.updateValue(this.dimensionsOfHeight(value))\n  }\n\n  public blur(): void {\n    // TODO this.inputRef?.nativeElement?.blur();\n  }\n\n  public focus(options: FocusOptions | undefined): void {\n    // TODO this.inputRef?.nativeElement?.focus(options);\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Protected                                                               *\n   *                                                                         *\n   **************************************************************************/\n\n  protected override valuesEquals(a: Dimensions, b: Dimensions): boolean {\n    if (a === b) {\n      return true\n    }\n    return (\n      a?.length === b?.length &&\n      a?.width === b?.width &&\n      a?.height === b?.height &&\n      a?.unit === b?.unit\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private dimensionsOfLength(value: number) {\n    return Dimensions.from(this.unit, value, this.widthValue, this.heightValue)\n  }\n\n  private dimensionsOfWidth(value: number) {\n    return Dimensions.from(this.unit, this.lengthValue, value, this.heightValue)\n  }\n\n  private dimensionsOfHeight(value: number) {\n    return Dimensions.from(this.unit, this.lengthValue, this.widthValue, value)\n  }\n}\n","@if (context$ | async; as context) {\n  <div role=\"group\" class=\"layout-row place-start-baseline g-md full\">\n    <!-- elder-form-field-small -->\n    @if (context.lengthActive) {\n      <elder-quantity-input\n        [quantityValue]=\"lengthValue\"\n        (quantityValueChange)=\"onLengthValueChanged($event)\"\n        [unit]=\"unit\"\n        [placeholder]=\"(placeholderLength ? placeholderLength : 'dimensions.length') | translate\"\n        [displayFormat]=\"displayFormat\"\n        [readonly]=\"readonly\"\n        [disabled]=\"disabled\"\n        [hideUnit]=\"!context.isLengthLast\"\n      >\n      </elder-quantity-input>\n    }\n    @if (context.lengthActive && context.widthActive) {\n      <span class=\"noselect\">&times;</span>\n    }\n    @if (context.widthActive) {\n      <elder-quantity-input\n        [quantityValue]=\"widthValue\"\n        (quantityValueChange)=\"onWidthValueChanged($event)\"\n        [unit]=\"unit\"\n        [displayFormat]=\"displayFormat\"\n        [placeholder]=\"(placeholderWidth ? placeholderWidth : 'dimensions.width') | translate\"\n        [readonly]=\"readonly\"\n        [disabled]=\"disabled\"\n        [hideUnit]=\"!context.isWidthLast\"\n      >\n      </elder-quantity-input>\n    }\n    @if (context.widthActive && context.heightActive) {\n      <span class=\"noselect\">&times;</span>\n    }\n    @if (context.heightActive) {\n      <elder-quantity-input\n        [quantityValue]=\"heightValue\"\n        (quantityValueChange)=\"onHeightValueChanged($event)\"\n        [unit]=\"unit\"\n        [displayFormat]=\"displayFormat\"\n        [placeholder]=\"(placeholderHeight ? placeholderHeight : 'dimensions.height') | translate\"\n        [readonly]=\"readonly\"\n        [disabled]=\"disabled\"\n      >\n      </elder-quantity-input>\n    }\n    <!--\n    [requiredIgnoreZero]=\"requiredIgnoreZero\"\n    [elderMultipleOf]=\"multipleOf\" ngModel\n    [min]=\"min\"\n    [max]=\"max\"\n    [required]=\"requiredLength\"\n    -->\n  </div>\n}\n","import { Directive, Input } from '@angular/core'\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { Quantity } from '../../model/quantity'\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector:\n    'elder-quantity-input[required][formControl],elder-quantity-input[required][formControlName],elder-quantity-input[required][ngModel]',\n  providers: [{ provide: NG_VALIDATORS, useExisting: ElderRequiredQuantityValidator, multi: true }],\n  standalone: true,\n})\nexport class ElderRequiredQuantityValidator implements Validator {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private _required: boolean\n  private _requiredIgnoreZero: boolean = false\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set requiredIgnoreZero(value: BooleanInput) {\n    this._requiredIgnoreZero = coerceBooleanProperty(value)\n  }\n\n  public get requiredIgnoreZero(): boolean {\n    return this._requiredIgnoreZero\n  }\n\n  @Input()\n  public set required(value: BooleanInput) {\n    this._required = coerceBooleanProperty(value)\n  }\n\n  public get required(): boolean {\n    return this._required\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public validate(c: AbstractControl): ValidationErrors | any {\n    let result = {}\n\n    if (this.required && !this.isQuantityDefined(c.value)) {\n      result = Object.assign(result, { required: { valid: false } })\n    }\n    // this.log.info('\"' + c.value + '\" --> validate result: ' + JSON.stringify(result), c);\n    return result\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private isQuantityDefined(qty: Quantity): boolean {\n    if (qty?.value != null && qty?.unit != null) {\n      return !(this._requiredIgnoreZero && qty.value === 0)\n    }\n    return false\n  }\n}\n","import { Directive, Input } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms'\nimport { Quantity } from '../../model/quantity'\nimport { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion'\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector:\n    'elder-quantity-input[min][formControl],elder-quantity-input[min][formControlName],elder-quantity-input[min][ngModel],' +\n    'elder-quantity-input[max][formControl],elder-quantity-input[max][formControlName],elder-quantity-input[max][ngModel]',\n  providers: [{ provide: NG_VALIDATORS, useExisting: ElderQuantityRangeValidator, multi: true }],\n  standalone: true,\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class ElderQuantityRangeValidator implements Validator {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private _min: number\n  private _max: number\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  // TODO Maybe support minQuantity / maxQuantity\n\n  /**\n   * Minimum number allowed.\n   */\n  @Input()\n  public set min(value: NumberInput) {\n    this._min = coerceNumberProperty(value)\n  }\n\n  public get min(): number {\n    return this._min\n  }\n\n  /**\n   * Maximum number allowed.\n   */\n  @Input()\n  public set max(value: NumberInput) {\n    this._max = coerceNumberProperty(value)\n  }\n\n  public get max(): number {\n    return this._max\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public validate(c: AbstractControl): ValidationErrors | any {\n    let result = {}\n    const qty = c.value as Quantity\n\n    if (this._min != null && !this.isAtLeast(qty, this._min)) {\n      result = Object.assign(result, { min: { min: this._min, actual: qty?.value } })\n    }\n    if (this._max != null && !this.isAtMost(qty, this._max)) {\n      result = Object.assign(result, { max: { max: this._max, actual: qty?.value } })\n    }\n\n    return result\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private isAtLeast(quantity: Quantity, minValue: number): boolean {\n    return quantity?.value >= minValue\n  }\n\n  private isAtMost(quantity: Quantity, maxValue: number): boolean {\n    return quantity?.value <= maxValue\n  }\n}\n","import { Directive, Input } from '@angular/core'\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { Dimensions } from '../../model/dimensions'\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector:\n    'elder-dimensions-input[required][formControl],elder-dimensions-input[required][formControlName],elder-dimensions-input[required][ngModel]',\n  providers: [\n    { provide: NG_VALIDATORS, useExisting: ElderRequiredDimensionsValidator, multi: true },\n  ],\n  standalone: true,\n})\nexport class ElderRequiredDimensionsValidator implements Validator {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private _required: boolean\n  private _requiredIgnoreZero: boolean = false\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set requiredIgnoreZero(value: BooleanInput) {\n    this._requiredIgnoreZero = coerceBooleanProperty(value)\n  }\n\n  public get requiredIgnoreZero(): boolean {\n    return this._requiredIgnoreZero\n  }\n\n  @Input()\n  public set required(value: BooleanInput) {\n    this._required = coerceBooleanProperty(value)\n  }\n\n  public get required(): boolean {\n    return this._required\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public validate(c: AbstractControl): ValidationErrors | any {\n    let result = {}\n\n    if (this.required && !this.isDimensionsDefined(c.value)) {\n      result = Object.assign(result, { required: { valid: false } })\n    }\n    // this.log.info('\"' + c.value + '\" --> validate result: ' + JSON.stringify(result), c);\n    return result\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private isDimensionsDefined(dimensions: Dimensions): boolean {\n    if (dimensions?.unit != null) {\n      if (!this.isValueDefined(dimensions.length)) {\n        return false\n      }\n      if (!this.isValueDefined(dimensions.width)) {\n        return false\n      }\n      if (!this.isValueDefined(dimensions.height)) {\n        return false\n      }\n      return true\n    }\n    return false\n  }\n\n  private isValueDefined(value: number): boolean {\n    if (value != null) {\n      return !(this._requiredIgnoreZero && value === 0)\n    }\n    return false\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule, DecimalPipe } from '@angular/common'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatInputModule } from '@angular/material/input'\nimport { FormsModule } from '@angular/forms'\nimport { RouterModule } from '@angular/router'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderQuantityFormFieldComponent } from './quantity-input/quantity-form-field/elder-quantity-form-field.component'\nimport { ElderQuantityPipe } from './elder-quantity.pipe'\nimport { ElderFormsDirectivesModule } from '../forms/directives/elder-forms-directives.module'\nimport { ElderQuantityTransformPipe } from './elder-quantity-transform.pipe'\nimport { ElderUnitSelectDirective } from './directives/elder-unit-select.directive'\nimport { ElderDimensionsInputComponent } from './dimensions/dimensions-input/elder-dimensions-input.component'\nimport { ElderQuantityInputControlComponent } from './quantity-input/quantity-input-control/elder-quantity-input-control.component'\nimport { ElderRequiredQuantityValidator } from './quantity-input/validation/elder-required-quantity.validator'\nimport { ElderQuantityRangeValidator } from './quantity-input/validation/elder-quantity-range.validator'\nimport { ElderRequiredDimensionsValidator } from './dimensions/validation/elder-required-dimensions.validator'\n\nexport * from './elder-quantity.pipe'\nexport * from './elder-quantity-transform.pipe'\nexport * from './quantity-input/quantity-form-field/elder-quantity-form-field.component'\nexport * from './quantity-input/quantity-input-control/elder-quantity-input-control.component'\nexport * from './quantity-input/validation/elder-required-quantity.validator'\nexport * from './quantity-input/validation/elder-quantity-range.validator'\nexport * from './elder-unit.service'\nexport * from './directives/elder-unit-select.directive'\nexport * from './dimensions/dimensions-input/elder-dimensions-input.component'\nexport * from './dimensions/validation/elder-required-dimensions.validator'\n\n@NgModule({\n  imports: [\n    // Angular\n    CommonModule,\n    RouterModule,\n    FormsModule,\n    // Third Party\n    TranslateModule,\n    // Angular Material\n    MatIconModule,\n    MatInputModule,\n    // ElderByte\n    ElderFormsDirectivesModule,\n    ElderQuantityFormFieldComponent,\n    ElderQuantityPipe,\n    ElderQuantityTransformPipe,\n    ElderUnitSelectDirective,\n    ElderDimensionsInputComponent,\n    ElderQuantityInputControlComponent,\n    ElderRequiredQuantityValidator,\n    ElderQuantityRangeValidator,\n    ElderRequiredDimensionsValidator,\n  ],\n  exports: [\n    ElderQuantityFormFieldComponent,\n    ElderQuantityPipe,\n    ElderQuantityTransformPipe,\n    ElderUnitSelectDirective,\n    ElderDimensionsInputComponent,\n    ElderQuantityInputControlComponent,\n    ElderRequiredQuantityValidator,\n    ElderQuantityRangeValidator,\n    ElderRequiredDimensionsValidator,\n  ],\n  providers: [DecimalPipe, ElderQuantityPipe, ElderQuantityTransformPipe],\n})\nexport class ElderMeasuresModule {}\n","export class TextRange {\n  constructor(\n    public start: number,\n    public end: number,\n    public value: string\n  ) {}\n}\n\nexport class ReplacementResult {\n  constructor(\n    public newText: string,\n    public replaced: TextRange\n  ) {}\n}\n\nexport class WordPositionFinder {\n  public findWord(text: string, position: number): TextRange {\n    if (position >= 0) {\n      // Search for the word's beginning and end.\n      const left = text.slice(0, position).search(/\\S+$/)\n      let right = text.slice(position).search(/\\s/)\n\n      // The last word in the string is a special case.\n      if (right < 0) {\n        right = text.length\n      } else {\n        right += position\n      }\n      const word = text.substring(left, right)\n      return new TextRange(left, right, word)\n    } else {\n      return new TextRange(text.length, text.length, undefined)\n    }\n  }\n\n  public replaceWord(text: string, position: number, replacement: string): ReplacementResult {\n    const current = this.findWord(text, position)\n\n    const beforePos = current.start\n    const before = text.substring(0, beforePos)\n    const after = text.substring(current.end, text.length)\n\n    let newText = ''\n    if (before) {\n      newText += before.trim()\n    }\n\n    if (replacement) {\n      if (newText) {\n        newText += ' '\n      }\n      newText += replacement\n    }\n\n    if (after) {\n      if (newText) {\n        newText += ' '\n      }\n      newText += after.trim()\n    }\n\n    return new ReplacementResult(\n      newText,\n      new TextRange(beforePos, beforePos + replacement.length, replacement)\n    )\n  }\n}\n","import { Directive, ElementRef, HostListener, Input, OnDestroy, OnInit } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { merge, Subject } from 'rxjs'\nimport { debounceTime, filter, map, skipWhile, takeUntil } from 'rxjs/operators'\nimport { ElderSuggestionPanelComponent } from './elder-autocomplete/elder-suggestion-panel.component'\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete'\nimport { Filter } from '../../../common/data/filters/filter'\nimport { Sort } from '../../../common/data/sort'\nimport { IDataContext } from '../../../common/data/data-context/data-context'\nimport { TextResolverFn } from '../../select/elder-select-base'\nimport { WordPositionFinder } from './many/word-position-finder'\nimport { ElderAutocompleteOptionSelected } from './elder-autocomplete/elder-autocomplete-option-selected'\n\n@Directive({\n  selector: '[elderAutocompleteMany]',\n  standalone: true,\n})\nexport class ElderAutocompleteManyDirective<T> implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public queryFilter = 'query'\n\n  @Input()\n  public filters: Filter[] = []\n\n  @Input()\n  public sorts: Sort[] = []\n\n  /**\n   * The property on a suggestion object which is used\n   * as the display and insert value.\n   */\n  @Input()\n  public textProperty: string\n\n  @Input()\n  public textPropertyResolverFn: TextResolverFn = (option: any) => {\n    if (!option) {\n      return option\n    } else if (typeof option === 'string') {\n      return option as string\n    } else if (this.textProperty) {\n      return option[this.textProperty] as string\n    } else {\n      return undefined\n    }\n  }\n\n  public readonly inputKeyup$ = new Subject<KeyboardEvent>()\n\n  private readonly ignoreKeys = ['ArrowRight', 'ArrowUp', 'ArrowDown', 'ArrowLeft']\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n  private readonly wordFinder: WordPositionFinder\n\n  private _elderAutocomplete: ElderSuggestionPanelComponent\n\n  private readonly destroy$ = new Subject<void>()\n  private readonly destroyAutocompleteBinding$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly autoCompleteTrigger: MatAutocompleteTrigger,\n    private readonly inputRef: ElementRef<HTMLInputElement>\n  ) {\n    this.wordFinder = new WordPositionFinder()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input('elderAutocompleteMany')\n  public set autocomplete(auto: ElderSuggestionPanelComponent) {\n    this._elderAutocomplete = auto\n    this.destroyAutocompleteBinding$.next()\n    if (auto) {\n      auto.matAutocomplete$\n        .pipe(\n          takeUntil(this.destroyAutocompleteBinding$),\n          filter((matAuto) => !!matAuto)\n        )\n        .subscribe((matAuto) => (this.autoCompleteTrigger.autocomplete = matAuto))\n\n      auto.optionSelected\n        .pipe(takeUntil(this.destroyAutocompleteBinding$))\n        .subscribe((event) => this.onOptionSelected(event))\n    }\n  }\n\n  public get autocomplete(): ElderSuggestionPanelComponent {\n    return this._elderAutocomplete\n  }\n\n  private get cursorPosition(): number | null {\n    if (this.inputRef?.nativeElement) {\n      return this.inputRef.nativeElement.selectionStart\n    }\n    return null\n  }\n\n  private set cursorPosition(position: number) {\n    if (this.inputRef?.nativeElement) {\n      this.inputRef.nativeElement.selectionStart = position\n      this.inputRef.nativeElement.selectionEnd = position\n    }\n  }\n\n  private get dataContext(): IDataContext<any> {\n    return this._elderAutocomplete.dataContext\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Listener                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('keyup', ['$event'])\n  public onKeyUp(event: KeyboardEvent) {\n    if (this.ignoreKeys.some((k) => k === event.key)) {\n      return\n    }\n    this.inputKeyup$.next(event)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this._elderAutocomplete.displayPropertyResolver = this.textPropertyResolverFn\n    this._elderAutocomplete.optionValueConverterFn = (option: T) => {\n      const suggestion = this.resolveSuggestionText(option)\n      return this.insertSuggestion(suggestion)\n    }\n\n    merge(\n      this.inputKeyup$.pipe(\n        skipWhile((e) => !this._elderAutocomplete.enabled),\n        debounceTime(150),\n        map((e) => (e?.target as HTMLInputElement)?.value),\n        map((value) => this.extractWordAtCursor(value))\n      ),\n      this.autocomplete.triggerReload$\n    )\n      .pipe(\n        takeUntil(this.destroy$),\n        filter((value) => !value || typeof value === 'string' || typeof value === 'number')\n      )\n      .subscribe((value) => this.updateSuggestions(value))\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n    this.destroyAutocompleteBinding$.next()\n    this.destroyAutocompleteBinding$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private extractWordAtCursor(value: string): string {\n    if (this.cursorPosition) {\n      const cursor = this.cursorPosition\n      return this.extractWordFrom(value, cursor)\n    } else {\n      return null\n    }\n  }\n\n  private cursorBeforeAutocomplete: number\n  private rememberCursorPosition(): void {\n    this.cursorBeforeAutocomplete = this.cursorPosition\n  }\n\n  private extractWordFrom(text: string, position: number): string {\n    const word = this.wordFinder.findWord(text, position)\n    return word.value\n  }\n\n  private updateSuggestions(value: string | number | undefined | null): void {\n    const filters = [...this.filters, new Filter(this.queryFilter, <any>value)]\n    const sorts = this.sorts\n    if (this.dataContext) {\n      try {\n        this.rememberCursorPosition()\n        this.dataContext.start(sorts, filters)\n      } catch (err) {\n        this.log.error('Failed to start DataContext!', err)\n      }\n    }\n  }\n\n  private insertSuggestion(suggestion: string): string {\n    const currentValue = this.currentInputValue()\n    if (!suggestion) {\n      return currentValue\n    }\n    if (this.cursorPosition !== undefined) {\n      const cursor = this.cursorPosition\n      const replacement = this.wordFinder.replaceWord(currentValue, cursor, suggestion)\n      return replacement.newText\n    } else {\n      this.log.warn('Insert not possible as no cursor-position was available!')\n      return currentValue\n    }\n  }\n\n  private currentInputValue(): string {\n    const input = this.inputRef?.nativeElement\n    return input?.value ?? ''\n  }\n\n  private resolveSuggestionText(option: T): string {\n    return this.textPropertyResolverFn(option)\n  }\n\n  private onOptionSelected(event: ElderAutocompleteOptionSelected): void {\n    const wordAtCursor = this.wordFinder.findWord(\n      this.currentInputValue(),\n      this.cursorBeforeAutocomplete\n    )\n    const autocompletedPhrase = this.resolveSuggestionText(event.entity)\n    // The wordAtCursor might not be the full autocompleted phrase (if there are multiple words)\n    this.cursorPosition = wordAtCursor.start + autocompletedPhrase.length\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderSuggestionPanelComponent } from './elder-autocomplete/elder-suggestion-panel.component'\nimport { MatAutocompleteModule } from '@angular/material/autocomplete'\nimport { ElderInfiniteScrollModule } from '../../infinitescroll/elder-infinite-scroll.module'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatProgressBarModule } from '@angular/material/progress-bar'\nimport { ElderAutocompleteDirective } from './elder-autocomplete.directive'\nimport { ReactiveFormsModule } from '@angular/forms'\nimport { MatInputModule } from '@angular/material/input'\nimport { ElderAutocompleteManyDirective } from './elder-autocomplete-many.directive'\n\nexport { ElderSuggestionPanelComponent } from './elder-autocomplete/elder-suggestion-panel.component'\nexport { ElderAutocompleteManyDirective } from './elder-autocomplete-many.directive'\nexport { ElderAutocompleteDirective } from './elder-autocomplete.directive'\n\n@NgModule({\n  exports: [\n    ElderSuggestionPanelComponent,\n    ElderAutocompleteDirective,\n    ElderAutocompleteManyDirective,\n  ],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    MatInputModule,\n    MatAutocompleteModule,\n    ElderInfiniteScrollModule,\n    MatIconModule,\n    MatProgressBarModule,\n    ElderSuggestionPanelComponent,\n    ElderAutocompleteDirective,\n    ElderAutocompleteManyDirective,\n  ],\n})\nexport class ElderAutocompleteModule {}\n","import { Directive, HostBinding, inject, Input, Output } from '@angular/core'\nimport { ElderSelectBase, ElderSelectComponentState } from '../elder-select-base'\nimport { IDataContext } from '../../../common/data/data-context/data-context'\nimport { BehaviorSubject, EMPTY, Observable, of, throwError } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { catchError, filter, map, switchMap, take, tap, timeout } from 'rxjs/operators'\nimport { Sets } from '../../../common/sets'\nimport { IElderMultiEntityValueAccessor } from '../../../common/forms/elder-multi-entity-value-accessor'\nimport { Sort } from '../../../common/data/sort'\nimport { SortUtil } from '../../../common/utils/sort-util'\nimport { ElderDialogService } from '../../dialogs/elder-dialog.service'\nimport { Arrays } from '../../../common/arrays'\nimport { ValueChangeEvent } from '../../../common/forms/value-change-event'\nimport { EntitiesChangeEvent } from '../../../common/forms/entities-change-event'\n\n/**\n * Base component implementation of elder-multi-select.\n *\n * Multi Select has the following abstract concept:\n *\n * - Suggestion-Model: A DataSource and derived DataContext for the (auto-complete) suggestions.\n * - The backing Value is a list of the current selected entities. T[]\n *\n */\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class ElderMultiSelectBase<TId, TEntity, TValue>\n  extends ElderSelectBase<TId, TEntity, TValue[]>\n  implements IElderMultiEntityValueAccessor<TEntity, TId, TValue>\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _entityIds$: Observable<TId[]>\n  private readonly _entities$ = new BehaviorSubject<TEntity[]>([])\n  private readonly dialogService = inject(ElderDialogService)\n\n  /**\n   * Defines how the entities should be sorted locally.\n   * This affects how entities are displayed when more than\n   * one is selected, such as in a chip list.\n   */\n  @Input()\n  public entitiesSorts: Sort[] = []\n\n  /**\n   * If enabled, before removing selected entities\n   * the user will be prompted to confirm.\n   */\n  @Input()\n  public confirmRemoval = false\n\n  @Output()\n  public readonly entitiesChangeEvent: Observable<EntitiesChangeEvent<TId, TEntity>> =\n    this.valueChangeEvent.pipe(switchMap((event) => this.buildEntitiesChangeEvent(event)))\n\n  /***************************************************************************\n   *                                                                         *\n   * Deprecated Outputs                                                      *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * @deprecated Switch to entitiesChangeEvent\n   */\n  @Output()\n  public readonly entitiesChange: never\n\n  // @Output()\n  // public readonly entitiesChange: Observable<TEntity[]> = this.entitiesChangeEvent.pipe(\n  //   map((event) => event.entitiesAfter)\n  // )\n\n  /**\n   * @deprecated Switch to entitiesChangeEvent (filter by userInitiated)\n   */\n  @Output()\n  public readonly entitiesUpdated: never\n\n  // @Output()\n  // public readonly entitiesUpdated: Observable<TEntity[]> = this.entitiesChangeEvent.pipe(\n  //   filter((event) => event.userInitiated),\n  //   map((event) => event.entitiesAfter)\n  // )\n\n  /**\n   * @deprecated Switch to entitiesChangeEvent\n   */\n  @Output()\n  public readonly entityIdsChange: never\n\n  // @Output()\n  // public readonly entityIdsChange: Observable<TId[]> = this.entitiesChangeEvent.pipe(\n  //   map((event) => event.idsAfter)\n  // )\n\n  /**\n   * @deprecated Switch to entitiesChangeEvent (filter by userInitiated)\n   */\n  @Output()\n  public readonly entityIdsUpdated: never\n\n  // @Output()\n  // public readonly entityIdsUpdated: Observable<TId[]> = this.entitiesChangeEvent.pipe(\n  //   filter((event) => event.userInitiated),\n  //   map((event) => event.idsAfter)\n  // )\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor(controlType: string) {\n    super(controlType)\n    this._entityIds$ = this.value$.pipe(map((values) => this.entityIdsFromValues(values)))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Bindings                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostBinding('class') get hostClass(): string {\n    return 'elder-select-base elder-multi-select'\n  }\n\n  @HostBinding('class.mat-select-disabled') get disabledClass(): boolean {\n    return this.disabled\n  }\n\n  @HostBinding('class.mat-select-invalid') get errorStateClass(): boolean {\n    return this.errorState\n  }\n\n  @HostBinding('class.mat-select-required') get requiredClass(): boolean {\n    return this.required\n  }\n\n  @HostBinding('class.mat-select-empty') get emptyClass(): boolean {\n    return this.empty\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get entities$(): Observable<TEntity[]> {\n    return this._entities$.asObservable()\n  }\n\n  public get entityIds$(): Observable<TId[]> {\n    return this._entityIds$\n  }\n\n  @Input()\n  public set entities(entities: TEntity[]) {\n    if (!this.equalEntitiesExactOrder(this.entities, entities)) {\n      this.writeValueInternal(this.entitiesToValues(this.writeEntitiesSorted(entities)))\n    }\n  }\n\n  public get entities(): TEntity[] {\n    return this._entities$.getValue()\n  }\n\n  @Input()\n  public set entityIds(ids: TId[]) {\n    if (!this.equalIdsExactOrder(this.entityIds, ids)) {\n      if (this.valueAsId) {\n        this.writeValueInternal((<any>ids) as TValue[])\n      } else {\n        this.selectEntitiesByIds(ids)\n      }\n    }\n  }\n\n  public get entityIds(): TId[] {\n    return this.entityIdsFromValues(this.value)\n  }\n\n  public get isOptionDisabledInternalFn(): (option: TEntity) => boolean {\n    return (option: TEntity) => {\n      if (this.isOptionDisabledFn) {\n        return this.isOptionDisabledFn(option)\n      } else {\n        return false\n      }\n    }\n  }\n\n  public get isOptionHiddenInternalFn(): (option: TEntity) => boolean {\n    return (option: TEntity) => {\n      if (this.isAlreadyPresent(option)) {\n        return true\n      }\n      if (this.isOptionHiddenFn) {\n        return this.isOptionHiddenFn(option)\n      } else {\n        return false\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public updateValueByEntities(entities: TEntity[]): void {\n    entities = this.writeEntitiesSorted(entities)\n    this.updateValue(this.entitiesToValues(entities))\n  }\n\n  public appendEntities(newEntities: TEntity[]): void {\n    const current = this.entities ? this.entities : []\n    this.updateValueByEntities([...current, ...newEntities])\n  }\n\n  public appendEntity(newEntity: any): void {\n    this.appendEntities([newEntity])\n  }\n\n  public requestRemoveEntity(toRemove: TEntity, skipConfirm?: boolean): void {\n    if (toRemove !== undefined && toRemove !== null) {\n      this.requestRemoveEntities([toRemove], skipConfirm)\n    }\n  }\n\n  public requestRemoveEntities(toRemove: TEntity[], skipConfirm?: boolean): void {\n    this.dialogService.confirmDelete(\n      {\n        deletionCount: toRemove.length,\n        confirmRemoval: this.confirmRemoval,\n        skipConfirm: skipConfirm,\n      },\n      () => this.removeEntities(toRemove)\n    )\n  }\n\n  public removeEntities(toRemove: TEntity[]): void {\n    toRemove.forEach((e) => this.removeEntity(e))\n  }\n\n  public removeEntity(toRemove: TEntity): void {\n    const remaining = this.entities.filter((l) => !this.isEqual(l, toRemove))\n    this.updateValueByEntities(remaining)\n  }\n\n  public openSelectionPopup(event: Event): void {\n    if (this.selectionPopup) {\n      this.selectionPopup\n        .choose((e: TEntity) => this.getEntityId(e), this.entities, this.filters, this.sorts, true)\n        .subscribe((selection: TEntity[]) => this.updateValueByEntities(selection))\n    } else {\n      this.logger.warn(\n        'Cant open selection browser popup, since [SelectionModelPopupDirective] was not found!'\n      )\n    }\n  }\n\n  public entityToValue(entity: TEntity): TValue {\n    if (this.valueAsId) {\n      const id = this.getEntityId(entity)\n      return (<any>id) as TValue\n    } else {\n      return (<any>entity) as TValue\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Internal Methods                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  protected override valuesEquals(a: TValue[], b: TValue[]): boolean {\n    return this.equalIdsExactOrder(this.entityIdsFromValues(a), this.entityIdsFromValues(b))\n  }\n\n  protected onDataContextChanged(data: IDataContext<TEntity>): void {\n    if (this.valueAsId) {\n      this.selectEntitiesByIds(this.entityIds)\n    }\n  }\n\n  /**\n   * This method is invoked after a value has been written to this control.\n   *\n   */\n  protected override writeToControl(value: TValue[]): void {\n    if (this.valueAsId) {\n      const entityIds = (<any>value) as TId[]\n      // Value was written as entity ids, ensure we select entity by id\n      this.logger.debug('writeToControl: value was written as ids: ' + entityIds, value)\n      this.selectEntitiesByIds(entityIds)\n    } else {\n      // Value was written as entity, ensure entity is updated\n      const currentEntities = this.entities\n      const newEntities = (<any>value) as TEntity[]\n      this.logger.debug(\n        'writeToControl: value was written as entities (size): ' + newEntities?.length,\n        value\n      )\n      if (!this.equalEntities(currentEntities, newEntities)) {\n        this.writeEntitiesSorted(newEntities)\n      } else {\n        this.logger.warn('Ignored written entities as they are already set to entities$!')\n      }\n    }\n    super.writeToControl(value)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildEntitiesChangeEvent(\n    event: ValueChangeEvent<TValue[]>\n  ): Observable<EntitiesChangeEvent<TId, TEntity>> {\n    const beforeIds = new Set<TId>(this.entityIdsFromValues(event.valueBefore))\n    const afterIds = new Set<TId>(this.entityIdsFromValues(event.valueAfter))\n    return this.awaitEntitiesWithIdToMap(afterIds, this.timeoutAfterMs).pipe(\n      map(\n        (awaited) => new EntitiesChangeEvent<TId, TEntity>(beforeIds, awaited, event.userInitiated)\n      )\n    )\n  }\n\n  private awaitEntitiesWithIdToMap(\n    entityIds: Set<TId>,\n    timeoutMs: number\n  ): Observable<Map<TId, TEntity>> {\n    return this._entities$.pipe(\n      tap((entities) => this.logger.debug('Got entities for ids' + entityIds, entities)),\n      map((entities) => this.toEntityByIdMap(entities)),\n      filter((entitiesById) => this.containsAllIds(entitiesById, entityIds)),\n      take(1),\n      timeout(timeoutMs),\n      catchError((err) => {\n        this.logger.warn(`awaitEntitiesWithId -> timed out after: ${this.timeoutAfterMs}`, err)\n        const fallbackMap = new Map<TId, TEntity>()\n        entityIds.forEach((id) => fallbackMap.set(id, null))\n        return of(fallbackMap)\n      })\n    )\n  }\n\n  private toEntityByIdMap(entities: TEntity[]): Map<TId, TEntity> {\n    const map = new Map<TId, TEntity>()\n    entities.forEach((e) => map.set(this.getEntityId(e), e))\n    return map\n  }\n\n  private containsAllIds(entitiesById: Map<TId, TEntity>, ids: Set<TId>): boolean {\n    if (!ids) {\n      return true\n    }\n    if (entitiesById.size >= ids.size) {\n      return Array.from(ids).every((id) => entitiesById.has(id))\n    }\n    return false\n  }\n\n  private isAlreadyPresent(queryValue: TEntity): boolean {\n    if (this.entities) {\n      return this.entities.some((v) => this.isEqual(v, queryValue))\n    } else {\n      return false\n    }\n  }\n\n  private entityIdsFromValues(values: TValue[]): TId[] | null {\n    if (values) {\n      return values.map((v) => this.entityIdFromValue(v))\n    }\n    return null\n  }\n\n  private entityIdFromValue(value: TValue): TId {\n    if (this.valueAsId) {\n      return (<any>value) as TId\n    } else {\n      const entity = (<any>value) as TEntity\n      return this.getEntityId(entity)\n    }\n  }\n\n  private entitiesToValues(entities: TEntity[]): TValue[] | null {\n    if (entities) {\n      return entities.map((e) => this.entityToValue(e))\n    }\n    return null\n  }\n\n  private getEntityIds(values: TEntity[] | null): TId[] {\n    if (values) {\n      return values.map((v) => this.getEntityId(v))\n    }\n    return null\n  }\n\n  private equalIds(idsA: TId[], idsB: TId[]): boolean {\n    return Sets.equalContent(idsA, idsB)\n  }\n\n  private equalIdsExactOrder(idsA: TId[], idsB: TId[]): boolean {\n    return Arrays.equalContentAndOrder(idsA, idsB)\n  }\n\n  private equalEntities(entitiesA: TEntity[], entitiesB: TEntity[]) {\n    return this.equalIds(this.getEntityIds(entitiesA), this.getEntityIds(entitiesB))\n  }\n\n  private equalEntitiesExactOrder(entitiesA: TEntity[], entitiesB: TEntity[]) {\n    return this.equalIdsExactOrder(this.getEntityIds(entitiesA), this.getEntityIds(entitiesB))\n  }\n\n  private selectEntitiesByIds(ids: TId[]): void {\n    const currentEntities = this.entities\n    this.logger.debug('selectEntitiesByIds: ids: ' + ids + ', current entities:', currentEntities)\n    if (currentEntities && this.equalIds(this.getEntityIds(currentEntities), ids)) {\n      return // Entities already loaded\n    }\n\n    this.findOrLoadEntitiesByIds(ids).subscribe({\n      next: (entities) => (this.entities = entities),\n      error: (err) => this.updateState(ElderSelectComponentState.error(err)),\n    })\n  }\n\n  private findOrLoadEntitiesByIds(ids: TId[]): Observable<TEntity[]> {\n    if (ids === null || ids.length === 0) {\n      return of([])\n    }\n    if (this.dataContext) {\n      const existing = this.findInDataContext(ids)\n      const missingIds = ids.filter((id) => !existing.has(id))\n      const valueLoadRequest$ =\n        missingIds.length > 0 ? this.loadEntitiesByIds(missingIds) : of(new Map())\n\n      return valueLoadRequest$.pipe(\n        map((loaded) => {\n          loaded.forEach((v, k) => existing.set(k, v))\n          return existing\n        }),\n        map((allValuesMap) => {\n          // Sort entities by id order\n          return ids.map((id) => allValuesMap.get(id)).filter((entity) => !!entity)\n        })\n      )\n    } else {\n      this.logger.warn('Failed to select value by Ids: ' + ids + ' - DataContext not available.')\n      return EMPTY\n    }\n  }\n\n  private loadEntitiesByIds(ids: TId[]): Observable<Map<TId, TEntity>> {\n    return this.dataSourceOrThrow()\n      .findByIds(ids)\n      .pipe(\n        catchError((err) => {\n          this.logger.error('Failed to load entities by ids: ' + ids, err)\n          return throwError(err)\n        }),\n        map((values) => {\n          this.logger.debug('Loaded entities by id:', values)\n          const valueMap = new Map<TId, TEntity>()\n          values.forEach((v) => valueMap.set(this.getEntityId(v), v))\n          return valueMap\n        })\n      )\n  }\n\n  private findInDataContext(ids: TId[]): Map<TId, TEntity> {\n    const existingValues = new Map<TId, TEntity>()\n    if (ids?.length > 0) {\n      const data = this.dataContext.snapshot.data\n      const requiredIds = new Set(ids)\n      data\n        .filter((d) => requiredIds.has(this.getEntityId(d)))\n        .forEach((d) => existingValues.set(this.getEntityId(d), d))\n    }\n    return existingValues\n  }\n\n  private writeEntitiesSorted(entities: TEntity[]): TEntity[] {\n    const sorted = this.sortEntities(entities)\n    this._entities$.next(sorted)\n    return sorted\n  }\n\n  private sortEntities(entities: TEntity[]): TEntity[] {\n    if (entities && this.entitiesSorts && this.entitiesSorts.length > 0) {\n      const sorted = SortUtil.sortData(entities, this.entitiesSorts)\n      if (!SortUtil.equalsExactRefs(entities, sorted)) {\n        // Only return a copy of the array if actually something changed\n        return sorted\n      }\n    }\n    return entities\n  }\n}\n","import { Directive, TemplateRef, ViewContainerRef } from '@angular/core'\n\n@Directive({\n  selector: '[elderSelectChip]',\n  standalone: true,\n})\nexport class ElderSelectChipDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n\n@Directive({\n  selector: '[elderSelectChipAvatar]',\n  standalone: true,\n})\nexport class ElderSelectChipAvatarDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n\n@Directive({\n  selector: '[elderCustomInput]',\n  standalone: true,\n})\nexport class ElderSelectCustomInputDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n","import { ThemePalette } from '@angular/material/core'\nimport { ElderLevelColor, ElderStateColor } from '../../../chips/elder-chip-label.directive'\nimport { ElderNamedColor } from '../../../colors/named/named-color'\n\nexport class SelectChipSpecUtil {\n  public static readonly DefaultChipSpec: SelectChipSpec = {\n    colorSpec: {\n      themeColor: 'primary',\n      stateColor: undefined,\n      levelColor: undefined,\n      namedColor: undefined,\n    },\n    removable: undefined,\n    avatarSpec: {\n      hide: false,\n      large: false,\n    },\n  }\n}\n\nexport interface SelectChipSpec {\n  colorSpec?: ChipColorSpec\n  removable?: boolean\n  avatarSpec?: ChipAvatarSpec\n  trailingSpec?: TrailingSpec\n}\n\nexport interface ChipColorSpec {\n  themeColor?: ThemePalette\n  stateColor?: ElderStateColor\n  levelColor?: ElderLevelColor\n  namedColor?: ElderNamedColor\n}\n\nexport interface ChipAvatarSpec {\n  /**\n   * Hides the avatar for this chip.\n   */\n  hide?: boolean\n\n  /**\n   * Enables large styling of the avatar for this chip\n   */\n  large?: boolean\n}\n\nexport interface TrailingSpec {\n  icon?: string\n  iconFontSet?: string\n}\n","import { Directive, Host, OnDestroy, OnInit } from '@angular/core'\nimport { ElderSelectComponent } from './elder-select/elder-select.component'\nimport { Subject } from 'rxjs'\nimport { filter, takeUntil } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n@Directive({\n  selector: '[elderClearSelect]',\n  standalone: true,\n})\nexport class ElderClearSelectDirective implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(@Host() private readonly select: ElderSelectComponent) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.select.entityUpdated\n      .pipe(\n        takeUntil(this.destroy$),\n        filter((entity) => entity !== null && entity !== undefined)\n      )\n      .subscribe((updatedEntity) => this.clearSelect())\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private clearSelect(): void {\n    this.log.warn('Clearing value of select: ', this.select)\n    setTimeout(() => {\n      this.select.value = null\n    })\n  }\n}\n","import { computed, Directive, input } from '@angular/core'\nimport { ThemePalette } from '@angular/material/core'\nimport { ElderNamedColor } from '../colors/named/named-color'\n\nexport const elderChipColorStates = [\n  'open',\n  'inProgress',\n  'completed',\n  'warn',\n  'error',\n  'other',\n] as const\n\nexport type ElderStateColor = (typeof elderChipColorStates)[number] | undefined\n\nexport const elderChipColorLevels = ['low', 'medium', 'high', 'critical'] as const\n\nexport type ElderLevelColor = (typeof elderChipColorLevels)[number] | undefined\n\ninterface ChipColorSpec {\n  themeColor?: ThemePalette | undefined\n  stateColor?: ElderStateColor | undefined\n  levelColor?: ElderLevelColor | undefined\n  namedColor?: ElderNamedColor | undefined\n}\n\n@Directive({\n  selector: '[elderChipLabel]',\n  standalone: true,\n  host: { '[class]': 'cssClasses()' },\n})\nexport class ElderChipLabelDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly baseClass = 'elder-chip-label'\n\n  public readonly stateColor = input<ElderStateColor>(undefined)\n  public readonly levelColor = input<ElderLevelColor>(undefined)\n  public readonly namedColor = input<ElderNamedColor>(undefined)\n  public readonly themeColor = input<ThemePalette>(undefined, {\n    alias: 'color',\n  })\n  public readonly chipSize = input<'small' | 'medium'>('medium')\n\n  public readonly cssClasses = computed<string>(() =>\n    this.buildClassesString({\n      themeColor: this.themeColor(),\n      stateColor: this.stateColor(),\n      levelColor: this.levelColor(),\n      namedColor: this.namedColor(),\n    })\n  )\n\n  public readonly sizeClass = computed<string>(() =>\n    this.chipSize() === 'small' ? 'elder-chip-small' : ''\n  )\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildClassesString(colorSpec: ChipColorSpec): string {\n    const colorClasses = this.buildClasses(colorSpec)\n      .filter((cls) => !!cls)\n      .join(' ')\n    return (colorClasses + ' ' + this.sizeClass()).trim()\n  }\n\n  private buildClasses(colorSpec: ChipColorSpec): string[] {\n    return [this.baseClass, this.resolveColorClass(colorSpec) ?? 'none']\n  }\n\n  private resolveColorClass(colorSpec: ChipColorSpec): string | undefined {\n    let colorClass: string\n    if (colorSpec.themeColor) {\n      colorClass = this.getThemeColorClass(colorSpec.themeColor)\n    } else if (colorSpec.stateColor) {\n      colorClass = this.getStateColorClass(colorSpec.stateColor)\n    } else if (colorSpec.levelColor) {\n      colorClass = this.getLevelColorClass(colorSpec.levelColor)\n    } else if (colorSpec.namedColor) {\n      colorClass = this.getNamedColorClass(colorSpec.namedColor)\n    } else {\n      return undefined\n    }\n    return colorClass\n  }\n\n  private getNamedColorClass(name: ElderNamedColor): string | undefined {\n    if (name) {\n      return 'named-color-' + name\n    } else {\n      return undefined\n    }\n  }\n\n  private getLevelColorClass(state: ElderLevelColor): string | undefined {\n    if (state) {\n      return 'level-' + state\n    } else {\n      return undefined\n    }\n  }\n\n  private getStateColorClass(state: ElderStateColor): string | undefined {\n    if (state) {\n      return 'state-' + state\n    } else {\n      return undefined\n    }\n  }\n\n  private getThemeColorClass(palette: ThemePalette): string | undefined {\n    if (palette) {\n      return 'color-' + palette\n    } else {\n      return undefined\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  forwardRef,\n  input,\n  Input,\n  linkedSignal,\n  Signal,\n  TemplateRef,\n  untracked,\n  ViewChild,\n} from '@angular/core'\nimport { ElderMultiSelectBase } from '../elder-multi-select-base'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport {\n  ElderSelectChipAvatarDirective,\n  ElderSelectChipDirective,\n  ElderSelectCustomInputDirective,\n} from '../../elder-select-chip.directive'\nimport { MatFormFieldControl } from '@angular/material/form-field'\nimport {\n  ELDER_SELECT_BASE,\n  ElderSelectComponentState,\n  TextResolverFn,\n} from '../../elder-select-base'\nimport { ElderSelectComponent } from '../../single/elder-select/elder-select.component'\nimport { CdkDragDrop, moveItemInArray, CdkDropList, CdkDrag } from '@angular/cdk/drag-drop'\nimport {\n  ChipAvatarSpec,\n  ChipColorSpec,\n  SelectChipSpec,\n  SelectChipSpecUtil,\n  TrailingSpec,\n} from './select-chip-spec'\nimport { ElderTruncatePipe } from '../../../../pipes/elder-truncate.pipe'\nimport { ElderClearSelectDirective } from '../../single/elder-clear-select.directive'\nimport { ElderStopEventPropagationDirective } from '../../../forms/directives/elder-stop-event-propagation.directive'\nimport { MatIconButton } from '@angular/material/button'\nimport { ElderChipLabelDirective } from '../../../chips/elder-chip-label.directive'\nimport { MatIcon } from '@angular/material/icon'\nimport {\n  MatChipSet,\n  MatChipRow,\n  MatChipAvatar,\n  MatChipTrailingIcon,\n  MatChipRemove,\n} from '@angular/material/chips'\nimport { MatTooltip } from '@angular/material/tooltip'\nimport { NgTemplateOutlet } from '@angular/common'\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop'\nimport { booleanTransformFn } from '../../../../common/utils/signal-input'\n\nclass ChipModel<T> {\n  constructor(\n    public readonly id: any,\n    public readonly value: T,\n    public readonly displayText: string,\n    public readonly colorSpec: ChipColorSpec,\n    public readonly removable: boolean,\n    public readonly avatarSpec: ChipAvatarSpec,\n    public readonly trailingSpec: TrailingSpec\n  ) {}\n}\n\ninterface TemplateWrapper {\n  chip: TemplateRef<any>\n  avatar: TemplateRef<any>\n\n  input: TemplateRef<any>\n}\n\n@Component({\n  selector: 'elder-multi-select-chips',\n  templateUrl: './elder-multi-select-chips.component.html',\n  styleUrls: ['./elder-multi-select-chips.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    { provide: MatFormFieldControl, useExisting: ElderMultiSelectChipsComponent },\n    {\n      provide: ELDER_SELECT_BASE,\n      useExisting: forwardRef(() => ElderMultiSelectChipsComponent),\n    },\n  ],\n  imports: [\n    MatTooltip,\n    MatChipSet,\n    CdkDropList,\n    MatIcon,\n    MatChipRow,\n    ElderChipLabelDirective,\n    CdkDrag,\n    MatChipAvatar,\n    NgTemplateOutlet,\n    MatChipTrailingIcon,\n    MatChipRemove,\n    MatIconButton,\n    ElderStopEventPropagationDirective,\n    ElderSelectComponent,\n    ElderClearSelectDirective,\n    ElderTruncatePipe,\n  ],\n})\nexport class ElderMultiSelectChipsComponent<\n  TId = any,\n  TEntity = any,\n  TValue = any,\n> extends ElderMultiSelectBase<TId, TEntity, TValue> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly selectChips: Signal<ChipModel<TEntity>[]>\n\n  @Input()\n  public defaultChipSpec: SelectChipSpec = SelectChipSpecUtil.DefaultChipSpec\n\n  /**\n   * Allows to customize each chip individually (Color, Removable, Avatar).\n   *\n   */\n  @Input()\n  public chipSpecFn: (e: TEntity) => SelectChipSpec = (e) => this.defaultChipSpec\n\n  public selectable = true\n\n  public readonly allowRemoveInput = input(true, {\n    transform: booleanTransformFn,\n    alias: 'allowRemove',\n  })\n  public readonly allowRemove = linkedSignal(() => this.allowRemoveInput())\n\n  @Input()\n  public allowSorting = false\n\n  @Input()\n  public stacked = false\n\n  @Input()\n  public maxDisplayCount: number\n\n  @ContentChild(MatFormFieldControl) _customChipInput: MatFormFieldControl<any>\n  @ViewChild(ElderSelectComponent) _chipInput: MatFormFieldControl<any>\n\n  readonly templates: Signal<TemplateWrapper>\n\n  private readonly chipTemplate$ = new BehaviorSubject<TemplateRef<any>>(null)\n  private readonly chipAvatarTemplate$ = new BehaviorSubject<TemplateRef<any>>(null)\n  private readonly customInputTemplate$ = new BehaviorSubject<TemplateRef<any>>(null)\n\n  private readonly refresh$ = new BehaviorSubject<boolean>(true)\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    super('multi-select-chips')\n\n    this.placeholder = '...'\n\n    this.selectChips = toSignal(\n      combineLatest([\n        this.entities$,\n        this.entityIds$,\n        toObservable(this.state),\n        toObservable(this.displayPropertyResolverS),\n        toObservable(this.readonlyS),\n        toObservable(this.disabledS),\n        toObservable(this.allowRemove),\n        this.refresh$,\n      ]).pipe(\n        map(([entities, entityIds, state, dPR]) =>\n          this.buildChipModelsOrFallback(entities, entityIds, state, dPR)\n        ),\n        map((models) =>\n          this.maxDisplayCount !== null\n            ? this.reduceDisplayedChips(models, this.maxDisplayCount)\n            : models\n        )\n      )\n    )\n\n    this.templates = toSignal(\n      combineLatest([this.chipTemplate$, this.chipAvatarTemplate$, this.customInputTemplate$]).pipe(\n        map(([chip, avatar, input]) => {\n          return <TemplateWrapper>{\n            chip,\n            avatar,\n            input,\n          }\n        })\n      )\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @ContentChild(ElderSelectChipDirective, { read: TemplateRef, static: false })\n  public set chipTemplateQuery(template: TemplateRef<any>) {\n    this.chipTemplate = template\n  }\n\n  @Input()\n  public set chipTemplate(template: TemplateRef<any>) {\n    this.chipTemplate$.next(template)\n  }\n\n  public get chipTemplate(): TemplateRef<any> {\n    return this.chipTemplate$.getValue()\n  }\n\n  @ContentChild(ElderSelectChipAvatarDirective, { read: TemplateRef, static: false })\n  public set chipAvatarTemplateQuery(template: TemplateRef<any>) {\n    if (template) {\n      this.chipAvatarTemplate = template\n    }\n  }\n\n  @Input()\n  public set chipAvatarTemplate(template: TemplateRef<any>) {\n    this.chipAvatarTemplate$.next(template)\n  }\n\n  public get chipAvatarTemplate(): TemplateRef<any> {\n    return this.chipAvatarTemplate$.getValue()\n  }\n\n  @ContentChild(ElderSelectCustomInputDirective, { read: TemplateRef, static: false })\n  public set customInputTemplateQuery(template: TemplateRef<any>) {\n    if (template) {\n      this.customInputTemplate = template\n    }\n  }\n\n  @Input()\n  public set customInputTemplate(template: TemplateRef<any>) {\n    this.customInputTemplate$.next(template)\n  }\n\n  public get customInputTemplate(): TemplateRef<any> {\n    return this.customInputTemplate$.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public drop(event: CdkDragDrop<any>): void {\n    const reordered = [...this.entities]\n    moveItemInArray(reordered, event.previousIndex, event.currentIndex)\n    this.updateValueByEntities(reordered)\n  }\n\n  public resolveChipValue(e1: TEntity): any {\n    return this.getEntityId(e1)\n  }\n\n  public onChipKeyDown(event: KeyboardEvent, toRemove: TEntity): void {\n    this.log.warn('onChipKeyDown', event)\n    if (event.key === 'Backspace' || event.key === 'Delete') {\n      this.requestRemoveEntity(toRemove, event.shiftKey)\n    }\n  }\n\n  public onClickRemoveChip(event: MouseEvent, toRemove: TEntity): void {\n    event.stopPropagation()\n    event.preventDefault()\n    this.requestRemoveEntity(toRemove, event.shiftKey)\n  }\n\n  public focus(options?: FocusOptions) {\n    const input = this._customChipInput ?? this._chipInput\n\n    if (input) {\n      input.onContainerClick(new MouseEvent(''))\n    } else {\n      this.log.warn('Cant focus since no chip-input-control found!')\n    }\n  }\n\n  public blur() {\n    this.log.warn('blur() not yet supported!')\n    // TODO this.inputControl?.blur();\n    // this.customInputTemplate.blur()\n  }\n\n  public refresh(): void {\n    this.refresh$.next(true)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildChipModelsOrFallback(\n    entities: TEntity[],\n    entityIds: TId[],\n    state: ElderSelectComponentState,\n    dPR: TextResolverFn\n  ): ChipModel<TEntity>[] {\n    const allowRemove = untracked(this.allowRemove)\n    if (state.error) {\n      return this.buildChipFallbackModels(entityIds, allowRemove)\n    }\n    return this.buildChipModels(entities, dPR, allowRemove)\n  }\n\n  private buildChipFallbackModels(entityIds: TId[], allowRemove: boolean): ChipModel<TEntity>[] {\n    return entityIds.map((id) =>\n      this.buildChipBySpec(\n        <any>{ id: id },\n        () => String(id),\n        {\n          colorSpec: {\n            themeColor: 'warn',\n          },\n          avatarSpec: {\n            hide: false,\n            large: false,\n          },\n        },\n        allowRemove\n      )\n    )\n  }\n\n  private buildChipModels(\n    entities: TEntity[],\n    dPR: TextResolverFn,\n    allowRemove: boolean\n  ): ChipModel<TEntity>[] {\n    if (entities) {\n      return entities.map((e) =>\n        this.buildChipBySpec(e, dPR, this.chipSpecFn(e) ?? this.defaultChipSpec, allowRemove)\n      )\n    } else {\n      return <ChipModel<TEntity>[]>[]\n    }\n  }\n\n  private buildChipBySpec(\n    e: TEntity,\n    dPR: TextResolverFn,\n    chipSpec: SelectChipSpec,\n    allowRemove: boolean\n  ): ChipModel<TEntity> {\n    let removable = false\n    if (allowRemove && !this.isLocked) {\n      if (chipSpec.removable !== false) {\n        removable = true\n      }\n    }\n    return new ChipModel<TEntity>(\n      this.getEntityId(e),\n      e,\n      dPR(e),\n      chipSpec?.colorSpec,\n      removable,\n      chipSpec.avatarSpec,\n      chipSpec.trailingSpec\n    )\n  }\n\n  private reduceDisplayedChips(models: ChipModel<TEntity>[], count: number): ChipModel<TEntity>[] {\n    const reducedChips = models.slice(0, count)\n    const deltaCount = models.length - reducedChips.length\n    if (deltaCount > 0) {\n      const indicatorChip = this.buildIndicatorChip(deltaCount)\n      reducedChips.push(indicatorChip)\n    }\n    return reducedChips\n  }\n\n  private buildIndicatorChip(deltaCount: number): ChipModel<TEntity> {\n    return new ChipModel(\n      'overflow-indicator',\n      undefined,\n      '+' + deltaCount,\n      {},\n      false,\n      { hide: true },\n      {}\n    )\n  }\n}\n","<div class=\"elder-flex-control\" [matTooltip]=\"state()?.error\">\n  <mat-chip-set\n    #chips\n    [class.mat-mdc-chip-set-stacked]=\"stacked\"\n    cdkDropList\n    [cdkDropListOrientation]=\"stacked ? 'vertical' : 'horizontal'\"\n    (cdkDropListDropped)=\"drop($event)\"\n    [cdkDropListDisabled]=\"!allowSorting\"\n  >\n    @if (icon) {\n      <div class=\"elder-input-prefix-icon-container flex-none\">\n        <mat-icon\n          disabled\n          class=\"elder-prefix-icon elder-mdc-control-icon elder-icon-small noselect\"\n          [class.loading]=\"state()?.loading\"\n        >\n          {{ icon }}\n        </mat-icon>\n      </div>\n    }\n\n    @for (chipModel of selectChips(); track chipModel.id) {\n      <mat-chip-row\n        elderChipLabel\n        highlighted\n        class=\"noselect clickable-chip\"\n        [value]=\"resolveChipValue(chipModel.value)\"\n        [color]=\"chipModel.colorSpec?.themeColor\"\n        [levelColor]=\"chipModel.colorSpec?.levelColor\"\n        [stateColor]=\"chipModel.colorSpec?.stateColor\"\n        [namedColor]=\"chipModel.colorSpec?.namedColor\"\n        [removable]=\"chipModel.removable\"\n        (keydown)=\"onChipKeyDown($event, chipModel.value)\"\n        (click)=\"onCurrentClicked(chipModel.value)\"\n        cdkDrag\n        [cdkDragData]=\"chipModel.value\"\n        [cdkDragDisabled]=\"!allowSorting\"\n      >\n        @if (templates()?.avatar && !chipModel.avatarSpec?.hide) {\n          <mat-chip-avatar [class.chip-avatar-xl]=\"chipModel.avatarSpec?.large\">\n            <ng-container *ngTemplateOutlet=\"templates().avatar; context: { $implicit: chipModel }\">\n            </ng-container>\n          </mat-chip-avatar>\n        }\n\n        <ng-container\n          *ngTemplateOutlet=\"\n            templates()?.chip || simpleChipTemplate;\n            context: { $implicit: chipModel }\n          \"\n        >\n        </ng-container>\n\n        @if (chipModel.trailingSpec?.icon; as trailingIcon) {\n          <mat-icon\n            matChipTrailingIcon\n            class=\"elder-trailing-icon\"\n            [fontSet]=\"chipModel.trailingSpec?.iconFontSet\"\n            >{{ trailingIcon }}</mat-icon\n          >\n        }\n\n        @if (chipModel.removable) {\n          <mat-icon matChipRemove (click)=\"onClickRemoveChip($event, chipModel.value)\">\n            cancel\n          </mat-icon>\n        }\n      </mat-chip-row>\n    }\n\n    <div class=\"layout-row place-start-center elder-chip-input\">\n      <!-- [matChipInputFor]=\"chips\" -->\n      <ng-container *ngTemplateOutlet=\"templates()?.input || selectInput\"> </ng-container>\n\n      @if (selectionPopup) {\n        <button\n          mat-icon-button\n          type=\"button\"\n          class=\"elder-control-icon-button elder-browse-icon\"\n          [disabled]=\"isLocked\"\n          (click)=\"openSelectionPopup($event)\"\n          aria-label=\"Search\"\n          elderStopEventPropagation\n          tabIndex=\"-1\"\n        >\n          <mat-icon class=\"elder-mdc-control-icon\">search</mat-icon>\n        </button>\n      }\n    </div>\n  </mat-chip-set>\n</div>\n\n<ng-template #selectInput>\n  <!-- mat-mdc-chip-input -->\n  <elder-select\n    autocomplete\n    elderClearSelect\n    class=\"elder-chip-input-select flex\"\n    [data]=\"dataContextS()\"\n    [disabled]=\"!!disabledS()\"\n    [required]=\"!!requiredS()\"\n    [readonly]=\"!!readonlyS()\"\n    [placeholder]=\"!readonlyS() ? placeholderS() : undefined\"\n    (entityUpdated)=\"appendEntity($event)\"\n    [displayPropertyResolver]=\"displayPropertyResolverS()\"\n    [valueTemplate]=\"valueTemplate\"\n    [queryFilter]=\"queryFilter\"\n    [filters]=\"filters\"\n    [sorts]=\"sorts\"\n    [isOptionDisabledFn]=\"isOptionDisabledInternalFn\"\n    [isOptionHiddenFn]=\"isOptionHiddenInternalFn\"\n  ></elder-select>\n</ng-template>\n\n<ng-template #simpleChipTemplate let-chipModel>\n  <span\n    class=\"elder-chip-text\"\n    [matTooltip]=\"chipModel.displayText\"\n    [matTooltipDisabled]=\"chipModel.displayText?.length < 20\"\n    >{{ chipModel.displayText | elderTruncate: 20 }}\n  </span>\n</ng-template>\n","import { EMPTY, Observable, of } from 'rxjs'\nimport { catchError, filter, switchMap, takeUntil, tap } from 'rxjs/operators'\nimport { ElderSelectComponentState } from '../elder-select-base'\nimport { DataSourceAdapter } from '../../../common/data/datasource/data-source-adapter'\nimport { ElderSelectComponent } from '../single/elder-select/elder-select.component'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\nexport class ElderSelectFirstUtil {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private static readonly log = LoggerFactory.getLogger('ElderSelectFirstUtil')\n\n  /***************************************************************************\n   *                                                                         *\n   * Public methods                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static trySelectFirst<TEntity, TId>(\n    elderSelect: ElderSelectComponent<TEntity, TId, any>,\n    oFirstItem: Observable<TEntity>\n  ): void {\n    oFirstItem\n      .pipe(\n        takeUntil(elderSelect.valueChange.pipe(filter((value) => !!value))),\n        switchMap((firstItem) =>\n          firstItem ? of(firstItem) : this.firstSuggestionItem(elderSelect)\n        )\n      )\n      .subscribe(\n        (firstItem) => {\n          if (firstItem && !elderSelect.entityId) {\n            elderSelect.updateValueByEntity(firstItem)\n          }\n        },\n        (err) => {\n          elderSelect.updateState(ElderSelectComponentState.error(err))\n          this.log.error('Failed to load first entity for auto-select-first flow!', err)\n        }\n      )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private static firstSuggestionItem<TEntity, TId>(\n    elderSelect: ElderSelectComponent<TEntity, TId, any>\n  ): Observable<TEntity | null> {\n    const suggestionsDc = elderSelect.dataContext\n    const dataSource = suggestionsDc?.dataSource\n\n    if (dataSource) {\n      elderSelect.updateState(ElderSelectComponentState.loading())\n\n      return DataSourceAdapter.from(dataSource)\n        .findFirst(elderSelect.filters, elderSelect.sorts)\n        .pipe(\n          tap(() => elderSelect.updateState(ElderSelectComponentState.idle())),\n          catchError((err) => {\n            this.log.error('Failed to load suggestions!', err)\n            elderSelect.updateState(ElderSelectComponentState.error(err))\n            return of(null)\n          })\n        )\n    } else {\n      this.log.warn('Failed to load first suggestion!')\n      elderSelect.updateState(ElderSelectComponentState.idle())\n      return EMPTY\n    }\n  }\n}\n","import { AfterViewInit, Directive, Input } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { ElderSelectComponent } from '../single/elder-select/elder-select.component'\nimport { ElderSelectFirstUtil } from './elder-select-first-util'\nimport { ElderAutoSelectFirstService } from './elder-auto-select-first.service'\n\n@Directive({\n  selector: '[autoSelectFirst]',\n  providers: [ElderAutoSelectFirstService],\n  standalone: true,\n})\nexport class ElderAutoSelectFirstDirective<TEntity = any, TId = any> implements AfterViewInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private _enabled: boolean\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly elderSelect: ElderSelectComponent<TEntity, TId, any>,\n    private readonly autoSelectFirstService: ElderAutoSelectFirstService<TEntity>\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit(): void {\n    setTimeout(() => {\n      // HACK: Wait until ngModel has done its strange null/empty value init...\n      this.log.debug('autoSelectFirst after-view init, auto selecting value')\n      this.handleAutoSelectFirst()\n    }, 10)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * After data is loaded into this select, ensure that\n   * a value is selected or select the first automatically.\n   */\n  @Input('autoSelectFirst')\n  public set autoSelectFirstEnabled(val: boolean | string) {\n    this.enabled = coerceBooleanProperty(val)\n  }\n\n  public set enabled(val: boolean) {\n    this._enabled = val\n    this.autoSelectFirstService.enabled = this._enabled\n  }\n\n  public get enabled(): boolean {\n    return this._enabled\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public forceReloadFirst(): void {\n    if (this.autoSelectFirstService) {\n      this.elderSelect.value = null // valueId is set to null automatically\n      this.handleAutoSelectFirst()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleAutoSelectFirst(): void {\n    if (!this.elderSelect.value) {\n      this.log.debug('Attempting to auto select first entity...')\n      ElderSelectFirstUtil.trySelectFirst(this.elderSelect, this.autoSelectFirstService.firstItem$)\n    } else {\n      this.log.warn('Conflict avoided: Aborted auto selection because value id already present!')\n    }\n  }\n}\n","import { ContentChild, Directive, EventEmitter, Input, Output } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { SelectionModelPopupDirective } from './selection-model-popup.directive'\nimport { Filter } from '../../../common/data/filters/filter'\nimport { Sort } from '../../../common/data/sort'\n\n@Directive({\n  selector: '[elderSelectionPopupTriggerAdapter]',\n  exportAs: 'elderSelectionPopupTriggerAdapter',\n  host: {\n    '(click)': 'handleClick($event)',\n  },\n  standalone: true,\n})\nexport class ElderSelectionPopupTriggerAdapterDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  @Output()\n  public readonly selectionChange = new EventEmitter<any[]>()\n\n  @Output()\n  public readonly selectionSingleChange = new EventEmitter<any>()\n\n  @Input()\n  public keyGetter = (entity: any) => entity.id\n\n  @Input()\n  public selection: any[] = []\n\n  @Input()\n  public filters: Filter[] = []\n\n  @Input()\n  public sorts: Sort[] = []\n\n  @Input()\n  public multiSelectionEnabled = false\n\n  @ContentChild(SelectionModelPopupDirective)\n  public selectionPopup: SelectionModelPopupDirective\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /** Handles click events on the trigger. */\n  handleClick(event: MouseEvent): void {\n    if (this.selectionPopup) {\n      this.openSelectionPopup()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public openSelectionPopup(): void {\n    if (this.selectionPopup) {\n      this.selectionPopup\n        .choose(\n          this.keyGetter,\n          this.selection || [],\n          this.filters || [],\n          this.sorts || [],\n          this.multiSelectionEnabled\n        )\n        .subscribe((selection: any[]) => {\n          this.selectionChange.emit(selection)\n          if (!this.multiSelectionEnabled) {\n            const selectedEntity = selection?.length > 0 ? selection[0] : []\n            this.selectionSingleChange.emit(selectedEntity)\n          }\n        })\n    } else {\n      this.log.warn(\n        'Cant open selection browser popup, since [SelectionModelPopupDirective] was not found!'\n      )\n    }\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { A11yModule } from '@angular/cdk/a11y'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatChipsModule } from '@angular/material/chips'\nimport { ElderChipLabelDirective } from './elder-chip-label.directive'\n\nexport {\n  ElderChipLabelDirective,\n  elderChipColorStates,\n  elderChipColorLevels,\n} from './elder-chip-label.directive'\n\n@NgModule({\n  imports: [\n    // Angular\n    CommonModule,\n    // Third Party\n    TranslateModule,\n    // Material\n    MatChipsModule,\n    A11yModule,\n    ElderChipLabelDirective,\n  ],\n  exports: [ElderChipLabelDirective],\n})\nexport class ElderChipsModule {}\n","import {\n  ChipAvatarSpec,\n  ChipColorSpec,\n  TrailingSpec,\n} from '../elder-multi-select-chips/select-chip-spec'\n\nexport interface SelectOptionChipSpec {\n  colorSpec?: ChipColorSpec\n  locked?: boolean\n  avatarSpec?: ChipAvatarSpec\n  trailingSpec?: TrailingSpec\n}\n\nexport class SelectOptionChipSpecUtil {\n  public static readonly DefaultChipSpec: SelectOptionChipSpec = {\n    colorSpec: {\n      themeColor: 'primary',\n      stateColor: undefined,\n      levelColor: undefined,\n      namedColor: undefined,\n    },\n    locked: false,\n    avatarSpec: {\n      hide: false,\n      large: false,\n    },\n  }\n}\n","import { SelectOptionChipSpec } from './select-option-chip-spec'\nimport { ElderSelectComponentState, TextResolverFn } from '../../elder-select-base'\nimport {\n  ChipAvatarSpec,\n  ChipColorSpec,\n  TrailingSpec,\n} from '../elder-multi-select-chips/select-chip-spec'\nimport { IDataSource } from '../../../../common/data/datasource/data-source'\n\nexport class ChipOptionModel<T> {\n  constructor(\n    public readonly id: any,\n    public readonly value: T,\n    public readonly displayText: string,\n    public readonly colorSpec: ChipColorSpec,\n    public readonly locked: boolean,\n    public readonly avatarSpec: ChipAvatarSpec,\n    public readonly trailingSpec: TrailingSpec,\n    public readonly selected: boolean\n  ) {}\n}\n\nexport interface MultiSelectChipOptionsContext {\n  state: ElderSelectComponentState\n  displayPropertyResolver: TextResolverFn\n  readonly: boolean\n  disabled: boolean\n}\n\nexport interface BuildChipOptions {\n  context: MultiSelectChipOptionsContext\n  isLocked: boolean\n  entityLabelMap?: Map<any, string>\n}\n\nexport default class ChipOptionsProvider<TId, TEntity> {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private dataSource: IDataSource<TEntity>,\n    private available: TEntity[],\n    private chipSpecFn: (e: TEntity) => SelectOptionChipSpec\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public buildChipModelsOrFallback(\n    entities: TEntity[],\n    entityIds: TId[],\n    options: BuildChipOptions\n  ): ChipOptionModel<TEntity>[] {\n    if (options.context.state.error) {\n      return this.buildChipFallbackModels(entityIds, options)\n    }\n    return this.buildChipModels(this.available, entities, options)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildChipFallbackModel(\n    entityId: TId,\n    options: BuildChipOptions\n  ): ChipOptionModel<TEntity> {\n    options.context.displayPropertyResolver = (x) => x.id\n    return this.buildChipBySpec(\n      <any>{ id: entityId },\n      options,\n      {\n        colorSpec: {\n          themeColor: 'primary',\n        },\n        avatarSpec: {\n          hide: false,\n          large: false,\n        },\n      },\n      false // TODO\n    )\n  }\n\n  private buildChipFallbackModels(\n    entityIds: TId[],\n    options: BuildChipOptions\n  ): ChipOptionModel<TEntity>[] {\n    return entityIds.map((id) => this.buildChipFallbackModel(id, options))\n  }\n\n  private buildChipModels(\n    availables: TEntity[],\n    entities: TEntity[],\n    options: BuildChipOptions\n  ): ChipOptionModel<TEntity>[] {\n    if (availables) {\n      const selectedIds = new Set<TId>(entities.map((e) => this.getEntityId(e)))\n\n      return availables.map((available) =>\n        this.buildChipBySpec(\n          available,\n          options,\n          this.chipSpecFn(available),\n          selectedIds.has(this.getEntityId(available))\n        )\n      )\n    } else {\n      return <ChipOptionModel<TEntity>[]>[]\n    }\n  }\n\n  private buildChipBySpec(\n    e: TEntity,\n    options: BuildChipOptions,\n    chipSpec: SelectOptionChipSpec,\n    selected: boolean\n  ): ChipOptionModel<TEntity> {\n    let locked = false\n    if (options.isLocked) {\n      locked = true\n    } else {\n      locked = chipSpec.locked\n    }\n\n    return new ChipOptionModel<TEntity>(\n      this.getEntityId(e),\n      e,\n      this.resolveDisplayText(e, options),\n      {\n        themeColor: selected ? 'primary' : undefined,\n      },\n      locked,\n      chipSpec.avatarSpec,\n      chipSpec.trailingSpec,\n      selected\n    )\n  }\n\n  private getEntityId(e: TEntity): TId {\n    return this.dataSource.getId(e)\n  }\n\n  private resolveDisplayText(entity: TEntity, options: BuildChipOptions): string {\n    const entityLabelMap = options.entityLabelMap\n    return entityLabelMap.has(entity)\n      ? entityLabelMap.get(entity)\n      : options.context.displayPropertyResolver(entity)\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  DestroyRef,\n  ElementRef,\n  forwardRef,\n  Input,\n  NgZone,\n  Optional,\n  Self,\n  Signal,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core'\nimport { ElderMultiSelectBase } from '../elder-multi-select-base'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { FocusMonitor } from '@angular/cdk/a11y'\nimport { TranslateService } from '@ngx-translate/core'\nimport { ElderDialogService } from '../../../dialogs/elder-dialog.service'\nimport { NgControl } from '@angular/forms'\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs'\nimport { filter, map, switchMap } from 'rxjs/operators'\nimport {\n  ElderSelectChipAvatarDirective,\n  ElderSelectChipDirective,\n} from '../../elder-select-chip.directive'\nimport { ELDER_SELECT_BASE } from '../../elder-select-base'\nimport { MatFormFieldControl } from '@angular/material/form-field'\nimport { IDataContext } from '../../../../common/data/data-context/data-context'\nimport { SelectOptionChipSpec, SelectOptionChipSpecUtil } from './select-option-chip-spec'\nimport {\n  MatChipListbox,\n  MatChipSelectionChange,\n  MatChipOption,\n  MatChipAvatar,\n  MatChipTrailingIcon,\n} from '@angular/material/chips'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { ElderSelectOptionComponent } from '../elder-chip-select-option/elder-select-option.component'\nimport ChipOptionsProvider, {\n  ChipOptionModel,\n  MultiSelectChipOptionsContext,\n} from './chip-options-provider'\nimport { ElderTruncatePipe } from '../../../../pipes/elder-truncate.pipe'\nimport { ElderStopEventPropagationDirective } from '../../../forms/directives/elder-stop-event-propagation.directive'\nimport { MatIconButton } from '@angular/material/button'\nimport { NgTemplateOutlet, AsyncPipe } from '@angular/common'\nimport { ElderChipLabelDirective } from '../../../chips/elder-chip-label.directive'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatTooltip } from '@angular/material/tooltip'\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop'\n\ninterface TemplateWrapper {\n  chip: TemplateRef<any>\n  avatar: TemplateRef<any>\n}\n\n@Component({\n  selector: 'elder-multi-select-chip-options',\n  templateUrl: './elder-multi-select-chip-options.component.html',\n  styleUrls: ['./elder-multi-select-chip-options.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    { provide: MatFormFieldControl, useExisting: ElderMultiSelectChipOptionsComponent },\n    {\n      provide: ELDER_SELECT_BASE,\n      useExisting: forwardRef(() => ElderMultiSelectChipOptionsComponent),\n    },\n  ],\n  imports: [\n    MatTooltip,\n    MatChipListbox,\n    MatIcon,\n    MatChipOption,\n    ElderChipLabelDirective,\n    MatChipAvatar,\n    NgTemplateOutlet,\n    MatChipTrailingIcon,\n    MatIconButton,\n    ElderStopEventPropagationDirective,\n    ElderTruncatePipe,\n  ],\n})\nexport class ElderMultiSelectChipOptionsComponent<\n  TId = any,\n  TEntity = any,\n  TValue = any,\n> extends ElderMultiSelectBase<TId, TEntity, TValue> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  readonly templates: Signal<TemplateWrapper>\n  private readonly context$: Observable<MultiSelectChipOptionsContext>\n\n  private readonly chipTemplate$ = new BehaviorSubject<TemplateRef<any>>(null)\n  private readonly chipAvatarTemplate$ = new BehaviorSubject<TemplateRef<any>>(null)\n\n  public readonly selectChips: Signal<ChipOptionModel<TEntity>[]>\n  @Input()\n  public defaultChipSpec: SelectOptionChipSpec = SelectOptionChipSpecUtil.DefaultChipSpec\n\n  public _chipSpecFn$ = new BehaviorSubject<(e: TEntity) => SelectOptionChipSpec>(\n    (e) => this.defaultChipSpec\n  )\n\n  @Input()\n  public stacked = false\n\n  private _multiple: boolean = false\n\n  @ViewChild(MatChipListbox) _listBox: MatChipListbox\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private destroyRef: DestroyRef) {\n    super('multi-select-chip-options')\n\n    this.context$ = combineLatest([\n      toObservable(this.state),\n      toObservable(this.displayPropertyResolverS),\n      toObservable(this.readonlyS),\n      toObservable(this.disabledS),\n    ]).pipe(\n      map(([state, dPR, readonly, disabled]) => {\n        return <MultiSelectChipOptionsContext>{\n          state: state,\n          displayPropertyResolver: dPR,\n          readonly: readonly,\n          disabled: disabled,\n        }\n      })\n    )\n\n    const optionsProvider$ = combineLatest([\n      this.dataContext$,\n      this.dataContext$.pipe(\n        filter((dc) => !!dc),\n        switchMap((dc) => dc.data)\n      ),\n      this.chipSpecFn$,\n      this.templateOptions$,\n    ]).pipe(\n      map(\n        ([dc, data, chipSpecFn, templateChips]) =>\n          new ChipOptionsProvider<TId, TEntity>(\n            dc.dataSource,\n            this.buildAvailableEntities(data, templateChips),\n            chipSpecFn\n          )\n      )\n    )\n\n    this.selectChips = toSignal(\n      combineLatest([\n        optionsProvider$,\n        this.entities$,\n        this.entityIds$,\n        this.templateOptions$,\n        this.context$,\n      ]).pipe(\n        takeUntilDestroyed(this.destroyRef),\n        map(([optionsProvider, entities, entityIds, templateSelectChips, context]) =>\n          this.buildChipModels(\n            optionsProvider,\n            entities,\n            entityIds,\n            this.buildEntitiesLabelMap(templateSelectChips),\n            context\n          )\n        )\n      )\n    )\n\n    this.templates = toSignal(\n      combineLatest([this.chipTemplate$, this.chipAvatarTemplate$]).pipe(\n        map(([chip, avatar]) => {\n          return <TemplateWrapper>{\n            chip,\n            avatar,\n          }\n        })\n      )\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set multiple(val: BooleanInput) {\n    this._multiple = coerceBooleanProperty(val)\n    if (!this._multiple && this.entities.length > 1) {\n      this.selectEntity(this.entities[this.entities.length - 1])\n    }\n  }\n\n  /**\n   * Allows to customize each chip individually (Color, Removable, Avatar).\n   *\n   */\n  @Input()\n  public set chipSpecFn(fn: (e: TEntity) => SelectOptionChipSpec) {\n    this._chipSpecFn$.next(fn)\n  }\n\n  public get chipSpecFn$(): Observable<(e: TEntity) => SelectOptionChipSpec> {\n    return this._chipSpecFn$.asObservable()\n  }\n\n  public get multiple(): boolean {\n    return this._multiple\n  }\n\n  @ContentChild(ElderSelectChipDirective, { read: TemplateRef, static: false })\n  public set chipTemplateQuery(template: TemplateRef<any>) {\n    this.chipTemplate = template\n  }\n\n  @Input()\n  public set chipTemplate(template: TemplateRef<any>) {\n    this.chipTemplate$.next(template)\n  }\n\n  public get chipTemplate(): TemplateRef<any> {\n    return this.chipTemplate$.getValue()\n  }\n\n  @ContentChild(ElderSelectChipAvatarDirective, { read: TemplateRef, static: false })\n  public set chipAvatarTemplateQuery(template: TemplateRef<any>) {\n    this.chipAvatarTemplate = template\n  }\n\n  @Input()\n  public set chipAvatarTemplate(template: TemplateRef<any>) {\n    this.chipAvatarTemplate$.next(template)\n  }\n\n  public get chipAvatarTemplate(): TemplateRef<any> {\n    return this.chipAvatarTemplate$.getValue()\n  }\n\n  public override get shouldLabelFloat(): boolean {\n    return true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public selectionChanged(changeEvent: MatChipSelectionChange, entity: TEntity): void {\n    /**/\n    this.log.debug('selectionChanged', {\n      changeEvent: changeEvent,\n      entity: entity,\n    })\n\n    if (changeEvent.isUserInput) {\n      if (changeEvent.selected) {\n        this.selectEntity(entity)\n      } else {\n        this.removeEntity(entity)\n      }\n    }\n  }\n\n  public resolveChipValue(e1: TEntity): any {\n    return this.getEntityId(e1)\n  }\n\n  public focus(options?: FocusOptions): void {\n    if (this._listBox) {\n      this._listBox.focus()\n    }\n  }\n\n  public blur(): void {\n    this.log.warn('blur() not yet supported!')\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Protected API                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Automatically start DC if not yet started\n   * @param data\n   * @protected\n   */\n  protected override onDataContextChanged(data: IDataContext<TEntity>): void {\n    if (data) {\n      if (!data.isStarted) {\n        data.start(this.sorts, this.filters).subscribe({\n          next: () => {\n            super.onDataContextChanged(data)\n          },\n        })\n      } else {\n        super.onDataContextChanged(data)\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private selectEntity(entity: TEntity): void {\n    const idToSelect = this.getEntityId(entity)\n    if (!this.multiple) {\n      this.removeEntities(this.entities.filter((e) => this.getEntityId(e) !== idToSelect))\n    }\n    if (!this.isEntityIdSelected(idToSelect)) {\n      this.appendEntity(entity)\n    }\n  }\n\n  private isEntityIdSelected(entityId: TId): boolean {\n    return this.entities.some((e) => this.getEntityId(e) === entityId)\n  }\n\n  private buildChipModels(\n    optionsProvider: ChipOptionsProvider<TId, TEntity>,\n    entities: TEntity[],\n    entityIds: TId[],\n    entitiesLabels: Map<any, string>,\n    context: MultiSelectChipOptionsContext\n  ): ChipOptionModel<TEntity>[] {\n    return optionsProvider.buildChipModelsOrFallback(entities, entityIds, {\n      context: context,\n      isLocked: this.isLocked,\n      entityLabelMap: entitiesLabels,\n    })\n  }\n\n  private buildAvailableEntities(\n    data: TEntity[],\n    templateChips: ElderSelectOptionComponent<TEntity>[]\n  ): TEntity[] {\n    return [...this.extractEntitiesFromTemplateChips(templateChips), ...data]\n  }\n\n  private extractEntitiesFromTemplateChips(\n    templateChips: ElderSelectOptionComponent<TEntity>[]\n  ): TEntity[] {\n    return templateChips.map((chip) => chip.value)\n  }\n\n  private buildEntitiesLabelMap(\n    templateChips: ElderSelectOptionComponent<TEntity>[]\n  ): Map<TEntity, string> {\n    return new Map(\n      templateChips\n        .filter((chip) => chip.label !== undefined)\n        .map((chip) => [chip.value, chip.label])\n    )\n  }\n}\n","<div class=\"elder-flex-control\" [matTooltip]=\"state()?.error\">\n  <mat-chip-listbox #chips [class.mat-mdc-chip-set-stacked]=\"stacked\" [multiple]=\"multiple\">\n    @if (state(); as state) {\n      @if (icon) {\n        <div class=\"elder-input-prefix-icon-container flex-none\">\n          <mat-icon\n            disabled\n            class=\"elder-prefix-icon elder-mdc-control-icon elder-icon-small noselect\"\n            [class.loading]=\"state.loading\"\n          >\n            {{ icon }}\n          </mat-icon>\n        </div>\n      }\n    }\n\n    <ng-content></ng-content>\n\n    @for (chipModel of selectChips(); track chipModel.id) {\n      <mat-chip-option\n        class=\"noselect\"\n        [value]=\"resolveChipValue(chipModel.value)\"\n        elderChipLabel\n        [levelColor]=\"chipModel.colorSpec?.levelColor\"\n        [stateColor]=\"chipModel.colorSpec?.stateColor\"\n        [namedColor]=\"chipModel.colorSpec?.namedColor\"\n        [color]=\"chipModel.colorSpec?.themeColor\"\n        [selectable]=\"!chipModel.locked\"\n        [disabled]=\"chipModel.locked\"\n        [selected]=\"chipModel.selected\"\n        (selectionChange)=\"selectionChanged($event, chipModel.value)\"\n      >\n        @if (templates()?.avatar && !chipModel.avatarSpec?.hide) {\n          <mat-chip-avatar [class.chip-avatar-xl]=\"chipModel.avatarSpec?.large\">\n            <ng-container *ngTemplateOutlet=\"templates().avatar; context: { $implicit: chipModel }\">\n            </ng-container>\n          </mat-chip-avatar>\n        }\n\n        <ng-container\n          *ngTemplateOutlet=\"\n            templates()?.chip || simpleChipTemplate;\n            context: { $implicit: chipModel }\n          \"\n        >\n        </ng-container>\n\n        @if (chipModel.trailingSpec?.icon) {\n          <mat-icon\n            matChipTrailingIcon\n            class=\"elder-trailing-icon\"\n            [fontSet]=\"chipModel.trailingSpec?.iconFontSet\"\n            >{{ chipModel.trailingSpec?.icon }}\n          </mat-icon>\n        }\n      </mat-chip-option>\n    }\n\n    <div class=\"layout-row place-start-center elder-chip-input\">\n      @if (selectionPopup) {\n        <button\n          mat-icon-button\n          type=\"button\"\n          class=\"elder-control-icon-button elder-browse-icon\"\n          [disabled]=\"isLocked\"\n          (click)=\"openSelectionPopup($event)\"\n          aria-label=\"Search\"\n          elderStopEventPropagation\n          tabIndex=\"-1\"\n        >\n          <mat-icon class=\"elder-mdc-control-icon\">search</mat-icon>\n        </button>\n      }\n    </div>\n  </mat-chip-listbox>\n</div>\n\n<ng-template #simpleChipTemplate let-chipModel>\n  <span class=\"elder-chip-text\">{{ chipModel.displayText | elderTruncate: 20 }}</span>\n</ng-template>\n","import { DestroyRef, Directive, Optional } from '@angular/core'\nimport { ElderMultiSelectChipOptionsComponent } from './elder-multi-select-chip-options/elder-multi-select-chip-options.component'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { combineLatest } from 'rxjs'\nimport { filter, first, map, switchMap } from 'rxjs/operators'\n\n@Directive({\n  selector: '[elderMultiSelectAllInitial]',\n  standalone: true,\n})\nexport class ElderMultiSelectAllInitialDirective<TId, TEntity> {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Optional() public select: ElderMultiSelectChipOptionsComponent<TId, TEntity>,\n    public destroyRef: DestroyRef\n  ) {\n    const data$ = this.select.dataContext$.pipe(\n      filter((dc) => !!dc),\n      switchMap((dc) => dc.data)\n    )\n\n    const templateOptions$ = this.select.templateOptions$.pipe(\n      map((options) => options.map((option) => option.value))\n    )\n\n    combineLatest([data$, templateOptions$])\n      .pipe(\n        takeUntilDestroyed(destroyRef),\n        filter(([data, templateEntities]) => data.length > 0),\n        first()\n      )\n      .subscribe(([entities, templateEntities]) =>\n        this.select.appendEntities([...entities, ...templateEntities])\n      )\n  }\n}\n","import { ChangeDetectionStrategy, Component, input, TemplateRef, ViewChild } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { MatIcon } from '@angular/material/icon'\nimport { ElderSelectChipAvatarDirective } from '../../elder-select-chip.directive'\n\n@Component({\n  selector: 'elder-filter-chip-template',\n  templateUrl: './elder-filter-chip-template.component.html',\n  styleUrls: ['./elder-filter-chip-template.component.scss'],\n  imports: [MatIcon, ElderSelectChipAvatarDirective],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElderFilterChipTemplateComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _avatarRef$ = new BehaviorSubject<TemplateRef<any>>(null)\n  public avatarResolverFn = input.required<(id: string) => string>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @ViewChild(ElderSelectChipAvatarDirective, { read: TemplateRef, static: true })\n  public set avatarRef(avatarRef: TemplateRef<any>) {\n    this._avatarRef$.next(avatarRef)\n  }\n\n  public get avatarRef$(): Observable<TemplateRef<any>> {\n    return this._avatarRef$.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public currentIcon(id: string): string {\n    const fun = this.avatarResolverFn()\n    if (id === null || id === undefined) {\n      return 'help_outline'\n    } else {\n      return fun ? fun(id) : 'help_outline'\n    }\n  }\n}\n","<mat-icon *elderSelectChipAvatar=\"let chipModel\" class=\"material-icons-outlined\">\n  {{ currentIcon(chipModel?.value?.id) }}\n</mat-icon>\n","import { BehaviorSubject, Observable } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { map } from 'rxjs/operators'\n\nexport class IncludeExcludeState<TId = string> {\n  constructor(\n    public readonly id: TId,\n    public mode: IncludeExcludeValue\n  ) {}\n}\n\nexport enum IncludeExcludeValue {\n  NEUTRAL = 'NEUTRAL',\n  INCLUDE = 'INCLUDE',\n  EXCLUDE = 'EXCLUDE',\n}\n\nexport type IncludeExcludeCycleStrategy = 'TOGGLE' | 'FULL_CYCLE'\n\nexport class IncludeExcludeSelectionModel<TId = string> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private _strategy: IncludeExcludeCycleStrategy\n  private _defaultInitialValue = IncludeExcludeValue.INCLUDE\n  private readonly _stateById$ = new BehaviorSubject<Map<TId, IncludeExcludeState<TId>>>(new Map())\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(strategy: IncludeExcludeCycleStrategy) {\n    if (!strategy) throw new Error('strategy is required!')\n    this._strategy = strategy\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get selection(): IncludeExcludeState<TId>[] {\n    return Array.from(this._stateById$.value.values())\n  }\n\n  public get selection$(): Observable<IncludeExcludeState<TId>[]> {\n    return this._stateById$.pipe(map((stateMap) => Array.from(stateMap.values())))\n  }\n\n  public get strategy(): IncludeExcludeCycleStrategy {\n    return this._strategy\n  }\n\n  public set strategy(strategy: IncludeExcludeCycleStrategy) {\n    this._strategy = strategy\n  }\n\n  public get defaultInitialValue(): IncludeExcludeValue {\n    return this._defaultInitialValue\n  }\n\n  public set defaultInitialValue(strategy: IncludeExcludeValue) {\n    this._defaultInitialValue = strategy\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public findIncluded(): TId[] {\n    return this.selection.filter((s) => s.mode === IncludeExcludeValue.INCLUDE).map((s) => s.id)\n  }\n\n  public findExcluded(): TId[] {\n    return this.selection.filter((s) => s.mode === IncludeExcludeValue.EXCLUDE).map((s) => s.id)\n  }\n\n  public cycleExisting(id: TId): IncludeExcludeState<TId> | null {\n    const existingState = this.findStateById(id)\n    if (existingState) {\n      return this.updateState(id, this.nextValueByStrategy(existingState.mode))\n    } else {\n      return null\n    }\n  }\n\n  public initTo(ids: TId[], initialValueOverride?: IncludeExcludeValue): void {\n    const current = this._stateById$.getValue()\n    const newStates = new Map<TId, IncludeExcludeState<TId>>()\n\n    const desiredIds = new Set(ids)\n    Array.from(current.keys()).forEach((id) => desiredIds.add(id))\n\n    desiredIds.forEach((id) => {\n      if (current.has(id)) {\n        newStates.set(id, current.get(id))\n      } else {\n        newStates.set(\n          id,\n          new IncludeExcludeState<TId>(id, initialValueOverride ?? this.defaultInitialValue)\n        )\n      }\n    })\n    this.replaceStateMap(newStates, 'init')\n  }\n\n  public resetAllTo(initialValueOverride?: IncludeExcludeValue): void {\n    this.resetTo(\n      this.selection.map((s) => s.id),\n      initialValueOverride\n    )\n  }\n\n  public resetTo(ids: TId[], resetValue: IncludeExcludeValue | undefined): void {\n    const newStates = new Map<TId, IncludeExcludeState<TId>>(this._stateById$.value)\n    ids.forEach((id) => {\n      if (resetValue === undefined) {\n        newStates.delete(id)\n      } else {\n        newStates.set(id, new IncludeExcludeState(id, resetValue))\n      }\n    })\n    this.replaceStateMap(newStates, 'resetTo:' + resetValue)\n  }\n\n  public clear(): void {\n    this.replaceSelection([])\n  }\n\n  public replaceSelection(newStates: IncludeExcludeState<TId>[]): void {\n    this.replaceStateMap(this.toStateMap(newStates), 'replace')\n  }\n\n  public updateState(id: TId, mode: IncludeExcludeValue): IncludeExcludeState<TId> {\n    const map = this._stateById$.value\n    const newState = new IncludeExcludeState<TId>(id, mode)\n    map.set(id, newState)\n    this.replaceStateMap(map, 'update-by-id-' + id)\n    return newState\n  }\n\n  public updateStates(newStates: IncludeExcludeState<TId>[]): void {\n    const current = this._stateById$.value\n    newStates.forEach((newState) => {\n      current.set(newState.id, newState)\n    })\n    this.replaceStateMap(current, 'update-states-count:' + newStates.length)\n  }\n\n  public isInMode(id: TId, mode: IncludeExcludeValue): boolean {\n    return this.findStateById(id)?.mode === mode\n  }\n\n  public findStateById(searchedId: TId): IncludeExcludeState<TId> | null {\n    return this._stateById$.value.get(searchedId)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private nextValueByStrategy(current: IncludeExcludeValue): IncludeExcludeValue {\n    switch (this._strategy) {\n      case 'FULL_CYCLE':\n        return this.nextValueFullCycle(current)\n      case 'TOGGLE':\n        return this.nextValueToggle(current)\n      default:\n        throw new Error('Unsupported cycle strategy: ' + this._strategy)\n    }\n  }\n\n  private nextValueToggle(current: IncludeExcludeValue): IncludeExcludeValue {\n    switch (current) {\n      case IncludeExcludeValue.NEUTRAL:\n        return IncludeExcludeValue.INCLUDE\n      case IncludeExcludeValue.INCLUDE:\n        return IncludeExcludeValue.EXCLUDE\n      case IncludeExcludeValue.EXCLUDE:\n        return IncludeExcludeValue.INCLUDE\n      default:\n        return IncludeExcludeValue.INCLUDE\n    }\n  }\n\n  private nextValueFullCycle(current: IncludeExcludeValue): IncludeExcludeValue {\n    switch (current) {\n      case IncludeExcludeValue.NEUTRAL:\n        return IncludeExcludeValue.INCLUDE\n      case IncludeExcludeValue.INCLUDE:\n        return IncludeExcludeValue.EXCLUDE\n      case IncludeExcludeValue.EXCLUDE:\n        return IncludeExcludeValue.NEUTRAL\n      default:\n        return IncludeExcludeValue.NEUTRAL\n    }\n  }\n\n  private toStateMap(list: IncludeExcludeState<TId>[]): Map<TId, IncludeExcludeState<TId>> {\n    return new Map(list.map((entity) => [entity.id, entity]))\n  }\n\n  private replaceStateMap(newStates: Map<TId, IncludeExcludeState<TId>>, origin: string): void {\n    // this.log.error('Updating state-map due to ' + origin, newStates)\n    this._stateById$.next(newStates)\n  }\n}\n","import { SelectChipSpec } from '../multi/elder-multi-select-chips/select-chip-spec'\nimport { IncludeExcludeState, IncludeExcludeValue } from './include-exclude-selection-model'\n\nexport default class ElderChipFilterStyleResolver {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly neutralChipSpec: SelectChipSpec = {\n    colorSpec: {},\n    removable: true,\n    avatarSpec: {\n      hide: false,\n    },\n    trailingSpec: {},\n  }\n\n  private readonly includedChipSpec: SelectChipSpec = {\n    colorSpec: {\n      themeColor: 'accent',\n    },\n    removable: true,\n    avatarSpec: {\n      hide: false,\n    },\n    trailingSpec: {},\n  }\n\n  private readonly excludedChipSpec: SelectChipSpec = {\n    colorSpec: {\n      themeColor: 'warn',\n    },\n    removable: true,\n    avatarSpec: {\n      hide: false,\n    },\n    trailingSpec: {},\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public resolveChipSpec(filterEntity: IncludeExcludeState<any>): SelectChipSpec {\n    if (filterEntity) {\n      switch (filterEntity.mode) {\n        case IncludeExcludeValue.NEUTRAL:\n          return this.neutralChipSpec\n        case IncludeExcludeValue.INCLUDE:\n          return this.includedChipSpec\n        case IncludeExcludeValue.EXCLUDE:\n          return this.excludedChipSpec\n        default:\n          return this.neutralChipSpec\n      }\n    }\n    return this.neutralChipSpec\n  }\n\n  public resolveAvatarIcon(filterEntity: IncludeExcludeState<any>): string {\n    if (filterEntity) {\n      switch (filterEntity.mode) {\n        case IncludeExcludeValue.NEUTRAL:\n          return 'radio_button_unchecked'\n        case IncludeExcludeValue.INCLUDE:\n          return 'task_alt'\n        case IncludeExcludeValue.EXCLUDE:\n          return 'block'\n        default:\n          return 'circle'\n      }\n    }\n    return 'help_outline'\n  }\n}\n","import { DestroyRef, Directive, Input, Optional, SkipSelf, ViewContainerRef } from '@angular/core'\nimport { ElderMultiSelectChipsComponent } from '../multi/elder-multi-select-chips/elder-multi-select-chips.component'\nimport { SelectChipSpec } from '../multi/elder-multi-select-chips/select-chip-spec'\nimport { ElderFilterChipTemplateComponent } from './elder-filter-chip-template/elder-filter-chip-template.component'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { debounceTime, filter, first } from 'rxjs/operators'\nimport ElderChipFilterStyleResolver from './elder-chip-filter-style-resolver'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport {\n  IncludeExcludeCycleStrategy,\n  IncludeExcludeSelectionModel,\n  IncludeExcludeState,\n  IncludeExcludeValue,\n} from './include-exclude-selection-model'\nimport { EntitiesChangeEvent } from '../../../common/forms/entities-change-event'\n\n/**\n * Adds the ability to toggle select chips of a ElderMultiSelectChipsComponent by\n * binding it to a IncludeExcludeSelectionModel.\n */\n@Directive({\n  selector: '[elderChipsIncludeExclude]',\n  exportAs: 'elderChipsIncludeExclude',\n  standalone: true,\n  providers: [\n    {\n      provide: IncludeExcludeSelectionModel,\n      useFactory: (existing: IncludeExcludeSelectionModel) => {\n        return existing ?? new IncludeExcludeSelectionModel('FULL_CYCLE')\n      },\n      deps: [[new Optional(), new SkipSelf(), IncludeExcludeSelectionModel]],\n    },\n  ],\n})\nexport class ElderChipsIncludeExcludeDirective<T = any, TId = string> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly chipStyleResolver = new ElderChipFilterStyleResolver()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly elderMultiSelectChips: ElderMultiSelectChipsComponent<TId, T>,\n    public readonly selectionModel: IncludeExcludeSelectionModel<TId>,\n    public readonly vcr: ViewContainerRef,\n    private readonly destroyRef: DestroyRef\n  ) {\n    this.setupFilterChips()\n    this.setupElderMultiSelectChipsListeners()\n\n    selectionModel.selection$.pipe(takeUntilDestroyed(), debounceTime(10)).subscribe({\n      next: (states) => this.refreshChips(states),\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set cycleStrategy(strategy: IncludeExcludeCycleStrategy) {\n    this.selectionModel.strategy = strategy\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private setupFilterChips(): void {\n    const chipTemplate = this.createFilterChipTemplate()\n    this.elderMultiSelectChips.chipSpecFn = (entity: T) => this.resolveChipSpec(entity)\n\n    chipTemplate.avatarRef$\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        filter((avatarRef) => !!avatarRef),\n        first()\n      )\n      .subscribe((avatarRef) => {\n        this.elderMultiSelectChips.chipAvatarTemplate = avatarRef\n      })\n  }\n\n  private createFilterChipTemplate(): ElderFilterChipTemplateComponent {\n    const ref = this.vcr.createComponent(ElderFilterChipTemplateComponent)\n    ref.setInput('avatarResolverFn', (id: TId) => this.resolveAvatarIcon(id))\n    return ref.instance\n  }\n\n  private setupElderMultiSelectChipsListeners(): void {\n    this.elderMultiSelectChips.currentClicked\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((entity) => this.handleChipClick(entity))\n\n    this.elderMultiSelectChips.entitiesChangeEvent\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((event) => this.applyOptionChipsChangeEvent(event))\n  }\n\n  private applyOptionChipsChangeEvent(event: EntitiesChangeEvent<TId, T>): void {\n    if (event.userInitiated) {\n      this.selectionModel.resetTo(event.delta.removedIds, undefined)\n      this.selectionModel.resetTo(event.delta.addedIds, IncludeExcludeValue.INCLUDE)\n    } else {\n      this.selectionModel.initTo(event.idsAfter, IncludeExcludeValue.NEUTRAL)\n    }\n  }\n\n  private resolveChipSpec(entity: T): SelectChipSpec {\n    return this.chipStyleResolver.resolveChipSpec(this.findFilterEntityByEntity(entity))\n  }\n\n  private resolveAvatarIcon(id: TId): string {\n    return this.chipStyleResolver.resolveAvatarIcon(this.findFilterEntityById(id))\n  }\n\n  private handleChipClick(entity: T): void {\n    const entityId = this.elderMultiSelectChips.getEntityId(entity)\n    const newState = this.selectionModel.cycleExisting(entityId)\n    if (!newState) {\n      this.log.warn('The entity id \"' + entityId + '\" is not in the selection')\n    }\n  }\n\n  private refreshChips(selected: IncludeExcludeState<TId>[]): void {\n    if (this.ensureChipsNoChanges(selected)) {\n      this.elderMultiSelectChips.refresh()\n    }\n  }\n\n  private ensureChipsNoChanges(selected: IncludeExcludeState<TId>[]): boolean {\n    const requiredIds = selected\n      .filter((s) => s.mode !== IncludeExcludeValue.NEUTRAL)\n      .map((s) => s.id)\n\n    const currentIds = this.elderMultiSelectChips.entityIds ?? []\n    const currentIdSet = new Set<TId>(currentIds)\n\n    const missingIds = requiredIds.filter((required) => !currentIdSet.has(required))\n\n    if (missingIds.length > 0) {\n      this.elderMultiSelectChips.entityIds = [...currentIds, ...missingIds]\n      return false\n    } else {\n      return true\n    }\n  }\n\n  private findFilterEntityByEntity(entity: T): IncludeExcludeState<TId> {\n    const searchedId = this.elderMultiSelectChips.getEntityId(entity)\n    return this.findFilterEntityById(searchedId)\n  }\n\n  private findFilterEntityById(id: TId): IncludeExcludeState<TId> {\n    return this.selectionModel.findStateById(id)\n  }\n}\n","import { Objects } from '../../../../../common/objects'\nimport { Filter } from '../../../../../common/data/filters/filter'\n\n/**\n * Immutable representation of the state of an search input\n */\nexport class SearchInputState {\n  public static of(\n    queryKey: string,\n    filters: Filter[],\n    pristine: boolean,\n    userEvent: boolean\n  ): SearchInputState {\n    return new SearchInputState(queryKey, filters, pristine, userEvent)\n  }\n\n  public static unknown(): SearchInputState {\n    return new SearchInputState(null, [], true, false)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    /**\n     * attribute The name\n     */\n    public readonly queryKey: string,\n    /**\n     * value of the input\n     */\n    public readonly filters: Filter[],\n    /**\n     * pristine Has the user touched this?\n     */\n    public readonly pristine: boolean,\n    /**\n     * Was the input changed by a user interaction\n     */\n    public readonly userEvent: boolean\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public static isValueDefined(value: string | string[] | null): boolean {\n    if (Objects.nonNull(value)) {\n      if (value instanceof Array) {\n        return value.length > 0\n      } else {\n        return true\n      }\n    }\n    return false\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Checks if this search input has a value.\n   *\n   * The value must not be null and in case its\n   * an array, it must not be empty.\n   */\n  public get hasValue(): boolean {\n    return this.filters.some((filter) => SearchInputState.isValueDefined(filter.value))\n  }\n\n  public get hasFallbackValue(): boolean {\n    return this.hasValue && this.pristine\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public Api                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public withFilter(filter: Filter, pristine?: boolean): SearchInputState {\n    const value = filter.value\n    let pristineNow = SearchInputState.isValueDefined(value)\n    if (!pristineNow) {\n      if (pristine !== undefined && pristine !== null) {\n        pristineNow = pristine\n      }\n    }\n\n    return SearchInputState.of(this.queryKey, [filter], pristineNow, true)\n  }\n}\n","import { FilterValue } from './filter-value'\n\nexport default class FilterCommons {\n  public static isArrayAndNotEmpty(value: FilterValue): boolean {\n    return this.isArray(value) && this.isNotEmptyArray(value)\n  }\n\n  public static isArray(value: FilterValue): boolean {\n    return value !== null && Array.isArray(value)\n  }\n\n  public static isNotEmptyArray(value: FilterValue): boolean {\n    return value.length > 0\n  }\n}\n","import { Filter } from '../../../common/data/filters/filter'\nimport {\n  IncludeExcludeSelectionModel,\n  IncludeExcludeState,\n  IncludeExcludeValue,\n} from './include-exclude-selection-model'\nimport { FilterValue } from '../../../common/data/filters/filter-value'\nimport FilterCommons from '../../../common/data/filters/filter-commons'\n\nexport class IncludeExcludeModelFilterAdapter {\n  /***************************************************************************\n   *                                                                         *\n   * Constructors                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  public constructor(\n    private readonly includeExcludeModel: IncludeExcludeSelectionModel,\n    private readonly includeQueryKey: string,\n    private readonly excludeQueryKey: string\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public applyFilters(filters: Filter[]): void {\n    const filterMap = this.convertFiltersToMap(filters)\n    const includeIds = this.findArrayOrNull(filterMap, this.includeQueryKey)\n    const excludeIds = this.findArrayOrNull(filterMap, this.excludeQueryKey)\n\n    this.includeExcludeModel.updateStates([\n      ...this.buildStates(includeIds, IncludeExcludeValue.INCLUDE),\n      ...this.buildStates(excludeIds, IncludeExcludeValue.EXCLUDE),\n    ])\n  }\n\n  public toFilters(): Filter[] {\n    const includedIds = this.includeExcludeModel.findIncluded()\n    const excludedIds = this.includeExcludeModel.findExcluded()\n    return [\n      new Filter(this.includeQueryKey, this.nonEmptyArrayOrNull(includedIds)),\n      new Filter(this.excludeQueryKey, this.nonEmptyArrayOrNull(excludedIds)),\n    ]\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private nonEmptyArrayOrNull(value: FilterValue): string[] | null {\n    if (FilterCommons.isArrayAndNotEmpty(value)) {\n      return value as string[]\n    }\n    return null\n  }\n\n  private buildStates(ids: string[] | null, value: IncludeExcludeValue): IncludeExcludeState[] {\n    return ids ? ids.map((id) => new IncludeExcludeState(id, value)) : []\n  }\n\n  private convertFiltersToMap(filters: Filter[]): Map<string, FilterValue> {\n    const map = new Map<string, FilterValue>()\n    filters.forEach((filter) => map.set(filter.key, filter.value))\n    return map\n  }\n\n  private findArrayOrNull(values: Map<string, FilterValue>, key: string): string[] | null {\n    const value = this.nonEmptyArrayOrNull(values.get(key))\n    return value ? value : null\n  }\n}\n","import { FilterContext } from '../../../../../common/data/filters/filter-context'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { Filter } from '../../../../../common/data/filters/filter'\nimport { combineLatestWith, distinctUntilChanged, filter, map, skip, tap } from 'rxjs/operators'\nimport { FilterUtil } from '../../../../../common/utils/filter/filter-util'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\nexport class SearchContext {\n  public static standalone(): SearchContext {\n    return new SearchContext(null)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly id: string\n\n  private readonly userFilterContext = new FilterContext()\n  private readonly forcedFilterContext = new FilterContext()\n\n  private readonly allFilters$ = new BehaviorSubject<Filter[]>(undefined)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(id: string) {\n    this.id = id\n    this.userFilterContext.filters\n      .pipe(\n        combineLatestWith(this.forcedFilterContext.filters),\n        skip(1),\n        map(([userFilters, forcedFilters]) => FilterUtil.mergeCombine(userFilters, forcedFilters)),\n        tap((x) => this.log.debug('allFilters changed: ', x))\n      )\n      .subscribe((merged) => this.allFilters$.next(merged))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get allFiltersChanged(): Observable<Filter[]> {\n    return this.allFilters$.pipe(\n      filter((filters) => !!filters),\n      distinctUntilChanged((a, b) => FilterUtil.equals(a, b))\n    )\n  }\n\n  public get userFilters(): Filter[] {\n    return this.userFilterContext.filtersSnapshot\n  }\n\n  public get userFilters$(): Observable<Filter[]> {\n    return this.userFilterContext.filters\n  }\n\n  public get forcedFilters(): Filter[] {\n    return this.forcedFilterContext.filtersSnapshot\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public updateUserFiltersSave(filters: Filter[]): void {\n    // this.log.error('updateDefaultFilters, acceptDefaultFilters: ' + this.acceptDefaultFilters, filters);\n    this.userFilterContext.updateFilters(FilterUtil.strip(filters, this.forcedFilters))\n  }\n\n  public updateUserFilters(filters: Filter[]): void {\n    // called by search inputs\n    if (filters.length > 0) {\n      // this.log.error('updateUserFilters', filters);\n      this.userFilterContext.updateFilters(filters)\n    }\n  }\n\n  public replaceUserFilters(filters: Filter[]): void {\n    // called by url search\n    // this.log.error('replaceUserFilters', filters);\n    this.userFilterContext.replaceFilters(filters)\n  }\n\n  public replaceForcedFilters(filters: Filter[]): void {\n    this.forcedFilterContext.replaceFilters(filters)\n    // Maybe clean up existing user filters here\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import { Injectable } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { SearchContext } from './search-context'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SearchContextService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly searchContexts = new Map<string, SearchContext>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public context(contextId: string): SearchContext {\n    let ctx = this.searchContexts.get(contextId)\n    if (!ctx) {\n      ctx = new SearchContext(contextId)\n      this.searchContexts.set(contextId, ctx)\n    }\n    return ctx\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import { AfterViewInit, DestroyRef, Directive, Input, OnInit } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { combineLatestWith, debounceTime, filter, map, switchMap } from 'rxjs/operators'\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs'\nimport { SearchInput } from './domain/input/search-input'\nimport { Filter } from '../../../common/data/filters/filter'\nimport { FilterContext } from '../../../common/data/filters/filter-context'\nimport { SearchInputState } from './domain/input/search-input-state'\nimport { SearchContextService } from './domain/context/search-context.service'\nimport { SearchContext } from './domain/context/search-context'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\n\n/**\n * The SearchContextDirective binds a group of search-inputs\n * to a SearchContext with a two-way binding.\n *\n * It also binds the SearchContext to a FilterContext (DataContext).\n * TODO Maybe separate this??\n */\n@Directive({\n  selector: '[elderSearchContext]',\n  exportAs: 'elderSearchContext',\n  standalone: true,\n})\nexport class ElderSearchContextDirective implements OnInit, AfterViewInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly initialFilters: Filter[] = []\n  private initialFiltersRegistered: boolean\n\n  private readonly _searchInputs$ = new BehaviorSubject<SearchInput[]>([])\n  private readonly _searchStates$ = new BehaviorSubject<SearchInputState[]>([])\n  private readonly _filterContext$ = new BehaviorSubject<FilterContext>(null)\n\n  private readonly _searchContext$ = new BehaviorSubject<SearchContext>(SearchContext.standalone())\n  private readonly _searchContextId$ = new BehaviorSubject<string>(null)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    searchContextService: SearchContextService,\n    private readonly destroyRef: DestroyRef\n  ) {\n    this._searchContextId$\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        filter((contextId) => !!contextId),\n        map((contextId) => searchContextService.context(contextId))\n      )\n      .subscribe((ctx) => this._searchContext$.next(ctx))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.applyDefaultFiltersToSearchContext()\n    this.syncSearchContextToBoundFilterContext()\n  }\n\n  public ngAfterViewInit(): void {\n    const searchContext = this.searchContext\n    this.applySearchContextToInputs(searchContext)\n    this.syncSearchInputsToSearchContext()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set searchContextId(contextId: string) {\n    this._searchContextId$.next(contextId)\n  }\n\n  public get searchContextId(): string {\n    return this._searchContextId$.getValue()\n  }\n\n  public get searchContextId$(): Observable<string> {\n    return this._searchContextId$.asObservable()\n  }\n\n  public get searchContext$(): Observable<SearchContext> {\n    return this._searchContext$.asObservable()\n  }\n\n  public get searchContext(): SearchContext {\n    return this._searchContext$.getValue()\n  }\n\n  @Input('elderSearchContext')\n  public set filterContext(value: FilterContext | '') {\n    let context: FilterContext\n    if (value) {\n      if (typeof value !== 'string') {\n        context = value\n      } else {\n        this.log.warn('Illegal value provided for property filterContext: ', JSON.stringify(value))\n        throw new Error('Illegal value provided for property filterContext! ' + value)\n      }\n    } else {\n      context = FilterContext.empty()\n    }\n    this._filterContext$.next(context)\n  }\n\n  public get filterContext(): FilterContext {\n    return this._filterContext$.getValue()\n  }\n\n  /**\n   * Forced filters are always merged into the final FilterContext.\n   *\n   * This means they override user defined filters, but attempt\n   * to also keep the users intent (by merging) them.\n   */\n  @Input()\n  public set forcedFilters(filters: Filter[]) {\n    this.searchContext.replaceForcedFilters(filters)\n  }\n\n  public get forcedFilters(): Filter[] {\n    return this.searchContext.forcedFilters\n  }\n\n  public get attributes(): Observable<SearchInput[]> {\n    return this._searchInputs$.asObservable()\n  }\n\n  public get attributesSnapshot(): SearchInput[] {\n    return this._searchInputs$.getValue()\n  }\n\n  public get states$(): Observable<SearchInputState[]> {\n    return this._searchStates$.asObservable()\n  }\n\n  public get statesSnapshot(): SearchInputState[] {\n    return this._searchStates$.getValue()\n  }\n\n  /**\n   * Returns the current user touched attributes. (ignoring fallbacks)\n   */\n  public get touchedSearchInputs$(): Observable<SearchInputState[]> {\n    return this.states$.pipe(\n      map((states) => states.filter((s) => !s.pristine).filter((s) => !s.hasFallbackValue))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Register a new search name in this container\n   */\n  public register(searchInput: SearchInput): void {\n    if (this.initialFiltersRegistered) {\n      searchInput.applyFilters(this.initialFilters)\n    }\n    this.log.debug('Registering search input [' + searchInput.queryKey + '].')\n    this._searchInputs$.next([...this.searchInputs(), searchInput])\n  }\n\n  public reset(): void {\n    this.attributesSnapshot\n      .filter((attr) => !attr.readonly)\n      .forEach((a) => {\n        a.reset()\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private                                                                 *\n   *                                                                         *\n   **************************************************************************/\n\n  public searchInputs(): SearchInput[] {\n    return this._searchInputs$.getValue()\n  }\n\n  private applyDefaultFiltersToSearchContext(): void {\n    const dcFilters = this.filterContext\n    const searchContext = this.searchContext\n    if (searchContext.userFilters.length === 0) {\n      this.applyAsDefaultsUntilUserAction(searchContext, dcFilters)\n    } else {\n      dcFilters.replaceFilters(searchContext.userFilters)\n    }\n  }\n\n  private applyAsDefaultsUntilUserAction(\n    searchContext: SearchContext,\n    dcFilters: FilterContext\n  ): void {\n    dcFilters.filters\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        map((filters) => searchContext.updateUserFiltersSave(filters))\n        // takeWhile(acceptDefaultFilters => acceptDefaultFilters)\n      )\n      .subscribe()\n  }\n\n  private syncSearchInputsToSearchContext(): void {\n    this._searchInputs$\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        switchMap((inputs) => combineLatest(inputs.map((i) => i.state$))),\n        debounceTime(5)\n      )\n      .subscribe((states) => {\n        /// this.log.error('SearchInputStates Changed: ', states);\n        this._searchStates$.next(states)\n      })\n\n    const inputFilters$ = this._searchStates$.pipe(\n      map((states) => this.convertToFilters(states)),\n      filter((filters) => filters.length > 0)\n    )\n\n    inputFilters$\n      .pipe(takeUntilDestroyed(this.destroyRef), combineLatestWith(this._searchContext$))\n      .subscribe(([inputFilters, searchContext]) => {\n        searchContext.updateUserFilters(inputFilters)\n      })\n  }\n\n  private syncSearchContextToBoundFilterContext(): void {\n    this._searchContext$\n      .pipe(\n        takeUntilDestroyed(this.destroyRef),\n        switchMap((context) => context.allFiltersChanged)\n      )\n      .subscribe((allFilters) => this.applyToBoundFilterContext(allFilters))\n  }\n\n  private applyToBoundFilterContext(filters: Filter[]): void {\n    const filterCtx = this.filterContext\n    if (filterCtx) {\n      filterCtx.replaceFilters(filters)\n      this.log.debug(\n        'Applied Filters of SearchContext ' +\n          this.searchContextId +\n          ' to DataContext FilterContext.',\n        filters\n      )\n    } else {\n      this.log.warn('Failed to apply filters since no FilterContext is available!', filters)\n    }\n  }\n\n  private applySearchContextToInputs(searchContext: SearchContext): void {\n    const mergedFilters = [...searchContext.userFilters]\n    this.applyFiltersToInputs(mergedFilters)\n  }\n\n  private applyFiltersToInputs(filters: Filter[]): void {\n    this.saveInitialFilters(filters)\n    if (filters.length > 0) {\n      const inputsByKey = this.searchInputsByQueryKey()\n      this.log.debug('applyFiltersToInputs [' + Array.from(inputsByKey.keys()) + ']', {\n        filters: filters,\n        inputsByQueryKey: inputsByKey,\n      })\n      this.searchInputs().forEach((searchInput) => searchInput.applyFilters(filters))\n    }\n  }\n\n  private saveInitialFilters(filters: Filter[]) {\n    this.initialFiltersRegistered = true\n    this.initialFilters.push(...filters)\n  }\n\n  private buildFilterValueMap(filters: Filter[]): Map<string, Filter> {\n    const map = new Map<string, Filter>()\n    filters.forEach((filter) => map.set(filter.key, filter))\n    return map\n  }\n\n  private searchInputsByQueryKey(): Map<string, SearchInput> {\n    const inputs = this._searchInputs$.getValue()\n    const map = new Map<string, SearchInput>()\n    inputs.forEach((input) => map.set(input.queryKey, input))\n    return map\n  }\n\n  private convertToFilters(states: SearchInputState[]): Filter[] {\n    return states\n      .filter((s) => s.userEvent || s.hasFallbackValue)\n      .flatMap((s) => s.filters)\n      .filter((filter) => !!filter.key)\n  }\n}\n","import { DestroyRef, Directive, Host, Input, OnInit, Optional } from '@angular/core'\nimport { SearchInput } from '../../forms/search/domain/input/search-input'\nimport { BehaviorSubject, concat, Observable, of, skipUntil, Subject } from 'rxjs'\nimport { SearchInputState } from '../../forms/search/domain/input/search-input-state'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderSearchContextDirective } from '../../forms/search/elder-search-context.directive'\nimport { NgModel } from '@angular/forms'\nimport { Filter } from '../../../common/data/filters/filter'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport {\n  IncludeExcludeSelectionModel,\n  IncludeExcludeValue,\n} from '../filter/include-exclude-selection-model'\nimport { debounceTime, delay, first, map, tap } from 'rxjs/operators'\nimport { IncludeExcludeModelFilterAdapter } from '../filter/include-exclude-model-filter-adapter'\n\n/**\n * Binds a IncludeExcludeModel to a SearchContexts Filter.\n */\n@Directive({\n  selector: '[elderSearchIncludeExclude]',\n  exportAs: 'elderSearchInput',\n  standalone: true,\n})\nexport class ElderSearchIncludeExcludeDirective implements SearchInput, OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _queryKey$ = new BehaviorSubject<string>(null)\n  private _extractedName: string | null\n  private _userQueryKey: string | null\n\n  @Input()\n  public includeSuffix = ''\n\n  @Input({ required: true })\n  public excludeSuffix: string\n\n  private readonly _state$: Observable<SearchInputState>\n\n  private includeExcludeAdapter: IncludeExcludeModelFilterAdapter\n\n  public readonly initialDone$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private searchContext: ElderSearchContextDirective,\n    private destroyRef: DestroyRef,\n    private readonly selectionModel: IncludeExcludeSelectionModel,\n    @Optional() @Host() private ngModel: NgModel\n  ) {\n    this._state$ = this.buildInputStateObservable()\n      .pipe\n      // tap(state => this.log.error('EMIT SEARCH INPUT STATE [' + state.queryKey + ']: ' + state.queryValue + (state.pristine ? '(pristine)' : ''), state))\n      ()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit() {\n    this._extractedName = this.extractName()\n    this.updateQueryKey()\n\n    this.includeExcludeAdapter = new IncludeExcludeModelFilterAdapter(\n      this.selectionModel,\n      this.queryKey + this.includeSuffix,\n      this.queryKey + this.excludeSuffix\n    )\n\n    this.searchContext.register(this)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * (Optional) Usually the control name is used, this allows a custom query key\n   */\n  @Input()\n  public set queryKey(value: string) {\n    this._userQueryKey = value\n    this.updateQueryKey()\n  }\n\n  public get queryKey() {\n    return this._queryKey$.getValue()\n  }\n\n  public get queryKey$(): Observable<string> {\n    return this._queryKey$\n  }\n\n  public get state$(): Observable<SearchInputState> {\n    return this._state$\n  }\n\n  public get readonly(): boolean {\n    return this.ngModel?.isDisabled\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public applyFilters(filters: Filter[]) {\n    this.includeExcludeAdapter.applyFilters(filters)\n  }\n\n  public reset(): void {\n    this.selectionModel.resetAllTo(IncludeExcludeValue.NEUTRAL)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private updateQueryKey(): void {\n    const newKey = this._userQueryKey ?? this._extractedName\n    if (this._queryKey$.getValue() !== newKey) {\n      this._queryKey$.next(newKey)\n    }\n  }\n\n  private buildInputStateObservable(): Observable<SearchInputState> {\n    const viewStabilized$ = of('stabilized$').pipe(delay(20), first())\n\n    const inputStateChanges$ = this.selectionModel.selection$.pipe(\n      takeUntilDestroyed(this.destroyRef),\n      map((value) => this.buildInputState(true)),\n      skipUntil(viewStabilized$),\n      tap(() => this.initialDone$.next()),\n      debounceTime(20)\n    )\n\n    const startDelayed$ = of('start').pipe(\n      delay(15),\n      map((start) => {\n        return this.buildInputState(false)\n      })\n    )\n\n    return concat(startDelayed$, inputStateChanges$)\n  }\n\n  private buildInputState(userEvent: boolean): SearchInputState {\n    const filters = this.includeExcludeAdapter.toFilters()\n    return new SearchInputState(this.queryKey, filters, this.areAllPristine(filters), userEvent)\n  }\n\n  private areAllPristine(filters: Filter[]): boolean {\n    if (filters.length > 0) {\n      return filters.every((f) => this.isPristine(f))\n    } else {\n      return true\n    }\n  }\n\n  private isPristine(filter: Filter): boolean {\n    return !this.isAttributeValuePresent(filter.value)\n  }\n\n  private isAttributeValuePresent(value: any): boolean {\n    return SearchInputState.isValueDefined(value) && (value + '').length !== 0\n  }\n\n  private extractName(): string | null {\n    return this.ngModel?.name\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { AsyncPipe, CommonModule } from '@angular/common'\nimport { ElderSelectComponent } from './single/elder-select/elder-select.component'\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport { MatFormFieldModule } from '@angular/material/form-field'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatSelectModule } from '@angular/material/select'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { TemplatedSelectionDialogComponent } from './popup/templated-selection-dialog/templated-selection-dialog.component'\nimport { MatDialogModule } from '@angular/material/dialog'\nimport { MatButtonModule } from '@angular/material/button'\nimport { SelectionModelPopupDirective } from './popup/selection-model-popup.directive'\nimport { ElderFormsDirectivesModule } from '../forms/directives/elder-forms-directives.module'\nimport { MatInputModule } from '@angular/material/input'\nimport { MatAutocompleteModule } from '@angular/material/autocomplete'\nimport { MatToolbarModule } from '@angular/material/toolbar'\nimport { MatProgressBarModule } from '@angular/material/progress-bar'\nimport { ElderTableModule } from '../data-view/table/elder-table.module'\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner'\nimport { ElderInfiniteScrollModule } from '../infinitescroll/elder-infinite-scroll.module'\nimport { ElderSelectOnTabDirective } from './elder-select-on-tab.directive'\nimport { ElderAutocompleteModule } from '../input/autocomplete/elder-autocomplete.module'\nimport { ElderSelectValueDirective } from './elder-select-value.directive'\nimport { ElderMultiSelectChipsComponent } from './multi/elder-multi-select-chips/elder-multi-select-chips.component'\nimport { MatChipsModule } from '@angular/material/chips'\nimport {\n  ElderSelectChipAvatarDirective,\n  ElderSelectChipDirective,\n  ElderSelectCustomInputDirective,\n} from './elder-select-chip.directive'\nimport { ElderAutoSelectFirstDirective } from './auto/elder-auto-select-first.directive'\nimport { ElderPipesModule } from '../../pipes/elder-pipes.module'\nimport { ElderClearSelectDirective } from './single/elder-clear-select.directive'\nimport { MatTooltipModule } from '@angular/material/tooltip'\nimport { ElderThemeModule } from '../theme/elder-theme.module'\nimport { ElderSelectionPopupTriggerAdapterDirective } from './popup/selection-model-popup-trigger-adapter.directive'\nimport { ElderChipsModule } from '../chips/elder-chips.module'\nimport { CdkDrag, CdkDropList } from '@angular/cdk/drag-drop'\nimport { ElderMultiSelectChipOptionsComponent } from './multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component'\nimport { ElderSelectOptionComponent } from './multi/elder-chip-select-option/elder-select-option.component'\nimport { ElderMultiSelectAllInitialDirective } from './multi/elder-mutli-select-all-directive'\nimport { ElderAutoSelectSuggestFirstDirective } from './auto/elder-auto-select-suggest-first.directive'\nimport { ElderChipsIncludeExcludeDirective } from './filter/elder-chips-include-exclude.directive'\nimport { ElderFilterChipTemplateComponent } from './filter/elder-filter-chip-template/elder-filter-chip-template.component'\nimport { ElderSearchIncludeExcludeDirective } from './multi/elder-search-include-exclude.directive'\n\nexport { ElderSelectValueDirective } from './elder-select-value.directive'\nexport * from './elder-select-chip.directive'\nexport { ElderSelectOnTabDirective } from './elder-select-on-tab.directive'\nexport { ElderSelectComponent } from './single/elder-select/elder-select.component'\nexport {\n  TemplatedSelectionDialogComponent,\n  ISelectionModelDialogOptions,\n} from './popup/templated-selection-dialog/templated-selection-dialog.component'\nexport { SelectionModelPopupDirective } from './popup/selection-model-popup.directive'\nexport { ElderSelectionPopupTriggerAdapterDirective } from './popup/selection-model-popup-trigger-adapter.directive'\nexport { ElderMultiSelectBase } from './multi/elder-multi-select-base'\nexport { ElderMultiSelectChipsComponent } from './multi/elder-multi-select-chips/elder-multi-select-chips.component'\nexport { ElderMultiSelectChipOptionsComponent } from './multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component'\nexport { ElderSelectOptionComponent } from './multi/elder-chip-select-option/elder-select-option.component'\nexport { ElderAutoSelectFirstDirective } from './auto/elder-auto-select-first.directive'\nexport { ElderClearSelectDirective } from './single/elder-clear-select.directive'\nexport { ElderMultiSelectAllInitialDirective } from './multi/elder-mutli-select-all-directive'\nexport { ElderAutoSelectSuggestFirstDirective } from './auto/elder-auto-select-suggest-first.directive'\nexport { ElderChipsIncludeExcludeDirective } from './filter/elder-chips-include-exclude.directive'\nexport { ElderFilterChipTemplateComponent } from './filter/elder-filter-chip-template/elder-filter-chip-template.component'\n\nexport * from './filter/include-exclude-selection-model'\nexport { ElderSearchIncludeExcludeDirective } from './multi/elder-search-include-exclude.directive'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatSelectModule,\n    MatDialogModule,\n    MatButtonModule,\n    MatInputModule,\n    MatAutocompleteModule,\n    MatToolbarModule,\n    MatProgressBarModule,\n    MatProgressSpinnerModule,\n    MatChipsModule,\n    MatTooltipModule,\n    CdkDropList,\n    CdkDrag,\n    TranslateModule,\n    ElderFormsDirectivesModule,\n    ElderTableModule,\n    ElderInfiniteScrollModule,\n    ElderAutocompleteModule,\n    ElderPipesModule,\n    ElderThemeModule,\n    ElderChipsModule,\n    AsyncPipe,\n    AsyncPipe,\n    ElderSelectComponent,\n    ElderSelectValueDirective,\n    TemplatedSelectionDialogComponent,\n    SelectionModelPopupDirective,\n    ElderSelectionPopupTriggerAdapterDirective,\n    ElderSelectOnTabDirective,\n    ElderMultiSelectChipsComponent,\n    ElderSelectChipDirective,\n    ElderSelectChipAvatarDirective,\n    ElderAutoSelectFirstDirective,\n    ElderClearSelectDirective,\n    ElderSelectCustomInputDirective,\n    ElderMultiSelectChipOptionsComponent,\n    ElderSelectOptionComponent,\n    ElderMultiSelectAllInitialDirective,\n    ElderAutoSelectSuggestFirstDirective,\n    ElderChipsIncludeExcludeDirective,\n    ElderFilterChipTemplateComponent,\n    ElderSearchIncludeExcludeDirective,\n  ],\n  exports: [\n    ElderSelectComponent,\n    ElderSelectValueDirective,\n    TemplatedSelectionDialogComponent,\n    SelectionModelPopupDirective,\n    ElderSelectionPopupTriggerAdapterDirective,\n    ElderMultiSelectChipsComponent,\n    ElderSelectChipDirective,\n    ElderSelectChipAvatarDirective,\n    ElderAutoSelectFirstDirective,\n    ElderClearSelectDirective,\n    ElderSelectCustomInputDirective,\n    ElderMultiSelectChipOptionsComponent,\n    ElderSelectOptionComponent,\n    ElderMultiSelectAllInitialDirective,\n    ElderAutoSelectSuggestFirstDirective,\n    ElderChipsIncludeExcludeDirective,\n    ElderFilterChipTemplateComponent,\n    ElderSearchIncludeExcludeDirective,\n  ],\n})\nexport class ElderSelectModule {}\n","export class ElderLanguageConfig {\n  interceptor?: {\n    /**\n     * Globally disable request interceptor\n     * (By default enabled)\n     */\n    disable?: boolean\n\n    /**\n     * Configure a query param to use for the request interceptor\n     * (By default 'locale')\n     */\n    queryParam?: string\n  }\n}\n","import { Injectable, Injector } from '@angular/core'\nimport {\n  HttpEvent,\n  HttpHandler,\n  HttpInterceptor,\n  HttpParams,\n  HttpRequest,\n} from '@angular/common/http'\nimport { TranslateService } from '@ngx-translate/core'\nimport { Observable } from 'rxjs'\nimport { ElderLanguageConfig } from './elder-language-config'\n\n/**\n * This interceptor injects the current locale\n * so the backend know what the current desired locale is of a request.\n */\n@Injectable()\nexport class ElderLanguageInterceptor implements HttpInterceptor {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _translate: TranslateService\n  private _queryParam = 'locale'\n\n  private _configLoaded = false\n  private _config: ElderLanguageConfig\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructors                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private inj: Injector) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n    const config = this.languageConfig\n    const skipInterceptor = config && config.interceptor && config.interceptor.disable\n\n    if (!skipInterceptor && this.translate.currentLang) {\n      // Keeps the original request params. as a new HttpParams\n      let newParams = new HttpParams({ fromString: req.params.toString() })\n\n      newParams = newParams.set(this._queryParam, this.translate.currentLang)\n\n      // Clone the request with params instead of setParams\n      // Workaround for https://github.com/angular/angular/issues/18812\n      const requestClone = req.clone({\n        params: newParams,\n      })\n\n      return next.handle(requestClone)\n    }\n\n    return next.handle(req)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private get languageConfig(): ElderLanguageConfig {\n    if (!this._configLoaded) {\n      const config = this.inj.get(ElderLanguageConfig) // Workaround for cyclic dependency\n      this._config = config\n\n      this._queryParam =\n        config && config.interceptor && config.interceptor.queryParam\n          ? config.interceptor.queryParam\n          : 'locale'\n    }\n    return this._config\n  }\n\n  private get translate(): TranslateService {\n    if (!this._translate) {\n      this._translate = this.inj.get(TranslateService) // Workaround for cyclic dependency\n    }\n    return this._translate\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderLanguageSwitcherComponent } from './language-switcher/elder-language-switcher.component'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatMenuModule } from '@angular/material/menu'\nimport { MatSelectModule } from '@angular/material/select'\nimport { FormsModule } from '@angular/forms'\nimport { ElderLanguageInterceptor } from './elder-language-interceptor'\nimport { HTTP_INTERCEPTORS } from '@angular/common/http'\nimport { ElderLanguageConfig } from './elder-language-config'\n\nexport * from './elder-language.service'\nexport * from './language-switcher/elder-language-switcher.component'\nexport * from './elder-language-interceptor'\nexport * from './elder-language-config'\n\n/**\n * Provides language related functionality like\n * language-switcher, language service etc.\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    TranslateModule,\n    MatSelectModule,\n    MatIconModule,\n    MatButtonModule,\n    MatMenuModule,\n    FormsModule,\n    ElderLanguageSwitcherComponent,\n  ],\n  exports: [ElderLanguageSwitcherComponent],\n})\nexport class ElderLanguageModule {\n  static forRoot(config?: ElderLanguageConfig): ModuleWithProviders<ElderLanguageModule> {\n    return {\n      ngModule: ElderLanguageModule,\n      providers: [\n        {\n          provide: ElderLanguageConfig,\n          useValue: config,\n        },\n        { provide: HTTP_INTERCEPTORS, useClass: ElderLanguageInterceptor, multi: true },\n      ],\n    }\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { RouterModule } from '@angular/router'\nimport { MatBadgeModule } from '@angular/material/badge'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatDividerModule } from '@angular/material/divider'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatToolbarModule } from '@angular/material/toolbar'\nimport { ElderToolbarComponent } from './toolbar/elder-toolbar.component'\nimport { ElderLanguageModule } from '../../i18n/language/elder-language.module'\nimport { ElderToolbarColumnDirective } from './elder-toolbar-column.directive'\nimport { ElderToolbarTitleComponent } from './toolbar-title/elder-toolbar-title.component'\n\nexport { ElderToolbarService } from './elder-toolbar.service'\nexport { ElderToolbarColumnDirective } from './elder-toolbar-column.directive'\nexport { ElderToolbarComponent } from './toolbar/elder-toolbar.component'\n\nexport { ElderToolbarTitleComponent } from './toolbar-title/elder-toolbar-title.component'\nexport {\n  ElderToolbarTitleService,\n  ToolbarHeader,\n} from './toolbar-title/elder-toolbar-title.service'\n\n@NgModule({\n  imports: [\n    // common\n    CommonModule,\n    RouterModule,\n    // layout\n    MatDividerModule,\n    // navigation\n    MatToolbarModule,\n    // buttons & indicators\n    MatButtonModule,\n    MatIconModule,\n    MatBadgeModule,\n    // translations\n    TranslateModule,\n    ElderLanguageModule,\n    ElderToolbarComponent,\n    ElderToolbarColumnDirective,\n    ElderToolbarTitleComponent,\n  ],\n  exports: [ElderToolbarComponent, ElderToolbarColumnDirective, ElderToolbarTitleComponent],\n})\nexport class ElderToolbarModule {}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderDetailDirective } from './elder-detail.directive'\nimport { ElderMasterDirective } from './elder-master.directive'\nimport { ElderMasterDetailComponent } from './master-detail/elder-master-detail.component'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatTableModule } from '@angular/material/table'\nimport { MatSortModule } from '@angular/material/sort'\nimport { ElderMasterActivationDirective } from './elder-master-activation.directive'\nimport { FormsModule } from '@angular/forms'\nimport { MatInputModule } from '@angular/material/input'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatBadgeModule } from '@angular/material/badge'\nimport { MatTooltipModule } from '@angular/material/tooltip'\nimport { ElderDetailDialogComponent } from './elder-detail-dialog/elder-detail-dialog.component'\nimport { MatToolbarModule } from '@angular/material/toolbar'\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle'\nimport { ElderTableModule } from '../table/elder-table.module'\nimport { ElderMeasuresModule } from '../../measures/elder-measures.module'\nimport { ElderCardModule } from '../../cards/elder-card/elder-card.module'\nimport { ElderSelectModule } from '../../select/elder-select.module'\nimport { ElderFormsDirectivesModule } from '../../forms/directives/elder-forms-directives.module'\nimport { ElderToolbarModule } from '../../navigation/toolbar/elder-toolbar.module'\n\nexport * from './elder-master.directive'\nexport * from './elder-detail.directive'\nexport * from './elder-master-activation.directive'\nexport * from './elder-master-detail-mode'\nexport * from './elder-master-detail.service'\nexport * from './master-detail-activation-event'\nexport * from './elder-detail-dialog/elder-detail-dialog.component'\nexport * from './master-detail/elder-master-detail.component'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatIconModule,\n    MatTableModule,\n    ElderTableModule,\n    ElderMeasuresModule,\n    MatSortModule,\n    FormsModule,\n    MatInputModule,\n    ElderCardModule,\n    MatButtonModule,\n    MatBadgeModule,\n    MatTooltipModule,\n    ElderSelectModule,\n    ElderFormsDirectivesModule,\n    ElderToolbarModule,\n    MatToolbarModule,\n    MatSlideToggleModule,\n    ElderMasterDetailComponent,\n    ElderDetailDirective,\n    ElderMasterDirective,\n    ElderMasterActivationDirective,\n    ElderDetailDialogComponent,\n  ],\n  exports: [\n    ElderMasterDetailComponent,\n    ElderDetailDirective,\n    ElderMasterDirective,\n    ElderMasterActivationDirective,\n    ElderDetailDialogComponent,\n  ],\n})\nexport class ElderMasterDetailModule {}\n","import { ChangeDetectionStrategy, Component, Input, Output } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { skip } from 'rxjs/operators'\n\n@Component({\n  selector: 'elder-nav-list',\n  templateUrl: './elder-nav-list.component.html',\n  styleUrls: ['./elder-nav-list.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class ElderNavListComponent<T = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _valueChange = new BehaviorSubject<T>(null)\n\n  /**\n   * Function to compare the option values with the selected values. The first argument\n   * is a value from an item option. The second is the current value.\n   */\n  @Input()\n  public compareWith: (o1: T, o2: T) => boolean\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Emits when the value changes.\n   */\n  @Output()\n  public get valueChange(): Observable<T> {\n    return this._valueChange.pipe(skip(1))\n  }\n\n  /**\n   * Sets the current selected value\n   */\n  @Input()\n  public set value(value: T) {\n    this._valueChange.next(value)\n  }\n\n  /**\n   * Gets the current selected value\n   */\n  public get value(): T {\n    return this._valueChange.value\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public isActive(value: T): boolean {\n    if (this.compareWith) {\n      return this.compareWith(value, this.value)\n    } else {\n      return value === this.value\n    }\n  }\n}\n","<div class=\"layout-col full elder-nav-list-full\">\n  <div\n    class=\"layout-col p-sm flex scrollable\"\n    style=\"overflow-y: scroll\"\n  >\n    <ng-content></ng-content>\n  </div>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  HostBinding,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core'\nimport { BehaviorSubject, Observable, Subject, switchMap } from 'rxjs'\nimport { combineLatestWith, filter, map, startWith, takeUntil } from 'rxjs/operators'\nimport { QueryParamsHandling, RouterLinkActive, RouterLink } from '@angular/router'\nimport { ElderNavListComponent } from '../nav-list/elder-nav-list.component'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatRipple } from '@angular/material/core'\nimport { NgTemplateOutlet, AsyncPipe } from '@angular/common'\n\nclass NavItemModel {\n  constructor(\n    public readonly routerLink: string,\n    public readonly href: string,\n    public readonly hrefTarget: string\n  ) {}\n}\n\nexport class NavItemActivated {\n  constructor(\n    public readonly event: MouseEvent | KeyboardEvent,\n    public readonly value: any\n  ) {}\n}\n\n@Component({\n  selector: 'elder-nav-link',\n  templateUrl: './elder-nav-link.component.html',\n  styleUrls: ['./elder-nav-link.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatRipple,\n    RouterLinkActive,\n    RouterLink,\n    NgTemplateOutlet,\n    MatIcon,\n    AsyncPipe,\n    TranslateModule,\n  ],\n})\nexport class ElderNavLinkComponent implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostBinding('attr.tabindex') tabIndex = -1\n\n  readonly model$: Observable<NavItemModel>\n\n  @Input()\n  public title: string\n\n  @Input()\n  public queryParamsHandling: QueryParamsHandling\n\n  @Input()\n  public queryParams: {\n    [k: string]: any\n  } = {}\n\n  @Input()\n  public icon: string\n\n  @Input()\n  public fontIcon: string\n\n  @Input()\n  public fontSet: string\n\n  @Input()\n  public svgIcon: string\n\n  /**\n   * @deprecated Since v20.4.7\n   */\n  @Output()\n  public readonly clicked: never\n\n  @Output()\n  public readonly activated = new Subject<NavItemActivated>()\n\n  private _disabled = false\n  private readonly _routerLink$ = new BehaviorSubject<string>('')\n  private readonly _href$ = new BehaviorSubject<string>('')\n  private readonly _target$ = new BehaviorSubject<string>('_blank')\n  private readonly _routerLinkActive$ = new BehaviorSubject<RouterLinkActive>(undefined)\n  private readonly _active$ = new BehaviorSubject<boolean>(false)\n  private readonly destroy$ = new Subject<void>()\n  private _value: any\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly navList: ElderNavListComponent) {\n    this.model$ = this._routerLink$.pipe(\n      combineLatestWith(this._href$),\n      combineLatestWith(this._target$),\n      map(([[routerLink, href], target]) => new NavItemModel(routerLink, href, target))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this._routerLinkActive$\n      .pipe(\n        takeUntil(this.destroy$),\n        filter((rla) => !!rla),\n        switchMap((rla) => {\n          return rla.isActiveChange.pipe(startWith(rla.isActive))\n        })\n      )\n      .subscribe((active) => this._active$.next(active))\n\n    this.navList.valueChange\n      .pipe(\n        takeUntil(this.destroy$),\n        map((value) => this.isCurrentValueActive)\n      )\n      .subscribe((active) => this._active$.next(active))\n\n    if (this.value) {\n      this._active$.next(this.isCurrentValueActive)\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get active$(): Observable<boolean> {\n    return this._active$\n  }\n\n  @ViewChild(RouterLinkActive, { static: false })\n  set routerLinkActive(rla: RouterLinkActive) {\n    this._routerLinkActive$.next(rla)\n  }\n\n  @Input()\n  public set routerLink(value: string) {\n    this._routerLink$.next(value)\n  }\n\n  @Input()\n  public set href(value: string) {\n    this._href$.next(value)\n  }\n\n  @Input()\n  public set target(value: string) {\n    this._target$.next(value)\n  }\n\n  @Input()\n  public set value(v: any) {\n    this._value = v\n  }\n\n  public get value(): any {\n    return this._value\n  }\n\n  @Input()\n  public set disabled(v: BooleanInput) {\n    this._disabled = coerceBooleanProperty(v)\n  }\n\n  public get disabled(): boolean {\n    return this._disabled\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public itemActivated(event: MouseEvent | KeyboardEvent): void {\n    if (!this._disabled) {\n      this.activated.next(new NavItemActivated(event, this.value))\n      if (this.value !== null) {\n        this.navList.value = this.value\n      }\n    }\n  }\n\n  public itemClick(event: MouseEvent): void {\n    this.itemActivated(event)\n  }\n\n  public itemKeyDown(event: KeyboardEvent): void {\n    event.preventDefault()\n    event.stopPropagation()\n    if (event.key === 'Enter' || event.key === ' ') {\n      this.itemActivated(event)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private get isCurrentValueActive(): boolean {\n    return this.navList.isActive(this.value)\n  }\n}\n","<!-- Router Link -->\n@if (model$ | async; as model) {\n  @if (model.routerLink; as routerLink) {\n    <a\n      matRipple\n      [matRippleDisabled]=\"disabled\"\n      class=\"layout-row place-start-center nav-link\"\n      [routerLink]=\"routerLink\"\n      [queryParamsHandling]=\"queryParamsHandling\"\n      [queryParams]=\"queryParams\"\n      routerLinkActive=\"dummy\"\n      [class.nav-link-clickable]=\"!disabled\"\n      [class.nav-link-disabled]=\"disabled\"\n      [class.nav-link-active]=\"active$ | async\"\n      [class.nav-link-inactive]=\"(active$ | async) === false\"\n    >\n      <ng-container [ngTemplateOutlet]=\"defaultLinkTemplate\"></ng-container>\n    </a>\n  }\n  <!-- Href Link -->\n  @if (model.href; as href) {\n    <a\n      matRipple\n      [matRippleDisabled]=\"disabled\"\n      class=\"layout-row place-start-center nav-link\"\n      [href]=\"href\"\n      [target]=\"model.hrefTarget\"\n      [class.nav-link-clickable]=\"!disabled\"\n      [class.nav-link-disabled]=\"disabled\"\n      [class.nav-link-active]=\"active$ | async\"\n      [class.nav-link-inactive]=\"(active$ | async) === false\"\n    >\n      <ng-container [ngTemplateOutlet]=\"defaultLinkTemplate\"></ng-container>\n    </a>\n  }\n  <!-- Simple Button -->\n  @if (!model.href && !model.routerLink) {\n    <a\n      matRipple\n      [matRippleDisabled]=\"disabled\"\n      class=\"layout-row place-start-center nav-link\"\n      (click)=\"itemClick($event)\"\n      [class.nav-link-clickable]=\"!disabled\"\n      [class.nav-link-disabled]=\"disabled\"\n      [class.nav-link-active]=\"active$ | async\"\n      [class.nav-link-inactive]=\"(active$ | async) === false\"\n    >\n      <ng-container [ngTemplateOutlet]=\"defaultLinkTemplate\"></ng-container>\n    </a>\n  }\n}\n\n<ng-template #defaultLinkTemplate>\n  <div class=\"layout-row place-start-center flex gap-md noselect\">\n    @if (!(!icon && !title)) {\n      <mat-icon [fontIcon]=\"fontIcon\" [fontSet]=\"fontSet\">\n        {{ icon }}\n      </mat-icon>\n    }\n    @if (svgIcon) {\n      <mat-icon [svgIcon]=\"svgIcon\"></mat-icon>\n    }\n    @if (title) {\n      <span class=\"noselect\">\n        {{ title | translate }}\n      </span>\n    }\n    <ng-content></ng-content>\n  </div>\n</ng-template>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  contentChildren,\n  ContentChildren,\n  DestroyRef,\n  effect,\n  inject,\n  Input,\n  OnInit,\n  output,\n  Output,\n  QueryList,\n  signal,\n  untracked,\n} from '@angular/core'\nimport { animate, state, style, transition, trigger } from '@angular/animations'\nimport { ElderNavLinkComponent, NavItemActivated } from '../nav-link/elder-nav-link.component'\nimport { Subject, combineLatest, of } from 'rxjs'\nimport { ElderNavListComponent } from '../nav-list/elder-nav-list.component'\nimport { map } from 'rxjs/operators'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatRipple } from '@angular/material/core'\nimport { AsyncPipe } from '@angular/common'\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop'\n\nconst animations = [\n  trigger('openClose', [\n    state(\n      'open',\n      style({\n        height: '*',\n        opacity: 1,\n      })\n    ),\n    state(\n      'closed',\n      style({\n        height: 0,\n        opacity: 0.5,\n        padding: 0,\n      })\n    ),\n    transition('open => closed', [animate('200ms')]),\n    transition('closed => open', [animate('200ms')]),\n  ]),\n]\n\n@Component({\n  selector: 'elder-nav-group',\n  templateUrl: './elder-nav-group.component.html',\n  styleUrls: ['./elder-nav-group.component.scss'],\n  animations: animations,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatRipple, MatIcon],\n})\nexport class ElderNavGroupComponent implements OnInit {\n  private readonly destroyRef = inject(DestroyRef)\n  private readonly navList = inject(ElderNavListComponent)\n\n  private childSubscription: any\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly children = contentChildren(ElderNavLinkComponent)\n  public readonly isOpen = signal<boolean>(false)\n  public readonly clicked = output<NavItemActivated>()\n  private readonly childrenActiveState = signal<boolean>(false)\n\n  /***************************************************************************\n   *                                                                         *\n   * Computed Properties                                                     *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly active = computed(() => this.childrenActiveState())\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor & Effects                                                   *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    // Effect to monitor children's active states\n    effect(() => {\n      const childComponents = this.children()\n\n      if (this.childSubscription) {\n        this.childSubscription.unsubscribe()\n      }\n      const childActiveObservables = childComponents.map((child) => child.active$)\n      this.childSubscription = combineLatest(childActiveObservables).subscribe((active) => {\n        this.childrenActiveState.set(active.some((active) => active))\n      })\n    })\n\n    // Effect to open the group if any child becomes active: important for page load\n    effect(() => {\n      const isActive = this.active()\n      const isOpen = untracked(this.isOpen)\n      if (isActive && !isOpen) {\n        this.isOpen.set(true)\n      }\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  public ngOnDestroy(): void {\n    if (this.childSubscription) {\n      this.childSubscription.unsubscribe()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public Api                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public itemClick(event: MouseEvent | KeyboardEvent): void {\n    this.clicked.emit(new NavItemActivated(event, undefined))\n    this.toggle()\n  }\n\n  public toggle(): void {\n    this.isOpen.set(!this.isOpen())\n  }\n\n  public itemKeyDown(event: KeyboardEvent): void {\n    if (event.key === 'Enter' || event.key === ' ') {\n      event.preventDefault()\n      event.stopPropagation()\n      this.itemClick(event)\n    }\n  }\n}\n","<div class=\"layout-col nav-group\">\n  <a\n    matRipple\n    tabindex=\"0\"\n    class=\"layout-row place-start-center nav-group-button\"\n    [class.nav-group-button-open]=\"isOpen()\"\n    [class.nav-group-button-closed]=\"!isOpen()\"\n    [class.nav-group-button-active]=\"active()\"\n    (click)=\"itemClick($event)\"\n    (keydown)=\"itemKeyDown($event)\"\n  >\n    <div class=\"layout-row place-start-center gap-lg full noselect\">\n      <ng-content></ng-content>\n      <span class=\"flex\"></span>\n      <mat-icon>{{ isOpen() ? 'keyboard_arrow_up' : 'keyboard_arrow_down' }}</mat-icon>\n    </div>\n  </a>\n  <!-- Nested Items projection -->\n  <div\n    class=\"layout-col nav-group-items-container p-sm\"\n    [@openClose]=\"isOpen() ? 'open' : 'closed'\"\n    [inert]=\"!isOpen()\"\n  >\n    <ng-content select=\"elder-nav-link\"></ng-content>\n  </div>\n</div>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderNavListComponent } from './nav-list/elder-nav-list.component'\nimport { ElderNavLinkComponent } from './nav-link/elder-nav-link.component'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatIconModule } from '@angular/material/icon'\nimport { RouterModule } from '@angular/router'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { A11yModule } from '@angular/cdk/a11y'\nimport { ElderNavGroupComponent } from './nav-group/elder-nav-group.component'\nimport { MatListModule } from '@angular/material/list'\nimport { MatRippleModule } from '@angular/material/core'\n\nexport { ElderNavListComponent } from './nav-list/elder-nav-list.component'\nexport { ElderNavLinkComponent } from './nav-link/elder-nav-link.component'\nexport { ElderNavGroupComponent } from './nav-group/elder-nav-group.component'\n\n@NgModule({\n  exports: [ElderNavListComponent, ElderNavLinkComponent, ElderNavGroupComponent],\n  imports: [\n    CommonModule,\n    RouterModule,\n    MatIconModule,\n    MatButtonModule,\n    A11yModule,\n    TranslateModule,\n    MatListModule,\n    MatRippleModule,\n    ElderNavListComponent,\n    ElderNavLinkComponent,\n    ElderNavGroupComponent,\n  ],\n})\nexport class ElderNavModule {}\n","export class PathNode {\n  constructor(\n    public readonly id: string,\n    public readonly name: string\n  ) {}\n}\n\nexport class Path {\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static readonly DELIMITER = '/'\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _nodes: PathNode[] = []\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(nodes: PathNode[]) {\n    this._nodes.push(...nodes)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get nodes(): PathNode[] {\n    return this.nodes\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core'\nimport { BehaviorSubject, Subject } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { PathNode } from '../path/path'\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators'\nimport { MatMenuTrigger, MatMenu, MatMenuItem } from '@angular/material/menu'\nimport { ElderClipboardPutDirective } from '../../../forms/directives/elder-clipboard-put.directive'\nimport { ElderStopEventPropagationDirective } from '../../../forms/directives/elder-stop-event-propagation.directive'\nimport { MatIconAnchor, MatAnchor, MatIconButton } from '@angular/material/button'\nimport { MatIcon } from '@angular/material/icon'\nimport { ElderKeyEventDirective } from '../../../forms/directives/elder-key-event.directive'\nimport { MatInput } from '@angular/material/input'\nimport { ElderFormFieldDenseDirective } from '../../../forms/directives/elder-form-field-dense.directive'\nimport { MatFormField } from '@angular/material/form-field'\nimport { FormsModule } from '@angular/forms'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-bread-crumbs',\n  templateUrl: './elder-bread-crumbs.component.html',\n  styleUrls: ['./elder-bread-crumbs.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    FormsModule,\n    MatFormField,\n    ElderFormFieldDenseDirective,\n    MatInput,\n    ElderKeyEventDirective,\n    MatIcon,\n    MatIconAnchor,\n    ElderStopEventPropagationDirective,\n    MatAnchor,\n    MatIconButton,\n    MatMenuTrigger,\n    MatMenu,\n    MatMenuItem,\n    ElderClipboardPutDirective,\n    AsyncPipe,\n  ],\n})\nexport class ElderBreadCrumbsComponent implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _unsubscribe = new Subject<void>()\n\n  private _path: string\n\n  public readonly editMode$ = new BehaviorSubject<boolean>(false)\n\n  private readonly _pathInputChanged$: Subject<string> = new Subject<string>()\n\n  @Output()\n  public readonly pathChange = new EventEmitter<string>()\n\n  @Input()\n  public root = '/'\n\n  @Input()\n  public rootTranslation: string = null\n\n  @Input()\n  public rootIcon: string\n\n  @Input()\n  public backgroundColor: string\n\n  @ViewChild(MatMenuTrigger)\n  public trigger: MatMenuTrigger\n\n  public readonly nodes$ = new BehaviorSubject<PathNode[]>([])\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this._pathInputChanged$\n      .pipe(\n        takeUntil(this._unsubscribe),\n        distinctUntilChanged(), // only emit if value is different from previous value\n        debounceTime(250)\n      )\n      .subscribe((value) => {\n        this.log.debug(value)\n        this.pathChange.emit(value)\n      })\n  }\n\n  public ngOnDestroy() {\n    this._unsubscribe.next()\n    this._unsubscribe.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set editModeEnabled(value: boolean) {\n    this.editMode$.next(value)\n  }\n\n  public get editModeEnabled() {\n    return this.editMode$.getValue()\n  }\n\n  @Input()\n  public set path(path: string) {\n    if (this._path !== path) {\n      this._path = path\n      this.nodes$.next(this.buildNodes(this._path))\n    }\n  }\n\n  public get rootRawDisplay(): string {\n    const parts = this.root.split('/')\n    const val = parts[parts.length - 1]\n    return val ? val : 'Home'\n  }\n\n  public get path(): string {\n    return this._path\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onEnter(): void {\n    this.disableEditMode()\n  }\n\n  public onPathEditBlur(event: Event): void {\n    // this.log.debug('blurred', event);\n    this.disableEditMode()\n  }\n\n  public onPathInputChange(value: string) {\n    this._pathInputChanged$.next(value)\n  }\n\n  public onMenuEditPathClick(event: any) {\n    this.trigger.closeMenu()\n    this.toggleEditMode()\n  }\n\n  public goToRoot() {\n    this.goToPath(new PathNode(this.root, ''))\n  }\n\n  public goToPath(node: PathNode) {\n    this.path = node.id\n    this.pathChange.next(this._path)\n  }\n\n  public toggleEditMode(): void {\n    this.editModeEnabled = !this.editModeEnabled\n  }\n\n  public enableEditMode(): void {\n    this.editModeEnabled = true\n  }\n\n  public disableEditMode(): void {\n    this.editModeEnabled = false\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildNodes(path: string): PathNode[] {\n    const nodes: PathNode[] = []\n\n    nodes.push(\n      new PathNode(this.root, this.rootTranslation ? this.rootTranslation : this.rootRawDisplay)\n    )\n\n    if (path) {\n      path = path.startsWith(this.root) ? path.substr(this.root.length) : path\n\n      this.log.debug('path: ' + path)\n\n      const parts = path.split('/')\n\n      let parent = this.root\n\n      for (const part of parts) {\n        if (part.length === 0) {\n          continue\n        }\n\n        const current = parent ? parent + '/' + part : part\n\n        nodes.push(new PathNode(current, part))\n\n        parent = current\n      }\n    }\n\n    return nodes\n  }\n}\n","<!-- main container-->\n@if ({ enabled: editMode$ | async }; as editMode) {\n  <div\n    class=\"layout-row place-start-center full breadcrumb-bar\"\n    [style.background-color]=\"backgroundColor\"\n  >\n    <!-- path container -->\n    <form\n      #breadCrumbForm=\"ngForm\"\n      class=\"layout-row place-start-center flex breadcrumb-path\"\n      (click)=\"enableEditMode()\"\n    >\n      <!-- path edit control (if editMode:enabled) -->\n      @if (editMode.enabled) {\n        <mat-form-field class=\"flex\" elderDense>\n          {{ pathInput.focus() }}\n          <input\n            matInput\n            type=\"text\"\n            name=\"pathInput\"\n            #pathInput\n            [ngModel]=\"path\"\n            (ngModelChange)=\"onPathInputChange($event)\"\n            (blur)=\"onPathEditBlur($event)\"\n            elderKeyEvent\n            [elderKeyEventFilter]=\"'Enter'\"\n            (onElderKeyEvent)=\"onEnter()\"\n          />\n        </mat-form-field>\n      }\n      <!-- navigation control (if editMode:disabled) -->\n      @if (!editMode.enabled) {\n        @for (node of nodes$ | async; track node; let isFirst = $first; let isLast = $last) {\n          <div class=\"layout-row place-center-center flex-none\">\n            <!-- arrow right icon as path element delimiter -->\n            @if (!isFirst) {\n              <mat-icon class=\"noselect breadcrumb-arrow\">keyboard_arrow_right</mat-icon>\n            }\n            <!-- root element (case root icon) -->\n            @if (isFirst && rootIcon) {\n              <a\n                mat-icon-button\n                class=\"breadcrumb\"\n                (click)=\"goToPath(node)\"\n                elderStopEventPropagation\n              >\n                <mat-icon>{{ rootIcon }}</mat-icon>\n              </a>\n            }\n            <!-- intermediate elements (not last and (not first or root icon)) -->\n            @if (!isLast && (!isFirst || !rootIcon)) {\n              <a mat-button class=\"breadcrumb\" (click)=\"goToPath(node)\" elderStopEventPropagation>\n                <span>{{ node.name }}</span>\n              </a>\n            }\n            <!-- last element (is last and (not first or root icon)) -->\n            @if (isLast && (!isFirst || !rootIcon)) {\n              <a mat-button class=\"breadcrumb\" (click)=\"(null)\" elderStopEventPropagation>\n                {{ node.name }}\n                <mat-icon>arrow_drop_down</mat-icon>\n              </a>\n            }\n          </div>\n        }\n      }\n    </form>\n    <!-- bread crumb action menu button -->\n    <button mat-icon-button type=\"button\" [matMenuTriggerFor]=\"menu\">\n      <mat-icon style=\"font-size: 22px\">arrow_drop_down</mat-icon>\n      <mat-menu #menu=\"matMenu\">\n        <button mat-menu-item type=\"button\" [elderClipboardPut]=\"path\">\n          <mat-icon>content_copy</mat-icon>\n          <span>{{ 'Pfad kopieren' }}</span>\n        </button>\n        <button\n          mat-menu-item\n          type=\"button\"\n          (click)=\"onMenuEditPathClick($event)\"\n          elderStopEventPropagation\n        >\n          @if (!editMode.enabled) {\n            <mat-icon>edit</mat-icon>\n          }\n          @if (editMode.enabled) {\n            <mat-icon>done</mat-icon>\n          }\n          @if (!editMode.enabled) {\n            <span>{{ 'Pfad editieren' }}</span>\n          }\n          @if (editMode.enabled) {\n            <span>{{ 'Pfad bestätigen' }}</span>\n          }\n        </button>\n      </mat-menu>\n    </button>\n  </div>\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderBreadCrumbsComponent } from './bread-crumbs/elder-bread-crumbs.component'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatFormFieldModule } from '@angular/material/form-field'\nimport { MatIconModule } from '@angular/material/icon'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatInputModule } from '@angular/material/input'\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport { ElderFormsDirectivesModule } from '../../forms/directives/elder-forms-directives.module'\nimport { MatMenuModule } from '@angular/material/menu'\n\nexport * from './bread-crumbs/elder-bread-crumbs.component'\nexport * from './path/path'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    TranslateModule,\n    MatFormFieldModule,\n    MatIconModule,\n    MatButtonModule,\n    MatInputModule,\n    MatMenuModule,\n    ElderFormsDirectivesModule,\n    ElderBreadCrumbsComponent,\n  ],\n  exports: [ElderBreadCrumbsComponent],\n})\nexport class ElderBreadCrumbsModule {}\n","import { Injectable } from '@angular/core'\nimport { debounceTime, filter, map } from 'rxjs/operators'\nimport {\n  ActivatedRouteSnapshot,\n  NavigationEnd,\n  NavigationExtras,\n  Router,\n  RouterStateSnapshot,\n} from '@angular/router'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { Sets } from '../../../common/sets'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderRouterOutletService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger('ElderRouterOutletService')\n\n  private _activeOutlets: BehaviorSubject<Set<string>> = null\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private router: Router) {}\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Emits the current active outlets over time\n   */\n  public get activeOutlets(): Observable<Set<string>> {\n    this.ensureListener()\n    return this._activeOutlets.asObservable()\n  }\n\n  /**\n   * Gets a snapshot of the current active outlets\n   */\n  public get activeOutletsSnapshot(): Set<string> {\n    this.ensureListener()\n    return this._activeOutlets.value\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Checks if the given outlet is currently active\n   */\n  public isActive(outlet: string): boolean {\n    return this.activeOutletsSnapshot.has(outlet)\n  }\n\n  /**\n   * Deactivates the given outlet\n   */\n  public deactivate(outlet: string): Promise<boolean> {\n    if (this.isActive(outlet)) {\n      const command: any = {}\n      command['outlets'] = {}\n      command['outlets'][outlet] = null\n\n      return this.router.navigate([command], { queryParamsHandling: 'merge' })\n    } else {\n      return Promise.resolve(false)\n    }\n  }\n\n  /**\n   * Activates the given outlet route with the given path\n   * @param outlet\n   * @param parts\n   * @param extras\n   */\n  public activate(outlet: string, parts: string[], extras?: NavigationExtras): Promise<boolean> {\n    const command: any = {}\n    command['outlets'] = {}\n    command['outlets'][outlet] = parts\n    return this.router.navigate([command], extras)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private ensureListener(): void {\n    if (!this._activeOutlets) {\n      this._activeOutlets = new BehaviorSubject<Set<string>>(this.collectActiveOutlets())\n\n      this.router.events\n        .pipe(\n          filter((event) => event instanceof NavigationEnd),\n          debounceTime(60),\n          map((event) => event as NavigationEnd)\n        )\n        .subscribe((event) => {\n          this.updateActiveOutlets()\n        })\n    }\n  }\n\n  private updateActiveOutlets(): void {\n    const found = this.collectActiveOutlets()\n    const current = this.activeOutletsSnapshot\n    if (!Sets.equals(found, current)) {\n      this._activeOutlets.next(found)\n    }\n  }\n\n  private collectActiveOutlets(): Set<string> {\n    const rs: RouterStateSnapshot = this.router.routerState.snapshot\n    const snap: ActivatedRouteSnapshot = rs.root\n    return this.collectActiveOutletsFor(snap)\n  }\n\n  private collectActiveOutletsFor(root: ActivatedRouteSnapshot): Set<string> {\n    const outlets = new Set<string>()\n    this.collectActiveOutletsRecursive(root, outlets)\n    return outlets\n  }\n\n  private collectActiveOutletsRecursive(snap: ActivatedRouteSnapshot, outlets: Set<string>): void {\n    outlets.add(snap.outlet)\n    for (const c of snap.children) {\n      this.collectActiveOutletsRecursive(c, outlets)\n    }\n  }\n}\n","import { Injectable, TemplateRef } from '@angular/core'\nimport { NavigationEnd, NavigationExtras, Router } from '@angular/router'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { filter, map } from 'rxjs/operators'\nimport { ElderRouterOutletService } from './drawers/elder-router-outlet.service'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { ShellContentSlot } from './shell-content-slot'\nimport { TemplateSlotManager } from '../../common/templates/template-slot-manager'\n\n/**\n * This service manages the side content.\n * This is usually the left side which is a 'side nav' and the right side which shows detail information.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderShellService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger('ElderShellService')\n\n  private _navigationOpen = new BehaviorSubject<boolean>(false)\n  private _clickOutsideToClose = true\n\n  private detailContentOutlet = 'side'\n\n  private readonly slotManager: TemplateSlotManager<ShellContentSlot>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private router: Router,\n    private routerOutletService: ElderRouterOutletService\n  ) {\n    this.slotManager = new TemplateSlotManager(['header', 'center', 'footer'])\n\n    this.router.events\n      .pipe(\n        filter((event) => event instanceof NavigationEnd),\n        map((event) => event as NavigationEnd)\n      )\n      .subscribe((event) => {\n        this.closeSideNav()\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Checks if the navigation is isOpen\n   */\n  public get navigationOpen(): boolean {\n    return this._navigationOpen.getValue()\n  }\n\n  public set navigationOpen(value: boolean) {\n    this._navigationOpen.next(value)\n  }\n\n  public get navigationOpenChange(): Observable<boolean> {\n    return this._navigationOpen.asObservable()\n  }\n\n  /**\n   * Allow closing the side content by clicking outside of it.\n   */\n  public get clickOutsideToClose(): boolean {\n    return this._clickOutsideToClose\n  }\n\n  public set clickOutsideToClose(value: boolean) {\n    this._clickOutsideToClose = value\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Shell Slot Template API                                                 *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Returns an observable which emits the current active template for the given position\n   * over time.\n   */\n  public activeSlotTemplate(slot: ShellContentSlot): Observable<TemplateRef<any>> {\n    return this.slotManager.activeSlotTemplate(slot)\n  }\n\n  /**\n   * Registers the given template as toolbar column at the given slot.\n   *\n   * @param slot at which template should be placed\n   * @param template to set at slot\n   * @param isDefault if the given template should be used as app default\n   */\n  public registerColumn(\n    slot: ShellContentSlot,\n    template: TemplateRef<any>,\n    isDefault = false\n  ): void {\n    this.slotManager.registerSlotTemplate(slot, template, isDefault)\n  }\n\n  /**\n   * Deregister the given template from the toolbar.\n   *\n   * @param template to deregister\n   * @param slot if set, the template will only be deregistered if it was registered at this slot (optional)\n   */\n  public deregisterColumn(template: TemplateRef<any>, slot?: ShellContentSlot) {\n    this.slotManager.deregisterSlotTemplate(template, slot)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Toggles the side navigation\n   */\n  public toggleSidenav(): boolean {\n    this.navigationOpen = !this.navigationOpen\n    return this.navigationOpen\n  }\n\n  /**\n   * Closes the side navigation\n   */\n  public closeSideNav(): void {\n    this.navigationOpen = false\n  }\n\n  /**\n   * Closes the side detail content\n   */\n  public closeSideContent(): Promise<boolean> {\n    return this.routerOutletService.deactivate(this.detailContentOutlet)\n  }\n\n  public isSideContentActive(): boolean {\n    return this.routerOutletService.isActive(this.detailContentOutlet)\n  }\n\n  /**\n   * Shows the side content\n   * @param args The route arguments / path\n   * @param clickOutsideToClose If enabled, the side content can be closed by clicking outside of it.\n   * @param extras\n   */\n  public navigateSideContent(\n    args: string[],\n    clickOutsideToClose: boolean,\n    extras?: NavigationExtras\n  ): Promise<boolean> {\n    this.clickOutsideToClose = clickOutsideToClose\n    return this.routerOutletService.activate(this.detailContentOutlet, args, extras)\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { MatDrawer } from '@angular/material/sidenav'\nimport { ElderRouterOutletService } from './elder-router-outlet.service'\nimport { Observable, Subject, Subscription } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderRouteOutletDrawerService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger('ElderRouteOutletDrawerService')\n\n  private _outletChangeSubscription: Subscription\n  private readonly _outletDrawers = new Map<string, MatDrawer>()\n  private readonly _drawerVisibility = new Subject<MatDrawer>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private outletService: ElderRouterOutletService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get drawerVisibilityChange(): Observable<MatDrawer> {\n    return this._drawerVisibility.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Bind a named outlet to a mat-drawer.\n   * When the route outlet is active (i.e. present in the url), the drawer will be shown.\n   * @param routeOutlet\n   * @param drawer\n   */\n  public registerOutletDrawer(routeOutlet: string, drawer: MatDrawer): void {\n    if (!routeOutlet) {\n      throw new Error('routeOutlet must not be null!')\n    }\n    if (!drawer) {\n      throw new Error('drawer must not be null!')\n    }\n\n    const sub = drawer.closedStart.subscribe(() => {\n      this.outletService.deactivate(routeOutlet)\n    })\n\n    // TODO Support un-subscribing / unregistering a outlet-drawer\n\n    this._outletDrawers.set(routeOutlet, drawer)\n\n    this.ensureOutletsAreObserved()\n  }\n\n  public findDrawer(routeOutlet: string): MatDrawer {\n    return this._outletDrawers.get(routeOutlet)\n  }\n\n  public openOutletDrawer(routeOutlet: string): void {\n    const drawer = this.findDrawer(routeOutlet)\n    if (drawer) {\n      this.openDrawer(drawer)\n    }\n  }\n\n  public closeOutletDrawer(routeOutlet: string): void {\n    const drawer = this.findDrawer(routeOutlet)\n    if (drawer) {\n      this.closeDrawer(drawer)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private openDrawer(drawer: MatDrawer): Promise<any> {\n    const toggleResult = drawer.open('program')\n    this._drawerVisibility.next(drawer)\n    return toggleResult\n  }\n\n  private closeDrawer(drawer: MatDrawer): Promise<any> {\n    const toggleResult = drawer.close()\n    this._drawerVisibility.next(drawer)\n    return toggleResult\n  }\n\n  private updateDrawers(activeOutlets: Set<string>): void {\n    this._outletDrawers.forEach((drawer, outlet) => {\n      if (activeOutlets.has(outlet)) {\n        this.openDrawer(drawer)\n      } else {\n        this.closeDrawer(drawer)\n      }\n    })\n  }\n\n  private ensureOutletsAreObserved(): void {\n    if (!this._outletChangeSubscription) {\n      this._outletChangeSubscription = this.outletService.activeOutlets.subscribe(\n        (activeOutlets) => {\n          this.updateDrawers(activeOutlets)\n        }\n      )\n      this.updateDrawers(this.outletService.activeOutletsSnapshot)\n    }\n  }\n\n  private unsubscribeOutlets(): void {\n    if (this._outletChangeSubscription) {\n      this._outletChangeSubscription.unsubscribe()\n      this._outletChangeSubscription = null\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  DestroyRef,\n  Directive,\n  input,\n  Input,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  Signal,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n} from '@angular/core'\nimport { ElderShellService } from '../elder-shell.service'\nimport { MatSidenav, MatSidenavContainer, MatSidenavContent } from '@angular/material/sidenav'\nimport { ElderRouteOutletDrawerService } from '../drawers/elder-route-outlet-drawer.service'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { takeUntil, tap } from 'rxjs/operators'\nimport { ThemePalette } from '@angular/material/core'\nimport { ElderThemeService } from '../../theme/elder-theme.service'\nimport { ThemeSpec } from '../../theme/theme-spec'\nimport { GlobalDragDropService } from '../../files/drag-n-drop/global-drag-drop.service'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton } from '@angular/material/button'\nimport { MatToolbar } from '@angular/material/toolbar'\nimport { ElderToolbarComponent } from '../../navigation/toolbar/toolbar/elder-toolbar.component'\nimport { RouterOutlet } from '@angular/router'\nimport { NgTemplateOutlet, AsyncPipe } from '@angular/common'\nimport { ElderThemeApplierDirective } from '../../theme/elder-theme-applier.directive'\nimport { booleanTransformFn } from '../../../common/utils/signal-input'\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop'\n\n@Directive({\n  selector: '[elderShellSideLeft]',\n  standalone: true,\n})\nexport class ElderShellSideLeftDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n\n@Directive({\n  selector: '[elderShellSideRight]',\n  standalone: true,\n})\nexport class ElderShellSideRightDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n\n@Directive({\n  selector: '[elderShellCenter]',\n  standalone: true,\n})\nexport class ElderShellCenterDirective {\n  constructor(\n    public templateRef: TemplateRef<any>,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n\n@Component({\n  selector: 'elder-shell',\n  templateUrl: './elder-shell.component.html',\n  styleUrls: ['./elder-shell.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatSidenavContainer,\n    ElderThemeApplierDirective,\n    MatSidenav,\n    NgTemplateOutlet,\n    MatSidenavContent,\n    RouterOutlet,\n    ElderToolbarComponent,\n    MatToolbar,\n    MatIconButton,\n    MatIcon,\n  ],\n})\nexport class ElderShellComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger('ElderShellComponent')\n\n  /** Controls if the SideNav toggle should be displayed. Default: true */\n  public readonly sideNavToggleEnabled = input(true, { transform: booleanTransformFn })\n  public readonly leftSideAutoFocus = input(false, { transform: booleanTransformFn })\n  public readonly rightSideAutoFocus = input(false, { transform: booleanTransformFn })\n\n  @ContentChild(ElderShellSideLeftDirective, { read: TemplateRef, static: true })\n  public sideContentLeft: TemplateRef<any>\n\n  @ContentChild(ElderShellSideRightDirective, { read: TemplateRef, static: true })\n  public sideContentRight: TemplateRef<any>\n\n  @ContentChild(ElderShellCenterDirective, { read: TemplateRef, static: true })\n  public centerContent: TemplateRef<any>\n\n  @ViewChild('rightSideDetail', { static: true })\n  public rightSideDrawer: MatSidenav\n\n  public rightSideOutletName = 'side'\n\n  public leftSideContentOpen: Signal<boolean>\n\n  public readonly headerTemplate: Signal<TemplateRef<any>>\n  public readonly centerTemplate: Signal<TemplateRef<any>>\n  public readonly footerTemplate: Signal<TemplateRef<any>>\n\n  public color = input<ThemePalette>('primary')\n\n  public readonly navMenuSvgIcon = input<string>('menu-icon-owl-stripes-white')\n\n  public readonly menuColor = input<ThemePalette>('primary')\n  public readonly menuIconColor = input<ThemePalette>(undefined)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private shellService: ElderShellService,\n    private outletDrawerService: ElderRouteOutletDrawerService,\n    private changeDetectorRef: ChangeDetectorRef,\n    private themeService: ElderThemeService,\n    private globalDragDropService: GlobalDragDropService,\n    private renderer: Renderer2,\n    private destroyRef: DestroyRef\n  ) {\n    this.headerTemplate = toSignal(shellService.activeSlotTemplate('header'))\n    this.centerTemplate = toSignal(shellService.activeSlotTemplate('center'))\n    this.footerTemplate = toSignal(shellService.activeSlotTemplate('footer'))\n\n    this.globalDragDropService.preventDefaultFileLoading()\n    this.leftSideContentOpen = toSignal(this.shellService.navigationOpenChange)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.outletDrawerService.registerOutletDrawer(this.rightSideOutletName, this.rightSideDrawer)\n\n    this.outletDrawerService.drawerVisibilityChange\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((drawer) => this.changeDetectorRef.markForCheck())\n\n    // this.themeService.activeTheme$\n    //   .pipe(takeUntil(this.destroy$))\n    //   .subscribe((theme) => this.adjustColorsForTheme(theme))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public blurNavIconFocus(): void {\n    try {\n      const activeElement = this.renderer.selectRootElement(document.activeElement, true)\n      if (activeElement instanceof HTMLElement) {\n        activeElement.blur()\n      }\n    } catch (error) {\n      this.logger.warn('Failed to blur active element:', error)\n    }\n  }\n\n  public closeLeftSideContent(): void {\n    this.shellService.closeSideNav()\n  }\n\n  public toggleSideNav(): void {\n    this.shellService.toggleSidenav()\n  }\n\n  public onBackdropClick(event: any): void {\n    if (this.shellService.isSideContentActive()) {\n      this.shellService.closeSideContent()\n    }\n  }\n\n  public onEscapeRightSide(event: Event): void {\n    const target = event.target as HTMLElement\n    if (target && this.isContained(target, 'elder-right-side-detail')) {\n      // Ensure we only react to Esc Events targeted at our side nav!\n      if (this.shellService.isSideContentActive()) {\n        this.shellService.closeSideContent()\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private isContained(child: HTMLElement, id: string): boolean {\n    if (child.id === id) {\n      return true\n    }\n    const maxDepth = 1\n    let depth = 0\n    let node = child.parentNode as HTMLElement\n    while (node) {\n      if (node.id === id) {\n        return true\n      }\n      node = node.parentNode as HTMLElement\n      if (maxDepth >= ++depth) {\n        break\n      }\n    }\n    return false\n  }\n}\n","<mat-sidenav-container\n  elderThemeApplier\n  class=\"full-width\"\n  (backdropClick)=\"onBackdropClick($event)\"\n>\n  <!-- Left Side Nav -->\n  <mat-sidenav\n    position=\"start\"\n    mode=\"over\"\n    [fixedInViewport]=\"true\"\n    [autoFocus]=\"leftSideAutoFocus()\"\n    [opened]=\"leftSideContentOpen()\"\n    (closedStart)=\"blurNavIconFocus()\"\n    (closed)=\"closeLeftSideContent()\"\n    restoreFocus=\"false\"\n  >\n    <div class=\"layout-col full elder-side-nav\">\n      <ng-container *ngTemplateOutlet=\"sideContentLeft || fallbackSideContentLeft\"></ng-container>\n    </div>\n  </mat-sidenav>\n\n  <!-- Main Content -->\n  <mat-sidenav-content>\n    <div class=\"layout-col full\">\n      <ng-container *ngTemplateOutlet=\"centerContent || fallbackCenterContent\"></ng-container>\n    </div>\n  </mat-sidenav-content>\n\n  <!-- Right Side Detail -->\n  <mat-sidenav\n    mode=\"over\"\n    #rightSideDetail\n    id=\"elder-right-side-detail\"\n    position=\"end\"\n    [fixedInViewport]=\"true\"\n    [autoFocus]=\"rightSideAutoFocus()\"\n    [disableClose]=\"true\"\n    (keydown.escape)=\"onEscapeRightSide($event)\"\n  >\n    <div class=\"layout-col full\">\n      <ng-container *ngTemplateOutlet=\"sideContentRight || fallbackSideContentRight\"></ng-container>\n    </div>\n  </mat-sidenav>\n</mat-sidenav-container>\n\n<ng-template #fallbackSideContentLeft>\n  <div class=\"layout-col flex\">\n    <p class=\"noselect\">No Left Side Content Defined!</p>\n  </div>\n</ng-template>\n\n<ng-template #fallbackSideContentRight>\n  <router-outlet name=\"side\" class=\"router-flex\"></router-outlet>\n</ng-template>\n\n<ng-template #fallbackCenterContent>\n  <div class=\"layout-col full\">\n    <!-- Header -->\n    <ng-container *ngTemplateOutlet=\"headerTemplate() || defaultHeaderTemplate\"></ng-container>\n\n    <!-- Center -->\n    <ng-container *ngTemplateOutlet=\"centerTemplate() || defaultCenterTemplate\"></ng-container>\n\n    <!-- Footer -->\n    <ng-container *ngTemplateOutlet=\"footerTemplate() || defaultFooterTemplate\"></ng-container>\n  </div>\n</ng-template>\n\n<ng-template #defaultHeaderTemplate>\n  <elder-toolbar\n    [color]=\"color()\"\n    class=\"elder-main-toolbar flex-none\"\n    style=\"max-width: 100%; min-width: 100%\"\n  >\n    <!-- Toolbar Prefix: Sidenav Toggle -->\n    @if (sideNavToggleEnabled()) {\n      <mat-toolbar\n        [color]=\"menuColor()\"\n        class=\"flex-none elder-toolbar-main-nav-button-container pl-lg\"\n        style=\"width: auto\"\n      >\n        <button\n          class=\"elder-logo-btn elder-toolbar-main-nav-button\"\n          mat-icon-button\n          [color]=\"menuIconColor()\"\n          type=\"button\"\n          (click)=\"toggleSideNav()\"\n          [class.elder-logo-btn]=\"!!navMenuSvgIcon\"\n        >\n          @if (navMenuSvgIcon()) {\n            <mat-icon [svgIcon]=\"navMenuSvgIcon()\"></mat-icon>\n          } @else {\n            <mat-icon>menu</mat-icon>\n          }\n        </button>\n      </mat-toolbar>\n    }\n  </elder-toolbar>\n</ng-template>\n\n<ng-template #defaultCenterTemplate>\n  <div class=\"flex layout-row\">\n    <!-- Primary Router Outlet -->\n    <router-outlet class=\"router-flex\"></router-outlet>\n  </div>\n</ng-template>\n\n<ng-template #defaultFooterTemplate>\n  <!-- Default Footer is empty -->\n</ng-template>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core'\nimport { NavigationEnd, Router } from '@angular/router'\nimport { ElderShellService } from '../elder-shell.service'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton } from '@angular/material/button'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-shell-nav-toggle',\n  templateUrl: './elder-shell-navigation-toggle.component.html',\n  styleUrls: ['./elder-shell-navigation-toggle.component.scss'],\n  imports: [MatIconButton, MatIcon, AsyncPipe],\n})\nexport class ElderShellNavigationToggleComponent implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _icon = new BehaviorSubject<string>('menu')\n  private sub: Subscription\n  private _currentUrl: string\n\n  @Input()\n  public roots: string[] = []\n\n  @Input()\n  public hide: string[] = []\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private router: Router,\n    private sideContentService: ElderShellService\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.sub = this.router.events.subscribe((event) => {\n      if (event instanceof NavigationEnd) {\n        const navEnd = event as NavigationEnd\n        this._currentUrl = navEnd.url\n        this.updateIcon()\n      }\n    })\n  }\n\n  public ngOnDestroy(): void {\n    this.sub.unsubscribe()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onClick(): void {\n    if (this.showNavigateBack) {\n      this.goBack(this._currentUrl)\n    } else {\n      this.toggleSideContent()\n    }\n  }\n\n  public get icon(): Observable<string> {\n    return this._icon\n  }\n\n  public showComponent(): boolean {\n    if (this._currentUrl && this.hide && this.hide.length > 0) {\n      return !this.isPartOfHiddenRoute(this._currentUrl)\n    }\n    return true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private updateIcon() {\n    const icon = this.showNavigateBack ? 'arrow_back' : 'menu'\n    this.logger.debug('updating icon to ' + icon)\n    this._icon.next(icon)\n  }\n\n  private get showNavigateBack(): boolean {\n    if (this._currentUrl && this.roots && this.roots.length > 0) {\n      return !this.isRootRoute(this._currentUrl)\n    }\n    return false\n  }\n\n  private toggleSideContent() {\n    this.sideContentService.toggleSidenav()\n  }\n\n  private goBack(url: string) {\n    const rootUrl = this.findRoot(url)\n    this.router.navigate([rootUrl])\n  }\n\n  private isRootRoute(url: string): boolean {\n    return !!this.roots.find((r) => r === url)\n  }\n\n  private isPartOfHiddenRoute(url: string): boolean {\n    return !!this.hide.find((r) => url.indexOf(r) >= 0)\n  }\n\n  /**\n   * Find the parent root url of a given url:\n   *\n   * /app/my/sub/route\n   *\n   * roots: ['/app/my', '/app/foo']\n   *\n   * -> /app/my\n   *\n   */\n  private findRoot(url: string): string {\n    if (url && url.length > 0) {\n      if (this.isRootRoute(url)) {\n        return url\n      }\n      const parent = this.parent(url)\n      return this.findRoot(parent)\n    } else {\n      return '/'\n    }\n  }\n\n  private parent(url: string): string {\n    const parts = url.split('/')\n    // Remove last part\n    parts.splice(parts.length - 1, 1)\n    return parts.join('/')\n  }\n}\n","@if (showComponent()) {\n  <button mat-icon-button type=\"button\" (click)=\"onClick()\">\n    <mat-icon>{{ icon | async }}</mat-icon>\n  </button>\n}\n","import { Directive, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ShellContentSlot } from './shell-content-slot'\nimport { ElderShellService } from './elder-shell.service'\n\n@Directive({\n  selector: '[elderShellSlot]',\n  standalone: true,\n})\nexport class ElderShellSlotDirective implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /** Slot at which template should be placed. */\n  @Input()\n  public elderShellSlot: ShellContentSlot\n\n  /** If the column should be considered as default (fallback). */\n  @Input()\n  public elderShellSlotDefault: boolean\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private viewContainer: ViewContainerRef,\n    private elderShellService: ElderShellService,\n    public templateRef: TemplateRef<any>\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.elderShellService.registerColumn(\n      this.elderShellSlot,\n      this.templateRef,\n      this.elderShellSlotDefault\n    )\n  }\n\n  public ngOnDestroy(): void {\n    this.elderShellService.deregisterColumn(this.templateRef, this.elderShellSlot)\n  }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\nimport { MatIcon } from '@angular/material/icon'\nimport { RouterLink } from '@angular/router'\n\n@Component({\n  selector: 'elder-app-header',\n  templateUrl: './elder-app-header.component.html',\n  styleUrls: ['./elder-app-header.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatIcon, RouterLink],\n  standalone: true,\n})\nexport class ElderAppHeaderComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public icon = input<string>(undefined)\n  public svgIcon = input<string>(undefined)\n  public title = input<string>(undefined)\n\n  public subTitle = input<string>('by ElderByte')\n  public subTitleLink = input<string>('https://elderbyte.com')\n  public version = input<string>(undefined)\n}\n","<div class=\"elder-panel mat-primary layout-col full light\">\n  <div class=\"layout-row flex-none p-lg pb-sm\">\n    <div class=\"layout-row place-center-center\">\n      <a routerLink=\"/\" class=\"link-unstyled\">\n        <mat-icon class=\"service-icon noselect svg-icon-inherit-color\" [svgIcon]=\"svgIcon()\">{{\n          icon()\n        }}</mat-icon>\n      </a>\n    </div>\n    <div class=\"layout-col place-center-start\">\n      <div class=\"layout-col place-center-center\" style=\"width: 100%\">\n        <div class=\"layout-row place-start-end gap-xs\">\n          <a\n            routerLink=\"/\"\n            id=\"title\"\n            class=\"noselect link-unstyled\"\n            style=\"font-size: 28px\"\n            tabindex=\"-1\"\n            >{{ title() }}</a\n          >\n          <span class=\"mat-caption noselect\">\n            <small>{{ version() }}</small>\n          </span>\n        </div>\n      </div>\n      <div class=\"layout-row place-start-center\">\n        <span class=\"mat-caption noselect\">\n          @if (subTitleLink()) {\n            <a\n              [href]=\"subTitleLink()\"\n              target=\"_blank\"\n              style=\"text-decoration: none; color: inherit\"\n              tabindex=\"-1\"\n              >{{ subTitle() }}</a\n            >\n          } @else {\n            <span>{{ subTitle() }}</span>\n          }\n        </span>\n      </div>\n    </div>\n  </div>\n\n  <!-- Project child content here -->\n  <ng-content></ng-content>\n</div>\n","import { RouterOutlet } from '@angular/router'\nimport { MatDrawer } from '@angular/material/sidenav'\nimport { Subscription } from 'rxjs'\n\nexport class DrawerOutletBinding {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _subs: Subscription[] = []\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates a binding between the given router-outlet and the drawer.\n   * @param routerOutlet\n   * @param drawer\n   */\n  public static bind(routerOutlet: RouterOutlet, drawer: MatDrawer): DrawerOutletBinding {\n    const binding = new DrawerOutletBinding(routerOutlet, drawer)\n    binding.bind()\n    return binding\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  private constructor(\n    private readonly routerOutlet: RouterOutlet,\n    private readonly drawer: MatDrawer\n  ) {\n    if (!routerOutlet) {\n      throw new Error('routerOutlet must not be null!')\n    }\n    if (!drawer) {\n      throw new Error('drawer must not be null!')\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public bind(): void {\n    this._subs = [\n      this.routerOutlet.activateEvents.subscribe(() => {\n        this.drawer.open()\n      }),\n      this.routerOutlet.deactivateEvents.subscribe(() => {\n        this.drawer.close()\n      }),\n    ]\n\n    if (this.routerOutlet.isActivated) {\n      this.drawer.open()\n    } else {\n      this.drawer.close()\n    }\n  }\n\n  public unbind(): void {\n    this._subs.forEach((s) => s.unsubscribe())\n    this._subs = []\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport {\n  ElderShellCenterDirective,\n  ElderShellComponent,\n  ElderShellSideLeftDirective,\n  ElderShellSideRightDirective,\n} from './shell/elder-shell.component'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatListModule } from '@angular/material/list'\nimport { MatSidenavModule } from '@angular/material/sidenav'\nimport { MatToolbarModule } from '@angular/material/toolbar'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderToolbarModule } from '../navigation/toolbar/elder-toolbar.module'\nimport { RouterModule } from '@angular/router'\nimport { ElderShellNavigationToggleComponent } from './shell-navigation-toggle/elder-shell-navigation-toggle.component'\nimport { ElderShellSlotDirective } from './elder-shell-slot.directive'\nimport { ElderAppHeaderComponent } from './header/elder-app-header/elder-app-header.component'\nimport { ElderPanelModule } from '../panels/elder-panel.module'\nimport { ElderThemeModule } from '../theme/elder-theme.module'\n\nexport * from './shell/elder-shell.component'\nexport { ElderShellNavigationToggleComponent } from './shell-navigation-toggle/elder-shell-navigation-toggle.component'\nexport { DrawerOutletBinding } from './drawers/drawer-outlet-binding'\nexport { ElderRouteOutletDrawerService } from './drawers/elder-route-outlet-drawer.service'\nexport { ElderRouterOutletService } from './drawers/elder-router-outlet.service'\nexport { ElderShellService } from './elder-shell.service'\nexport { ElderShellSlotDirective } from './elder-shell-slot.directive'\nexport { ShellContentSlot } from './shell-content-slot'\nexport { ElderAppHeaderComponent } from './header/elder-app-header/elder-app-header.component'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    RouterModule,\n    MatSidenavModule,\n    MatToolbarModule,\n    MatIconModule,\n    MatListModule,\n    MatButtonModule,\n    ElderToolbarModule,\n    ElderPanelModule,\n    ElderThemeModule,\n    TranslateModule,\n    ElderShellComponent,\n    ElderShellSideLeftDirective,\n    ElderShellSideRightDirective,\n    ElderShellCenterDirective,\n    ElderShellNavigationToggleComponent,\n    ElderShellSlotDirective,\n    ElderAppHeaderComponent,\n  ],\n  exports: [\n    ElderShellComponent,\n    ElderShellSideLeftDirective,\n    ElderShellSideRightDirective,\n    ElderShellCenterDirective,\n    ElderShellNavigationToggleComponent,\n    ElderShellSlotDirective,\n    ElderAppHeaderComponent,\n  ],\n})\nexport class ElderShellModule {}\n","export class LocaleDateFormats {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private static readonly fallbackDateFormats = ['MM/dd/yyyy', 'MM/dd/yy']\n  private static readonly dateFormats = new Map([\n    ['de-CH', ['dd.MM.yyyy', 'dd.MM.yy']],\n    ['de-DE', ['dd.MM.yyyy', 'dd.MM.yy']],\n    ['en-UK', ['dd/MM/yyyy', 'dd/MM/yy']],\n    ['en-US', this.fallbackDateFormats],\n  ])\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public static getFormatsOfLocale(locale: string): string[] {\n    if (this.dateFormats.has(locale)) {\n      return this.dateFormats.get(locale)\n    } else {\n      return this.fallbackDateFormats\n    }\n  }\n}\n","/** Adapts the native JS Date for use with cdk-based components that work with dates. */\nimport { MAT_DATE_LOCALE, NativeDateAdapter } from '@angular/material/core'\nimport { Inject, Injectable } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { convert, DateTimeFormatter, LocalDate } from '@js-joda/core'\nimport { LocaleDateFormats } from '../date-formats/locale-date-formats'\n\n/**\n * Makes week starting at monday. For example MatDatePicker.\n */\n@Injectable()\nexport class CustomDateAdapter extends NativeDateAdapter {\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n  private readonly matDateLocale: string\n\n  constructor(@Inject(MAT_DATE_LOCALE) matDateLocale: string) {\n    super(matDateLocale)\n    this.matDateLocale = matDateLocale\n  }\n\n  public override getFirstDayOfWeek(): number {\n    return 1\n  }\n\n  public override parse(value: any, parseFormat?: any): Date | null {\n    const formats = LocaleDateFormats.getFormatsOfLocale(this.matDateLocale)\n\n    for (let i = 0; i < formats.length; i++) {\n      try {\n        const formatter = DateTimeFormatter.ofPattern(formats[i])\n        return convert(LocalDate.parse(value, formatter)).toDate()\n      } catch (e) {\n        // ignore\n      }\n    }\n\n    this.logger.trace('Could not parse \"' + value + '\" to date!')\n    return null\n  }\n}\n","import { Period } from '@js-joda/core'\n\nexport class PeriodBucket {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly days: number,\n    public readonly months: number,\n    public readonly years: number\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public withDays(days: number): PeriodBucket {\n    return new PeriodBucket(days, this.months, this.years)\n  }\n\n  public withMonths(months: number): PeriodBucket {\n    return new PeriodBucket(this.days, months, this.years)\n  }\n\n  public withYears(years: number): PeriodBucket {\n    return new PeriodBucket(this.days, this.months, years)\n  }\n\n  public toPeriod(): Period {\n    return Period.of(this.years ?? 0, this.months ?? 0, this.days ?? 0)\n  }\n}\n","import { Period } from '@js-joda/core'\nimport { PeriodBucket } from './period-bucket'\n\n/**\n * yyyy:MM:dd\n */\nexport class PeriodFormat {\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static readonly FORMAT_DYNAMIC = 'dynamic'\n\n  public static DYNAMIC = new PeriodFormat(PeriodFormat.FORMAT_DYNAMIC, true, true, true)\n\n  public static DEFAULT = PeriodFormat.DYNAMIC\n\n  public static parse(format: string): PeriodFormat {\n    if (format) {\n      if (format === PeriodFormat.FORMAT_DYNAMIC) {\n        return PeriodFormat.DYNAMIC\n      } else {\n        return new PeriodFormat(\n          format,\n          format.includes('dd'),\n          format.includes('MM'),\n          format.includes('yyyy')\n        )\n      }\n    } else {\n      return PeriodFormat.DEFAULT\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public readonly formatStr: string,\n    public readonly days: boolean,\n    public readonly months: boolean,\n    public readonly years: boolean\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public bucket(period: Period): PeriodBucket {\n    period = period ?? Period.ZERO\n\n    return new PeriodBucket(period.days(), period.months(), period.years())\n  }\n\n  public format(period: Period): string {\n    return this.formatDynamic(period)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private monthsIsLast(): boolean {\n    return !this.days\n  }\n\n  private yearsIsLast(): boolean {\n    return this.monthsIsLast() && !this.months\n  }\n\n  private formatDynamic(periodData: Period): string {\n    const bucket = this.bucket(periodData)\n\n    const period = this.formatPeriod(bucket)\n\n    if (period) {\n      return period\n    } else {\n      return '-'\n    }\n  }\n\n  private formatPeriod(bucket: PeriodBucket): string {\n    const parts: string[] = []\n\n    if (bucket.years) {\n      parts.push(this.ceilAndFormatNumber(bucket.years) + 'yr')\n    }\n\n    if (bucket.months) {\n      parts.push(this.ceilAndFormatNumber(bucket.months) + 'mo')\n    }\n\n    if (bucket.days) {\n      parts.push(this.ceilAndFormatNumber(bucket.days) + 'd')\n    }\n\n    return parts.join(', ')\n  }\n\n  private ceilAndFormatNumber(number: number): number {\n    return Math.ceil(number * 10) / 10\n  }\n}\n","import { Directive, ElementRef, HostListener } from '@angular/core'\n\n@Directive({\n  selector: 'input[elderToggleTextInput]',\n})\nexport class ElderToggleTextInputDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private originalInputType: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private inputRef: ElementRef<HTMLInputElement>) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Host Listener                                                           *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('dblclick')\n  public onDoubleClick(event: MouseEvent): void {\n    this.rememberOriginalInputType()\n    this.setInputType('text')\n    setTimeout(() => {\n      this.inputRef.nativeElement.select()\n    })\n  }\n\n  @HostListener('focusout')\n  public onFocusOut(event: FocusEvent): void {\n    this.restoreOriginalInputType()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private setInputType(type: string): void {\n    this.inputRef.nativeElement.type = type\n  }\n\n  private rememberOriginalInputType(): void {\n    this.originalInputType = this.inputRef.nativeElement.type\n  }\n\n  private restoreOriginalInputType(): void {\n    if (this.originalInputType) {\n      this.setInputType(this.originalInputType)\n    }\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { DateTimeFormatter, LocalDate } from '@js-joda/core'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SmartLocalDateParserService {\n  // List of supported date formats\n  private readonly formatters = [\n    DateTimeFormatter.ofPattern('yyyy-MM-dd'), // e.g., 2025-05-07\n    DateTimeFormatter.ofPattern('dd-MM-yyyy'), // e.g., 07-05-2025\n    DateTimeFormatter.ofPattern('dd.MM.yyyy'), // e.g., 07.05.2025\n    DateTimeFormatter.ofPattern('d.M.yyyy'), // e.g., 7.5.2025\n    DateTimeFormatter.ofPattern('yyyy.MM.dd'), // e.g., 2025.05.07\n    DateTimeFormatter.ofPattern('yyyy/MM/dd'), // e.g., 2025/05/07\n    DateTimeFormatter.ofPattern('dd/MM/yyyy'), // e.g., 07/05/2025\n    DateTimeFormatter.ofPattern('d/M/yyyy'), // e.g., 7/5/2025\n\n    // Short versions, year first\n    DateTimeFormatter.ofPattern('yy-MM-dd'),\n    DateTimeFormatter.ofPattern('yy.MM.dd'),\n    DateTimeFormatter.ofPattern('yy/MM/dd'),\n\n    DateTimeFormatter.ofPattern('MM/dd/yyyy'), // e.g., 05/07/2025\n  ]\n\n  constructor() {}\n\n  public tryParse(dateString: string): LocalDate | null {\n    for (const formatter of this.formatters) {\n      try {\n        return LocalDate.parse(dateString, formatter)\n      } catch (e) {\n        // Try the next format\n      }\n    }\n    // If none match, return null or throw\n    return null\n  }\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  Output,\n  Input,\n  ViewChild,\n  ElementRef,\n} from '@angular/core'\nimport { LocalDate, ZoneId } from '@js-joda/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { combineLatest, Observable, of, Subject } from 'rxjs'\nimport { catchError, map } from 'rxjs/operators'\nimport {\n  MatDatepicker,\n  MatDatepickerInputEvent,\n  MatDatepickerInput,\n  MatDatepickerToggle,\n  MatDatepickerToggleIcon,\n} from '@angular/material/datepicker'\nimport { TimeUtil } from '../../../common/time/time-util'\nimport { IsoDateStr } from '../../../common/time/date-util'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { ElderFormFieldControlBase } from '../../../common/forms/elder-form-field-control-base.directive'\nimport { MatFormFieldControl } from '@angular/material/form-field'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { FormsModule } from '@angular/forms'\nimport { ElderStopEventPropagationDirective } from '../../forms/directives/elder-stop-event-propagation.directive'\nimport { ElderFormFieldNoSpinnerDirective } from '../../forms/directives/elder-form-field-no-spinner.directive'\nimport { MatInput } from '@angular/material/input'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton } from '@angular/material/button'\nimport { AsyncPipe, DatePipe } from '@angular/common'\nimport { SmartLocalDateParserService } from '../smart-local-date-parser.service'\nimport { ElderToggleTextInputDirective } from '../elder-toggle-text-input.directive'\n\n@Component({\n  selector: 'elder-local-date-input',\n  templateUrl: './elder-local-date-input.component.html',\n  styleUrls: ['./elder-local-date-input.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: MatFormFieldControl, useExisting: ElderLocalDateInputComponent }],\n  imports: [\n    MatIconButton,\n    MatIcon,\n    MatInput,\n    ElderFormFieldNoSpinnerDirective,\n    FormsModule,\n    MatDatepickerInput,\n    MatDatepickerToggle,\n    MatDatepickerToggleIcon,\n    ElderStopEventPropagationDirective,\n    MatDatepicker,\n    AsyncPipe,\n    DatePipe,\n    TranslateModule,\n    ElderToggleTextInputDirective,\n  ],\n})\nexport class ElderLocalDateInputComponent extends ElderFormFieldControlBase<LocalDate> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _allowNull = false\n\n  @Input()\n  public zone = ZoneId.systemDefault()\n\n  /** If true, date picker functionality is enabled. */\n  private _datePickerEnabled = true\n  private _arrows = false\n  private _today = false\n  private _autoDatePicker = false\n  private _datePickerTouchUi = false\n  private _center = false\n\n  @ViewChild(MatDatepicker, { static: true })\n  public picker: MatDatepicker<Date>\n\n  @ViewChild('input')\n  public inputRef: ElementRef<HTMLInputElement>\n\n  public readonly date$: Observable<Date>\n\n  @Output()\n  public readonly blurred = new Subject<FocusEvent>()\n\n  /**\n   * Emits the updated value after the control blurred.\n   * (update & blur) events must have happened.\n   */\n  @Output()\n  public readonly valueUpdatedBlur: Observable<LocalDate>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly localDateParser: SmartLocalDateParserService) {\n    super('local-date-input')\n    this.date$ = this.mapIgnoreErrorObservable(this.value$, (v: LocalDate) =>\n      TimeUtil.localDateToDate(v, this.zone)\n    )\n    this.valueUpdatedBlur = combineLatest([this.valueUpdated, this.blurred]).pipe(\n      map(([value, focusEvent]) => value)\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set autoDatePicker(val: BooleanInput) {\n    this._autoDatePicker = coerceBooleanProperty(val)\n  }\n\n  public get autoDatePicker(): boolean {\n    return this._autoDatePicker\n  }\n\n  @Input()\n  public set arrows(val: BooleanInput) {\n    this._arrows = coerceBooleanProperty(val)\n  }\n\n  public get arrows(): boolean {\n    return this._arrows\n  }\n\n  @Input()\n  public set today(val: BooleanInput) {\n    this._today = coerceBooleanProperty(val)\n  }\n\n  public get today(): boolean {\n    return this._today\n  }\n\n  @Input()\n  public set center(center: BooleanInput) {\n    this._center = coerceBooleanProperty(center)\n  }\n\n  public get center(): boolean {\n    return this._center\n  }\n\n  /** If true, touch optimized mode of date picker is enabled. */\n  @Input()\n  public set datePickerTouchUi(enabled: BooleanInput) {\n    this._datePickerTouchUi = coerceBooleanProperty(enabled)\n  }\n\n  public get datePickerTouchUi(): boolean {\n    return this._datePickerTouchUi\n  }\n\n  /**\n   * Allows the user to select 'nothing' / null.\n   */\n  @Input()\n  public set allowNull(val: BooleanInput) {\n    this._allowNull = coerceBooleanProperty(val)\n  }\n\n  public get allowNull(): boolean {\n    return this._allowNull\n  }\n\n  @Input()\n  public set datePickerEnabled(enabled: BooleanInput) {\n    this._datePickerEnabled = coerceBooleanProperty(enabled)\n  }\n\n  public get datePickerEnabled(): boolean {\n    return this._datePickerEnabled\n  }\n\n  @Output()\n  public get isoValueChange(): Observable<string | null> {\n    return this.mapIgnoreErrorObservable(this.valueChange, (d: LocalDate) => d.toJSON())\n  }\n\n  @Input()\n  public set isoValue(value: string | null) {\n    this.value = this.mapIgnoreError(value, (d: string) => LocalDate.parse(d))\n  }\n\n  @Output()\n  public get dateValueChange(): Observable<Date | null> {\n    return this.mapIgnoreErrorObservable(this.valueChange, (d: LocalDate) =>\n      TimeUtil.localDateToDate(d)\n    )\n  }\n\n  @Input()\n  public set dateValue(value: Date | null) {\n    this.value = this.mapIgnoreError(value, (d: Date) => TimeUtil.dateToLocalDate(d))\n  }\n\n  @Output()\n  public get isoDateValueChange(): Observable<IsoDateStr | null> {\n    return this.mapIgnoreErrorObservable(this.valueChange, (d: LocalDate) =>\n      TimeUtil.localDateToDate(d).toISOString()\n    )\n  }\n\n  @Input()\n  public set isoDateValue(value: IsoDateStr | null) {\n    this.value = this.mapIgnoreError(value, (d: IsoDateStr) =>\n      TimeUtil.dateToLocalDate(new Date(d))\n    )\n  }\n\n  public override get shouldLabelFloat(): boolean {\n    return true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public previousDay(): void {\n    this.updateValue(this.value.minusDays(1))\n  }\n\n  public nextDay(): void {\n    this.updateValue(this.value.plusDays(1))\n  }\n\n  public currentDay(): void {\n    this.updateValue(LocalDate.now())\n  }\n\n  public focus(options?: FocusOptions): void {\n    this.inputRef?.nativeElement?.focus(options)\n  }\n\n  public blur(): void {\n    this.inputRef?.nativeElement?.blur()\n  }\n\n  public clear(event: Event): void {\n    this.updateValue(null)\n  }\n\n  public openDatePicker(): void {\n    this.picker.open()\n  }\n\n  public onDateInputChanged(newDate: string): void {\n    try {\n      this.logger.debug('onDateInputChanged: \"' + newDate + '\"')\n\n      if (newDate === '' || newDate.startsWith('0')) {\n        return\n      } // Ignore while updating the year\n      this.setDateStrInternally(newDate)\n    } catch (err) {\n      this.logger.error('Failed to parse from date-input-changed event: ' + newDate, err)\n    }\n  }\n\n  public onDatepickerInputChange(event: MatDatepickerInputEvent<Date>): void {\n    this.logger.debug('Datepicker Input has changed: ' + event.value)\n    this.setDateInternally(event.value)\n  }\n\n  public onDateInputClicked(event: MouseEvent): void {\n    if (this.autoDatePicker) {\n      this.openDatePicker()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private mapIgnoreError<T>(value: T | null, conversionFn: (d: T | null) => LocalDate): LocalDate {\n    try {\n      const ld = value ? conversionFn(value) : null\n      this.logger.debug('Setting local date: ' + ld)\n      return ld\n    } catch (err) {\n      this.logger.warn('Failed to apply value to dateValue: ' + value, err)\n      return undefined\n    }\n  }\n\n  private mapIgnoreErrorObservable<T>(\n    date: Observable<LocalDate>,\n    conversionFn: (d: LocalDate) => T\n  ): Observable<T | null> {\n    return date.pipe(\n      map((localDate) => (localDate ? conversionFn(localDate) : null)),\n      catchError((err) => {\n        this.logger.error('Failed to convert local date!', err)\n        return of(null)\n      })\n    )\n  }\n\n  private setDateStrInternally(date: string): void {\n    if (date) {\n      this.updateValue(this.localDateParser.tryParse(date))\n    } else {\n      this.updateValue(null)\n    }\n  }\n\n  private setDateInternally(date: Date): void {\n    if (date) {\n      this.updateValue(TimeUtil.dateToLocalDate(date))\n    } else {\n      this.updateValue(null)\n    }\n  }\n\n  protected override valuesEquals(a: LocalDate, b: LocalDate): boolean {\n    return a && b ? a.equals(b) : a === b\n  }\n}\n","<div class=\"layout-row place-start-center elder-flex-control\">\n  @if (arrows) {\n    <button\n      mat-icon-button\n      type=\"button\"\n      class=\"elder-control-icon-button\"\n      [disabled]=\"isLocked || !value\"\n      (click)=\"previousDay()\"\n    >\n      <mat-icon>keyboard_arrow_left</mat-icon>\n    </button>\n  }\n\n  <input\n    matInput\n    elderNoSpinner\n    class=\"flex elder-mdc-input-fix elder-local-date-input\"\n    #input\n    type=\"date\"\n    elderToggleTextInput\n    [name]=\"controlName + '-inner-input'\"\n    [required]=\"!!required\"\n    [readonly]=\"readonly || autoDatePicker\"\n    [disabled]=\"!!disabled\"\n    [placeholder]=\"placeholderS() | translate\"\n    [ngModel]=\"date$ | async | date: 'yyyy-MM-dd'\"\n    (ngModelChange)=\"onDateInputChanged($event)\"\n    (blur)=\"blurred.next($event)\"\n    [class.elder-auto-date-picker]=\"autoDatePicker\"\n    [class.noselect]=\"autoDatePicker\"\n    [class.center]=\"center || arrows\"\n    (click)=\"onDateInputClicked($event)\"\n  />\n  <input\n    style=\"display: none\"\n    [matDatepicker]=\"picker\"\n    (dateChange)=\"onDatepickerInputChange($event)\"\n  />\n\n  @if (arrows) {\n    <button\n      mat-icon-button\n      type=\"button\"\n      class=\"elder-control-icon-button\"\n      [disabled]=\"isLocked || !value\"\n      (click)=\"nextDay()\"\n    >\n      <mat-icon>keyboard_arrow_right</mat-icon>\n    </button>\n  }\n\n  @if (today) {\n    <button\n      mat-icon-button\n      type=\"button\"\n      class=\"elder-control-icon-button\"\n      style=\"margin-left: 4px\"\n      [disabled]=\"isLocked\"\n      (click)=\"currentDay()\"\n    >\n      <mat-icon>today</mat-icon>\n    </button>\n  }\n\n  @if (datePickerEnabled && (!allowNull || (value$ | async) === null)) {\n    <mat-datepicker-toggle class=\"elder-control-icon-button\" [disabled]=\"isLocked\" [for]=\"picker\">\n      <mat-icon matDatepickerToggleIcon>calendar_month</mat-icon>\n    </mat-datepicker-toggle>\n  }\n\n  @if (allowNull && (value$ | async)) {\n    <button\n      mat-icon-button\n      type=\"button\"\n      class=\"elder-control-icon-button\"\n      [disabled]=\"isLocked\"\n      (click)=\"clear($event)\"\n      aria-label=\"Clear\"\n      elderStopEventPropagation\n    >\n      <mat-icon>close</mat-icon>\n    </button>\n  }\n\n  <mat-datepicker [touchUi]=\"datePickerTouchUi\" #picker></mat-datepicker>\n</div>\n","import { ChangeDetectionStrategy, Component, Input, OnInit, Output } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { FormFieldBaseComponent } from '../../../common/forms/form-field-base.component'\nimport { LocalDate } from '@js-joda/core'\nimport { buildFormIntegrationProviders } from '../../../common/forms/template-composite-control'\nimport { ViewProviders } from '../../../common/forms/view-providers'\nimport { Observable } from 'rxjs'\nimport { TimeUtil } from '../../../common/time/time-util'\nimport { map } from 'rxjs/operators'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderLocalDateInputComponent } from '../elder-local-date-input/elder-local-date-input.component'\nimport { AsyncPipe } from '@angular/common'\nimport { ElderFormFieldDenseDirective } from '../../forms/directives/elder-form-field-dense.directive'\nimport { MatFormField, MatLabel } from '@angular/material/form-field'\n\n@Component({\n  selector: 'elder-date-switcher',\n  templateUrl: './elder-date-switcher.component.html',\n  styleUrls: ['./elder-date-switcher.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n  host: { class: 'elder-form-field-host' },\n  providers: buildFormIntegrationProviders(ElderDateSwitcherComponent),\n  viewProviders: [ViewProviders.ParentControlContainer],\n  imports: [\n    MatFormField,\n    ElderFormFieldDenseDirective,\n    MatLabel,\n    ElderLocalDateInputComponent,\n    AsyncPipe,\n    TranslateModule,\n  ],\n})\nexport class ElderDateSwitcherComponent\n  extends FormFieldBaseComponent<LocalDate>\n  implements OnInit\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /** If true, date picker functionality is enabled. */\n  @Input()\n  public datePickerEnabled = true\n\n  /** If true, touch optimized mode of date picker is enabled. */\n  @Input()\n  public datePickerTouchUi = false\n\n  /** If true, elderDense on mat-form-field is enabled. */\n  @Input()\n  public dense = false\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    super()\n    this.updateValue(LocalDate.now())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Emits date upon internal date change.\n   * @deprecated Migrate your code to use LocalDate\n   */\n  @Output()\n  public get dateChange(): Observable<Date> {\n    return this.valueChange.pipe(\n      map((localDate) => (localDate ? TimeUtil.localDateToDate(localDate) : null))\n    )\n  }\n\n  /**\n   * @param date\n   * @deprecated Migrate your code to use LocalDate\n   */\n  @Input()\n  public set date(date: Date) {\n    this.value = date ? TimeUtil.dateToLocalDate(date) : null\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  protected override valuesEquals(a: LocalDate, b: LocalDate): boolean {\n    return a && b ? a.equals(b) : a === b\n  }\n}\n","<mat-form-field subscriptSizing=\"dynamic\" class=\"flex full\" [elderDense]=\"dense\">\n  @if (label) {\n    <mat-label>{{ label | translate }}</mat-label>\n  }\n  <elder-local-date-input\n    arrows\n    today\n    autoDatePicker\n    datePickerTouchUi\n    [datePickerEnabled]=\"false\"\n    [datePickerTouchUi]=\"datePickerTouchUi\"\n    [value]=\"value$ | async\"\n    (valueUpdated)=\"updateValue($event)\"\n  >\n  </elder-local-date-input>\n</mat-form-field>\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  Output,\n  Input,\n  ElementRef,\n  ViewChild,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { LocalTime } from '@js-joda/core'\nimport { Observable } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { ElderFormFieldControlBase } from '../../../common/forms/elder-form-field-control-base.directive'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { FormsModule } from '@angular/forms'\nimport { MatFormFieldControl } from '@angular/material/form-field'\nimport { AsyncPipe } from '@angular/common'\nimport { MatInput } from '@angular/material/input'\nimport { ElderToggleTextInputDirective } from '../elder-toggle-text-input.directive'\n\n@Component({\n  selector: 'elder-local-time-input',\n  templateUrl: './elder-local-time-input.component.html',\n  styleUrls: ['./elder-local-time-input.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: MatFormFieldControl, useExisting: ElderLocalTimeInputComponent }],\n  imports: [MatInput, FormsModule, AsyncPipe, TranslateModule, ElderToggleTextInputDirective],\n})\nexport class ElderLocalTimeInputComponent extends ElderFormFieldControlBase<LocalTime> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly hourMinuteStr$: Observable<string>\n\n  @ViewChild('input')\n  public inputRef: ElementRef<HTMLInputElement>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    super('local-time-input')\n\n    this.hourMinuteStr$ = this.value$.pipe(\n      map((localTime) => (localTime ? localTime.toJSON() : null))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get isoValueChange(): Observable<string | null> {\n    return this.valueChange.pipe(map((time) => (time ? time.toJSON() : null)))\n  }\n\n  @Input()\n  public set isoValue(value: string | null) {\n    this.value = value ? LocalTime.parse(value) : null\n  }\n\n  public override get shouldLabelFloat(): boolean {\n    return true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public methods                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public focus(options?: FocusOptions): void {\n    this.inputRef?.nativeElement?.focus(options)\n  }\n\n  public blur(): void {\n    this.inputRef?.nativeElement?.blur()\n  }\n\n  public onHourMinuteChanged(event: string): void {\n    if (event) {\n      this.updateValue(LocalTime.parse(event))\n    } else {\n      this.updateValue(null)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  protected override valuesEquals(a: LocalTime, b: LocalTime): boolean {\n    return a && b ? a.equals(b) : a === b\n  }\n}\n","<div class=\"layout-row place-start-baseline elder-flex-control\">\n  <input\n    matInput\n    class=\"flex-grow elder-mdc-input-fix\"\n    #input\n    [name]=\"controlName + '-inner-input'\"\n    [placeholder]=\"placeholderS() | translate\"\n    type=\"time\"\n    elderToggleTextInput\n    [required]=\"!!required\"\n    [readonly]=\"readonly\"\n    [disabled]=\"!!disabled\"\n    [ngModel]=\"hourMinuteStr$ | async\"\n    (ngModelChange)=\"onHourMinuteChanged($event)\"\n  />\n</div>\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  Input,\n  Output,\n  ElementRef,\n  ViewChild,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Instant } from '@js-joda/core'\nimport { TimeUtil } from '../../../common/time/time-util'\nimport { Observable } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { DateUtil } from '../../../common/time/date-util'\nimport { MatFormFieldControl } from '@angular/material/form-field'\nimport { ElderFormFieldControlBase } from '../../../common/forms/elder-form-field-control-base.directive'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { FormsModule } from '@angular/forms'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { AsyncPipe, DatePipe } from '@angular/common'\nimport { MatInput } from '@angular/material/input'\nimport { ElderToggleTextInputDirective } from '../elder-toggle-text-input.directive'\n\n@Component({\n  selector: 'elder-date-time-input',\n  templateUrl: './elder-date-time-input.component.html',\n  styleUrls: ['./elder-date-time-input.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: MatFormFieldControl, useExisting: ElderDateTimeInputComponent }],\n  imports: [\n    MatInput,\n    FormsModule,\n    AsyncPipe,\n    DatePipe,\n    TranslateModule,\n    ElderToggleTextInputDirective,\n  ],\n})\nexport class ElderDateTimeInputComponent extends ElderFormFieldControlBase<Instant> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly valueDate$: Observable<Date>\n\n  @ViewChild('input')\n  public inputRef: ElementRef<HTMLInputElement>\n\n  private _center = false\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    super('date-time-input')\n    this.valueDate$ = this.value$.pipe(\n      map((instant) => (instant ? DateUtil.instantToDate(instant) : null))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set center(center: BooleanInput) {\n    this._center = coerceBooleanProperty(center)\n  }\n\n  public get center(): boolean {\n    return this._center\n  }\n\n  @Output()\n  public get isoValueChange(): Observable<string | null> {\n    return this.valueChange.pipe(map((instant) => (instant ? instant.toJSON() : null)))\n  }\n\n  @Input()\n  public set isoValue(value: string | null) {\n    this.value = value ? Instant.parse(value) : null\n  }\n\n  public override get shouldLabelFloat(): boolean {\n    return true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public focus(options?: FocusOptions): void {\n    this.inputRef?.nativeElement?.focus(options)\n  }\n\n  public blur(): void {\n    this.inputRef?.nativeElement?.blur()\n  }\n\n  public onDateTimeChanged(eventDate: string): void {\n    const newDate = eventDate ? new Date(eventDate) : null\n    if (newDate) {\n      this.updateValue(TimeUtil.instant(newDate))\n    } else {\n      this.updateValue(null)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Protected methods                                                       *\n   *                                                                         *\n   **************************************************************************/\n\n  protected override valuesEquals(a: Instant, b: Instant): boolean {\n    return a && b ? a.equals(b) : a === b\n  }\n}\n","<div class=\"layout-row place-start-baseline elder-flex-control\">\n  <input\n    matInput\n    class=\"flex-grow elder-mdc-input-fix elder-datetime-local-input\"\n    #input\n    [name]=\"controlName + '-inner-input'\"\n    type=\"datetime-local\"\n    elderToggleTextInput\n    [required]=\"!!required\"\n    [readonly]=\"readonly\"\n    [disabled]=\"!!disabled\"\n    [placeholder]=\"placeholderS() | translate\"\n    [ngModel]=\"valueDate$ | async | date: 'yyyy-MM-ddTHH:mm'\"\n    (ngModelChange)=\"onDateTimeChanged($event)\"\n    [class.center]=\"center\"\n  />\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  ElementRef,\n  Inject,\n  Input,\n  NgZone,\n  Optional,\n  Output,\n  Self,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Interval, IsoIntervalStr } from '../../../common/time/interval'\nimport { Observable, of } from 'rxjs'\nimport { catchError, map } from 'rxjs/operators'\nimport { Instant, LocalDate, LocalTime, ZoneId } from '@js-joda/core'\nimport { ElderFormFieldControlBase } from '../../../common/forms/elder-form-field-control-base.directive'\nimport { FocusMonitor } from '@angular/cdk/a11y'\nimport { TranslateService, TranslateModule } from '@ngx-translate/core'\nimport { NgControl, FormsModule } from '@angular/forms'\nimport { MatFormFieldControl } from '@angular/material/form-field'\nimport { TimeUtil } from '../../../common/time/time-util'\nimport { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core'\nimport { LocaleDateFormats } from '../date-formats/locale-date-formats'\nimport { ElderLocalDateInputComponent } from '../elder-local-date-input/elder-local-date-input.component'\nimport { MatIcon } from '@angular/material/icon'\nimport {\n  MatDateRangeInput,\n  MatStartDate,\n  MatEndDate,\n  MatDatepickerToggle,\n  MatDatepickerToggleIcon,\n  MatDateRangePicker,\n} from '@angular/material/datepicker'\nimport { ElderLocalTimeInputComponent } from '../elder-local-time-input/elder-local-time-input.component'\nimport { ElderDateTimeInputComponent } from '../elder-date-time-input/elder-date-time-input.component'\nimport { AsyncPipe } from '@angular/common'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport { coerceInterval, coerceIntervalIsoStr } from '../../../common/time/interval-coerce'\n\nexport type IntervalInputMode =\n  /**\n   * Supports the selection of a single (full) day:\n   * 12.12.2020\n   */\n  | 'single-day'\n\n  /**\n   * Supports a time interval in a day:\n   * 12.12.2020 13:00 - 18:00\n   */\n  | 'day-time-range'\n\n  /**\n   * Supports a date interval without time\n   * 12.12.2020 - 22.06.2021\n   */\n  | 'date-range'\n\n  /**\n   * Supports a date-time to date-time interval\n   * 12.12.2020 8:00 - 22.06.2021 17:00\n   * This is the default as it supports the most detailed input.\n   */\n  | 'date-time-range'\n\n@Component({\n  selector: 'elder-interval-input',\n  templateUrl: './elder-interval-input.component.html',\n  styleUrls: ['./elder-interval-input.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: MatFormFieldControl, useExisting: ElderIntervalInputComponent }],\n  imports: [\n    AsyncPipe,\n    TranslateModule,\n    FormsModule,\n    ElderDateTimeInputComponent,\n    ElderLocalTimeInputComponent,\n    MatDateRangeInput,\n    MatStartDate,\n    MatEndDate,\n    MatDatepickerToggle,\n    MatIcon,\n    MatDatepickerToggleIcon,\n    MatDateRangePicker,\n    ElderLocalDateInputComponent,\n  ],\n})\nexport class ElderIntervalInputComponent extends ElderFormFieldControlBase<\n  Interval | IsoIntervalStr\n> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _mode: IntervalInputMode = 'date-time-range'\n  private _isDefaultDatePickerDisabled = false\n\n  @Input()\n  public zone = ZoneId.systemDefault()\n\n  public readonly endTime$: Observable<LocalTime>\n\n  public readonly startLocalDate$: Observable<LocalDate>\n  public readonly endLocalDate$: Observable<LocalDate>\n\n  public readonly startDate$: Observable<Date>\n  public readonly endDate$: Observable<Date>\n\n  public readonly dateformat: string\n\n  public readonly interval$: Observable<Interval>\n  private _valueAsIsoStr: boolean\n\n  public placeHolderOrEmpty = computed<string>(() => this.placeholderS() ?? '')\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    customDateAdapter: DateAdapter<Date>,\n    @Inject(MAT_DATE_LOCALE) matDateLocale: string\n  ) {\n    super(\n      'interval-input' // => mat-mdc-form-field-type-interval-input\n    )\n\n    this.controlType = this._mode\n    this.interval$ = this.value$.pipe(map((value) => coerceInterval(value)))\n\n    this.endTime$ = this.interval$.pipe(\n      map((interval) => (interval?.end ? LocalTime.from(interval.end.atZone(this.zone)) : null))\n    )\n\n    this.startLocalDate$ = this.interval$.pipe(\n      map((interval) => (interval?.start ? LocalDate.from(interval.start.atZone(this.zone)) : null))\n    )\n\n    this.endLocalDate$ = this.interval$.pipe(\n      map((interval) => (interval?.end ? LocalDate.from(interval.end.atZone(this.zone)) : null))\n    )\n\n    this.startDate$ = this.mapIgnoreErrorObservable(this.startLocalDate$, (d: LocalDate) =>\n      TimeUtil.localDateToDate(d)\n    )\n    this.endDate$ = this.mapIgnoreErrorObservable(this.endLocalDate$, (d: LocalDate) =>\n      TimeUtil.localDateToDate(d)\n    )\n\n    this.dateformat = LocaleDateFormats.getFormatsOfLocale(matDateLocale)[0].toLowerCase()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set valueAsIsoStr(enabled: BooleanInput) {\n    this._valueAsIsoStr = coerceBooleanProperty(enabled)\n  }\n\n  public get valueAsIsoStr(): boolean {\n    return this._valueAsIsoStr\n  }\n\n  @Input()\n  public set mode(mode: IntervalInputMode) {\n    this._mode = mode\n    this.controlType = mode\n  }\n\n  public get mode(): IntervalInputMode {\n    return this._mode\n  }\n\n  @Input()\n  public set isDefaultDatePickerDisabled(hide: BooleanInput) {\n    this._isDefaultDatePickerDisabled = coerceBooleanProperty(hide)\n  }\n\n  public get isDefaultDatePickerDisabled(): boolean {\n    return this._isDefaultDatePickerDisabled\n  }\n\n  @Output()\n  public get isoValueChange(): Observable<IsoIntervalStr | null> {\n    return this.valueChange.pipe(map((value) => coerceIntervalIsoStr(value)))\n  }\n\n  @Input()\n  public set isoValue(value: IsoIntervalStr | null) {\n    this.value = value ? this.coerceValue(value) : null\n  }\n\n  public override get shouldLabelFloat(): boolean {\n    return true\n  }\n\n  public get interval(): Interval | undefined {\n    return coerceInterval(this.value)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public focus(options?: FocusOptions): void {\n    this.logger.warn('focus() not yet supported!')\n    // this.inputRef?.nativeElement?.focus(options);\n  }\n\n  public blur(): void {\n    this.logger.warn('blur() not yet supported!')\n    // this.inputRef?.nativeElement?.blur();\n  }\n\n  public onDayTimeStartChanged(start: Instant) {\n    this.updateCoercedValue(Interval.of(start, this.instantAtEndOfDay(start)))\n  }\n\n  public onDayTimeEndTimeChanged(endTime: LocalTime): void {\n    const start = this.interval.start\n    const end = this.instantWithTime(start, endTime)\n    this.updateCoercedValue(\n      Interval.of(start, !end.isAfter(start) ? this.instantAtEndOfDay(start) : end)\n    )\n  }\n\n  public onStartChanged(start: Instant): void {\n    this.updateCoercedValue(Interval.of(start, this.interval.end))\n  }\n\n  public onEndChanged(end: Instant): void {\n    this.updateCoercedValue(Interval.of(this.interval.start, end))\n  }\n\n  public onStartDateChanged(value: Date | null): void {\n    const date = this.toLocalDate(value)\n    this.updateCoercedValue(Interval.of(this.localDateToInstant(date), this.interval?.end))\n  }\n\n  public onEndDateChanged(value: Date | null): void {\n    const date = this.toLocalDate(value)\n    this.updateCoercedValue(Interval.of(this.interval?.start, this.localDateToInstant(date)))\n  }\n\n  public onSingleDayDateChanged(date: LocalDate): void {\n    this.updateCoercedValue(Interval.ofDay(date, this.zone))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private updateCoercedValue(value: Interval | IsoIntervalStr | undefined | null): void {\n    this.updateValue(this.coerceValue(value))\n  }\n\n  private instantAtStartOfDayNow(): Instant {\n    return LocalDate.now().atStartOfDay().atZone(this.zone).toInstant()\n  }\n\n  private instantAtEndOfDay(instant: Instant): Instant {\n    return LocalDate.ofInstant(instant).atStartOfDay().plusDays(1).atZone(this.zone).toInstant()\n  }\n\n  private localDateToInstant(date: LocalDate): Instant | undefined {\n    if (date) {\n      return date.atStartOfDay().atZone(this.zone).toInstant()\n    } else {\n      return undefined\n    }\n  }\n\n  protected override valuesEquals(\n    a: Interval | IsoIntervalStr | undefined | null,\n    b: Interval | IsoIntervalStr | undefined | null\n  ): boolean {\n    const aInterval = coerceInterval(a)\n    const bInterval = coerceInterval(b)\n    return aInterval && bInterval ? aInterval.equals(bInterval) : aInterval === bInterval\n  }\n\n  private instantWithTime(instant: Instant, time: LocalTime): Instant {\n    return instant.atZone(this.zone).withHour(time.hour()).withMinute(time.minute()).toInstant()\n  }\n\n  private toLocalDate(value: Date): LocalDate | null {\n    try {\n      return value ? TimeUtil.dateToLocalDate(value) : null\n    } catch (err) {\n      this.logger.warn('Failed to apply value to dateValue: ' + value, err)\n      return null\n    }\n  }\n\n  private mapIgnoreErrorObservable<T>(\n    date: Observable<LocalDate>,\n    conversionFn: (d: LocalDate) => T\n  ): Observable<T | null> {\n    return date.pipe(\n      map((localDate) => (localDate ? conversionFn(localDate) : null)),\n      catchError((err) => {\n        this.logger.error('Failed to convert local date!', err)\n        return of(null)\n      })\n    )\n  }\n\n  private coerceValue(\n    value: Interval | IsoIntervalStr | undefined | null\n  ): Interval | IsoIntervalStr | undefined | null {\n    if (this.valueAsIsoStr) {\n      return coerceIntervalIsoStr(value)\n    } else {\n      return coerceInterval(value)\n    }\n  }\n}\n","@switch (mode) {\n  @case ('date-time-range') {\n    <div class=\"layout-row\">\n      <elder-date-time-input\n        class=\"flex\"\n        center\n        [value]=\"(interval$ | async)?.start\"\n        (valueUpdated)=\"onStartChanged($event)\"\n        [required]=\"required\"\n        [readonly]=\"readonly\"\n        [disabled]=\"disabled\"\n        [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.from' | translate)\"\n      ></elder-date-time-input>\n      <span class=\"mat-date-range-input-separator flex-none\">–</span>\n      <elder-date-time-input\n        class=\"flex\"\n        center\n        [value]=\"(interval$ | async)?.end\"\n        (valueUpdated)=\"onEndChanged($event)\"\n        [required]=\"required\"\n        [readonly]=\"readonly\"\n        [disabled]=\"disabled\"\n        [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.to' | translate)\"\n      ></elder-date-time-input>\n    </div>\n  }\n  @case ('day-time-range') {\n    <div class=\"layout-row gap-xs elder-flex-interval-control\">\n      <!--  [name]=\"name + '-day-start'\" -->\n      <elder-date-time-input\n        [value]=\"(interval$ | async)?.start\"\n        (valueUpdated)=\"onDayTimeStartChanged($event)\"\n        [required]=\"required\"\n        [readonly]=\"readonly\"\n        [disabled]=\"disabled\"\n        [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.from' | translate)\"\n      ></elder-date-time-input>\n\n      <!-- [name]=\"name + '-day-end'\" -->\n      <elder-local-time-input\n        [value]=\"endTime$ | async\"\n        (valueUpdated)=\"onDayTimeEndTimeChanged($event)\"\n        [required]=\"required\"\n        [readonly]=\"readonly\"\n        [disabled]=\"disabled\"\n        [placeholder]=\"(placeHolderOrEmpty() | translate) + ' ' + ('interval.to' | translate)\"\n      ></elder-local-time-input>\n    </div>\n  }\n\n  @case ('date-range') {\n    <div class=\"layout-row gap-xs elder-flex-interval-control\">\n      <mat-date-range-input\n        class=\"mdc-text-field__input\"\n        [rangePicker]=\"picker\"\n        [disabled]=\"!!disabled\"\n      >\n        <input\n          matStartDate\n          [placeholder]=\"dateformat\"\n          [ngModel]=\"startDate$ | async\"\n          name=\"date-range.start\"\n          [ngModelOptions]=\"{ standalone: true, updateOn: 'blur' }\"\n          (ngModelChange)=\"onStartDateChanged($event)\"\n          [readonly]=\"readonly\"\n          [disabled]=\"!!disabled\"\n        />\n        <input\n          matEndDate\n          [placeholder]=\"dateformat\"\n          [ngModel]=\"endDate$ | async\"\n          name=\"date-range.end\"\n          [ngModelOptions]=\"{ standalone: true, updateOn: 'blur' }\"\n          (ngModelChange)=\"onEndDateChanged($event)\"\n          [readonly]=\"readonly\"\n          [disabled]=\"!!disabled\"\n        />\n      </mat-date-range-input>\n\n      @if (!isDefaultDatePickerDisabled) {\n        <mat-datepicker-toggle\n          class=\"elder-control-icon-button\"\n          [disabled]=\"isLocked\"\n          [for]=\"picker\"\n        >\n          <mat-icon matDatepickerToggleIcon>calendar_month</mat-icon>\n        </mat-datepicker-toggle>\n      }\n      <mat-date-range-picker #picker></mat-date-range-picker>\n    </div>\n  }\n\n  @case ('single-day') {\n    <div class=\"layout-row elder-flex-control\">\n      <!-- [name]=\"name\" -->\n      <elder-local-date-input\n        class=\"flex\"\n        center\n        [value]=\"startLocalDate$ | async\"\n        (valueUpdated)=\"onSingleDayDateChanged($event)\"\n        [required]=\"required\"\n        [readonly]=\"readonly\"\n        [disabled]=\"disabled\"\n        [placeholder]=\"placeHolderOrEmpty() | translate\"\n      ></elder-local-date-input>\n    </div>\n  }\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  Input,\n  Output,\n  ElementRef,\n  NgZone,\n  Optional,\n  Self,\n} from '@angular/core'\nimport { Duration, Period } from '@js-joda/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { map } from 'rxjs/operators'\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs'\nimport { DurationBucket } from '../duration-bucket'\nimport { DurationFormat } from '../duration-format'\nimport { PeriodDuration } from '../../../../common/time/period-duration'\nimport { ElderFormFieldControlBase } from '../../../../common/forms/elder-form-field-control-base.directive'\nimport { MatFormFieldControl } from '@angular/material/form-field'\nimport { FocusMonitor } from '@angular/cdk/a11y'\nimport { TranslateService } from '@ngx-translate/core'\nimport { NgControl, FormsModule } from '@angular/forms'\nimport { ElderFormFieldNoSpinnerDirective } from '../../../forms/directives/elder-form-field-no-spinner.directive'\nimport { MatInput } from '@angular/material/input'\nimport { AsyncPipe } from '@angular/common'\n\nclass DurationInputContext {\n  constructor(\n    public readonly bucket: DurationBucket,\n    public readonly format: DurationFormat\n  ) {}\n}\n\n@Component({\n  selector: 'elder-duration-input',\n  templateUrl: './elder-duration-input.component.html',\n  styleUrls: ['./elder-duration-input.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: MatFormFieldControl, useExisting: ElderDurationInputComponent }],\n  imports: [MatInput, ElderFormFieldNoSpinnerDirective, FormsModule, AsyncPipe],\n})\nexport class ElderDurationInputComponent extends ElderFormFieldControlBase<Duration> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly durationFormat$ = new BehaviorSubject<DurationFormat>(DurationFormat.DEFAULT)\n  public readonly durationContext$: Observable<DurationInputContext>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    super('duration-input')\n    this.durationContext$ = combineLatest([this.value$, this.durationFormat$]).pipe(\n      map(([duration, format]) => {\n        return new DurationInputContext(format.bucket(PeriodDuration.ofDuration(duration)), format)\n      })\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get isoValueChange(): Observable<string | null> {\n    return this.valueChange.pipe(map((duration) => (duration ? duration.toJSON() : null)))\n  }\n\n  @Input()\n  public set isoValue(value: string | null) {\n    if (value) {\n      const pd = PeriodDuration.parse(value)\n      const duration = pd.duration ?? Duration.ZERO\n      const period = pd.period ?? Period.ZERO\n      this.value = duration.plusDays(period.days())\n    } else {\n      this.value = null\n    }\n  }\n\n  /**\n   * yyyy:MM:dd hh:mm:ss\n   * @param durationFormat\n   */\n  @Input()\n  public set format(durationFormat: string) {\n    this.durationFormat = DurationFormat.parse(durationFormat)\n  }\n\n  @Input()\n  public set durationFormat(format: DurationFormat) {\n    this.durationFormat$.next(format)\n  }\n\n  public override get shouldLabelFloat(): boolean {\n    return true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public focus(options?: FocusOptions): void {\n    this.log.warn('focus() not yet supported!')\n    // TODO this.inputRef?.nativeElement?.focus(options);\n  }\n\n  public blur(): void {\n    this.log.warn('blur() not yet supported!')\n    // TODO this.inputRef?.nativeElement?.blur();\n  }\n\n  public round(value: number): number {\n    return Math.round(value)\n  }\n\n  public onBucketChanged(bucket: DurationBucket): void {\n    this.value = bucket.toDuration()\n  }\n\n  protected override valuesEquals(a: Duration, b: Duration): boolean {\n    return a && b ? a.equals(b) : a === b\n  }\n}\n","@if (durationContext$ | async; as durationCtx) {\n  <div class=\"layout-row place-start-center flex-none\">\n    @if (durationCtx.format.days) {\n      <div class=\"layout-row place-start-baseline duration-field flex\">\n        <input\n          matInput\n          elderNoSpinner\n          [name]=\"controlName + '-inner-days'\"\n          type=\"number\"\n          class=\"duration-input duration-input-days flex-auto\"\n          [required]=\"!!required\"\n          [readonly]=\"readonly\"\n          [disabled]=\"!!disabled\"\n          [ngModel]=\"round(durationCtx?.bucket?.days)\"\n          (ngModelChange)=\"onBucketChanged(durationCtx.bucket.withDays($event))\"\n        />\n        <span class=\"mat-caption suffix flex-none noselect\">d</span>\n      </div>\n    }\n    @if (durationCtx.format.hours) {\n      <div class=\"layout-row place-start-baseline duration-field flex\">\n        <input\n          matInput\n          elderNoSpinner\n          [name]=\"controlName + '-inner-hours'\"\n          type=\"number\"\n          class=\"duration-input duration-input-hours flex-auto\"\n          [required]=\"!!required\"\n          [readonly]=\"readonly\"\n          [disabled]=\"!!disabled\"\n          [ngModel]=\"round(durationCtx?.bucket?.hours)\"\n          (ngModelChange)=\"onBucketChanged(durationCtx.bucket.withHours($event))\"\n        />\n        <span class=\"mat-caption suffix flex-none noselect\">h</span>\n      </div>\n    }\n    @if (durationCtx.format.minutes) {\n      <div class=\"layout-row place-start-baseline duration-field flex\">\n        <input\n          matInput\n          elderNoSpinner\n          [name]=\"controlName + '-inner-minutes'\"\n          type=\"number\"\n          class=\"duration-input duration-input-minutes flex-auto\"\n          [required]=\"!!required\"\n          [readonly]=\"readonly\"\n          [disabled]=\"!!disabled\"\n          [ngModel]=\"round(durationCtx?.bucket?.minutes)\"\n          (ngModelChange)=\"onBucketChanged(durationCtx.bucket.withMinutes($event))\"\n        />\n        <span class=\"mat-caption suffix flex-none noselect\">min</span>\n      </div>\n    }\n    @if (durationCtx.format.seconds) {\n      <div class=\"layout-row place-start-baseline duration-field flex\">\n        <input\n          matInput\n          elderNoSpinner\n          [name]=\"controlName + '-inner-seconds'\"\n          type=\"number\"\n          class=\"duration-input duration-input-seconds flex-auto\"\n          [required]=\"!!required\"\n          [readonly]=\"readonly\"\n          [disabled]=\"!!disabled\"\n          [ngModel]=\"round(durationCtx?.bucket?.seconds)\"\n          (ngModelChange)=\"onBucketChanged(durationCtx.bucket.withSeconds($event))\"\n        />\n        <span class=\"mat-caption suffix flex-none noselect\">sec</span>\n      </div>\n    }\n  </div>\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  Output,\n  Input,\n  ElementRef,\n  NgZone,\n  Optional,\n  Self,\n} from '@angular/core'\nimport { Period } from '@js-joda/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, combineLatest, Observable } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { PeriodFormat } from '../period-format'\nimport { PeriodBucket } from '../period-bucket'\nimport { ElderFormFieldControlBase } from '../../../../common/forms/elder-form-field-control-base.directive'\nimport { MatFormFieldControl, MatSuffix } from '@angular/material/form-field'\nimport { FocusMonitor } from '@angular/cdk/a11y'\nimport { TranslateService } from '@ngx-translate/core'\nimport { NgControl, FormsModule } from '@angular/forms'\nimport { ElderFormFieldNoSpinnerDirective } from '../../../forms/directives/elder-form-field-no-spinner.directive'\nimport { MatInput } from '@angular/material/input'\nimport { AsyncPipe } from '@angular/common'\n\nclass PeriodInputContext {\n  constructor(\n    public readonly bucket: PeriodBucket,\n    public readonly format: PeriodFormat\n  ) {}\n}\n\n/**\n *\n * Days\n * Weeks\n * Months\n * Years\n *\n */\n@Component({\n  selector: 'elder-period-input',\n  templateUrl: './elder-period-input.component.html',\n  styleUrls: ['./elder-period-input.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: MatFormFieldControl, useExisting: ElderPeriodInputComponent }],\n  imports: [MatInput, ElderFormFieldNoSpinnerDirective, FormsModule, MatSuffix, AsyncPipe],\n})\nexport class ElderPeriodInputComponent extends ElderFormFieldControlBase<Period> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly periodFormat$ = new BehaviorSubject<PeriodFormat>(PeriodFormat.DEFAULT)\n  public readonly periodContext$: Observable<PeriodInputContext>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    super('period-input')\n    this.periodContext$ = combineLatest([this.value$, this.periodFormat$]).pipe(\n      map(([period, format]) => {\n        this.log.debug('Got period', period)\n\n        return new PeriodInputContext(format.bucket(period), format)\n      })\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Output()\n  public get isoValueChange(): Observable<string | null> {\n    return this.valueChange.pipe(map((period) => (period ? period.toJSON() : null)))\n  }\n\n  @Input()\n  public set isoValue(value: string | null) {\n    if (value) {\n      this.value = Period.parse(value)\n    } else {\n      this.value = null\n    }\n  }\n\n  /**\n   * yyyy:MM:ww:dd\n   * @param periodFormat\n   */\n  @Input()\n  public set format(periodFormat: string) {\n    this.periodFormat = PeriodFormat.parse(periodFormat)\n  }\n\n  @Input()\n  public set periodFormat(format: PeriodFormat) {\n    this.periodFormat$.next(format)\n  }\n\n  public override get shouldLabelFloat(): boolean {\n    return true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public focus(options?: FocusOptions): void {\n    // TODO this.inputRef?.nativeElement?.focus(options);\n  }\n\n  public blur(): void {\n    // TODO this.inputRef?.nativeElement?.blur();\n  }\n\n  public round(value: number): number {\n    return Math.round(value)\n  }\n\n  public onBucketChanged(bucket: PeriodBucket): void {\n    this.value = bucket.toPeriod()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  protected override valuesEquals(a: Period, b: Period): boolean {\n    return a && b ? a.equals(b) : a === b\n  }\n}\n","@if (periodContext$ | async; as periodCtx) {\n  <div class=\"layout-row place-start-center flex-none\">\n    @if (periodCtx.format.days) {\n      <div class=\"layout-row place-start-baseline flex period-field\">\n        <input\n          matInput\n          elderNoSpinner\n          [name]=\"controlName + '-inner-days'\"\n          type=\"number\"\n          class=\"period-input\"\n          [required]=\"!!required\"\n          [readonly]=\"readonly\"\n          [disabled]=\"!!disabled\"\n          [ngModel]=\"round(periodCtx?.bucket?.days)\"\n          (ngModelChange)=\"onBucketChanged(periodCtx.bucket.withDays($event))\"\n        />\n        <span matSuffix class=\"mat-caption suffix flex-none noselect\">d</span>\n      </div>\n    }\n    @if (periodCtx.format.months) {\n      <div class=\"layout-row place-start-baseline flex period-field\">\n        <input\n          matInput\n          elderNoSpinner\n          [name]=\"controlName + '-inner-months'\"\n          type=\"number\"\n          class=\"period-input\"\n          [required]=\"!!required\"\n          [readonly]=\"readonly\"\n          [disabled]=\"!!disabled\"\n          [ngModel]=\"round(periodCtx?.bucket?.months)\"\n          (ngModelChange)=\"onBucketChanged(periodCtx.bucket.withMonths($event))\"\n        />\n        <span matSuffix class=\"mat-caption suffix flex-none noselect\">mnt</span>\n      </div>\n    }\n    @if (periodCtx.format.years) {\n      <div class=\"layout-row place-start-baseline flex period-field\">\n        <input\n          matInput\n          elderNoSpinner\n          [name]=\"controlName + '-inner-years'\"\n          type=\"number\"\n          class=\"period-input\"\n          [required]=\"!!required\"\n          [readonly]=\"readonly\"\n          [disabled]=\"!!disabled\"\n          [ngModel]=\"round(periodCtx?.bucket?.years)\"\n          (ngModelChange)=\"onBucketChanged(periodCtx.bucket.withYears($event))\"\n        />\n        <span matSuffix class=\"mat-caption suffix flex-none noselect\">yrs</span>\n      </div>\n    }\n  </div>\n}\n","import { Pipe, PipeTransform } from '@angular/core'\nimport { Temporal, ZonedDateTime } from '@js-joda/core'\n\n@Pipe({\n  name: 'toIsoDateString',\n  standalone: true,\n})\nexport class ToIsoDateStringPipe implements PipeTransform {\n  /**\n   * Turns a Date or Joda Date Object into a valid ISO string.\n   * @param value\n   */\n  public transform(value: Date | Temporal | undefined): string | undefined {\n    if (value == undefined) {\n      return value as undefined\n    }\n    if (value instanceof ZonedDateTime) {\n      return value.toOffsetDateTime().toJSON()\n    } else if (value instanceof Temporal) {\n      if (typeof (<any>value).toJSON === 'function') {\n        return (<any>value).toJSON() // Temporal covers almost all JODA Types\n      } else {\n        return value.toString()\n      }\n    } else if (value instanceof Date) {\n      return value.toISOString()\n    }\n    return value\n  }\n}\n","import { Temporal } from '@js-temporal/polyfill'\nimport IntervalPickerUtil from '../util/interval-picker-util'\n\nexport default class IntervalState {\n  constructor(\n    public readonly startDate: Temporal.PlainDate,\n    public readonly endDate: Temporal.PlainDate,\n    public readonly startTime?: Temporal.PlainTime,\n    public readonly endTime?: Temporal.PlainTime\n  ) {\n    this.startTime = this.startTime || Temporal.PlainTime.from('00:00')\n    this.endTime = this.endTime || Temporal.PlainTime.from('00:00')\n  }\n\n  static createFromDateTimes(\n    startDateTime: Temporal.PlainDateTime,\n    endDateTime: Temporal.PlainDateTime\n  ): IntervalState {\n    return new IntervalState(\n      startDateTime.toPlainDate(),\n      endDateTime.toPlainDate(),\n      startDateTime.toPlainTime(),\n      endDateTime.toPlainTime()\n    )\n  }\n\n  public get startDateTime(): Temporal.PlainDateTime {\n    return IntervalPickerUtil.createTemporalDateTime(this.startDate, this.startTime)\n  }\n\n  public get endDateTime(): Temporal.PlainDateTime {\n    return IntervalPickerUtil.createTemporalDateTime(this.endDate, this.endTime)\n  }\n\n  public withStartDate(newStartDate: Temporal.PlainDate): IntervalState {\n    return new IntervalState(newStartDate, this.endDate, this.startTime, this.endTime)\n  }\n\n  public withEndDate(newEndDate: Temporal.PlainDate): IntervalState {\n    return new IntervalState(this.startDate, newEndDate, this.startTime, this.endTime)\n  }\n\n  public withStartTime(newStartTime: Temporal.PlainTime): IntervalState {\n    return new IntervalState(this.startDate, this.endDate, newStartTime, this.endTime)\n  }\n\n  public withEndTime(newEndTime: Temporal.PlainTime): IntervalState {\n    return new IntervalState(this.startDate, this.endDate, this.startTime, newEndTime)\n  }\n\n  public withTime(newStartTime: Temporal.PlainTime, newEndTime: Temporal.PlainTime): IntervalState {\n    return new IntervalState(this.startDate, this.endDate, newStartTime, newEndTime)\n  }\n}\n","import { MatCalendar } from '@angular/material/datepicker'\nimport { Instant } from '@js-joda/core'\nimport { Temporal } from '@js-temporal/polyfill'\nimport { Interval } from '../../../../common/time/interval'\nimport { TemporalUtil } from '../../../../common/time/temporal-util'\nimport { TimeUtil } from '../../../../common/time/time-util'\nimport IntervalState from '../model/interval-state'\n\nexport default class IntervalPickerUtil {\n  public static createElderInterval(intervalState: IntervalState): Interval {\n    let startInstant: Instant\n    let endInstant: Instant\n\n    try {\n      const startDateTimeJS = TemporalUtil.getJSDateFromPlainDateTime(intervalState.startDateTime)\n      startInstant = TimeUtil.instant(startDateTimeJS)\n    } catch (e) {\n      startInstant = null\n    }\n\n    try {\n      const endDateTimeJS = TemporalUtil.getJSDateFromPlainDateTime(intervalState.endDateTime)\n      endInstant = TimeUtil.instant(endDateTimeJS)\n    } catch (e) {\n      endInstant = null\n    }\n\n    return new Interval(startInstant, endInstant)\n  }\n\n  public static transformToIntervalState(interval: Interval): IntervalState {\n    if (!interval) {\n      return null\n    }\n\n    const startDateTimeJS = interval.start ? TimeUtil.date(interval.start) : null\n    const endDateTimeJS = interval.end ? TimeUtil.date(interval.end) : null\n\n    let startDate: Temporal.PlainDate = null\n    let endDate: Temporal.PlainDate = null\n    let startTime: Temporal.PlainTime = null\n    let endTime: Temporal.PlainTime = null\n\n    try {\n      const startDateTime = TemporalUtil.getPlainDateTimeFromJSDate(startDateTimeJS)\n      startDate = startDateTime.toPlainDate()\n      startTime = startDateTime.toPlainTime()\n    } catch (e) {\n      startDate = null\n      startTime = null\n    }\n\n    try {\n      const endDateTime = TemporalUtil.getPlainDateTimeFromJSDate(endDateTimeJS)\n      endDate = endDateTime.toPlainDate()\n      endTime = endDateTime.toPlainTime()\n    } catch (e) {\n      endDate = null\n      endTime = null\n    }\n\n    return new IntervalState(startDate, endDate, startTime, endTime)\n  }\n\n  public static createTemporalDateTime(\n    date: Temporal.PlainDate,\n    time: Temporal.PlainTime\n  ): Temporal.PlainDateTime {\n    if (!date) {\n      return null\n    }\n\n    return Temporal.PlainDateTime.from({\n      year: date.year,\n      month: date.month,\n      day: date.day,\n      hour: time.hour,\n      minute: time.minute,\n      second: time.second,\n      millisecond: time.millisecond,\n    })\n  }\n\n  public static isIntervalEquals(interval1: IntervalState, interval2: IntervalState): boolean {\n    if (!interval1 && !interval2) {\n      return true\n    }\n\n    if (!interval1 || !interval2) {\n      return false\n    }\n\n    return (\n      this.isEquals(interval1.startDate, interval2.startDate) &&\n      this.isEquals(interval1.endDate, interval2.endDate) &&\n      this.isEquals(interval1.startTime, interval2.startTime) &&\n      this.isEquals(interval1.endTime, interval2.endTime)\n    )\n  }\n\n  static isEquals(\n    x: Temporal.PlainDate | Temporal.PlainTime | Temporal.PlainDateTime,\n    y: Temporal.PlainDate | Temporal.PlainTime | Temporal.PlainDateTime\n  ): boolean {\n    if (!x && !y) {\n      return true\n    }\n\n    if (!x || !y) {\n      return false\n    }\n\n    return x.equals(y)\n  }\n\n  public static isIntervalWithStartAndEnd(interval: IntervalState): boolean {\n    return !!interval?.startDate && !!interval?.endDate\n  }\n\n  public static isOpenInterval(interval: IntervalState): boolean {\n    if (!interval) {\n      return false\n    }\n    return (\n      (!!interval.startDate && !interval.endDate) || (!interval.startDate && !!interval.endDate)\n    )\n  }\n\n  public static getDeltaHumanReadable(interval: IntervalState): string {\n    if (IntervalPickerUtil.isOpenInterval(interval)) {\n      return '∞'\n    }\n\n    if (!IntervalPickerUtil.isIntervalWithStartAndEnd(interval)) {\n      return '-'\n    }\n\n    const duration = interval.startDateTime.until(interval.endDateTime)\n\n    const tmp = []\n    if (duration.days) {\n      tmp.push(`${duration.days}d`)\n    }\n    if (duration.hours) {\n      tmp.push(`${duration.hours}h`)\n    }\n    if (duration.minutes) {\n      tmp.push(`${duration.minutes}min`)\n    }\n    if (duration.seconds) {\n      tmp.push(`${duration.seconds}s`)\n    }\n\n    if (!tmp.length) {\n      return '0s'\n    }\n\n    return tmp.join(', ')\n  }\n\n  public static getSmartShiftMessage(mode: string, dateInterval: IntervalState): string {\n    if (!dateInterval) {\n      return '-'\n    }\n\n    const startDate = dateInterval.startDate\n    const endDate = dateInterval.endDate\n\n    switch (mode) {\n      case 'years':\n        return `1y (${startDate.year})`\n      case 'quarters':\n        return `Q${TemporalUtil.getQuarterForDate(startDate)}, ${startDate.year}`\n      case 'months':\n        return `1m (${startDate.monthCode}, ${startDate.year})`\n      case 'weeks':\n        return `1w (CW ${startDate.weekOfYear}, ${endDate.year})`\n      case 'days':\n        return `${startDate.until(endDate).days}d`\n      case 'time':\n        return `${this.getDeltaHumanReadable(dateInterval)}`\n      default:\n        return `${startDate.until(endDate).days}d`\n    }\n  }\n\n  public static isTimeSetAndNotMidnight(time: Temporal.PlainTime): boolean {\n    if (!time) {\n      return false\n    }\n    if (time.hour === 0 && time.minute === 0 && time.second === 0) {\n      return false\n    }\n    return true\n  }\n\n  public static setMillisecondsToZero(interval: IntervalState): IntervalState {\n    return new IntervalState(\n      interval.startDate,\n      interval.endDate,\n      interval.startTime.with({ millisecond: 0, microsecond: 0, nanosecond: 0 }),\n      interval.endTime.with({ millisecond: 0, microsecond: 0, nanosecond: 0 })\n    )\n  }\n\n  public static roundUpToSeconds<T extends Temporal.PlainTime | Temporal.PlainDateTime>(\n    time: T\n  ): T {\n    return time.with({\n      second: time.second + 1,\n      millisecond: 0,\n      microsecond: 0,\n      nanosecond: 0,\n    }) as T\n  }\n\n  public static updateMatCalendarActiveDate(\n    calendarStart: MatCalendar<Date> | undefined,\n    calendarEnd: MatCalendar<Date> | undefined,\n    startDate: Temporal.PlainDate,\n    endDate: Temporal.PlainDate\n  ): void {\n    if (!calendarStart || !calendarEnd) {\n      return\n    }\n\n    if (!startDate && !endDate) {\n      return\n    }\n\n    setTimeout(() => {\n      // timeout is needed to run calendar update last, otherwise there are issues\n      if (startDate) {\n        calendarStart.activeDate = TemporalUtil.getJSDateFromPlainDateTime(startDate)\n      }\n\n      if (endDate) {\n        calendarEnd.activeDate = TemporalUtil.getJSDateFromPlainDateTime(endDate)\n      }\n    }, 0)\n  }\n\n  public static updateMatCalendarTodayDate(\n    calendarStart: MatCalendar<Date> | undefined,\n    calendarEnd: MatCalendar<Date> | undefined\n  ): void {\n    if (!calendarStart || !calendarEnd) {\n      return\n    }\n\n    calendarStart.updateTodaysDate()\n    calendarEnd.updateTodaysDate()\n  }\n}\n","import { Temporal } from '@js-temporal/polyfill'\nimport { TemporalUtil } from '../../../../common/time/temporal-util'\nimport IntervalPickerUtil from '../util/interval-picker-util'\n\nexport default class AnchorState {\n  constructor(\n    public readonly fixedDate: Temporal.PlainDate,\n    public readonly fixedTime: Temporal.PlainTime = Temporal.PlainTime.from('00:00'),\n    public readonly referenceDateTime: Temporal.PlainDateTime = IntervalPickerUtil.roundUpToSeconds(\n      Temporal.Now.plainDateTimeISO()\n    )\n  ) {}\n\n  public static createFromDateTime(dateTime: Temporal.PlainDateTime): AnchorState {\n    return new AnchorState(dateTime.toPlainDate(), dateTime.toPlainTime())\n  }\n\n  public static createFromJsDate(date: Date): AnchorState {\n    const dateTime = TemporalUtil.getPlainDateTimeFromJSDate(date)\n    return new AnchorState(dateTime.toPlainDate(), dateTime.toPlainTime())\n  }\n\n  public static empty(): AnchorState {\n    return new AnchorState(null)\n  }\n\n  public withDate(date: Temporal.PlainDate): AnchorState {\n    return new AnchorState(date, this.fixedTime)\n  }\n\n  public withTime(time: Temporal.PlainTime): AnchorState {\n    return new AnchorState(this.fixedDate, time)\n  }\n\n  public withTimeMidnight(): AnchorState {\n    return new AnchorState(this.fixedDate, Temporal.PlainTime.from('00:00'))\n  }\n\n  public withReferenceDateTimeNow(): AnchorState {\n    return new AnchorState(\n      this.fixedDate,\n      this.fixedTime,\n      IntervalPickerUtil.roundUpToSeconds(Temporal.Now.plainDateTimeISO())\n    )\n  }\n\n  public get fixedDateTime(): Temporal.PlainDateTime {\n    if (!this.fixedDate) {\n      return null\n    }\n    return IntervalPickerUtil.createTemporalDateTime(this.fixedDate, this.fixedTime)\n  }\n\n  public get isFixed(): boolean {\n    return this.fixedDate !== null\n  }\n\n  public get date(): Temporal.PlainDate {\n    return this.fixedDate || this.referenceDateTime.toPlainDate()\n  }\n\n  public get time(): Temporal.PlainTime {\n    return this.fixedTime || this.referenceDateTime.toPlainTime()\n  }\n\n  public get dateTime(): Temporal.PlainDateTime {\n    return this.fixedDateTime || this.referenceDateTime\n  }\n\n  public get isTimeMidnight(): boolean {\n    return this.fixedTime.hour === 0 && this.fixedTime.minute === 0 && this.fixedTime.second === 0\n  }\n}\n","import IntervalPickerStateManager from '../manager/interval-picker-state-manager'\nimport AnchorState from '../model/anchor-state'\n\nexport default class IntervalAnchorController {\n  constructor(private manager: IntervalPickerStateManager) {}\n\n  public resetAnchor(): void {\n    this.manager.setAnchor(AnchorState.empty())\n  }\n\n  public resetAnchorTime(): void {\n    this.manager.setAnchor(this.manager.anchorValue.withTimeMidnight())\n  }\n\n  public setFixedAnchorPointToStartDateTime(): void {\n    const startDateTime = this.manager.intervalValue?.startDateTime\n    this.manager.setAnchor(AnchorState.createFromDateTime(startDateTime))\n  }\n\n  public setFixedAnchorPointToEndDateTime(): void {\n    const endDateTime = this.manager.intervalValue?.endDateTime\n    this.manager.setAnchor(AnchorState.createFromDateTime(endDateTime))\n  }\n}\n","import { TemporalUtil } from '../../../../common/time/temporal-util'\nimport IntervalPickerStateManager from '../manager/interval-picker-state-manager'\nimport IntervalState from '../model/interval-state'\n\nexport default class IntervalCalendarController {\n  constructor(private manager: IntervalPickerStateManager) {}\n\n  public setStartDateFromJSDate(date: Date): void {\n    const startDate = TemporalUtil.getPlainDateFromJSDate(date)\n\n    if (!this.manager.intervalValue) {\n      this.manager.setInterval(new IntervalState(startDate, null))\n      return\n    }\n\n    this.manager.setInterval(this.manager.intervalValue.withStartDate(startDate))\n  }\n\n  public setEndDateFromJSDate(date: Date): void {\n    const endDate = TemporalUtil.getPlainDateFromJSDate(date)\n\n    if (!this.manager.intervalValue) {\n      this.manager.setInterval(new IntervalState(null, endDate))\n      return\n    }\n\n    this.manager.setInterval(this.manager.intervalValue.withEndDate(endDate))\n  }\n}\n","import { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Temporal } from '@js-temporal/polyfill'\nimport { TemporalUtil } from '../../../../common/time/temporal-util'\nimport IntervalPickerStateManager from '../manager/interval-picker-state-manager'\nimport IntervalState from '../model/interval-state'\n\nexport default class IntervalFormController {\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  constructor(private manager: IntervalPickerStateManager) {}\n\n  public setStartDateFromString(htmlString: string): void {\n    try {\n      const plainDate = TemporalUtil.getPlainDateFromHtmlDateString(htmlString)\n      const endDate = this.manager.intervalValue?.endDate || plainDate.add({ days: 1 })\n      this.manager.setInterval(new IntervalState(plainDate, endDate))\n    } catch (e) {\n      this.log.warn('Incorrect date / time anchor form input. Could not set anchor.', htmlString)\n    }\n  }\n\n  public setEndDateFromString(htmlString: string): void {\n    try {\n      const plainDate = TemporalUtil.getPlainDateFromHtmlDateString(htmlString)\n      const startDate = this.manager.intervalValue?.startDate || plainDate.subtract({ days: 1 })\n      this.manager.setInterval(new IntervalState(startDate, plainDate))\n    } catch (e) {\n      this.log.warn('Incorrect date / time anchor form input. Could not set anchor.', htmlString)\n    }\n  }\n\n  public setAnchorDateFromString(htmlString: string): void {\n    try {\n      const plainDate = TemporalUtil.getPlainDateFromHtmlDateString(htmlString)\n      this.manager.setAnchor(this.manager.anchorValue.withDate(plainDate))\n    } catch (e) {\n      this.log.warn('Incorrect date / time anchor form input. Could not set anchor.', htmlString)\n    }\n  }\n\n  public setAnchorTimeFromString(htmlString: string): void {\n    try {\n      const plainTime = TemporalUtil.getPlainTimeFromHtmlTimeString(htmlString)\n      this.manager.setAnchor(this.manager.anchorValue.withTime(plainTime))\n    } catch (e) {\n      this.log.warn('Incorrect date / time anchor form input. Could not set anchor.', htmlString)\n    }\n  }\n\n  public setStartTimeFromString(timeStr: string): void {\n    try {\n      const startTime = TemporalUtil.getPlainTimeFromHtmlTimeString(timeStr)\n      const startDate = this.manager.intervalValue?.startDate || Temporal.Now.plainDateISO()\n      this.manager.setInterval(\n        new IntervalState(\n          startDate,\n          this.manager.intervalValue?.endDate || null,\n          startTime,\n          this.manager.intervalValue?.endTime || null\n        )\n      )\n    } catch (e) {\n      this.log.warn('Incorrect date / time form input. Could not set new Interval.', timeStr, e)\n    }\n  }\n\n  public setEndTimeFromString(timeStr: string): void {\n    try {\n      const endTime = TemporalUtil.getPlainTimeFromHtmlTimeString(timeStr)\n      const endDate = this.manager.intervalValue?.endDate || Temporal.Now.plainDateISO()\n      this.manager.setInterval(\n        new IntervalState(\n          this.manager.intervalValue?.startDate || null,\n          endDate,\n          this.manager.intervalValue?.startTime || null,\n          endTime\n        )\n      )\n    } catch (e) {\n      this.log.warn('Incorrect date / time form input. Could not set new Interval.', timeStr)\n    }\n  }\n}\n","import { Temporal } from '@js-temporal/polyfill'\n\nexport type SmartShiftMode = 'days' | 'weeks' | 'months' | 'quarters' | 'years' | 'time'\n\nexport default class SmartShiftState {\n  constructor(\n    public duration: Temporal.Duration,\n    public mode: SmartShiftMode\n  ) {}\n\n  public static empty(): SmartShiftState {\n    return new SmartShiftState(null, null)\n  }\n}\n","import { Temporal } from '@js-temporal/polyfill'\nimport { TemporalUtil } from '../../../../common/time/temporal-util'\nimport IntervalPickerStateManager from '../manager/interval-picker-state-manager'\nimport IntervalState from '../model/interval-state'\nimport SmartShiftState, { SmartShiftMode } from '../model/smart-shift-state'\n\nexport default class IntervalSelectController {\n  constructor(private manager: IntervalPickerStateManager) {}\n\n  private refreshAnchor(): void {\n    this.manager.setAnchor(this.manager.anchorValue.withReferenceDateTimeNow())\n  }\n\n  private setSmartShiftState(duration: Temporal.Duration, mode: SmartShiftMode): void {\n    this.manager.setSmartShift(new SmartShiftState(duration, mode))\n  }\n\n  public selectCurrentDay(): void {\n    this.refreshAnchor()\n    const endDate = this.manager.anchorValue.date.add({ days: 1 })\n    const startDate = endDate.subtract({ days: 1 })\n    this.manager.setInterval(new IntervalState(startDate, endDate))\n    this.setSmartShiftState(Temporal.Duration.from({ days: 1 }), 'days')\n  }\n\n  public selectYesterday(): void {\n    this.refreshAnchor()\n    const endDate = this.manager.anchorValue.date\n    const startDate = endDate.subtract({ days: 1 })\n    this.manager.setInterval(new IntervalState(startDate, endDate))\n    this.setSmartShiftState(Temporal.Duration.from({ days: 1 }), 'days')\n  }\n\n  public selectLastSevenDaysExcludingToday(): void {\n    this.refreshAnchor()\n    const endDate = this.manager.anchorValue.date\n    const startDate = endDate.subtract({ days: 7 })\n    this.manager.setInterval(new IntervalState(startDate, endDate))\n    this.setSmartShiftState(Temporal.Duration.from({ days: 7 }), 'days')\n  }\n\n  public selectLastSevenDaysIncludingToday(): void {\n    this.refreshAnchor()\n    const endDate = this.manager.anchorValue.date.add({ days: 1 })\n    const startDate = endDate.subtract({ days: 7 })\n    this.manager.setInterval(new IntervalState(startDate, endDate))\n    this.setSmartShiftState(Temporal.Duration.from({ days: 7 }), 'days')\n  }\n\n  public selectLastThirtyDaysExcludingToday(): void {\n    this.refreshAnchor()\n    const endDate = this.manager.anchorValue.date\n    const startDate = endDate.subtract({ days: 30 })\n    this.manager.setInterval(new IntervalState(startDate, endDate))\n    this.setSmartShiftState(Temporal.Duration.from({ days: 30 }), 'days')\n  }\n\n  public selectLastThirtyDaysIncludingToday(): void {\n    this.refreshAnchor()\n    const endDate = this.manager.anchorValue.date.add({ days: 1 })\n    const startDate = endDate.subtract({ days: 30 })\n    this.manager.setInterval(new IntervalState(startDate, endDate))\n    this.setSmartShiftState(Temporal.Duration.from({ days: 30 }), 'days')\n  }\n\n  public selectLast365daysExcludingToday(): void {\n    this.refreshAnchor()\n    const endDate = this.manager.anchorValue.date\n    const startDate = endDate.subtract({ days: 365 })\n    this.manager.setInterval(new IntervalState(startDate, endDate))\n    this.setSmartShiftState(Temporal.Duration.from({ days: 365 }), 'days')\n  }\n\n  public selectLast365daysIncludingToday(): void {\n    this.refreshAnchor()\n    const endDate = this.manager.anchorValue.date.add({ days: 1 })\n    const startDate = endDate.subtract({ days: 365 })\n    this.manager.setInterval(new IntervalState(startDate, endDate))\n    this.setSmartShiftState(Temporal.Duration.from({ days: 365 }), 'days')\n  }\n\n  public selectLastFiveMinutes(): void {\n    this.refreshAnchor()\n    const anchorDateTime = this.manager.anchorValue.dateTime\n    const startDateTime = anchorDateTime.subtract({ minutes: 5 })\n    this.manager.setInterval(IntervalState.createFromDateTimes(startDateTime, anchorDateTime))\n    this.setSmartShiftState(Temporal.Duration.from({ minutes: 5 }), 'time')\n  }\n\n  public selectLastHour(): void {\n    this.refreshAnchor()\n    const anchorDateTime = this.manager.anchorValue.dateTime\n    const startDateTime = anchorDateTime.subtract({ hours: 1 })\n    this.manager.setInterval(IntervalState.createFromDateTimes(startDateTime, anchorDateTime))\n    this.setSmartShiftState(Temporal.Duration.from({ hours: 1 }), 'time')\n  }\n\n  public selectLast24Hours(): void {\n    this.refreshAnchor()\n    const anchorDateTime = this.manager.anchorValue.dateTime\n    const startDateTime = anchorDateTime.subtract({ hours: 24 })\n    this.manager.setInterval(IntervalState.createFromDateTimes(startDateTime, anchorDateTime))\n    this.setSmartShiftState(Temporal.Duration.from({ hours: 24 }), 'time')\n  }\n\n  public selectCurrentWeek(): void {\n    this.refreshAnchor()\n    const range = TemporalUtil.getCurrentWeek(this.manager.anchorValue.date)\n    this.manager.setInterval(new IntervalState(range.start, range.end))\n    this.setSmartShiftState(Temporal.Duration.from({ days: 7 }), 'weeks')\n  }\n\n  public selectCurrentMonth(): void {\n    this.refreshAnchor()\n    const range = TemporalUtil.getCurrentMonth(this.manager.anchorValue.date)\n    this.manager.setInterval(new IntervalState(range.start, range.end))\n    this.setSmartShiftState(Temporal.Duration.from({ months: 1 }), 'months')\n  }\n\n  public selectCurrentQuarter(): void {\n    this.refreshAnchor()\n    const range = TemporalUtil.getCurrentQuarter(this.manager.anchorValue.date)\n    this.manager.setInterval(new IntervalState(range.start, range.end))\n    this.setSmartShiftState(Temporal.Duration.from({ months: 3 }), 'quarters')\n  }\n\n  public selectCurrentYear(): void {\n    this.refreshAnchor()\n    const range = TemporalUtil.getCurrentYear(this.manager.anchorValue.date)\n    this.manager.setInterval(new IntervalState(range.start, range.end))\n    this.setSmartShiftState(Temporal.Duration.from({ years: 1 }), 'years')\n  }\n}\n","import { LoggerFactory } from '@elderbyte/ts-logger'\nimport IntervalPickerStateManager from '../manager/interval-picker-state-manager'\nimport IntervalState from '../model/interval-state'\n\nexport default class IntervalShiftController {\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  constructor(private manager: IntervalPickerStateManager) {}\n\n  public shiftDay(days: number): void {\n    this.manager.setInterval(\n      new IntervalState(\n        this.manager.intervalValue.startDate.add({ days }),\n        this.manager.intervalValue.endDate.add({ days }),\n        this.manager.intervalValue.startTime,\n        this.manager.intervalValue.endTime\n      )\n    )\n  }\n\n  public shiftWeek(weeks: number): void {\n    this.manager.setInterval(\n      new IntervalState(\n        this.manager.intervalValue.startDate.add({ weeks }),\n        this.manager.intervalValue.endDate.add({ weeks }),\n        this.manager.intervalValue.startTime,\n        this.manager.intervalValue.endTime\n      )\n    )\n  }\n\n  public shiftMonth(months: number): void {\n    this.manager.setInterval(\n      new IntervalState(\n        this.manager.intervalValue.startDate.add({ months }),\n        this.manager.intervalValue.endDate.add({ months }),\n        this.manager.intervalValue.startTime,\n        this.manager.intervalValue.endTime\n      )\n    )\n  }\n\n  public shiftYear(years: number): void {\n    this.manager.setInterval(\n      new IntervalState(\n        this.manager.intervalValue.startDate.add({ years }),\n        this.manager.intervalValue.endDate.add({ years }),\n        this.manager.intervalValue.startTime,\n        this.manager.intervalValue.endTime\n      )\n    )\n  }\n\n  public shiftMinute(minutes: number): void {\n    const newInterval = new IntervalState(\n      this.manager.intervalValue.startDate,\n      this.manager.intervalValue.endDate,\n      this.manager.intervalValue.startTime?.add({ minutes }),\n      this.manager.intervalValue.endTime?.add({ minutes })\n    )\n    this.manager.setInterval(newInterval)\n  }\n\n  public shiftHour(hours: number): void {\n    const newInterval = new IntervalState(\n      this.manager.intervalValue.startDate,\n      this.manager.intervalValue.endDate,\n      this.manager.intervalValue.startTime?.add({ hours: hours }),\n      this.manager.intervalValue.endTime?.add({ hours: hours })\n    )\n    this.manager.setInterval(newInterval)\n  }\n\n  public smartShift(direction = 1): void {\n    const state = this.manager.smartShiftValue\n    if (!state.duration) {\n      this.log.warn('Cannot smart shift without a duration!')\n      return\n    }\n\n    const duration = state.duration\n\n    const interval = this.manager.intervalValue\n\n    const newStartDateTime =\n      direction === 1\n        ? interval.startDateTime.add(duration)\n        : interval.startDateTime.subtract(duration)\n    const newEndDateTime =\n      direction === 1 ? interval.endDateTime.add(duration) : interval.endDateTime.subtract(duration)\n\n    const newInterval = IntervalState.createFromDateTimes(newStartDateTime, newEndDateTime)\n\n    this.manager.setInterval(newInterval)\n  }\n}\n","import { LoggerFactory } from '@elderbyte/ts-logger'\nimport IntervalPickerStateManager from '../manager/interval-picker-state-manager'\nimport IntervalAnchorController from './interval-anchor-controller'\nimport IntervalCalendarController from './interval-calendar-controller'\nimport IntervalFormController from './interval-form-controller'\nimport IntervalSelectController from './interval-select-controller'\nimport IntervalShiftController from './interval-shift-controller'\nexport default class IntervalController {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n  public readonly select: IntervalSelectController\n  public readonly shift: IntervalShiftController\n  public readonly form: IntervalFormController\n  public readonly calendar: IntervalCalendarController\n  public readonly anchor: IntervalAnchorController\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private manager: IntervalPickerStateManager) {\n    this.select = new IntervalSelectController(manager)\n    this.shift = new IntervalShiftController(manager)\n    this.form = new IntervalFormController(manager)\n    this.calendar = new IntervalCalendarController(manager)\n    this.anchor = new IntervalAnchorController(manager)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public clearInterval(): void {\n    this.manager.setInterval(null)\n  }\n\n  public clearEndTime(): void {\n    this.manager.setInterval(this.manager.intervalValue.withEndTime(null))\n  }\n\n  public clearStartTime(): void {\n    this.manager.setInterval(this.manager.intervalValue.withStartTime(null))\n  }\n\n  public manualEmit(): void {}\n}\n","import { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Temporal } from '@js-temporal/polyfill'\nimport { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport AnchorState from '../model/anchor-state'\nimport IntervalState from '../model/interval-state'\nimport SmartShiftState from '../model/smart-shift-state'\nimport IntervalPickerUtil from '../util/interval-picker-util'\n\nexport default class IntervalPickerStateManager {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _anchor = new BehaviorSubject<AnchorState>(AnchorState.empty())\n  private readonly _interval = new BehaviorSubject<IntervalState>(null)\n  private readonly _smartShift = new BehaviorSubject<SmartShiftState>(null)\n  private readonly _intervalChange = new Subject<IntervalState>()\n  public isInitialized = false\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get interval$(): Observable<IntervalState> {\n    return this._interval.asObservable()\n  }\n\n  public get anchor$(): Observable<AnchorState> {\n    return this._anchor.asObservable()\n  }\n\n  public get smartShift$(): Observable<SmartShiftState> {\n    return this._smartShift.asObservable()\n  }\n\n  public get intervalValue(): IntervalState {\n    return this._interval.getValue()\n  }\n\n  public get anchorValue(): AnchorState {\n    return this._anchor.getValue()\n  }\n\n  public get smartShiftValue(): SmartShiftState {\n    return this._smartShift.getValue()\n  }\n\n  public get intervalChange(): Observable<IntervalState> {\n    return this._intervalChange.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public setAnchor(anchor: AnchorState): void {\n    this._anchor.next(anchor)\n  }\n\n  public setExternalAnchor(TemporalDateTime: Temporal.PlainDateTime): void {\n    if (!TemporalDateTime) {\n      this.setAnchor(AnchorState.empty())\n      return\n    }\n    this.setAnchor(AnchorState.createFromDateTime(TemporalDateTime))\n  }\n\n  public setExternalInterval(interval: IntervalState): void {\n    if (!interval) {\n      this.setInterval(new IntervalState(null, null))\n      return\n    }\n    if (!interval) {\n      this.setInterval(new IntervalState(null, null))\n      return\n    }\n    this.setInterval(interval)\n  }\n\n  public setSmartShift(smartShift: SmartShiftState): void {\n    this._smartShift.next(smartShift)\n  }\n\n  public setInterval(interval: IntervalState): void {\n    if (!this.isInitialized && !interval) {\n      return\n    }\n\n    if (\n      this._interval.getValue() &&\n      IntervalPickerUtil.isIntervalEquals(this._interval.getValue(), interval)\n    ) {\n      return\n    }\n\n    const newInterval = interval ? IntervalPickerUtil.setMillisecondsToZero(interval) : null\n\n    this._interval.next(newInterval)\n    this._intervalChange.next(newInterval)\n  }\n}\n","import { computed, Signal } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { DateRange, MatCalendarCellClassFunction } from '@angular/material/datepicker'\nimport { Observable } from 'rxjs'\nimport { TemporalUtil } from '../../../../common/time/temporal-util'\nimport AnchorState from '../model/anchor-state'\nimport IntervalState from '../model/interval-state'\nimport SmartShiftState from '../model/smart-shift-state'\nimport IntervalPickerUtil from '../util/interval-picker-util'\n\nexport default class IntervalPickerPresenter {\n  private readonly intervalState: Signal<IntervalState>\n  private readonly anchorState: Signal<AnchorState>\n  private readonly smartShiftState: Signal<SmartShiftState>\n\n  constructor(\n    interval$: Observable<IntervalState>,\n    anchor$: Observable<AnchorState>,\n    smartShift$: Observable<SmartShiftState>\n  ) {\n    this.intervalState = toSignal(interval$)\n    this.anchorState = toSignal(anchor$)\n    this.smartShiftState = toSignal(smartShift$)\n  }\n\n  public readonly startDateHtmlString = computed<string>(() => {\n    return TemporalUtil.getHtmlDateString(this.intervalState()?.startDate)\n  })\n\n  public readonly endDateHtmlString = computed<string>(() => {\n    return TemporalUtil.getHtmlDateString(this.intervalState()?.endDate)\n  })\n\n  public readonly anchorDateHtmlString = computed<string>(() => {\n    return TemporalUtil.getHtmlDateString(this.anchorState()?.fixedDate)\n  })\n\n  public readonly startTimeHtmlString = computed<string>(() => {\n    return TemporalUtil.getHtmlTimeStringFromPlainTime(this.intervalState()?.startTime)\n  })\n\n  public readonly endTimeHtmlString = computed<string>(() => {\n    return TemporalUtil.getHtmlTimeStringFromPlainTime(this.intervalState()?.endTime)\n  })\n\n  public readonly anchorTimeHtmlString = computed<string>(() => {\n    return TemporalUtil.getHtmlTimeStringFromPlainTime(this.anchorState()?.fixedTime)\n  })\n\n  public readonly isValidIntervalSet = computed<boolean>(() => {\n    return IntervalPickerUtil.isIntervalWithStartAndEnd(this.intervalState())\n  })\n\n  public readonly deltaHumanReadable = computed<string>(() => {\n    return IntervalPickerUtil.getDeltaHumanReadable(this.intervalState())\n  })\n\n  public readonly smartShiftMessage = computed<string>(() => {\n    try {\n      return IntervalPickerUtil.getSmartShiftMessage(\n        this.smartShiftState().mode,\n        this.intervalState()\n      )\n    } catch (e) {\n      return '-'\n    }\n  })\n\n  public readonly startDateTimeAsJSDate = computed<Date | null>(() => {\n    if (!this.intervalState()?.startDateTime) {\n      return null\n    }\n\n    return TemporalUtil.getJSDateFromPlainDateTime(this.intervalState()?.startDateTime)\n  })\n\n  public readonly endDateTimeAsJSDate = computed<Date | null>(() => {\n    if (!this.intervalState()?.endDateTime) {\n      return null\n    }\n\n    return TemporalUtil.getJSDateFromPlainDateTime(this.intervalState()?.endDateTime)\n  })\n\n  public readonly dateRangeForCalendar = computed<DateRange<Date>>(() => {\n    const start = this.startDateTimeAsJSDate()\n    const end = this.endDateTimeAsJSDate()\n    return new DateRange<Date>(start, end)\n  })\n\n  public readonly isStartTimeSetAndNotMidnight = computed<boolean>(() => {\n    return IntervalPickerUtil.isTimeSetAndNotMidnight(this.intervalState()?.startTime)\n  })\n\n  public readonly isEndTimeSetAndNotMidnight = computed<boolean>(() => {\n    return IntervalPickerUtil.isTimeSetAndNotMidnight(this.intervalState()?.endTime)\n  })\n\n  public readonly isFixedAnchorDateSet = computed<boolean>(() => {\n    return this.anchorState().isFixed\n  })\n\n  public readonly isAnchorTimeMidnight = computed<boolean>(() => {\n    return this.anchorState().isTimeMidnight\n  })\n\n  public readonly isAnchorMenuDisabled = computed<boolean>(() => {\n    return !this.startDateHtmlString() && !this.endDateHtmlString() && !this.anchorState().isFixed\n  })\n\n  public readonly calendarAnchorDateCssClassFn: MatCalendarCellClassFunction<Date> = (\n    cellDate: Date,\n    view: string\n  ): string => {\n    const calendarAnchorDateCssClassFnBody = (cellDate: Date, view: string): string => {\n      const anchorDate = this.anchorState()?.fixedDate\n\n      if (!anchorDate) {\n        return ''\n      }\n\n      const date = TemporalUtil.getJSDateFromPlainDateTime(anchorDate)\n\n      if (!date) {\n        return ''\n      }\n\n      if (\n        cellDate.getDate() === date.getDate() &&\n        cellDate.getMonth() === date.getMonth() &&\n        cellDate.getFullYear() === date.getFullYear()\n      ) {\n        return 'elder-custom-anchor-date'\n      }\n\n      return ''\n    }\n\n    return calendarAnchorDateCssClassFnBody(cellDate, view)\n  }\n}\n","import { CommonModule } from '@angular/common'\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  input,\n  Output,\n  ViewChild,\n} from '@angular/core'\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop'\nimport { FormsModule } from '@angular/forms'\nimport { MatButtonModule } from '@angular/material/button'\nimport { DateAdapter } from '@angular/material/core'\nimport { MatCalendar, MatDatepickerModule } from '@angular/material/datepicker'\nimport { MatFormFieldModule, MatLabel } from '@angular/material/form-field'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatInputModule } from '@angular/material/input'\nimport { MatMenuModule } from '@angular/material/menu'\n\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Temporal } from '@js-temporal/polyfill'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { map, Observable } from 'rxjs'\nimport { coerceInterval, coerceIntervalIsoStr } from '../../../common/public_api'\nimport { Interval, IsoIntervalStr } from '../../../common/time/interval'\nimport { booleanTransformFn } from '../../../common/utils/signal-input'\nimport { CustomDateAdapter } from '../date-adapters/custom-date-adapter'\nimport { IntervalInputMode } from '../elder-interval-input/elder-interval-input.component'\nimport IntervalController from './controller/interval-controller'\nimport IntervalPickerStateManager from './manager/interval-picker-state-manager'\nimport IntervalState from './model/interval-state'\nimport IntervalPickerPresenter from './presenter/interval-picker-presenter'\nimport IntervalPickerUtil from './util/interval-picker-util'\n\n@Component({\n  selector: 'elder-interval-picker',\n  imports: [\n    MatDatepickerModule,\n    MatFormFieldModule,\n    MatLabel,\n    MatInputModule,\n    CommonModule,\n    MatIconModule,\n    FormsModule,\n    MatButtonModule,\n    MatCalendar,\n    TranslateModule,\n    MatMenuModule,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  templateUrl: './elder-interval-picker.component.html',\n  styleUrl: './elder-interval-picker.component.scss',\n  providers: [{ provide: DateAdapter, useClass: CustomDateAdapter }],\n})\nexport class ElderIntervalPickerComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  // Private\n  private readonly manager: IntervalPickerStateManager\n\n  // Public\n  public readonly controller: IntervalController\n  public readonly presenter: IntervalPickerPresenter\n\n  @Output()\n  public readonly intervalChange: Observable<Interval | IsoIntervalStr | null>\n\n  public readonly emitType = input<'interval' | 'iso'>('interval')\n  public readonly autoEmitMode = input(true, { transform: booleanTransformFn })\n  public readonly intervalInputMode = input<IntervalInputMode>('date-time-range')\n  public readonly showAnchor = input(false, { transform: booleanTransformFn })\n  public readonly anchorReadOnly = input(false, { transform: booleanTransformFn })\n  public readonly externalAnchorDateTime = input<Temporal.PlainDateTime | null>(\n    Temporal.Now.plainDateTimeISO()\n  )\n  public readonly externalInterval = input<Interval | IsoIntervalStr | null>(null)\n\n  @ViewChild('rangeCalendarStart') calendarStart!: MatCalendar<Date>\n  @ViewChild('rangeCalendarEnd') calendarEnd!: MatCalendar<Date>\n\n  @ViewChild('rangeCalendarStart', { read: ElementRef }) calendarStartElRef!: ElementRef\n  @ViewChild('rangeCalendarEnd', { read: ElementRef }) calendarEndElRef!: ElementRef\n\n  @ViewChild('startDateInput') startDateInput!: ElementRef\n  @ViewChild('endDateInput') endDateInput!: ElementRef\n\n  private calendarElFocusEventHandler: (event: FocusEvent) => void\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this.manager = new IntervalPickerStateManager()\n    this.controller = new IntervalController(this.manager)\n    this.presenter = new IntervalPickerPresenter(\n      this.manager.interval$,\n      this.manager.anchor$,\n      this.manager.smartShift$\n    )\n\n    this.manager.intervalChange.pipe(takeUntilDestroyed()).subscribe({\n      next: (state) => this.tryUpdateMatCalendarActiveDate(state),\n    })\n\n    this.intervalChange = this.manager.intervalChange.pipe(\n      map((srcInterval: any) => {\n        if (!srcInterval) {\n          return null\n        }\n\n        const elderInterval = IntervalPickerUtil.createElderInterval(srcInterval)\n\n        if (this.emitType() === 'iso') {\n          this.log.debug('emitting type iso', coerceIntervalIsoStr(elderInterval))\n          return coerceIntervalIsoStr(elderInterval)\n        }\n\n        this.log.debug('emitting type elder interval', elderInterval)\n        return elderInterval\n      })\n    )\n\n    this.manager.anchor$.pipe(takeUntilDestroyed()).subscribe((anchor) => {\n      IntervalPickerUtil.updateMatCalendarTodayDate(this.calendarStart, this.calendarEnd)\n    })\n\n    const externalAnchorObservable = toObservable(this.externalAnchorDateTime)\n    externalAnchorObservable.pipe(takeUntilDestroyed()).subscribe({\n      next: (date) => {\n        this.manager.setExternalAnchor(date)\n      },\n    })\n\n    const externalIntervalObservable = toObservable(this.externalInterval)\n    externalIntervalObservable.pipe(takeUntilDestroyed()).subscribe({\n      next: (interval: any) => {\n        const result = coerceInterval(interval)\n        this.manager.setInterval(IntervalPickerUtil.transformToIntervalState(result || null))\n      },\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  ngAfterViewInit(): void {\n    this.setupDateInputCalendarFocusPrevention()\n\n    setTimeout(() => {\n      // this prevents ngmodel issue\n      this.manager.isInitialized = true\n      this.log.debug('externalInterval', this.externalInterval())\n    }, 0)\n  }\n\n  ngOnDestroy(): void {\n    this.removeEventListeners()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private setupDateInputCalendarFocusPrevention(): void {\n    // Prevents the focus on the calendar when the input field is changed via the keyboard\n    this.calendarElFocusEventHandler = (event: FocusEvent): void => {\n      if (!event || !event.relatedTarget) {\n        return\n      }\n      event.preventDefault()\n      const relTarget = event.relatedTarget as HTMLInputElement\n\n      if (relTarget.name === 'startDateInput') {\n        this.startDateInput.nativeElement.focus()\n        return\n      }\n      if (relTarget.name === 'endDateInput') {\n        this.endDateInput.nativeElement.focus()\n        return\n      }\n    }\n\n    const nativeElementStart = this.calendarStartElRef.nativeElement as HTMLElement\n    const nativeElementEnd = this.calendarEndElRef.nativeElement as HTMLElement\n\n    nativeElementStart.addEventListener('focus', this.calendarElFocusEventHandler, true)\n    nativeElementEnd.addEventListener('focus', this.calendarElFocusEventHandler, true)\n  }\n\n  private removeEventListeners(): void {\n    if (!this.calendarStartElRef || !this.calendarEndElRef) {\n      return\n    }\n\n    if (!this.calendarStartElRef.nativeElement || !this.calendarEndElRef.nativeElement) {\n      return\n    }\n\n    const nativeElementStart = this.calendarStartElRef.nativeElement as HTMLElement\n    const nativeElementEnd = this.calendarEndElRef.nativeElement as HTMLElement\n\n    nativeElementStart.removeEventListener('focus', this.calendarElFocusEventHandler, true)\n    nativeElementEnd.removeEventListener('focus', this.calendarElFocusEventHandler, true)\n  }\n\n  private tryUpdateMatCalendarActiveDate(interval: IntervalState): void {\n    try {\n      IntervalPickerUtil.updateMatCalendarActiveDate(\n        this.calendarStart,\n        this.calendarEnd,\n        interval.startDate,\n        interval.endDate\n      )\n    } catch (e) {\n      this.log.debug('Failed to update calendar active date', e)\n    }\n  }\n}\n","<div class=\"interval-picker-component p-md layout-col gap-xxl\">\n  <div class=\"layout-row gap-xxl place-between-start\" style=\"gap: 5%\">\n    <div class=\"layout-col gap-md pt-xs\">\n      <div class=\"layout-col\">\n        <div class=\"layout-row select-buttons-container gap-sm\">\n          <div class=\"layout-col gap-xs place-start-stretch\">\n            <button mat-button type=\"button\" (click)=\"controller.select.selectCurrentDay()\">\n              @if (presenter.isFixedAnchorDateSet()) {\n                {{ 'intervalPicker.anchorDay' | translate }}\n              } @else {\n                {{ 'intervalPicker.today' | translate }}\n              }\n            </button>\n            <button mat-button type=\"button\" (click)=\"controller.select.selectYesterday()\">\n              @if (presenter.isFixedAnchorDateSet()) {\n                {{ 'intervalPicker.last' | translate }} 1 {{ 'intervalPicker.day' | translate }}\n              } @else {\n                {{ 'intervalPicker.yesterday' | translate }}\n              }\n            </button>\n            <button\n              mat-button\n              type=\"button\"\n              (click)=\"controller.select.selectLastSevenDaysIncludingToday()\"\n            >\n              {{ 'intervalPicker.last' | translate }} 7\n              {{ 'intervalPicker.days' | translate }}\n            </button>\n            <button\n              mat-button\n              type=\"button\"\n              (click)=\"controller.select.selectLastThirtyDaysIncludingToday()\"\n            >\n              {{ 'intervalPicker.last' | translate }} 30\n              {{ 'intervalPicker.days' | translate }}\n            </button>\n            <button\n              mat-button\n              type=\"button\"\n              (click)=\"controller.select.selectLast365daysIncludingToday()\"\n            >\n              {{ 'intervalPicker.last' | translate }} 365\n              {{ 'intervalPicker.days' | translate }}\n            </button>\n            @if (intervalInputMode() === 'date-time-range') {\n              <div class=\"pt-sm\"></div>\n              <button mat-button type=\"button\" (click)=\"controller.select.selectLastFiveMinutes()\">\n                {{ 'intervalPicker.last' | translate }} 5\n                {{ 'intervalPicker.minutes' | translate }}\n              </button>\n              <button mat-button type=\"button\" (click)=\"controller.select.selectLastHour()\">\n                {{ 'intervalPicker.last' | translate }} {{ 'intervalPicker.hour' | translate }}\n              </button>\n              <button mat-button type=\"button\" (click)=\"controller.select.selectLast24Hours()\">\n                {{ 'intervalPicker.last' | translate }} 24\n                {{ 'intervalPicker.hours' | translate }}\n              </button>\n            }\n          </div>\n        </div>\n      </div>\n    </div>\n    <div class=\"layout-col\">\n      <!-- smart shift -->\n      <div class=\"layout-row place-around-center\">\n        <button\n          type=\"button\"\n          mat-icon-button\n          (click)=\"controller.shift.smartShift(-1)\"\n          [disabled]=\"!presenter.isValidIntervalSet()\"\n        >\n          <mat-icon>keyboard_double_arrow_left</mat-icon>\n        </button>\n        <span>{{ presenter.smartShiftMessage() }}</span>\n        <button\n          type=\"button\"\n          mat-icon-button\n          (click)=\"controller.shift.smartShift(1)\"\n          [disabled]=\"!presenter.isValidIntervalSet()\"\n        >\n          <mat-icon>keyboard_double_arrow_right</mat-icon>\n        </button>\n      </div>\n      <!-- calendars and input controls -->\n      <div\n        class=\"layout-row place-around-center\"\n        style=\"align-items: flex-start; min-height: 280px\"\n      >\n        <mat-calendar\n          #rangeCalendarStart\n          style=\"width: 210px; max-width: 100%\"\n          [selected]=\"presenter.dateRangeForCalendar()\"\n          (selectedChange)=\"controller.calendar.setStartDateFromJSDate($event)\"\n          [maxDate]=\"presenter.endDateTimeAsJSDate()\"\n          [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n        >\n        </mat-calendar>\n        <mat-calendar\n          #rangeCalendarEnd\n          style=\"width: 210px; max-width: 100%\"\n          [selected]=\"presenter.dateRangeForCalendar()\"\n          (selectedChange)=\"controller.calendar.setEndDateFromJSDate($event)\"\n          [minDate]=\"presenter.startDateTimeAsJSDate()\"\n          [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n        >\n        </mat-calendar>\n      </div>\n      <div class=\"layout-row place-around-center gap-xl pt-sm\">\n        <div class=\"layout-row place-around-center\">\n          <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n            <mat-label>{{ 'intervalPicker.startDate' | translate }}</mat-label>\n            <input\n              #startDateInput\n              name=\"startDateInput\"\n              matInput\n              type=\"date\"\n              [ngModel]=\"presenter.startDateHtmlString()\"\n              (ngModelChange)=\"controller.form.setStartDateFromString($event)\"\n            />\n          </mat-form-field>\n        </div>\n        <div class=\"layout-row place-around-center\">\n          <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n            <mat-label>{{ 'intervalPicker.endDate' | translate }}</mat-label>\n            <input\n              #endDateInput\n              name=\"endDateInput\"\n              matInput\n              type=\"date\"\n              [ngModel]=\"presenter.endDateHtmlString()\"\n              (ngModelChange)=\"controller.form.setEndDateFromString($event)\"\n            />\n          </mat-form-field>\n        </div>\n      </div>\n      @if (intervalInputMode() === 'date-time-range') {\n        <div class=\"layout-row place-around-center gap-xl pt-sm\">\n          <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n            <mat-label>{{ 'intervalPicker.startTime' | translate }}</mat-label>\n            <input\n              name=\"startTimeInput\"\n              matInput\n              type=\"time\"\n              #startTimeControl=\"ngModel\"\n              step=\"1\"\n              [ngModel]=\"presenter.startTimeHtmlString()\"\n              (ngModelChange)=\"controller.form.setStartTimeFromString($event)\"\n            />\n            <button\n              type=\"button\"\n              mat-icon-button\n              matSuffix\n              (click)=\"controller.clearStartTime()\"\n              [disabled]=\"!presenter.isStartTimeSetAndNotMidnight()\"\n            >\n              <mat-icon>close</mat-icon>\n            </button>\n          </mat-form-field>\n          <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n            <mat-label>{{ 'intervalPicker.endTime' | translate }}</mat-label>\n            <input\n              name=\"endTimeInput\"\n              matInput\n              type=\"time\"\n              #endTimeControl=\"ngModel\"\n              step=\"1\"\n              [ngModel]=\"presenter.endTimeHtmlString()\"\n              (ngModelChange)=\"controller.form.setEndTimeFromString($event)\"\n            />\n            <button\n              type=\"button\"\n              mat-icon-button\n              matSuffix\n              (click)=\"controller.clearEndTime()\"\n              [disabled]=\"!presenter.isEndTimeSetAndNotMidnight()\"\n            >\n              <mat-icon>close</mat-icon>\n            </button>\n          </mat-form-field>\n        </div>\n      }\n      <br />\n    </div>\n    <div class=\"pt-xs\" style=\"width: 25%\">\n      <div class=\"layout-col gap-lg\">\n        <div class=\"layout-col gap-xs place-start-start\">\n          <!-- select current -->\n          <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentWeek()\">\n            {{ 'intervalPicker.currentPeriod.week' | translate }}\n          </button>\n          <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentMonth()\">\n            {{ 'intervalPicker.currentPeriod.month' | translate }}\n          </button>\n          <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentQuarter()\">\n            {{ 'intervalPicker.currentPeriod.quarter' | translate }}\n          </button>\n          <button type=\"button\" mat-button (click)=\"controller.select.selectCurrentYear()\">\n            {{ 'intervalPicker.currentPeriod.year' | translate }}\n          </button>\n        </div>\n        <div class=\"fixed-shifts-container\">\n          <div class=\"layout-col place-start-stretch\">\n            <div class=\"layout-row place-between-center\">\n              <button\n                type=\"button\"\n                mat-icon-button\n                (click)=\"controller.shift.shiftDay(-1)\"\n                [disabled]=\"!presenter.isValidIntervalSet()\"\n              >\n                <mat-icon>keyboard_double_arrow_left</mat-icon>\n              </button>\n              <span>{{ 'intervalPicker.day' | translate }}</span>\n              <button\n                type=\"button\"\n                mat-icon-button\n                (click)=\"controller.shift.shiftDay(1)\"\n                [disabled]=\"!presenter.isValidIntervalSet()\"\n              >\n                <mat-icon>keyboard_double_arrow_right</mat-icon>\n              </button>\n            </div>\n            <div class=\"layout-row place-between-center\">\n              <button\n                type=\"button\"\n                mat-icon-button\n                (click)=\"controller.shift.shiftMonth(-1)\"\n                [disabled]=\"!presenter.isValidIntervalSet()\"\n              >\n                <mat-icon>keyboard_double_arrow_left</mat-icon>\n              </button>\n              <span>{{ 'intervalPicker.month' | translate }}</span>\n              <button\n                type=\"button\"\n                mat-icon-button\n                (click)=\"controller.shift.shiftMonth(1)\"\n                [disabled]=\"!presenter.isValidIntervalSet()\"\n              >\n                <mat-icon>keyboard_double_arrow_right</mat-icon>\n              </button>\n            </div>\n            <div class=\"layout-row place-between-center\">\n              <button\n                type=\"button\"\n                mat-icon-button\n                (click)=\"controller.shift.shiftYear(-1)\"\n                [disabled]=\"!presenter.isValidIntervalSet()\"\n              >\n                <mat-icon>keyboard_double_arrow_left</mat-icon>\n              </button>\n              <span>{{ 'intervalPicker.year' | translate }}</span>\n              <button\n                type=\"button\"\n                mat-icon-button\n                (click)=\"controller.shift.shiftYear(1)\"\n                [disabled]=\"!presenter.isValidIntervalSet()\"\n              >\n                <mat-icon>keyboard_double_arrow_right</mat-icon>\n              </button>\n            </div>\n\n            @if (true) {\n              <!-- shift minute -->\n              <div class=\"layout-row place-between-center\">\n                <button\n                  type=\"button\"\n                  mat-icon-button\n                  (click)=\"controller.shift.shiftMinute(-1)\"\n                  [disabled]=\"!presenter.isValidIntervalSet()\"\n                >\n                  <mat-icon>keyboard_double_arrow_left</mat-icon>\n                </button>\n                <span>{{ 'intervalPicker.minute' | translate }}</span>\n                <button\n                  type=\"button\"\n                  mat-icon-button\n                  (click)=\"controller.shift.shiftMinute(1)\"\n                  [disabled]=\"!presenter.isValidIntervalSet()\"\n                >\n                  <mat-icon>keyboard_double_arrow_right</mat-icon>\n                </button>\n              </div>\n              <!-- shift hour -->\n              <div class=\"layout-row place-between-center\">\n                <button\n                  type=\"button\"\n                  mat-icon-button\n                  (click)=\"controller.shift.shiftHour(-1)\"\n                  [disabled]=\"!presenter.isValidIntervalSet()\"\n                >\n                  <mat-icon>keyboard_double_arrow_left</mat-icon>\n                </button>\n                <span>{{ 'intervalPicker.hour' | translate }}</span>\n                <button\n                  type=\"button\"\n                  mat-icon-button\n                  (click)=\"controller.shift.shiftHour(1)\"\n                  [disabled]=\"!presenter.isValidIntervalSet()\"\n                >\n                  <mat-icon>keyboard_double_arrow_right</mat-icon>\n                </button>\n              </div>\n            }\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<div class=\"layout-row place-between-center gap-xxl pt-sm\">\n  <div>\n    @if (showAnchor()) {\n      <div class=\"layout-row flex-none gap-md\">\n        <mat-menu #anchorMenu=\"matMenu\">\n          @if (presenter.startDateHtmlString()) {\n            <button\n              type=\"button\"\n              mat-menu-item\n              (click)=\"controller.anchor.setFixedAnchorPointToEndDateTime()\"\n              [disabled]=\"!presenter.startDateHtmlString()\"\n            >\n              <mat-icon class=\"material-symbols-outlined\">login</mat-icon>\n              <span>{{ 'intervalPicker.endDate' | translate }}</span>\n            </button>\n          }\n          @if (presenter.endDateHtmlString()) {\n            <button\n              type=\"button\"\n              mat-menu-item\n              (click)=\"controller.anchor.setFixedAnchorPointToStartDateTime()\"\n              [disabled]=\"!presenter.endDateHtmlString()\"\n            >\n              <mat-icon class=\"material-symbols-outlined\">logout</mat-icon>\n              <span>{{ 'intervalPicker.startDate' | translate }}</span>\n            </button>\n          }\n          @if (presenter.isFixedAnchorDateSet()) {\n            <button\n              type=\"button\"\n              mat-menu-item\n              (click)=\"controller.anchor.resetAnchor()\"\n              [disabled]=\"!presenter.isFixedAnchorDateSet() || anchorReadOnly()\"\n            >\n              <mat-icon>close</mat-icon>\n              <span>{{ 'intervalPicker.clear' | translate }}</span>\n            </button>\n          }\n        </mat-menu>\n\n        <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n          <mat-label>{{ 'intervalPicker.anchorDate' | translate }}</mat-label>\n          <input\n            #startDateInput\n            name=\"anchorDateInput\"\n            matInput\n            type=\"date\"\n            [ngModel]=\"presenter.anchorDateHtmlString()\"\n            (ngModelChange)=\"controller.form.setAnchorDateFromString($event)\"\n            [readonly]=\"anchorReadOnly()\"\n          />\n          @if (!anchorReadOnly()) {\n            <button\n              type=\"button\"\n              mat-icon-button\n              matSuffix\n              [matMenuTriggerFor]=\"anchorMenu\"\n              [disabled]=\"presenter.isAnchorMenuDisabled()\"\n            >\n              <mat-icon class=\"material-symbols-outlined\">more_horiz</mat-icon>\n            </button>\n          }\n        </mat-form-field>\n        @if (intervalInputMode() === 'date-time-range') {\n          <mat-form-field class=\"input-control-container-short\" [subscriptSizing]=\"'dynamic'\">\n            <mat-label>{{ 'intervalPicker.anchorTime' | translate }}</mat-label>\n            <input\n              matInput\n              name=\"anchorTimeInput\"\n              type=\"time\"\n              #anchorTimeControl=\"ngModel\"\n              step=\"1\"\n              [readonly]=\"anchorReadOnly()\"\n              [ngModel]=\"presenter.anchorTimeHtmlString()\"\n              (ngModelChange)=\"controller.form.setAnchorTimeFromString($event)\"\n            />\n            <button\n              type=\"button\"\n              mat-icon-button\n              matSuffix\n              (click)=\"controller.anchor.resetAnchorTime()\"\n              [disabled]=\"anchorReadOnly() || presenter.isAnchorTimeMidnight()\"\n            >\n              <mat-icon>close</mat-icon>\n            </button>\n          </mat-form-field>\n        }\n      </div>\n    }\n  </div>\n  <!-- result interval -->\n  <div class=\"layout-col place-center-center\">\n    <div class=\"date-interval mat-caption pt-xs\">\n      @if (presenter.startDateTimeAsJSDate()) {\n        {{ presenter.startDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n      } @else {\n        {{ 'intervalPicker.startDateNotSet' | translate }}\n      }\n      <span> - </span>\n      @if (presenter.endDateTimeAsJSDate()) {\n        {{ presenter.endDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n      } @else {\n        {{ 'intervalPicker.endDateNotSet' | translate }}\n      }\n    </div>\n    <div>\n      <span class=\"mat-caption\">{{ presenter.deltaHumanReadable() || '&nbsp;' }}</span>\n    </div>\n  </div>\n  <div class=\"layout-row gap-lg\">\n    <button\n      type=\"button\"\n      mat-flat-button\n      color=\"primary\"\n      (click)=\"controller.clearInterval()\"\n      [disabled]=\"!presenter.isValidIntervalSet()\"\n    >\n      {{ 'intervalPicker.clear' | translate }}\n    </button>\n\n    @if (!this.autoEmitMode()) {\n      <button type=\"button\" color=\"primary\" mat-flat-button (click)=\"controller.manualEmit()\">\n        {{ 'actions.ok' | translate }}\n      </button>\n    }\n  </div>\n</div>\n","import { Directive, ElementRef, Input } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderOverlayComponent } from './elder-overlay.component'\n\n@Directive({\n  selector: '[elderOverlayOrigin]',\n  standalone: true,\n})\nexport class ElderOverlayOriginDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _overlay: ElderOverlayComponent\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private _host: ElementRef<HTMLElement>) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input('elderOverlayOrigin')\n  public set overlay(overlay: ElderOverlayComponent) {\n    this._overlay = overlay\n    this._overlay.origin = this._host\n  }\n\n  public get overlay(): ElderOverlayComponent {\n    return this._overlay\n  }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderOverlayComponent } from './elder-overlay.component'\n\n@Directive({\n  selector: '[elderOverlayTrigger]',\n  standalone: true,\n})\nexport class ElderOverlayTriggerDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  @Input('elderOverlayTrigger')\n  public overlay: ElderOverlayComponent\n\n  @Input('elderOverlayTriggerType')\n  public type: 'click' | 'focus' = 'click'\n\n  @Input('elderOverlayTriggerEnabled')\n  public enabled = true\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private _host: ElementRef<HTMLElement>) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Event Listeners                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  @HostListener('click', ['$event'])\n  handleClick(event: MouseEvent): void {\n    if (this.type === 'click') {\n      this.handleTrigger()\n    }\n  }\n\n  @HostListener('focus', ['$event'])\n  handleFocus(event: MouseEvent): void {\n    if (this.type === 'focus') {\n      this.handleTrigger()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleTrigger(): void {\n    if (this.enabled && this.overlay) {\n      this.overlay.showOverlay({\n        source: this._host,\n      })\n    }\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { ElderOverlayComponent } from './elder-overlay.component'\nimport { Observable } from 'rxjs'\n\n@Injectable()\nexport class ElderOverlayRef {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly overlay: ElderOverlayComponent) {\n    if (!overlay) {\n      throw new Error('ElderOverlayComponent is required!')\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get attached(): boolean {\n    return this.overlay.attached\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public attachedChange(): Observable<boolean> {\n    return this.overlay.attachedChange\n  }\n\n  public close(): void {\n    this.overlay.closeOverlay()\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EmbeddedViewRef,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n} from '@angular/core'\nimport {\n  FlexibleConnectedPositionStrategyOrigin,\n  Overlay,\n  OverlayConfig,\n  OverlayPositionBuilder,\n  OverlayRef,\n  OverlaySizeConfig,\n  PositionStrategy,\n} from '@angular/cdk/overlay'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { TemplatePortal } from '@angular/cdk/portal'\nimport { merge, Observable, Subject } from 'rxjs'\nimport { map, takeUntil } from 'rxjs/operators'\nimport { ElderOverlayRef } from './elder-overlay-ref'\n\nexport class OverlayShowOptions {\n  public source?: ElementRef\n}\n\n@Component({\n  selector: 'elder-overlay',\n  exportAs: 'elderOverlay',\n  template: `\n    <ng-template>\n      <ng-content></ng-content>\n    </ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  providers: [\n    {\n      provide: ElderOverlayRef,\n      useFactory: (self: ElderOverlayComponent) => {\n        return new ElderOverlayRef(self)\n      },\n      deps: [ElderOverlayComponent],\n    },\n  ],\n})\nexport class ElderOverlayComponent implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _overlayRef: OverlayRef\n  private readonly unsubscribe$ = new Subject<void>()\n\n  @ViewChild(TemplateRef, { static: true }) templateRef: TemplateRef<any>\n\n  private _hasCustomPositionStrategy = false\n  private _origin: FlexibleConnectedPositionStrategyOrigin | null = null\n\n  @Input()\n  public originX: 'start' | 'center' | 'end' = 'start'\n\n  @Input()\n  public originY: 'top' | 'center' | 'bottom' = 'bottom'\n\n  @Input()\n  public overlayX: 'start' | 'center' | 'end' = 'start'\n\n  @Input()\n  public overlayY: 'top' | 'center' | 'bottom' = 'top'\n\n  @Input()\n  public offsetY = 10\n\n  @Input()\n  public offsetX = 0\n\n  @Input()\n  public backdrop = true\n\n  @Input()\n  public backdropVisible = false\n\n  private readonly _attachedChange = new Subject<boolean>()\n  private readonly _keydownEvents = new Subject<KeyboardEvent>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private viewContainer: ViewContainerRef,\n    private overlay: Overlay,\n    private positionBuilder: OverlayPositionBuilder\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    const config = <OverlayConfig>{\n      hasBackdrop: this.backdrop,\n      backdropClass: this.backdropVisible ? undefined : 'cdk-overlay-transparent-backdrop',\n    }\n\n    this._overlayRef = this.overlay.create(config)\n\n    this._overlayRef\n      .backdropClick()\n      .pipe(takeUntil(this.unsubscribe$))\n      .subscribe((ev) => this.closeOverlay())\n\n    this._overlayRef\n      .keydownEvents()\n      .pipe(takeUntil(this.unsubscribe$))\n      .subscribe((ev) => {\n        this._keydownEvents.next(ev)\n        if (ev.key === 'Escape') {\n          this.closeOverlay()\n        }\n      })\n\n    merge(\n      this._overlayRef.attachments().pipe(map(() => true)),\n      this._overlayRef.detachments().pipe(map(() => false))\n    )\n      .pipe(takeUntil(this.unsubscribe$))\n      .subscribe((ev) => {\n        this._attachedChange.next(ev)\n      })\n  }\n\n  public ngOnDestroy(): void {\n    this.unsubscribe$.next()\n    this.unsubscribe$.complete()\n    this._overlayRef.dispose()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set origin(origin: FlexibleConnectedPositionStrategyOrigin) {\n    this._origin = origin\n  }\n\n  @Input()\n  public set positionStrategy(strategy: PositionStrategy) {\n    if (this._overlayRef) {\n      this._overlayRef.updatePositionStrategy(strategy)\n      this._hasCustomPositionStrategy = true\n    }\n  }\n\n  @Input()\n  public set overlaySize(size: OverlaySizeConfig) {\n    if (this._overlayRef) {\n      this._overlayRef.updateSize(size)\n    }\n  }\n\n  /**\n   * Emits all key events on the overlay\n   */\n  @Output()\n  public get keydownEvents() {\n    return this._keydownEvents\n  }\n\n  /**\n   * Emits when the overlay is attached (true) or de-attached (false)\n   */\n  @Output()\n  public get attachedChange(): Observable<boolean> {\n    return this._attachedChange\n  }\n\n  /**\n   * Is this overlay currently attached and thus visible?\n   */\n  public get attached(): boolean {\n    return this._overlayRef ? this._overlayRef.hasAttached() : false\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Show this overlay\n   */\n  public showOverlay(options?: OverlayShowOptions): EmbeddedViewRef<any> | undefined {\n    if (!this._hasCustomPositionStrategy) {\n      let origin: FlexibleConnectedPositionStrategyOrigin\n      if (!this._origin && options && options.source) {\n        origin = options.source\n      } else {\n        origin = this._origin\n      }\n      this._overlayRef.updatePositionStrategy(this.buildDefaultStrategy(origin))\n    }\n\n    if (!this.attached) {\n      return this.attachOverlay()\n    }\n\n    return undefined\n  }\n\n  /**\n   * Hide this overlay\n   */\n  public closeOverlay(): any {\n    if (this._overlayRef) {\n      this._overlayRef.detach()\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildDefaultStrategy(origin: FlexibleConnectedPositionStrategyOrigin): PositionStrategy {\n    return this.positionBuilder.flexibleConnectedTo(origin).withPositions([\n      {\n        originX: this.originX,\n        originY: this.originY,\n        overlayX: this.overlayX,\n        overlayY: this.overlayY,\n        offsetY: this.offsetY,\n        offsetX: this.offsetX,\n      },\n    ])\n  }\n\n  private attachOverlay(): EmbeddedViewRef<any> {\n    const searchPanelPortal = new TemplatePortal(this.templateRef, this.viewContainer)\n    return this._overlayRef.attach(searchPanelPortal)\n  }\n}\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  input,\n  signal,\n  ViewChild,\n} from '@angular/core'\nimport { MatIconButton } from '@angular/material/button'\n\nimport { MatIcon } from '@angular/material/icon'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Temporal } from '@js-temporal/polyfill'\nimport { Interval } from '../../../../common/time/interval'\nimport { ElderOverlayOriginDirective } from '../../../overlays/elder-overlay-origin.directive'\nimport { ElderOverlayTriggerDirective } from '../../../overlays/elder-overlay-trigger.directive'\nimport { ElderOverlayComponent } from '../../../overlays/elder-overlay.component'\nimport { ElderDialogPanelComponent } from '../../../panels/elder-dialog-panel/elder-dialog-panel.component'\nimport {\n  ElderIntervalInputComponent,\n  IntervalInputMode,\n} from '../../elder-interval-input/elder-interval-input.component'\nimport { ElderIntervalPickerComponent } from '../elder-interval-picker.component'\n\n@Component({\n  selector: 'elder-interval-picker-toggle',\n  imports: [\n    ElderIntervalPickerComponent,\n    ElderOverlayComponent,\n    ElderDialogPanelComponent,\n    MatIcon,\n    MatIconButton,\n    ElderOverlayTriggerDirective,\n    ElderOverlayOriginDirective,\n  ],\n  template: `\n    <span style=\"padding-right: 8px\">\n      <button\n        type=\"button\"\n        mat-icon-button\n        [elderOverlayOrigin]=\"dateIntervalOverlay\"\n        [elderOverlayTrigger]=\"dateIntervalOverlay\"\n        class=\"elder-control-icon-button mat-datepicker-toggle\"\n      >\n        <mat-icon>date_range</mat-icon>\n      </button>\n    </span>\n\n    <elder-overlay #dateIntervalOverlay>\n      <elder-dialog-panel>\n        <div class=\"pb-md pt-xs\">\n          <elder-interval-picker\n            #connectedIntervalPicker\n            [intervalInputMode]=\"intervalInputMode()\"\n            (intervalChange)=\"handleIntervalPickerDateChange($event)\"\n            [externalInterval]=\"externalInterval()\"\n            [showAnchor]=\"showAnchor()\"\n            [anchorReadOnly]=\"anchorReadOnly()\"\n            [externalAnchorDateTime]=\"externalAnchorDateTime()\"\n            [emitType]=\"emitType()\"\n          ></elder-interval-picker>\n        </div>\n      </elder-dialog-panel>\n    </elder-overlay>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElderIntervalPickerToggleComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @ViewChild('connectedIntervalPicker') connectedIntervalPicker!: ElderIntervalPickerComponent\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  @Input()\n  connectedIntervalInput: ElderIntervalInputComponent = null\n\n  public readonly intervalInputMode = signal<IntervalInputMode>('date-time-range')\n  public readonly emitType = signal<'iso' | 'interval'>('interval')\n  public readonly externalInterval = signal<Interval | null>(null)\n\n  showAnchor = input<boolean>(false)\n  anchorReadOnly = input<boolean>(false)\n  externalAnchorDateTime = input<Temporal.PlainDateTime | null>(null)\n\n  @Input()\n  disabled = booleanAttribute(false)\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  ngAfterViewInit(): void {\n    if (!this.connectedIntervalInput) {\n      this.log.error('ElderIntervalPickerToggleComponent: connectedIntervalInput is required.')\n      return\n    }\n\n    this.intervalInputMode.set(this.connectedIntervalInput.mode)\n    this.emitType.set(this.connectedIntervalInput.valueAsIsoStr ? 'iso' : 'interval')\n\n    this.connectedIntervalInput.valueChange.subscribe((interval: Interval | string) => {\n      this.externalInterval.set(interval as Interval)\n    })\n\n    if (this.connectedIntervalInput.value) {\n      // this is necessary to set the value of the interval picker\n      this.externalInterval.set(this.connectedIntervalInput.value as Interval)\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public setConnectedIntervalInput(intervalInput: ElderIntervalInputComponent): void {\n    this.connectedIntervalInput = intervalInput\n  }\n\n  public handleIntervalPickerDateChange(interval: any): void {\n    this.connectedIntervalInput.value = interval\n  }\n}\n","import { ContentChild, Directive } from '@angular/core'\nimport { ElderIntervalInputComponent } from '../../elder-interval-input/elder-interval-input.component'\nimport { ElderIntervalPickerToggleComponent } from '../interval-picker-toggle/elder-interval-picker-toggle.component'\n\n@Directive({\n  selector: '[elderIntervalPickerBinding]',\n  standalone: true,\n})\nexport class ElderIntervalPickerBindingDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @ContentChild(ElderIntervalInputComponent)\n  intervalInputComponent: ElderIntervalInputComponent\n  @ContentChild(ElderIntervalPickerToggleComponent)\n  intervalPickerToggleComponent: ElderIntervalPickerToggleComponent\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterContentInit(): void {\n    if (!this.intervalInputComponent || !this.intervalPickerToggleComponent) {\n      console.error(\n        'ElderIntervalPickerBindingDirective: Both components are required, IntervalInputComponent and IntervalPickerToggleComponent.'\n      )\n      return\n    }\n\n    this.intervalPickerToggleComponent.connectedIntervalInput = this.intervalInputComponent\n    this.intervalInputComponent.isDefaultDatePickerDisabled = true\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { MatButtonModule } from '@angular/material/button'\nimport { DateAdapter, MatNativeDateModule } from '@angular/material/core'\nimport { MatDatepickerModule } from '@angular/material/datepicker'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatInputModule } from '@angular/material/input'\nimport { MatTooltipModule } from '@angular/material/tooltip'\nimport { FormsModule } from '@angular/forms'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderDateSwitcherComponent } from './elder-date-switcher/elder-date-switcher.component'\nimport { CustomDateAdapter } from './date-adapters/custom-date-adapter'\nimport { ElderIntervalInputComponent } from './elder-interval-input/elder-interval-input.component'\nimport { ElderDateTimeInputComponent } from './elder-date-time-input/elder-date-time-input.component'\nimport { ElderLocalTimeInputComponent } from './elder-local-time-input/elder-local-time-input.component'\nimport { ElderLocalDateInputComponent } from './elder-local-date-input/elder-local-date-input.component'\nimport { ElderDurationInputComponent } from './duration/elder-duration-input/elder-duration-input.component'\nimport { ElderFormsDirectivesModule } from '../forms/directives/elder-forms-directives.module'\nimport { ElderPeriodInputComponent } from './period/elder-period-input/elder-period-input.component'\nimport { ToIsoDateStringPipe } from './pipes/to-iso-date-string.pipe'\nimport { ElderIntervalPickerComponent } from './elder-interval-picker/elder-interval-picker.component'\nimport { ElderIntervalPickerToggleComponent } from './elder-interval-picker/interval-picker-toggle/elder-interval-picker-toggle.component'\nimport { ElderIntervalPickerBindingDirective } from './elder-interval-picker/interval-picker-binding/elder-interval-picker-binding.directive'\n\nexport { ElderDateSwitcherComponent } from './elder-date-switcher/elder-date-switcher.component'\nexport { ElderIntervalInputComponent } from './elder-interval-input/elder-interval-input.component'\nexport { ElderDateTimeInputComponent } from './elder-date-time-input/elder-date-time-input.component'\nexport { ElderLocalTimeInputComponent } from './elder-local-time-input/elder-local-time-input.component'\nexport { ElderLocalDateInputComponent } from './elder-local-date-input/elder-local-date-input.component'\nexport { ElderDurationInputComponent } from './duration/elder-duration-input/elder-duration-input.component'\nexport { ElderPeriodInputComponent } from './period/elder-period-input/elder-period-input.component'\nexport { ElderIntervalPickerComponent } from './elder-interval-picker/elder-interval-picker.component'\nexport { ElderIntervalPickerToggleComponent } from './elder-interval-picker/interval-picker-toggle/elder-interval-picker-toggle.component'\nexport { ElderIntervalPickerBindingDirective } from './elder-interval-picker/interval-picker-binding/elder-interval-picker-binding.directive'\nexport { ToIsoDateStringPipe } from './pipes/to-iso-date-string.pipe'\n\n@NgModule({\n  imports: [\n    // common\n    CommonModule,\n    MatNativeDateModule,\n    // forms\n    FormsModule,\n    // form controls\n    MatInputModule,\n    MatDatepickerModule,\n    // buttons & indicators\n    MatButtonModule,\n    MatIconModule,\n    // popups & modals\n    MatTooltipModule,\n    // data matTable\n    // translations\n    TranslateModule,\n    ElderFormsDirectivesModule,\n    ElderDateSwitcherComponent,\n    ElderIntervalInputComponent,\n    ElderDateTimeInputComponent,\n    ElderLocalTimeInputComponent,\n    ElderLocalDateInputComponent,\n    ElderDurationInputComponent,\n    ElderPeriodInputComponent,\n    ElderIntervalPickerComponent,\n    ElderIntervalPickerToggleComponent,\n    ElderIntervalPickerBindingDirective,\n    ToIsoDateStringPipe,\n  ],\n  exports: [\n    ElderDateSwitcherComponent,\n    ElderDateTimeInputComponent,\n    ElderIntervalInputComponent,\n    ElderLocalTimeInputComponent,\n    ElderLocalDateInputComponent,\n    ElderDurationInputComponent,\n    ElderPeriodInputComponent,\n    ElderIntervalPickerComponent,\n    ElderIntervalPickerToggleComponent,\n    ElderIntervalPickerBindingDirective,\n    ToIsoDateStringPipe,\n  ],\n  providers: [{ provide: DateAdapter, useClass: CustomDateAdapter }],\n})\nexport class ElderTimeModule {}\n","import { APP_INITIALIZER, LOCALE_ID, ModuleWithProviders, NgModule } from '@angular/core'\nimport { CommonModule, registerLocaleData } from '@angular/common'\nimport { MAT_DATE_LOCALE } from '@angular/material/core'\nimport localeDECH from '@angular/common/locales/de-CH'\n\n// Because of AOT Compiler\nexport function registerLocale() {\n  // Hack to use Lambda here! See\n  // https://stackoverflow.com/questions/51976671/app-initializer-in-library-causes-lambda-not-supported-error\n  const x = 2 + 4\n  return () => registerLocaleData(localeDECH)\n}\n\n@NgModule({\n  imports: [\n    // common\n    CommonModule,\n  ],\n  declarations: [],\n  exports: [],\n})\nexport class ElderLocalesDeChModule {\n  static forRoot(): ModuleWithProviders<ElderLocalesDeChModule> {\n    return {\n      ngModule: ElderLocalesDeChModule,\n      providers: [\n        {\n          provide: APP_INITIALIZER,\n          useFactory: registerLocale,\n          multi: true,\n        },\n        {\n          provide: MAT_DATE_LOCALE, // setting Swiss German as default locale for DatePicker\n          useValue: 'de-CH',\n        },\n        {\n          provide: LOCALE_ID, // setting Swiss German as default locale\n          useValue: 'de-CH',\n        },\n      ],\n    }\n  }\n}\n","import { Directive, Input } from '@angular/core'\n\n@Directive({\n  selector: 'elder-localized-text-column',\n  standalone: true,\n})\nexport class ElderLocalizedTextColumnDirective {\n  public static DEFAULT_TEXT_COL: ElderLocalizedTextColumnDirective =\n    ElderLocalizedTextColumnDirective.defaultText()\n\n  static defaultText() {\n    const col = new ElderLocalizedTextColumnDirective()\n    col.name = 'text'\n    col.title = 'Text'\n    col.required = true\n    return col\n  }\n\n  /**\n   * Column / Field name\n   */\n  @Input()\n  public name: string\n\n  /**\n   * The Column title\n   */\n  @Input()\n  public title: string\n\n  @Input()\n  public required = false\n\n  constructor() {}\n}\n","import {\n  Component,\n  OnInit,\n  ChangeDetectionStrategy,\n  OnDestroy,\n  ContentChildren,\n  QueryList,\n  AfterViewInit,\n  Input,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { FormFieldBaseComponent } from '../../../../common/forms/form-field-base.component'\nimport { Localized } from '../../../../common/i18n/entity/localized'\nimport { buildFormIntegrationProviders } from '../../../../common/forms/template-composite-control'\nimport { BehaviorSubject, combineLatest, Subject } from 'rxjs'\nimport { IDataContext } from '../../../../common/data/data-context/data-context'\nimport { map, takeUntil } from 'rxjs/operators'\nimport { LocalListDataSource } from '../../../../common/data/datasource/local/local-list-data-source'\nimport { SortUtil } from '../../../../common/utils/sort-util'\nimport { FilterUtil } from '../../../../common/utils/filter/filter-util'\nimport { DataContextBuilder } from '../../../../common/data/data-context/data-context-builder'\nimport { Sort } from '../../../../common/data/sort'\nimport { QueryListBinding } from '../../../../common/utils/query-list-binding'\nimport { ElderToastService } from '../../../toasts/elder-toast.service'\nimport { ElderLocalizedTextColumnDirective } from '../elder-localized-text-column.directive'\nimport { ElderLanguageService } from '../../language/elder-language.service'\nimport { LanguageTag } from '../../../../common/i18n/entity/language-tag'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { FormsModule } from '@angular/forms'\nimport { MatInput } from '@angular/material/input'\nimport { ElderFormFieldDenseDirective } from '../../../forms/directives/elder-form-field-dense.directive'\nimport { MatFormField } from '@angular/material/form-field'\nimport { AsyncPipe } from '@angular/common'\nimport { MatChipSet, MatChip } from '@angular/material/chips'\nimport {\n  MatColumnDef,\n  MatHeaderCellDef,\n  MatHeaderCell,\n  MatCellDef,\n  MatCell,\n} from '@angular/material/table'\nimport { ElderCardSubtitleDirective } from '../../../cards/elder-card/elder-card.component'\nimport {\n  ElderDataToolbarComponent,\n  ElderToolbarContentDirective,\n} from '../../../data-view/common/elder-data-toolbar/elder-data-toolbar.component'\nimport { ElderTableToolbarDirective } from '../../../data-view/table/elder-table/elder-table-toolbar.directive'\nimport { MatSort, MatSortHeader } from '@angular/material/sort'\nimport { ElderTableComponent } from '../../../data-view/table/elder-table/elder-table.component'\n\n@Component({\n  selector: 'elder-localized-input-table',\n  templateUrl: './elder-localized-input-table.component.html',\n  styleUrls: ['./elder-localized-input-table.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: buildFormIntegrationProviders(ElderLocalizedInputTableComponent),\n  imports: [\n    ElderTableComponent,\n    MatSort,\n    ElderTableToolbarDirective,\n    ElderDataToolbarComponent,\n    ElderToolbarContentDirective,\n    ElderCardSubtitleDirective,\n    MatColumnDef,\n    MatHeaderCellDef,\n    MatHeaderCell,\n    MatSortHeader,\n    MatCellDef,\n    MatCell,\n    MatChipSet,\n    MatChip,\n    MatFormField,\n    ElderFormFieldDenseDirective,\n    MatInput,\n    FormsModule,\n    AsyncPipe,\n    TranslateModule,\n  ],\n})\nexport class ElderLocalizedInputTableComponent<T extends Localized>\n  extends FormFieldBaseComponent<T[]>\n  implements OnInit, AfterViewInit, OnDestroy\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly dataSource: LocalListDataSource<T>\n  public readonly data: IDataContext<T>\n\n  @ContentChildren(ElderLocalizedTextColumnDirective)\n  public textColumnsQuery: QueryList<ElderLocalizedTextColumnDirective>\n  public readonly textColumns$ = new BehaviorSubject<ElderLocalizedTextColumnDirective[]>([])\n\n  public readonly defaultLanguageTags$ = new BehaviorSubject<LanguageTag[]>([])\n\n  @Input()\n  public dense = false\n\n  private readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly toastService: ElderToastService,\n    private readonly languageService: ElderLanguageService\n  ) {\n    super()\n\n    this.defaultLanguageTags = languageService.languages\n\n    this.dataSource = LocalListDataSource.from(\n      [],\n      'locale',\n      SortUtil.sortData,\n      FilterUtil.filterData\n    )\n\n    const localizables$ = combineLatest([\n      this.value$.pipe(map((value) => value ?? [])),\n      this.defaultLanguageTags$,\n    ]).pipe(\n      map(([localizables, desiredTags]) => this.ensureDesiredTagsPresent(localizables, desiredTags))\n    )\n\n    localizables$\n      .pipe(takeUntil(this.destroy$))\n      .subscribe((values) => (this.dataSource.data = values))\n\n    this.data = DataContextBuilder.start<T>().reloadOnLocalChanges().build(this.dataSource)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.data.start([new Sort('locale', 'asc')])\n  }\n\n  public ngAfterViewInit(): void {\n    QueryListBinding.of(this.textColumnsQuery)\n      .updated((columns) => {\n        if (columns?.length > 0) {\n          this.textColumns$.next(columns)\n        }\n      })\n      .bindUntil(this.destroy$)\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set textColumns(cols: ElderLocalizedTextColumnDirective[]) {\n    this.textColumns$.next(cols)\n  }\n\n  @Input()\n  public set defaultLanguageTags(tags: LanguageTag[]) {\n    this.defaultLanguageTags$.next(tags)\n  }\n\n  public get defaultLanguageTags(): LanguageTag[] {\n    return this.defaultLanguageTags$.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onNewRequested() {\n    this.toastService.info('Adding new Translations not yet implemented!')\n  }\n\n  public onRemoveRequested(toRemove: T[]) {\n    if (toRemove?.length > 0) {\n      if (this.value) {\n        const removeLocales = new Set(toRemove.map((r) => r.locale))\n        this.updateValue(this.value.filter((v) => !removeLocales.has(v.locale)))\n      }\n    }\n  }\n\n  public onColumnTextUpdated(\n    localized: T,\n    textColumn: ElderLocalizedTextColumnDirective,\n    newTextValue: string | any\n  ): void {\n    ;(<any>localized)[textColumn.name] = newTextValue\n    this.updateValue([...this.data.snapshot.data])\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private ensureDesiredTagsPresent(localizables: T[], desiredTags: LanguageTag[]): T[] {\n    const missing = desiredTags\n      .filter((dT) => !localizables.some((loc) => loc.locale === dT))\n      .map((dT) => <Localized>{ locale: dT })\n    if (missing?.length > 0) {\n      localizables = [...localizables, ...(<T[]>missing)]\n    }\n    return localizables\n  }\n}\n","<div class=\"layout-col full\">\n  <elder-table\n    matSort\n    class=\"flex\"\n    [data]=\"data\"\n    [selectionVisible]=\"true\"\n    [selectionMultiEnabled]=\"true\"\n    [dense]=\"dense\"\n  >\n    <elder-data-toolbar\n      *elderTableToolbar\n      [canAdd]=\"!isLocked\"\n      [canRemove]=\"!isLocked\"\n      [canMore]=\"false\"\n      (requestNew)=\"onNewRequested()\"\n      (requestRemove)=\"onRemoveRequested($event)\"\n    >\n      <ng-template elderToolbarContent=\"left.actions\">\n        <div class=\"layout-col place-start-center\">\n          <h4 elderCardSubtitle style=\"margin: 0\">{{ label ?? placeholder }}</h4>\n        </div>\n      </ng-template>\n    </elder-data-toolbar>\n\n    <ng-container matColumnDef=\"locale\">\n      <th mat-header-cell *matHeaderCellDef style=\"width: 100px\" mat-sort-header>Locale</th>\n      <td mat-cell *matCellDef=\"let localized\">\n        <mat-chip-set\n          ><mat-chip highlighted>{{ localized.locale }}</mat-chip></mat-chip-set\n        >\n      </td>\n    </ng-container>\n\n    @for (textColumn of textColumns$ | async; track textColumn) {\n      <ng-container matColumnDef=\"{{ textColumn.name }}\">\n        <th mat-header-cell *matHeaderCellDef>{{ textColumn.title | translate }}</th>\n        <td mat-cell *matCellDef=\"let localized\">\n          <div class=\"layout-row place-center-center\">\n            <mat-form-field class=\"full-width\" appearance=\"fill\" elderDense>\n              <!--\n                <mat-label>{{textColumn.title | translate}} ({{localized.locale}})</mat-label>\n                -->\n              <!--\n                <span matTextPrefix>{{textColumn.title | translate}}</span>\n                -->\n              <input\n                matInput\n                type=\"text\"\n                name=\"i18n-{{ localized.locale }}-{{ textColumn.name }}\"\n                [ngModel]=\"localized[textColumn.name]\"\n                [ngModelOptions]=\"{ updateOn: 'blur' }\"\n                (ngModelChange)=\"onColumnTextUpdated(localized, textColumn, $event)\"\n                [required]=\"required && textColumn.required\"\n                [readonly]=\"readonly\"\n                [disabled]=\"disabled\"\n              />\n            </mat-form-field>\n          </div>\n        </td>\n      </ng-container>\n    }\n  </elder-table>\n</div>\n","import { Component, OnInit, ChangeDetectionStrategy, Inject } from '@angular/core'\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogClose } from '@angular/material/dialog'\nimport { ElderLocalizedTextColumnDirective } from '../elder-localized-text-column.directive'\nimport { Localized } from '../../../../common/i18n/entity/localized'\nimport { ElderLocalizedInputTableComponent } from '../elder-localized-input-table/elder-localized-input-table.component'\nimport { MatIconButton } from '@angular/material/button'\n\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatIcon } from '@angular/material/icon'\nimport { ElderThemeDirective } from '../../../theme/elder-theme.directive'\nimport { MatToolbar, MatToolbarRow } from '@angular/material/toolbar'\n\nexport interface ElderLocalizedInputOptions<T extends Localized = Localized> {\n  title: string\n  localizables: T[]\n  textColumns: ElderLocalizedTextColumnDirective[]\n  explicitSave: boolean\n  readonly?: boolean\n  disabled?: boolean\n  required?: boolean\n}\n\n@Component({\n  selector: 'elder-localized-input-dialog',\n  templateUrl: './elder-localized-input-dialog.component.html',\n  styleUrls: ['./elder-localized-input-dialog.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatToolbar,\n    ElderThemeDirective,\n    MatToolbarRow,\n    MatIcon,\n    TranslateModule,\n    MatIconButton,\n    MatDialogClose,\n    ElderLocalizedInputTableComponent,\n  ],\n})\nexport class ElderLocalizedInputDialogComponent implements OnInit {\n  constructor(\n    public dialogRef: MatDialogRef<ElderLocalizedInputDialogComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: ElderLocalizedInputOptions\n  ) {}\n\n  ngOnInit(): void {}\n}\n","<div class=\"layout-col full\">\n  <mat-toolbar elderTheme color=\"primary\">\n    <mat-toolbar-row class=\"gap-sm\">\n      <mat-icon class=\"noselect\">translate</mat-icon>\n      <h2 class=\"noselect\" translate>{{ data.title }}</h2>\n      <span class=\"flex\"></span>\n      @if (data.explicitSave) {\n        <button\n          mat-icon-button\n          type=\"submit\"\n          [disabled]=\"data.readonly\"\n          [mat-dialog-close]=\"data.localizables\"\n        >\n          <mat-icon>save</mat-icon>\n        </button>\n      }\n    </mat-toolbar-row>\n  </mat-toolbar>\n\n  <div class=\"layout-col flex p-sm\">\n    <elder-localized-input-table\n      class=\"flex\"\n      [textColumns]=\"data.textColumns\"\n      [(value)]=\"data.localizables\"\n      [readonly]=\"data.readonly\"\n      [disabled]=\"data.disabled\"\n      [required]=\"data.required\"\n    >\n    </elder-localized-input-table>\n  </div>\n</div>\n","import { Injectable } from '@angular/core'\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog'\nimport {\n  ElderLocalizedInputDialogComponent,\n  ElderLocalizedInputOptions,\n} from './elder-localized-input-dialog/elder-localized-input-dialog.component'\nimport { Localized } from '../../../common/i18n/entity/localized'\nimport { Observable } from 'rxjs'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderLocalizedInputDialogService {\n  constructor(private readonly dialog: MatDialog) {}\n\n  public editLocalized<T extends Localized>(\n    options: ElderLocalizedInputOptions<T>\n  ): Observable<T[] | undefined> {\n    const dialogRef = this.openDialog(options)\n    return dialogRef.afterClosed()\n  }\n\n  private openDialog(\n    options: ElderLocalizedInputOptions\n  ): MatDialogRef<ElderLocalizedInputDialogComponent> {\n    return this.dialog.open(ElderLocalizedInputDialogComponent, {\n      width: '80vw',\n      height: '80vh',\n      panelClass: 'custom-dialog-container',\n      data: options,\n    })\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { SimpleLocalisationPicker } from '../../../../common/i18n/entity/localisation-picker'\nimport { ElderLanguageService } from '../../language/elder-language.service'\nimport { Localized } from '../../../../common/i18n/entity/localized'\nimport { LanguageTag } from '../../../../common/i18n/entity/language-tag'\nimport { Observable } from 'rxjs'\nimport { map, switchMap } from 'rxjs/operators'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class LocalisationPickerService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly picker = SimpleLocalisationPicker.Instance\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly languageService: ElderLanguageService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public pick<T extends Localized>(choices: T[], desired?: LanguageTag): T {\n    return this.picker.findBest(choices, desired ?? this.languageService.currentLanguage)\n  }\n\n  public pickCurrent<T extends Localized>(choices: T[]): Observable<T> {\n    return this.languageService.currentLanguage$.pipe(map((current) => this.pick(choices, current)))\n  }\n\n  public pickCurrentRx<T extends Localized>(choices$: Observable<T[]>): Observable<T> {\n    return choices$.pipe(switchMap((choices) => this.pickCurrent(choices)))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API (Text)                                                       *\n   *                                                                         *\n   **************************************************************************/\n\n  public pickText<T extends Localized>(\n    choices: T[],\n    textField: string = 'text',\n    desired?: LanguageTag\n  ): string | undefined {\n    if (choices) {\n      const picked = this.pick(\n        choices.filter((choice) => this.hasText(choice, textField)),\n        desired\n      )\n      return this.extractText(picked, textField)\n    }\n    return undefined\n  }\n\n  public pickCurrentText<T extends Localized>(\n    choices: T[],\n    textField: string = 'text'\n  ): Observable<string | undefined> {\n    return this.languageService.currentLanguage$.pipe(\n      map((current) => this.pickText(choices, textField, current))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private hasText(localized: Localized, textField: string): boolean {\n    return !!this.extractText(localized, textField)\n  }\n\n  private extractText(localized: Localized, textField: string): string | undefined {\n    if (localized && textField) {\n      const anyLocalized = <any>localized\n      return anyLocalized[textField]\n    }\n    return undefined\n  }\n}\n","import {\n  Component,\n  OnInit,\n  ChangeDetectionStrategy,\n  ContentChildren,\n  QueryList,\n  Input,\n  AfterViewInit,\n  OnDestroy,\n  Output,\n} from '@angular/core'\nimport { FormFieldBaseComponent } from '../../../../common/forms/form-field-base.component'\nimport { Localized } from '../../../../common/i18n/entity/localized'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs'\nimport { map, switchMap } from 'rxjs/operators'\nimport { ElderLocalizedInputDialogService } from '../elder-localized-input-dialog.service'\nimport { ElderLocalizedTextColumnDirective } from '../elder-localized-text-column.directive'\nimport { QueryListBinding } from '../../../../common/utils/query-list-binding'\nimport { LocalisationPickerService } from '../picker/localisation-picker.service'\nimport { ElderLocalizedInputOptions } from '../elder-localized-input-dialog/elder-localized-input-dialog.component'\nimport { buildFormIntegrationProviders } from '../../../../common/forms/template-composite-control'\nimport { AbstractControl, ValidationErrors, FormsModule } from '@angular/forms'\nimport { ITranslatedText } from '../../../../common/i18n/entity/translated'\nimport { TranslatedConverter } from '../../../../common/i18n/entity/translated-converter'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatInput } from '@angular/material/input'\n\nimport { MatIconButton } from '@angular/material/button'\nimport { MatIcon } from '@angular/material/icon'\nimport { AsyncPipe } from '@angular/common'\nimport { MatFormField, MatLabel, MatPrefix, MatSuffix, MatHint } from '@angular/material/form-field'\n\n@Component({\n  selector: 'elder-localized-input',\n  templateUrl: './elder-localized-input.component.html',\n  styleUrls: ['./elder-localized-input.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n  host: { class: 'elder-form-field-host' },\n  providers: buildFormIntegrationProviders(ElderLocalizedInputComponent),\n  imports: [\n    MatFormField,\n    MatLabel,\n    MatIcon,\n    MatPrefix,\n    MatIconButton,\n    MatSuffix,\n    MatInput,\n    FormsModule,\n    MatHint,\n    AsyncPipe,\n    TranslateModule,\n  ],\n})\nexport class ElderLocalizedInputComponent<T extends Localized = Localized>\n  extends FormFieldBaseComponent<T[]>\n  implements OnInit, AfterViewInit, OnDestroy\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly inputText$: Observable<string>\n  public readonly hintText$: Observable<string>\n\n  @ContentChildren(ElderLocalizedTextColumnDirective)\n  public textColumnsQuery: QueryList<ElderLocalizedTextColumnDirective>\n  public readonly textColumns$ = new BehaviorSubject<ElderLocalizedTextColumnDirective[]>([\n    ElderLocalizedTextColumnDirective.DEFAULT_TEXT_COL,\n  ])\n\n  @Output()\n  public readonly translatedValueChange: Observable<ITranslatedText>\n\n  private readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly localizedInputDialog: ElderLocalizedInputDialogService,\n    private readonly localisationPicker: LocalisationPickerService\n  ) {\n    super()\n\n    this.inputText$ = combineLatest([this.value$, this.textColumns$]).pipe(\n      switchMap(([values, columns]) => this.toInputText(values, columns))\n    )\n\n    this.hintText$ = this.value$.pipe(map((values) => this.toHintText(values)))\n\n    this.translatedValueChange = this.valueChange.pipe(\n      map((localized) => TranslatedConverter.toTranslatedText(<any>localized))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  public ngAfterViewInit(): void {\n    QueryListBinding.of(this.textColumnsQuery)\n      .updated((columns) => {\n        if (columns?.length > 0) {\n          this.textColumns$.next(columns)\n        }\n      })\n      .bindUntil(this.destroy$)\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set textColumns(cols: ElderLocalizedTextColumnDirective[]) {\n    this.textColumns$.next(cols)\n  }\n\n  public get textColumns(): ElderLocalizedTextColumnDirective[] {\n    return this.textColumns$.getValue()\n  }\n\n  @Input()\n  public set translatedValue(translated: ITranslatedText) {\n    this.value = <any>TranslatedConverter.toI18nText(translated)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public openTranslationPopup($event: MouseEvent) {\n    const data = <ElderLocalizedInputOptions<T>>{\n      title: this.label ?? this.placeholder,\n      localizables: this.value,\n      textColumns: this.textColumns,\n      explicitSave: false,\n      readonly: this.readonly,\n      disabled: this.disabled,\n      required: this.required,\n    }\n\n    const dlgRef = this.localizedInputDialog\n      .editLocalized(data)\n      .subscribe((updated) => this.updateValue(data.localizables))\n  }\n\n  public override validate(c: AbstractControl): ValidationErrors | null {\n    let result = null\n    if (this.required && !(this.value?.length > 0)) {\n      result = {\n        required: { valid: false },\n      }\n    }\n    return result\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private toInputText(\n    localizables: T[],\n    columns: ElderLocalizedTextColumnDirective[]\n  ): Observable<string | undefined> {\n    return this.localisationPicker.pickCurrentText(localizables, this.displayTextField(columns))\n  }\n\n  private displayTextField(columns: ElderLocalizedTextColumnDirective[]): string | undefined {\n    return columns ? columns[0]?.name : undefined\n  }\n\n  private toHintText(localizables: T[]): string {\n    if (localizables) {\n      return localizables.map((l) => l.locale).join(', ')\n    } else {\n      return ''\n    }\n  }\n}\n","<mat-form-field [appearance]=\"appearance\" [color]=\"color\">\n  @if (label) {\n    <mat-label>{{ label | translate }}</mat-label>\n  }\n\n  @if (icon) {\n    <mat-icon matPrefix [color]=\"color\">\n      {{ icon }}\n    </mat-icon>\n  }\n\n  <button\n    matSuffix\n    mat-icon-button\n    (click)=\"openTranslationPopup($event)\"\n    aria-label=\"Search\"\n    type=\"button\"\n  >\n    <mat-icon>translate</mat-icon>\n  </button>\n\n  <!-- A dynamic input -->\n  <input\n    matInput\n    type=\"text\"\n    [disabled]=\"disabled\"\n    [required]=\"required\"\n    readonly\n    [name]=\"name + '-localized'\"\n    [ngModel]=\"inputText$ | async\"\n    [ngModelOptions]=\"{ standalone: true }\"\n  />\n\n  <mat-hint>{{ hintText$ | async }}</mat-hint>\n</mat-form-field>\n","import { Directive, Host } from '@angular/core'\nimport { NgModel } from '@angular/forms'\nimport { BehaviorSubject, combineLatestWith, of, Subject } from 'rxjs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { delay, map, takeUntil } from 'rxjs/operators'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\n\n/**\n * Search name adapter for input controls.\n */\n@Directive({\n  selector: '[elderInitialValue]',\n  exportAs: 'elderInitialValue',\n  standalone: true,\n})\nexport class ElderInitialValueDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private initialValue$: BehaviorSubject<any> = new BehaviorSubject<any>(null)\n  private readonly initialDone$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(@Host() private ngModel: NgModel) {\n    //TODO: The debounce time is a hacky workaround, find a proper way to set initial value.\n    // ngModel regular and two way binding differ in initial value, which led to this solution\n\n    const ngModelValue$ = of('dummy').pipe(\n      delay(10),\n      map(() => this.ngModel.model)\n    )\n\n    ngModelValue$\n      .pipe(\n        takeUntilDestroyed(),\n        combineLatestWith(this.initialValue$),\n        takeUntil(this.initialDone$)\n      )\n      .subscribe(([ngModelValue, initialValue]) => {\n        if (initialValue) {\n          ngModel.control.setValue(initialValue)\n        }\n        this.initialDone$.next()\n        this.initialDone$.complete()\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get valueChanges$() {\n    return this.ngModel.control.valueChanges\n  }\n\n  public setValue(value: any) {\n    if (value) {\n      this.ngModel.control.setValue(value)\n    }\n    this.initialValue$.next(value)\n  }\n}\n","import { InputFilterConverter } from './input-filter-converter'\nimport { InputValue } from '../domain/input/input-value'\nimport { Filter } from '../../../../common/data/filters/filter'\n\nexport default class DefaultInputFilterConverter implements InputFilterConverter {\n  /***************************************************************************\n   *                                                                         *\n   * Static Builders                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public static of(queryKeyProviderFn: () => string): DefaultInputFilterConverter {\n    return new DefaultInputFilterConverter(queryKeyProviderFn)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructors                                                            *\n   *                                                                         *\n   **************************************************************************/\n\n  private constructor(private readonly queryKeyProviderFn: () => string) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public convertToFilters(inputValue: InputValue): Filter[] {\n    return [new Filter(this.queryKey(), inputValue)]\n  }\n\n  public convertToValue(filters: Filter[]): InputValue {\n    const queryKey = this.queryKey()\n    for (const filter of filters) {\n      if (filter.key === queryKey) {\n        return filter.value\n      }\n    }\n    return null\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private queryKey(): string {\n    return this.queryKeyProviderFn()\n  }\n}\n","import { AfterViewInit, DestroyRef, Directive, Host, Input, OnInit } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderSearchContextDirective } from './elder-search-context.directive'\nimport { Observable } from 'rxjs/internal/Observable'\nimport { NgModel } from '@angular/forms'\nimport { SearchInput } from './domain/input/search-input'\nimport { debounceTime, delay, first, map } from 'rxjs/operators'\nimport { PropertyPathUtil } from '../../../common/utils/property-path-util'\nimport { BehaviorSubject, concat, of, skipUntil } from 'rxjs'\nimport { SearchInputState } from './domain/input/search-input-state'\nimport { Objects } from '../../../common/objects'\nimport { CollectionUtil } from '../../../common/utils/collection-util'\nimport { BooleanInput } from '@angular/cdk/coercion'\nimport { ElderInitialValueDirective } from '../directives/elder-initial-value.directive'\nimport { FilterValue } from '../../../common/data/filters/filter-value'\nimport { InputFilterConverter } from './filter/input-filter-converter'\nimport DefaultInputFilterConverter from './filter/default-input-filter-converter'\nimport { Filter } from '../../../common/data/filters/filter'\nimport { InputValue } from './domain/input/input-value'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\n\n/**\n * Binds the control value (ngModel) to a SearchContexts Filter.\n */\n@Directive({\n  selector: '[elderSearchInput]',\n  exportAs: 'elderSearchInput',\n  standalone: true,\n})\nexport class ElderSearchInputDirective implements SearchInput, OnInit, AfterViewInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _initialValueDirective: ElderInitialValueDirective\n\n  private readonly _queryKey$ = new BehaviorSubject<string>(null)\n  private _extractedName: string | null\n  private _userQueryKey: string | null\n\n  /**\n   * (Optional) Function which transforms the value object to a query param value\n   */\n  @Input('elderSearchInputTransform')\n  public valueTransform: (value: any) => string | string[] | null\n\n  /**\n   * (Optional, Default) Path on the value object to use as query param value\n   *  value = \"type.id\"\n   */\n  @Input('elderSearchInput')\n  public resolvePath: string\n\n  /**\n   * (Optional) Use this value for the query if none is provided.\n   */\n  @Input('elderSearchInputFallback')\n  public fallbackValue: string | string[]\n\n  @Input()\n  public valueAsId: BooleanInput\n\n  private _inputConverter: InputFilterConverter = DefaultInputFilterConverter.of(\n    () => this.queryKey\n  )\n\n  private readonly _state$: Observable<SearchInputState>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private searchContext: ElderSearchContextDirective,\n    @Host() private ngModel: NgModel,\n    private destroyRef: DestroyRef\n  ) {\n    this._initialValueDirective = new ElderInitialValueDirective(ngModel)\n    this._state$ = this.buildInputStateObservable()\n      .pipe\n      // tap(state => this.log.error('EMIT SEARCH INPUT STATE [' + state.queryKey + ']: ' + state.queryValue + (state.pristine ? '(pristine)' : ''), state))\n      ()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit() {\n    this._extractedName = this.extractName()\n    this.updateQueryKey()\n    this.searchContext.register(this)\n  }\n\n  public ngAfterViewInit(): void {\n    this._extractedName = this.extractName()\n    this.updateQueryKey()\n    this.log.debug(this.queryKey + ' | ' + this.resolvePath)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * (Optional) Usually the control name is used, this allows a custom query key\n   */\n  @Input('elderSearchInputKey')\n  public set queryKey(value: string) {\n    this._userQueryKey = value\n    this.updateQueryKey()\n  }\n\n  public get queryKey() {\n    return this._queryKey$.getValue()\n  }\n\n  public get queryKey$(): Observable<string> {\n    return this._queryKey$\n  }\n\n  public set inputConverter(inputConverter: InputFilterConverter) {\n    this._inputConverter = inputConverter\n  }\n\n  public get state$(): Observable<SearchInputState> {\n    return this._state$\n  }\n\n  public get value(): any {\n    return this.ngModel.value\n  }\n\n  public get readonly(): boolean {\n    return this.ngModel.isDisabled\n  }\n\n  private get hasFallback(): boolean {\n    return SearchInputState.isValueDefined(this.fallbackValue)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public applyFilters(filters: Filter[]) {\n    this.setInputValue(this._inputConverter.convertToValue(filters))\n  }\n\n  public reset(): void {\n    this.ngModel.reset()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private updateQueryKey(): void {\n    const newKey = this._userQueryKey ?? this._extractedName\n    if (this._queryKey$.getValue() !== newKey) {\n      this._queryKey$.next(newKey)\n    }\n  }\n\n  private setInputValue(queryString: string | string[] | null): void {\n    const value = this.convertQueryStringToRawModelValue(queryString)\n    this._initialValueDirective.setValue(value)\n  }\n\n  private get valueChanges$() {\n    return this.ngModel.control.valueChanges.pipe(takeUntilDestroyed(this.destroyRef))\n  }\n\n  private buildInputStateObservable(): Observable<SearchInputState> {\n    const viewStabilized$ = of('stabilized$').pipe(delay(20), first())\n\n    const inputStateChanges$ = this.valueChanges$.pipe(\n      takeUntilDestroyed(this.destroyRef),\n      map((value) => this.buildInputState(value, true)),\n      skipUntil(viewStabilized$),\n      debounceTime(20)\n    )\n\n    const startDelayed$ = of('start').pipe(\n      delay(15),\n      map((start) => {\n        const state = this.buildInputState(this.ngModel.control.value, false)\n        return state\n      })\n    )\n\n    return concat(startDelayed$, inputStateChanges$)\n  }\n\n  private buildInputState(controlValue: any, userEvent: boolean): SearchInputState {\n    const queryValue = this.convertRawModelValueToQueryString(controlValue)\n    const filters = this._inputConverter.convertToFilters(queryValue)\n\n    return new SearchInputState(\n      this.queryKey,\n      filters,\n      this.areAllPristine(filters) || this.isFallbackValue(queryValue),\n      userEvent\n    )\n  }\n\n  private isFallbackValue(queryValue: InputValue): boolean {\n    if (this.hasFallback) {\n      return this.fallbackValue === queryValue\n    }\n    return false\n  }\n\n  private areAllPristine(filters: Filter[]): boolean {\n    return filters.every((f) => this.isPristine(f))\n  }\n\n  private isPristine(filter: Filter): boolean {\n    return !this.isAttributeValuePresent(filter.value)\n  }\n\n  private convertQueryStringToRawModelValue(queryString: FilterValue): FilterValue {\n    if (Objects.nonNull(queryString)) {\n      return queryString\n    }\n    return null\n  }\n\n  private convertRawModelValueToQueryString(controlValue: any): FilterValue {\n    let queryValue: FilterValue = null\n\n    if (this.valueAsId != undefined) {\n      queryValue = this.checkAndConvertFaultyValuesToNull(controlValue)\n    } else if (this.isAttributeValuePresent(controlValue)) {\n      // Attribute value is present\n      queryValue = this.resolveValue(controlValue)\n    } else {\n      if (this.hasFallback) {\n        queryValue = this.fallbackValue\n      }\n    }\n\n    return queryValue\n  }\n\n  private checkAndConvertFaultyValuesToNull(value: any) {\n    let fixedValue = value\n    fixedValue = this.convertEmptyArrayToNull(fixedValue)\n    fixedValue = this.convertEmptyStringToNull(fixedValue)\n\n    return fixedValue\n  }\n\n  private convertEmptyArrayToNull(value: any) {\n    if (value instanceof Array && value.length === 0) {\n      return null\n    }\n    return value\n  }\n\n  private convertEmptyStringToNull(value: any) {\n    if (typeof value === 'string' && value.length === 0) {\n      return null\n    }\n    return value\n  }\n\n  private isAttributeValuePresent(value: any): boolean {\n    return SearchInputState.isValueDefined(value) && (value + '').length !== 0\n  }\n\n  private resolveValue(value: any): string | string[] | null {\n    if (Objects.nonNull(value)) {\n      if (value instanceof Array) {\n        const resolvedValues = value\n          .map((v) => this.resolveSingleValue(v))\n          .filter((v) => Objects.nonNull(v))\n\n        return this.concatIfNecessary(resolvedValues)\n      } else {\n        return this.resolveSingleValue(value)\n      }\n    } else {\n      return null\n    }\n  }\n\n  private resolveSingleValue(value: any): string | string[] | null {\n    value = PropertyPathUtil.resolveValue(value, this.resolvePath)\n    value = this.valueTransform ? this.valueTransform(value) : value\n\n    if (Objects.nonNull(value)) {\n      if (value instanceof Array) {\n        return value.filter((i) => Objects.nonNull(i)).map((i) => i.toString())\n      } else {\n        return value.toString()\n      }\n    } else {\n      return null\n    }\n  }\n\n  private extractName(): string | null {\n    return this.ngModel.name\n  }\n\n  private concatIfNecessary(values: (string | string[])[]): any[] {\n    const arrays = values.map((v) => {\n      if (v instanceof Array) {\n        return v\n      } else {\n        return [v]\n      }\n    })\n    return CollectionUtil.flatten(arrays)\n  }\n}\n","import { ChangeDetectionStrategy, Component, Output, output, signal } from '@angular/core'\nimport { ElderOverlayComponent } from '../../../overlays/elder-overlay.component'\nimport { Observable, switchMap } from 'rxjs'\nimport { toObservable } from '@angular/core/rxjs-interop'\nimport { filter, startWith } from 'rxjs/operators'\n\n@Component({\n  selector: 'elder-search-panel',\n  template: '<ng-content></ng-content>',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class ElderSearchPanelComponent {\n  public readonly overlay = signal<ElderOverlayComponent>(undefined)\n\n  public readonly open$: Observable<boolean>\n\n  constructor() {\n    const overlay$ = toObservable(this.overlay).pipe(filter((overlay) => !!overlay))\n\n    this.open$ = overlay$.pipe(\n      switchMap((overlay) => overlay.attachedChange.pipe(startWith(overlay.attached)))\n    )\n  }\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  contentChild,\n  ContentChild,\n  effect,\n  ElementRef,\n  Input,\n  OnDestroy,\n  signal,\n  viewChild,\n  ViewChild,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderSearchContextDirective } from '../elder-search-context.directive'\nimport { ElderSearchPanelComponent } from './elder-search-panel.component'\nimport { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion'\nimport {\n  MatFormFieldAppearance,\n  MatFormField,\n  MatPrefix,\n  MatHint,\n  MatSuffix,\n} from '@angular/material/form-field'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderDialogPanelComponent } from '../../../panels/elder-dialog-panel/elder-dialog-panel.component'\nimport { ElderOverlayComponent } from '../../../overlays/elder-overlay.component'\nimport { MatBadge } from '@angular/material/badge'\nimport { ElderOverlayOriginDirective } from '../../../overlays/elder-overlay-origin.directive'\nimport { ElderSearchInputDirective } from '../elder-search-input.directive'\nimport { FormsModule } from '@angular/forms'\nimport { MatInput } from '@angular/material/input'\nimport { MatIcon } from '@angular/material/icon'\nimport { ElderOverlayTriggerDirective } from '../../../overlays/elder-overlay-trigger.directive'\nimport { MatIconButton, MatButton } from '@angular/material/button'\nimport { ElderFormFieldDenseDirective } from '../../directives/elder-form-field-dense.directive'\nimport { AsyncPipe } from '@angular/common'\nimport { SearchInputState } from '../domain/input/search-input-state'\nimport { OverlayRef } from '@angular/cdk/overlay'\n\n@Component({\n  selector: 'elder-search-box',\n  exportAs: 'elderSearchBox',\n  templateUrl: './elder-search-box.component.html',\n  styleUrls: ['./elder-search-box.component.scss'],\n  // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n  host: { class: 'elder-form-field-host' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatFormField,\n    ElderFormFieldDenseDirective,\n    MatIconButton,\n    MatPrefix,\n    ElderOverlayTriggerDirective,\n    MatIcon,\n    MatInput,\n    FormsModule,\n    ElderSearchInputDirective,\n    ElderOverlayOriginDirective,\n    MatHint,\n    MatSuffix,\n    MatBadge,\n    ElderOverlayComponent,\n    ElderDialogPanelComponent,\n    MatButton,\n    AsyncPipe,\n    TranslateModule,\n  ],\n})\nexport class ElderSearchBoxComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  // The search expression input Element\n  public search = viewChild.required<ElementRef<HTMLInputElement>>('search')\n  public readonly overlayComponent = viewChild.required(ElderOverlayComponent)\n\n  public readonly customSearchPanel = contentChild(ElderSearchPanelComponent)\n\n  /**\n   * Display the search panel immediately when the user enters the search box.\n   */\n  @Input()\n  public autoPanel = true\n\n  @Input()\n  public name = 'searchExpression'\n\n  @Input()\n  public queryKey = 'query'\n\n  @Input()\n  public placeholder: string\n\n  @Input()\n  public label: string\n\n  @Input()\n  public hint: string\n\n  private _dense = false\n\n  @Input()\n  public autocomplete = 'off'\n\n  @Input()\n  public appearance: MatFormFieldAppearance\n\n  public readonly touchedSearchInputs$: Observable<SearchInputState[]>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(public readonly searchContextDirective: ElderSearchContextDirective) {\n    this.touchedSearchInputs$ = searchContextDirective.touchedSearchInputs$\n    effect(() => {\n      const customSearchPanel = this.customSearchPanel()\n      const overlay = this.overlayComponent()\n      if (customSearchPanel) {\n        customSearchPanel.overlay.set(overlay)\n      }\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set dense(value: BooleanInput) {\n    this._dense = coerceBooleanProperty(value)\n  }\n\n  public get dense(): boolean {\n    return this._dense\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public blurFocus(event: any): void {\n    setTimeout(() => this.search().nativeElement.blur(), 0)\n  }\n\n  /**\n   * Occurs when the user clicks the clear search button\n   */\n  public clearSearch(event: any): void {\n    this.searchContextDirective.reset()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","<div class=\"layout-row place-stretch-center full flex\">\n  <mat-form-field\n    [appearance]=\"appearance\"\n    class=\"elder-search-box-field flex-auto my-xs\"\n    [class]=\"'elder-round-form-field'\"\n    subscriptSizing=\"dynamic\"\n    [elderDense]=\"dense\"\n  >\n    <button\n      matPrefix\n      mat-icon-button\n      type=\"button\"\n      [elderOverlayTrigger]=\"searchPanel\"\n      (click)=\"blurFocus($event)\"\n    >\n      <mat-icon>search</mat-icon>\n    </button>\n\n    <input\n      matInput\n      type=\"text\"\n      [name]=\"name\"\n      [placeholder]=\"placeholder\"\n      #search\n      cdkFocusInitial\n      ngModel\n      elderSearchInput\n      [elderSearchInputKey]=\"queryKey\"\n      #searchInput=\"elderSearchInput\"\n      [autocomplete]=\"autoPanel && customSearchPanel() ? 'off' : autocomplete\"\n      [elderOverlayOrigin]=\"searchPanel\"\n      [elderOverlayTrigger]=\"searchPanel\"\n      [elderOverlayTriggerType]=\"'focus'\"\n      [elderOverlayTriggerEnabled]=\"\n        autoPanel && customSearchPanel() && (searchInput?.state$ | async)?.pristine\n      \"\n    />\n\n    @if (hint) {\n      <mat-hint>{{ hint }}</mat-hint>\n    }\n\n    <div class=\"layout-row\" matSuffix>\n      @if (touchedSearchInputs$ | async; as touchedInputs) {\n        @if (touchedInputs.length > 0) {\n          <button\n            mat-icon-button\n            type=\"button\"\n            (click)=\"clearSearch($event)\"\n            name=\"clear\"\n            aria-label=\"Clear\"\n          >\n            <mat-icon>close</mat-icon>\n          </button>\n        }\n\n        @if (customSearchPanel()) {\n          <button\n            mat-icon-button\n            type=\"button\"\n            name=\"openPanel\"\n            [elderOverlayTrigger]=\"searchPanel\"\n            (click)=\"blurFocus($event)\"\n          >\n            <mat-icon\n              [matBadge]=\"touchedInputs.length\"\n              matBadgeSize=\"small\"\n              [matBadgeOverlap]=\"true\"\n              [matBadgeHidden]=\"touchedInputs.length === 0\"\n              matBadgeColor=\"accent\"\n              [color]=\"touchedInputs.length > 0 ? 'accent' : undefined\"\n              aria-hidden=\"false\"\n            >\n              filter_list\n            </mat-icon>\n          </button>\n        }\n      }\n    </div>\n  </mat-form-field>\n</div>\n\n<!-- Overlay Panel for advanced search -->\n<elder-overlay #searchPanel=\"elderOverlay\">\n  <elder-dialog-panel class=\"elder-search-panel-container\">\n    <!-- Project the users custom search panel here -->\n    <ng-content select=\"elder-search-panel\"></ng-content>\n\n    <div class=\"layout-row place-between-center\">\n      <button mat-button type=\"button\" name=\"clear\" (click)=\"clearSearch($event)\">\n        {{ 'context.reset' | translate }}\n      </button>\n\n      <button\n        mat-flat-button\n        type=\"button\"\n        name=\"ok\"\n        color=\"primary\"\n        (click)=\"searchPanel.closeOverlay()\"\n      >\n        Ok\n      </button>\n    </div>\n  </elder-dialog-panel>\n</elder-overlay>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderOverlayComponent } from './elder-overlay.component'\nimport { OverlayModule } from '@angular/cdk/overlay'\nimport { ElderOverlayTriggerDirective } from './elder-overlay-trigger.directive'\nimport { ElderOverlayOriginDirective } from './elder-overlay-origin.directive'\n\nexport { ElderOverlayComponent } from './elder-overlay.component'\nexport { ElderOverlayTriggerDirective } from './elder-overlay-trigger.directive'\nexport { ElderOverlayOriginDirective } from './elder-overlay-origin.directive'\nexport { ElderOverlayRef } from './elder-overlay-ref'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    OverlayModule,\n    ElderOverlayComponent,\n    ElderOverlayTriggerDirective,\n    ElderOverlayOriginDirective,\n  ],\n  exports: [ElderOverlayComponent, ElderOverlayTriggerDirective, ElderOverlayOriginDirective],\n})\nexport class ElderOverlayModule {}\n","import { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Filter } from '../../../../../common/data/filters/filter'\nimport { convertToParamMap, ParamMap, Params } from '@angular/router'\n\ninterface FilterParamData {\n  searchContextId: string\n  filterId: string\n  isArray: boolean\n}\n\nexport class SearchQueryParamsParser {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n  private readonly queryPrefix: string // \"q\"\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(queryPrefix: string) {\n    this.queryPrefix = queryPrefix\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public parse(params: Params): Map<string, Filter[]> {\n    const paramMap = convertToParamMap(params)\n    const searchParamKeys = this.extractSearchParameters(paramMap)\n    return this.buildSearchContextMap(paramMap, searchParamKeys)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private extractSearchParameters(paramMap: ParamMap): string[] {\n    return paramMap.keys.filter((param) => param.startsWith(this.queryPrefix + '-'))\n  }\n\n  private buildSearchContextMap(\n    paramMap: ParamMap,\n    searchParamKeys: string[]\n  ): Map<string, Filter[]> {\n    const filtersByContextId = new Map<string, Filter[]>()\n    for (const key of searchParamKeys) {\n      const filterValues = paramMap.getAll(key)\n      const filterValue = filterValues[0] // TODO Support multiple values\n      const filterParamData = this.extractFilterParam(key, filterValue)\n      const filter = this.convertFilterStringToFilter(filterValue, filterParamData)\n      this.checkAndSetFilter(filtersByContextId, filterParamData.searchContextId, filter)\n    }\n    return filtersByContextId\n  }\n\n  private checkAndSetFilter(\n    filtersByContextId: Map<string, Filter[]>,\n    searchContextId: string,\n    filter: Filter\n  ): void {\n    let filtersInContext = filtersByContextId.get(searchContextId)\n    if (!filtersInContext) {\n      filtersInContext = []\n      filtersByContextId.set(searchContextId, filtersInContext)\n    }\n    filtersInContext.push(filter)\n  }\n\n  private extractFilterParam(key: string, filterValue: string): FilterParamData {\n    const splitParams = key.split('-')\n\n    return {\n      searchContextId: splitParams[1],\n      filterId: splitParams[2],\n      isArray: this.checkIfParamIsArray(filterValue),\n    }\n  }\n\n  private convertFilterStringToFilter(\n    paramValue: string,\n    filterParamData: FilterParamData\n  ): Filter {\n    let value: string | string[] = paramValue\n\n    if (this.isSingularArrayValue(value, filterParamData)) {\n      value = this.convertValueToArray(value)\n    }\n\n    return new Filter(filterParamData.filterId, value)\n  }\n\n  private isSingularArrayValue(\n    value: string | string[],\n    filterParamData: FilterParamData\n  ): boolean {\n    return !Array.isArray(value) && filterParamData.isArray\n  }\n\n  private convertValueToArray(value: string): string[] {\n    return value.slice(1).slice(0, -1).split(',')\n  }\n\n  private checkIfParamIsArray(filterValue: string): boolean {\n    return filterValue.startsWith('(') && filterValue.endsWith(')')\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport {\n  ActivatedRouteSnapshot,\n  EventType,\n  Params,\n  Router,\n  RouterEvent,\n  RouterStateSnapshot,\n} from '@angular/router'\nimport { filter, map } from 'rxjs/operators'\nimport { Filter } from '../../../../../common/data/filters/filter'\nimport { SearchQueryParamsParser } from './search-query-params-parser'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { FilterUtil } from '../../../../../common/utils/filter/filter-util'\n\nexport class UrlFilterByContext {\n  private readonly byContext: Map<string, UrlFilters>\n\n  constructor(urlFiltersByContext?: Map<string, UrlFilters>) {\n    this.byContext = urlFiltersByContext ?? new Map()\n  }\n\n  public filtersOf(contextId: string): UrlFilters {\n    return this.byContext.get(contextId)\n  }\n\n  public static empty(): UrlFilterByContext {\n    return new UrlFilterByContext()\n  }\n\n  public withUrlFilters(current: Map<string, Filter[]>): UrlFilterByContext {\n    const copy = new Map(this.byContext)\n    current.forEach((v, k) => copy.set(k, new UrlFilters(v)))\n    return new UrlFilterByContext(copy)\n  }\n}\n\nexport class UrlFilters {\n  private readonly filters: Filter[]\n  public consumed = false\n\n  constructor(filters: Filter[]) {\n    this.filters = [...filters]\n  }\n\n  public consumeFilters(): Filter[] {\n    this.consumed = true\n    return this.filters\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderSearchUrlService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n  private readonly SEARCH_QUERY_KEY = 'q'\n  private readonly paramsParser = new SearchQueryParamsParser(this.SEARCH_QUERY_KEY)\n\n  private readonly urlFiltersByContext$ = new BehaviorSubject<UrlFilterByContext>(\n    UrlFilterByContext.empty()\n  )\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private router: Router) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public init(): void {\n    // this.logRouterEvents();\n    this.router.events\n      .pipe(\n        filter((event) => event.type === EventType.NavigationEnd),\n        map((event) => this.extractUrlFilters(this.router.routerState.snapshot))\n      )\n      .subscribe((currentContextFilters) => this.updateSeenUrlFilters(currentContextFilters))\n  }\n\n  public urlFiltersOfContext$(contextId: string): Observable<UrlFilters> {\n    if (!contextId) {\n      throw new Error('Illegal contextId Argument: ' + contextId)\n    }\n    return this.urlFiltersByContext$.pipe(\n      map((byContext) => byContext.filtersOf(contextId)),\n      filter((filters) => !!filters)\n    )\n  }\n\n  public updateQueryParams(contextId: string, filters: Filter[]): void {\n    if (!contextId) throw new Error('Illegal searchContextId Argument: ' + contextId)\n    if (!filters) throw new Error('Illegal filters Argument: ' + contextId)\n\n    filters = filters.filter((f) => f.value !== null && f.value !== undefined)\n    const currentUrlAll = this.extractUrlFilters(this.router.routerState.snapshot)\n    const currentUrl = currentUrlAll.get(contextId) ?? []\n\n    if (!FilterUtil.equals(filters, currentUrl)) {\n      const resetParams = this.resetSearchParams(contextId, currentUrl)\n      const queryParams = { ...resetParams, ...this.buildQueryParams(contextId, filters) }\n\n      this.log.debug('writeUrlQueryParams: ' + contextId, {\n        searchMap: filters,\n        queryParams: queryParams,\n      })\n\n      this.router.navigate([], {\n        queryParams: queryParams,\n        replaceUrl: true,\n        queryParamsHandling: 'merge',\n      })\n    } else {\n      // this.log.info('writeUrlQueryParams PREVENTED')\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private updateSeenUrlFilters(current: Map<string, Filter[]>): void {\n    if (current.size > 0) {\n      const filtersByContext = this.urlFiltersByContext$.getValue()\n      const newUrlFilters = filtersByContext.withUrlFilters(current)\n      this.log.debug('updateSeenUrlFilters:', newUrlFilters)\n      this.urlFiltersByContext$.next(newUrlFilters)\n    }\n  }\n\n  private logRouterEvents(): void {\n    this.router.events\n      .pipe(map((e) => e as RouterEvent))\n      .subscribe((e) =>\n        this.log.debug('ROUTER-EVENT [' + e.constructor.name + ']#' + e.id + ': ' + e.url)\n      )\n  }\n\n  private parseUrlFilters(params: Params): Map<string, Filter[]> {\n    return this.paramsParser.parse(params)\n  }\n\n  private collectAllRouteParams(routerState: RouterStateSnapshot): Params {\n    return this.collectRouteQueryParams(routerState.root)\n  }\n\n  private collectRouteQueryParams(root: ActivatedRouteSnapshot): Params {\n    let params: Params = {}\n    const stack: ActivatedRouteSnapshot[] = [root]\n    while (stack.length > 0) {\n      const route = stack.pop()!\n      params = { ...params, ...route.queryParams }\n      stack.push(...route.children)\n    }\n    return params\n  }\n\n  private extractUrlFilters(routerState: RouterStateSnapshot): Map<string, Filter[]> {\n    const params = this.collectAllRouteParams(routerState)\n    return this.parseUrlFilters(params)\n  }\n\n  private resetSearchParams(searchContextId: string, urlFiltersOf: Filter[]): Params {\n    if (urlFiltersOf && urlFiltersOf.length > 0) {\n      const params: Params = {}\n      urlFiltersOf.forEach((toRemove) => {\n        params[this.queryParamKey(searchContextId, toRemove)] = null\n      })\n      return params\n    }\n    return {}\n  }\n\n  private buildQueryParams(searchContextId: string, filters: Filter[]): Params {\n    const params: Params = {}\n    for (const filter of filters) {\n      params[this.queryParamKey(searchContextId, filter)] = this.convertValueToArrayOrSingleValue(\n        filter.value\n      )\n    }\n    return params\n  }\n\n  private queryParamKey(searchContextId: string, filter: Filter): string {\n    return `${this.SEARCH_QUERY_KEY}-${searchContextId}-${filter.key}`\n  }\n\n  private convertValueToArrayOrSingleValue(value: string | string[]): string {\n    return Array.isArray(value) ? `(${value.toString()})` : value\n  }\n}\n","import { AfterViewInit, DestroyRef, Directive, OnDestroy } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { filter, map, takeUntil } from 'rxjs/operators'\nimport { ElderSearchContextDirective } from '../../elder-search-context.directive'\nimport { Observable, Subject, switchMap } from 'rxjs'\nimport { SearchContext } from '../context/search-context'\nimport { ElderSearchUrlService, UrlFilters } from './elder-search-url.service'\nimport { Filter } from '../../../../../common/data/filters/filter'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\n\nclass ContextWithUrlFilters {\n  constructor(\n    public readonly context: SearchContext,\n    public readonly urlFilters: UrlFilters\n  ) {}\n}\n\nclass ContextWithUserFilters {\n  constructor(\n    public readonly context: SearchContext,\n    public readonly userFilters: Filter[]\n  ) {}\n}\n\n/**\n * The search container manages a group of search-inputs\n * and holds their values in a central search model.\n */\n@Directive({\n  selector: '[elderSearchUrl]',\n  exportAs: 'elderSearchUrl',\n  standalone: true,\n})\nexport class ElderSearchUrlDirective implements AfterViewInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly searchContext$: Observable<SearchContext>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    searchContextDirective: ElderSearchContextDirective,\n    private readonly destroyRef: DestroyRef,\n    private readonly searchUrlService: ElderSearchUrlService\n  ) {\n    this.searchContext$ = searchContextDirective.searchContext$.pipe(\n      takeUntilDestroyed(destroyRef),\n      filter((searchContext) => this.contextSupportsSearchUrl(searchContext))\n    )\n\n    this.searchContext$\n      .pipe(\n        switchMap((ctx) =>\n          this.searchUrlService\n            .urlFiltersOfContext$(ctx.id)\n            .pipe(map((urlFilters) => new ContextWithUrlFilters(ctx, urlFilters)))\n        )\n      )\n      .subscribe({\n        next: (ctxUrls) => {\n          this.applyUrlFilters(ctxUrls.context, ctxUrls.urlFilters)\n        },\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit(): void {\n    this.searchContext$\n      .pipe(\n        switchMap((searchContext) =>\n          searchContext.userFilters$.pipe(\n            map((filters) => new ContextWithUserFilters(searchContext, filters))\n          )\n        )\n      )\n      .subscribe((ctxAndFilters) =>\n        this.searchUrlService.updateQueryParams(ctxAndFilters.context.id, ctxAndFilters.userFilters)\n      )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private applyUrlFilters(context: SearchContext, urlFilters: UrlFilters): void {\n    if (!urlFilters.consumed) {\n      const consumedFilters = urlFilters.consumeFilters()\n      if (consumedFilters.length > 0) {\n        this.log.debug('URL SEARCH BINDING Replacing Filters: ', {\n          context: context,\n          urlFilters: consumedFilters,\n        })\n        context.replaceUserFilters(consumedFilters)\n      }\n    }\n  }\n\n  private contextSupportsSearchUrl(searchContext: SearchContext): boolean {\n    return searchContext.id !== null && searchContext.id !== undefined // Standalone Context has no id\n  }\n}\n","import { APP_INITIALIZER, NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderSearchContextDirective } from './elder-search-context.directive'\nimport { ElderSearchInputDirective } from './elder-search-input.directive'\nimport { ElderSearchBoxComponent } from './search-box/elder-search-box.component'\nimport { FormsModule } from '@angular/forms'\nimport { MatBadgeModule } from '@angular/material/badge'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatInputModule } from '@angular/material/input'\nimport { A11yModule } from '@angular/cdk/a11y'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderOverlayModule } from '../../overlays/elder-overlay.module'\nimport { ElderSearchPanelComponent } from './search-box/elder-search-panel.component'\nimport { ElderPanelModule } from '../../panels/elder-panel.module'\nimport { ElderFormsDirectivesModule } from '../directives/elder-forms-directives.module'\nimport { ElderSearchUrlDirective } from './domain/url/elder-search-url.directive'\nimport { ElderInitialValueDirective } from '../directives/elder-initial-value.directive'\nimport { ElderSearchUrlService } from './domain/url/elder-search-url.service'\n\nexport { ElderSearchContextDirective } from './elder-search-context.directive'\nexport { ElderSearchUrlDirective } from './domain/url/elder-search-url.directive'\nexport { ElderSearchInputDirective } from './elder-search-input.directive'\nexport { ElderSearchBoxComponent } from './search-box/elder-search-box.component'\nexport { ElderSearchPanelComponent } from './search-box/elder-search-panel.component'\n\n// Because of AOT Compiler\nexport function initSearchUrlService(searchUrlService: ElderSearchUrlService) {\n  // Hack to use Lambda here!\n  return () => {\n    searchUrlService.init()\n  }\n}\n\n@NgModule({\n  providers: [\n    {\n      provide: APP_INITIALIZER,\n      useFactory: initSearchUrlService,\n      deps: [ElderSearchUrlService],\n      multi: true,\n    },\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatInputModule,\n    MatButtonModule,\n    MatIconModule,\n    MatBadgeModule,\n    A11yModule,\n    ElderOverlayModule,\n    ElderPanelModule,\n    ElderFormsDirectivesModule,\n    TranslateModule,\n    ElderSearchContextDirective,\n    ElderSearchUrlDirective,\n    ElderSearchInputDirective,\n    ElderInitialValueDirective,\n    ElderSearchBoxComponent,\n    ElderSearchPanelComponent,\n  ],\n  exports: [\n    ElderSearchContextDirective,\n    ElderSearchUrlDirective,\n    ElderSearchInputDirective,\n    ElderSearchBoxComponent,\n    ElderSearchPanelComponent,\n  ],\n})\nexport class ElderSearchModule {}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { ElderFormsDirectivesModule } from './directives/elder-forms-directives.module'\nimport { ElderSearchModule } from './search/elder-search.module'\n\nexport * from './clipboard/elder-clipboard.service'\nexport * from './directives/elder-forms-directives.module'\nexport * from './search/elder-search.module'\n\n@NgModule({\n  imports: [CommonModule, ElderFormsDirectivesModule, ElderSearchModule],\n  declarations: [],\n  exports: [ElderFormsDirectivesModule, ElderSearchModule],\n})\nexport class ElderFormsModule {}\n","import { Pipe, PipeTransform } from '@angular/core'\nimport { Localized } from '../../../../common/i18n/entity/localized'\nimport { LocalisationPickerService } from './localisation-picker.service'\nimport { LanguageTag } from '../../../../common/i18n/entity/language-tag'\nimport { Observable, of } from 'rxjs'\nimport { map } from 'rxjs/operators'\n\n@Pipe({\n  name: 'i18nPick$',\n  standalone: true,\n})\nexport class I18nPickAsyncPipe implements PipeTransform {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly pickerService: LocalisationPickerService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public transform(\n    choices: Localized[],\n    field: string = 'text',\n    desiredTag?: LanguageTag\n  ): Observable<string> {\n    let picked$: Observable<string | undefined>\n\n    if (desiredTag) {\n      picked$ = of(this.pickerService.pickText(choices, desiredTag))\n    } else {\n      picked$ = this.pickerService.pickCurrentText(choices)\n    }\n\n    return picked$.pipe(map((picked) => picked ?? '-'))\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\nimport { LocalisationPickerService } from './localisation-picker.service'\nimport { Localized } from '../../../../common/i18n/entity/localized'\nimport { LanguageTag } from '../../../../common/i18n/entity/language-tag'\n\n@Pipe({\n  name: 'i18nPick',\n  standalone: true,\n})\nexport class I18nPickPipe implements PipeTransform {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly pickerService: LocalisationPickerService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public transform(choices: Localized[], field: string = 'text', desiredTag?: LanguageTag): string {\n    return this.pickerService.pickText(choices, field, desiredTag) ?? '-'\n  }\n}\n","import { AfterViewInit, ContentChildren, Directive, OnDestroy, QueryList } from '@angular/core'\nimport { Subject } from 'rxjs'\nimport { ElderLocalizedTextColumnDirective } from './elder-localized-text-column.directive'\nimport { QueryListBinding } from '../../../common/utils/query-list-binding'\nimport { ElderLocalizedInputComponent } from './elder-localized-input/elder-localized-input.component'\n\n/**\n * This directive collects all localized text columns in its host content\n * and injects it into a parent elder-localized-input.\n *\n * This is useful if the same custom localizable is used multiple times,\n * so that configuration of the columns must only be defined once.\n *\n */\n@Directive({\n  selector: '[elderElderLocalizedTexts]',\n  standalone: true,\n})\nexport class ElderLocalizedTextsDirective implements AfterViewInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @ContentChildren(ElderLocalizedTextColumnDirective)\n  public textColumnsQuery: QueryList<ElderLocalizedTextColumnDirective>\n\n  private readonly destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly localizedInputComponent: ElderLocalizedInputComponent) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit(): void {\n    QueryListBinding.of(this.textColumnsQuery)\n      .updated((columns) => {\n        if (columns?.length > 0) {\n          this.localizedInputComponent.textColumns = columns\n        }\n      })\n      .bindUntil(this.destroy$)\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderTableModule } from '../../data-view/table/elder-table.module'\nimport { MatTableModule } from '@angular/material/table'\nimport { MatSortModule } from '@angular/material/sort'\nimport { MatInputModule } from '@angular/material/input'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { FormsModule } from '@angular/forms'\nimport { ElderLocalizedInputTableComponent } from './elder-localized-input-table/elder-localized-input-table.component'\nimport { ElderLocalizedTextColumnDirective } from './elder-localized-text-column.directive'\nimport { MatChipsModule } from '@angular/material/chips'\nimport { ElderCardModule } from '../../cards/elder-card/elder-card.module'\nimport { ElderLocalizedInputDialogComponent } from './elder-localized-input-dialog/elder-localized-input-dialog.component'\nimport { MatDialogModule } from '@angular/material/dialog'\nimport { MatButtonModule } from '@angular/material/button'\nimport { A11yModule } from '@angular/cdk/a11y'\nimport { ElderLocalizedInputComponent } from './elder-localized-input/elder-localized-input.component'\nimport { MatIconModule } from '@angular/material/icon'\nimport { ElderFormsModule } from '../../forms/elder-forms.module'\nimport { MatToolbarModule } from '@angular/material/toolbar'\nimport { I18nPickAsyncPipe } from './picker/i18n-pick-async.pipe'\nimport { I18nPickPipe } from './picker/i18n-pick.pipe'\nimport { ElderLocalizedTextsDirective } from './elder-localized-texts.directive'\nimport { ElderThemeModule } from '../../theme/elder-theme.module'\n\nexport * from './elder-localized-text-column.directive'\nexport * from './elder-localized-texts.directive'\nexport * from './elder-localized-input-table/elder-localized-input-table.component'\nexport * from './elder-localized-input-dialog/elder-localized-input-dialog.component'\nexport * from './elder-localized-input-dialog.service'\nexport * from './elder-localized-input/elder-localized-input.component'\nexport * from './picker/localisation-picker.service'\nexport * from './picker/i18n-pick.pipe'\nexport * from './picker/i18n-pick-async.pipe'\n\n@NgModule({\n  exports: [\n    ElderLocalizedTextColumnDirective,\n    ElderLocalizedTextsDirective,\n    ElderLocalizedInputTableComponent,\n    ElderLocalizedInputDialogComponent,\n    ElderLocalizedInputComponent,\n    I18nPickPipe,\n    I18nPickAsyncPipe,\n  ],\n  imports: [\n    CommonModule,\n    MatTableModule,\n    MatSortModule,\n    MatInputModule,\n    TranslateModule,\n    FormsModule,\n    ElderTableModule,\n    MatChipsModule,\n    ElderCardModule,\n    MatDialogModule,\n    MatButtonModule,\n    A11yModule,\n    MatIconModule,\n    ElderFormsModule,\n    MatToolbarModule,\n    ElderThemeModule,\n    ElderLocalizedTextColumnDirective,\n    ElderLocalizedTextsDirective,\n    ElderLocalizedInputTableComponent,\n    ElderLocalizedInputDialogComponent,\n    ElderLocalizedInputComponent,\n    I18nPickPipe,\n    I18nPickAsyncPipe,\n  ],\n})\nexport class ElderI18nEntitiesModule {}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  forwardRef,\n  input,\n  Input,\n  Optional,\n  Output,\n  Signal,\n} from '@angular/core'\nimport { SelectionEventSource, SelectionModel } from '../../../common/selection/selection-model'\nimport { ELDER_DATA_VIEW, IElderDataView } from '../../data-view/base/elder-data-view'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, Observable, switchMap } from 'rxjs'\nimport { filter, map } from 'rxjs/operators'\nimport { ThemePalette } from '@angular/material/core'\nimport { NgClass } from '@angular/common'\nimport { MatChipListbox, MatChipOption } from '@angular/material/chips'\nimport { IDataContext } from '../../../common/data/data-context/data-context'\nimport { LocalListDataSource } from '../../../common/data/datasource/local/local-list-data-source'\nimport { IDataSource } from '../../../common/data/datasource/data-source'\nimport { DataContextBuilder } from '../../../common/data/data-context/data-context-builder'\nimport { booleanTransformFn } from '../../../common/utils/signal-input'\nimport { toSignal } from '@angular/core/rxjs-interop'\n\n@Component({\n  selector: ' elder-chip-list-select',\n  templateUrl: './elder-chip-list-select.component.html',\n  styleUrls: ['./elder-chip-list-select.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: ELDER_DATA_VIEW,\n      useExisting: forwardRef(() => ElderChipListSelectComponent),\n    },\n  ],\n  imports: [MatChipListbox, NgClass, MatChipOption],\n})\nexport class ElderChipListSelectComponent<T = any> implements IElderDataView {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _dataSource$ = new BehaviorSubject<IDataSource<T>>(null)\n  private readonly _dataContext$ = new BehaviorSubject<IDataContext<T>>(null)\n\n  /**\n   * The property used to compare two values.\n   * Useful if the values are entities with an id property.\n   */\n  @Input()\n  public idField = 'id'\n\n  /**\n   * The property whose values should be used for item display.\n   */\n  @Input()\n  public displayField: string = null\n\n  /**\n   * The color used to indicated selection.\n   */\n  @Input()\n  public color: ThemePalette = 'primary'\n\n  /**\n   * If the chip list should be stacked.\n   */\n  public stacked = input(false, { transform: booleanTransformFn })\n\n  @Output()\n  public itemClick: EventEmitter<any> = new EventEmitter<any>()\n\n  public readonly items: Signal<T[]>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(@Optional() public selectionModel: SelectionModel<T>) {\n    this.items = toSignal(\n      this.dataContext$.pipe(\n        filter((dc) => !!dc),\n        switchMap((dc) => dc.data)\n      )\n    )\n\n    if (!selectionModel) {\n      this.selectionModel = new SelectionModel<T>(false, [], (entity) =>\n        entity ? this.getId(entity) : 0\n      )\n    }\n  }\n\n  public hasItemFocus(item: any): boolean {\n    throw new Error('Method \"hasItemFocus\" not implemented.')\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set data(data: T[]) {\n    if (data) {\n      this.dataSource = LocalListDataSource.from(data, this.idField)\n    }\n  }\n\n  @Input()\n  public set dataSource(dataSource: IDataSource<T>) {\n    this._dataSource$.next(dataSource)\n    this._dataContext$.next(DataContextBuilder.start<T>().autoStartAsap().build(dataSource))\n  }\n\n  public get dataContext$(): Observable<IDataContext<T>> {\n    return this._dataContext$\n  }\n\n  @Input()\n  public set selection(selection: T[]) {\n    this.selectionModel.replaceSelection(selection, {\n      source: SelectionEventSource.SYSTEM,\n      info: 'set:ElderChipListSelection.selection',\n    })\n  }\n\n  @Output()\n  public get selectionChange(): Observable<T[]> {\n    return this.selectionModel.changed\n  }\n\n  @Output()\n  public get selectionSingleChange(): Observable<any> {\n    return this.selectionModel.changed.pipe(\n      map((selection) => {\n        if (selection.length > 0) {\n          return selection[0]\n        } else {\n          return null\n        }\n      })\n    )\n  }\n\n  @Input()\n  public set selectionMultiEnabled(enableMultiSelection: boolean) {\n    if (this.selectionModel) {\n      this.selectionModel.isMultipleSelection = enableMultiSelection\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Component Events                                                        *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Occurs when the user clicks on item\n   */\n  public onItemClick(entity: any): void {\n    this.selectionModel.toggle(entity, {\n      source: SelectionEventSource.USER_MOUSE_CLICK,\n      info: 'ElderChipListSelect.itemClick',\n    })\n    this.itemClick.next(entity)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public getDisplayText(value: any): any {\n    if (this.displayField && value) {\n      return (<any>value)[this.displayField]\n    }\n    return value\n  }\n\n  public isSelected(value: any): boolean {\n    return this.selectionModel.isSelected(value)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  public getId(entity: any): any {\n    const dc = this._dataContext$.value\n    return dc.dataSource.getId(entity)\n  }\n}\n","<div class=\"layout-col full\">\n  <mat-chip-listbox\n    [multiple]=\"selectionModel.isMultipleSelection\"\n    [ngClass]=\"{ 'mat-mdc-chip-set-stacked': stacked() }\"\n  >\n    @for (item of items(); track getId(item)) {\n      <mat-chip-option\n        selectable\n        [selected]=\"isSelected(item)\"\n        (click)=\"onItemClick(item)\"\n        [color]=\"color\"\n      >\n        {{ getDisplayText(item) }}\n      </mat-chip-option>\n    }\n  </mat-chip-listbox>\n</div>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { A11yModule } from '@angular/cdk/a11y'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderChipListSelectComponent } from './chip-list-select/elder-chip-list-select.component'\nimport { MatChipsModule } from '@angular/material/chips'\n\nexport { ElderChipListSelectComponent } from './chip-list-select/elder-chip-list-select.component'\n\n@NgModule({\n  imports: [\n    // Angular\n    CommonModule,\n    // Third Party\n    TranslateModule,\n    // Material\n    MatChipsModule,\n    A11yModule,\n    ElderChipListSelectComponent,\n  ],\n  exports: [ElderChipListSelectComponent],\n})\nexport class ElderChipListSelectModule {}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core'\nimport { BehaviorSubject, Observable, switchMap } from 'rxjs'\nimport { filter, map } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { HttpDataTransfer } from '../../../common/http/transfer/http-data-transfer'\nimport { DataTransferState } from '../../../common/http/transfer/data-transfer-state'\nimport { BytesPerSecondFormat } from '../../../common/format/bytes-per-second-format'\nimport { BytesFormat } from '../../../common/format/bytes-format'\nimport { DataTransferStatus } from '../../../common/http/transfer/data-transfer-status'\nimport { MatIconButton } from '@angular/material/button'\nimport { MatTooltip } from '@angular/material/tooltip'\nimport { MatProgressBar } from '@angular/material/progress-bar'\nimport { MatIcon } from '@angular/material/icon'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-data-transfer',\n  templateUrl: './http-data-transfer.component.html',\n  styleUrls: ['./http-data-transfer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatIcon, MatProgressBar, MatTooltip, MatIconButton, AsyncPipe],\n})\nexport class HttpDataTransferComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private logger = LoggerFactory.getLogger(this.constructor.name)\n  private _transfer$ = new BehaviorSubject<HttpDataTransfer>(null)\n\n  public readonly $state: Observable<DataTransferState>\n  public readonly $detail: Observable<string>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this.$state = this._transfer$.pipe(\n      filter((transfer) => !!transfer),\n      switchMap((transfer) => transfer.state$)\n    )\n    this.$detail = this.$state.pipe(\n      map((state) => this.renderTransferProgress(state))\n      // tap(message => this.logger.info(message))\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get transfer(): HttpDataTransfer {\n    return this._transfer$.getValue()\n  }\n\n  @Input()\n  public set transfer(value: HttpDataTransfer) {\n    this._transfer$.next(value)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public statusIcon(state: DataTransferState): string {\n    switch (state.status) {\n      case DataTransferStatus.Pending:\n        return 'pending'\n      case DataTransferStatus.Transferring:\n        return 'cloud_sync'\n      case DataTransferStatus.Completed:\n        return 'check'\n      case DataTransferStatus.Aborted:\n        return 'block'\n      case DataTransferStatus.Failed:\n        return 'error'\n      default:\n        return 'help_outline'\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private renderTransferProgress(state: DataTransferState): string {\n    if (state.isAborted) {\n      return 'Canceled.'\n    }\n    if (state.hasFailed) {\n      return 'Failed!'\n    }\n\n    const e = state.progress\n\n    // 100Mb of 332Mb (1200Kb/sec)\n    if (e.percentDone === 100) {\n      return (\n        BytesFormat.format(e.doneBytes) +\n        '( ' +\n        BytesPerSecondFormat.formatAsBitsPerSecond(e.avgBytesPerSec) +\n        ')'\n      )\n    } else {\n      let progress = BytesFormat.format(e.doneBytes) + ' of ' + BytesFormat.format(e.totalBytes)\n\n      if (e.bytesPerSec) {\n        progress += ' (' + BytesPerSecondFormat.formatAsBitsPerSecond(e.bytesPerSec) + ')'\n      }\n      return progress\n    }\n  }\n}\n","@if ($state | async; as state) {\n  <div class=\"layout-row place-start-center gap-lg flex p-md transfer\">\n    <div class=\"layout-col place-center-center flex-10\">\n      <mat-icon class=\"noselect\">\n        {{ statusIcon(state) }}\n      </mat-icon>\n      <!--\n      <mat-icon\n        *ngIf=\"!(statusOf(file)?.error | async) && (statusOf(file)?.progress | async) === 100\"\n        class=\"green-icon\"\n      >check</mat-icon>\n      -->\n    </div>\n    <div class=\"layout-col flex-80\" style=\"overflow: hidden\">\n      <span class=\"mat-subtitle-2 noselect title\">{{ transfer.name }}</span>\n      <mat-progress-bar\n        [matTooltip]=\"state.error?.message\"\n        [color]=\"state.error ? 'warn' : ''\"\n        mode=\"determinate\"\n        [value]=\"state.progress.percentDone\"\n      ></mat-progress-bar>\n      <span class=\"mat-caption noselect\">{{ $detail | async }}</span>\n    </div>\n    <div class=\"layout-col place-center-center flex-10\">\n      <button mat-icon-button type=\"button\" (click)=\"transfer.abort()\" [disabled]=\"state.isDone\">\n        <mat-icon> close </mat-icon>\n      </button>\n    </div>\n  </div>\n}\n","import { Injectable } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, combineLatest, Observable, of, Subject, switchMap } from 'rxjs'\nimport { catchError, map, mergeMap, startWith, tap } from 'rxjs/operators'\nimport { HttpDataTransfer } from '../../common/http/transfer/http-data-transfer'\nimport { DataTransferProgressAggregate } from '../../common/http/transfer/data-transfer-progress-aggregate'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderDataTransferService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _transfers = new BehaviorSubject<HttpDataTransfer[]>([])\n  private readonly _uploadQueue = new Subject<HttpDataTransfer>()\n  private _parallelUploads = 1\n\n  private readonly _completed = new Subject<HttpDataTransfer>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this._uploadQueue\n      .pipe(\n        mergeMap(\n          (transfer) =>\n            transfer.start().pipe(\n              catchError((err) => of(err)), // Avoid killing queue\n              tap({ complete: () => this._completed.next(transfer) })\n            ),\n          this._parallelUploads\n        )\n      )\n      .subscribe({\n        error: (err) => this.logger.error('Data transfer failed', err),\n      })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get transfers(): Observable<HttpDataTransfer[]> {\n    return this._transfers.asObservable()\n  }\n\n  public get transfersSnapshot(): HttpDataTransfer[] {\n    return [...this._transfers.value]\n  }\n\n  public get transferCompleted(): Observable<HttpDataTransfer> {\n    return this._completed.asObservable()\n  }\n\n  public get transferAggregate(): Observable<DataTransferProgressAggregate> {\n    return this.transfers.pipe(\n      switchMap((transfers) => this.aggregateProgress(transfers)),\n      startWith(DataTransferProgressAggregate.Empty)\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Enqueue and schedule a single data transfer\n   * @param transfer\n   */\n  public enqueue(transfer: HttpDataTransfer): HttpDataTransfer {\n    return this.enqueueAll([transfer])[0]\n  }\n\n  /**\n   * Enqueue and schedule all given data transfers\n   * @param transfers\n   */\n  public enqueueAll(transfers: HttpDataTransfer[]): HttpDataTransfer[] {\n    this.addToQueue(transfers)\n    const allTransfers = [...this._transfers.value, ...transfers]\n    this._transfers.next(allTransfers)\n    return transfers\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private addToQueue(newTransfers: HttpDataTransfer[]): void {\n    newTransfers.forEach((t) => this._uploadQueue.next(t))\n  }\n\n  private aggregateProgress(\n    transfers: HttpDataTransfer[]\n  ): Observable<DataTransferProgressAggregate> {\n    const transfersInProgress = transfers\n      .filter((t) => !t.stateSnapshot.isDone)\n      .map((t) => t.state$)\n\n    return combineLatest(transfersInProgress).pipe(\n      map((latestTransferStates) => DataTransferProgressAggregate.aggregate(latestTransferStates))\n    )\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { ElderDataTransferService } from '../elder-data-transfer.service'\nimport { DataTransferProgressAggregate } from '../../../common/http/transfer/data-transfer-progress-aggregate'\nimport { BytesPipe } from '../../../pipes/bytes.pipe'\nimport { MatProgressBar } from '@angular/material/progress-bar'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-data-transfer-aggregate',\n  templateUrl: './http-data-transfer-aggregate.component.html',\n  styleUrls: ['./http-data-transfer-aggregate.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatProgressBar, AsyncPipe, BytesPipe],\n})\nexport class HttpDataTransferAggregateComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public aggregate$: Observable<DataTransferProgressAggregate>\n\n  @Input()\n  public hiddenWhenInactive = true\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private transferService: ElderDataTransferService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.aggregate$ = this.transferService.transferAggregate\n  }\n}\n","@if (aggregate$ | async; as aggregate) {\n  @if (!hiddenWhenInactive || aggregate.inTransfer > 0) {\n    <div class=\"layout-col flex\">\n      <div class=\"layout-row place-center-center\">\n        <span>{{ aggregate.bps }}</span>\n      </div>\n      <mat-progress-bar\n        [color]=\"'accent'\"\n        mode=\"determinate\"\n        [value]=\"aggregate.percentDone\"\n      ></mat-progress-bar>\n      <div class=\"layout-row\">\n        <!--\n        <span class=\"mat-caption\">{{aggregate.doneBytesAgg | bytes:1}}</span>\n        -->\n        <span class=\"mat-caption\">{{ aggregate.percentDone }}%</span>\n        <span class=\"flex\"></span>\n        <span class=\"mat-caption\">TOTAL {{ aggregate.totalBytesAgg | bytes: 1 }}</span>\n      </div>\n    </div>\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { ElderDataTransferService } from '../elder-data-transfer.service'\nimport { HttpDataTransfer } from '../../../common/http/transfer/http-data-transfer'\nimport { HttpDataTransferAggregateComponent } from '../http-data-transfer-aggregate/http-data-transfer-aggregate.component'\n\nimport { HttpDataTransferComponent } from '../http-data-transfer/http-data-transfer.component'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-data-transfer-overview',\n  templateUrl: './http-data-transfer-overview.component.html',\n  styleUrls: ['./http-data-transfer-overview.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [HttpDataTransferComponent, HttpDataTransferAggregateComponent, AsyncPipe],\n})\nexport class HttpDataTransferOverviewComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly transfers$: Observable<HttpDataTransfer[]>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private transferService: ElderDataTransferService) {\n    this.transfers$ = this.transferService.transfers\n  }\n}\n","<div class=\"layout-col full elevated-card\">\n  @if (transfers$ | async; as transfers) {\n    <div class=\"layout-col flex\">\n      @if (transfers.length > 0) {\n        <div class=\"layout-col flex scroll-list\">\n          @for (transfer of transfers; track transfer) {\n            <elder-data-transfer class=\"flex-none\" [transfer]=\"transfer\"> </elder-data-transfer>\n          }\n        </div>\n      } @else {\n        <div class=\"layout-col place-center-center flex\">\n          <span class=\"mat-subtitle-2 noselect\" style=\"color: gray\">No data transfers.</span>\n        </div>\n      }\n    </div>\n  }\n\n  <div class=\"flex-none data-transfer-aggregate-container px-md\">\n    <elder-data-transfer-aggregate\n      class=\"flex\"\n      [hiddenWhenInactive]=\"false\"\n    ></elder-data-transfer-aggregate>\n  </div>\n</div>\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { ElderDataTransferService } from '../elder-data-transfer.service'\nimport { DataTransferProgressAggregate } from '../../../common/http/transfer/data-transfer-progress-aggregate'\nimport { ThemePalette } from '@angular/material/core'\nimport { HttpDataTransferOverviewComponent } from '../http-data-transfer-overview/http-data-transfer-overview.component'\nimport { ElderOverlayComponent } from '../../overlays/elder-overlay.component'\nimport { MatBadge } from '@angular/material/badge'\nimport { MatProgressSpinner } from '@angular/material/progress-spinner'\nimport { MatIcon } from '@angular/material/icon'\nimport { ElderOverlayTriggerDirective } from '../../overlays/elder-overlay-trigger.directive'\nimport { MatIconButton } from '@angular/material/button'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-data-transfer-indicator',\n  templateUrl: './http-data-transfer-indicator.component.html',\n  styleUrls: ['./http-data-transfer-indicator.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatIconButton,\n    ElderOverlayTriggerDirective,\n    MatIcon,\n    MatProgressSpinner,\n    MatBadge,\n    ElderOverlayComponent,\n    HttpDataTransferOverviewComponent,\n    AsyncPipe,\n  ],\n})\nexport class HttpDataTransferIndicatorComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public activeColor: ThemePalette = undefined\n\n  @Input()\n  public inactiveColor: ThemePalette = undefined\n\n  public aggregate$: Observable<DataTransferProgressAggregate>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private transferService: ElderDataTransferService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.aggregate$ = this.transferService.transferAggregate\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n}\n","@if (aggregate$ | async; as aggregate) {\n  <button\n    mat-icon-button\n    type=\"button\"\n    class=\"layout-row place-center-center\"\n    [elderOverlayTrigger]=\"overlay\"\n  >\n    @if (aggregate.inTransfer == 0) {\n      <mat-icon [color]=\"inactiveColor\">cloud_upload</mat-icon>\n    }\n    @if (aggregate.inTransfer > 0) {\n      <mat-progress-spinner\n        [matBadge]=\"aggregate.inTransfer\"\n        matBadgePosition=\"above after\"\n        matBadgeSize=\"small\"\n        [matBadgeColor]=\"activeColor\"\n        [color]=\"activeColor\"\n        [strokeWidth]=\"3\"\n        [diameter]=\"24\"\n        [value]=\"aggregate.percentDone\"\n        mode=\"determinate\"\n      >\n      </mat-progress-spinner>\n    }\n  </button>\n}\n\n<elder-overlay #overlay=\"elderOverlay\" originX=\"center\" overlayX=\"center\">\n  <elder-data-transfer-overview class=\"panel\"> </elder-data-transfer-overview>\n</elder-overlay>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { MatBadgeModule } from '@angular/material/badge'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatProgressBarModule } from '@angular/material/progress-bar'\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner'\nimport { MatToolbarModule } from '@angular/material/toolbar'\nimport { MatTooltipModule } from '@angular/material/tooltip'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { HttpDataTransferComponent } from './http-data-transfer/http-data-transfer.component'\nimport { HttpDataTransferAggregateComponent } from './http-data-transfer-aggregate/http-data-transfer-aggregate.component'\nimport { HttpDataTransferOverviewComponent } from './http-data-transfer-overview/http-data-transfer-overview.component'\nimport { HttpDataTransferIndicatorComponent } from './http-data-transfer-indicator/http-data-transfer-indicator.component'\nimport { ElderPipesModule } from '../../pipes/elder-pipes.module'\nimport { ElderOverlayModule } from '../overlays/elder-overlay.module'\nimport { MatCardModule } from '@angular/material/card'\n\nexport { ElderDataTransferService } from './elder-data-transfer.service'\nexport { HttpDataTransferComponent } from './http-data-transfer/http-data-transfer.component'\nexport { HttpDataTransferAggregateComponent } from './http-data-transfer-aggregate/http-data-transfer-aggregate.component'\nexport { HttpDataTransferOverviewComponent } from './http-data-transfer-overview/http-data-transfer-overview.component'\nexport { HttpDataTransferIndicatorComponent } from './http-data-transfer-indicator/http-data-transfer-indicator.component'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatIconModule,\n    MatProgressBarModule,\n    MatTooltipModule,\n    MatToolbarModule,\n    MatButtonModule,\n    MatBadgeModule,\n    MatProgressSpinnerModule,\n    TranslateModule,\n    ElderPipesModule,\n    ElderOverlayModule,\n    MatCardModule,\n    HttpDataTransferComponent,\n    HttpDataTransferAggregateComponent,\n    HttpDataTransferOverviewComponent,\n    HttpDataTransferIndicatorComponent,\n  ],\n  exports: [\n    HttpDataTransferComponent,\n    HttpDataTransferAggregateComponent,\n    HttpDataTransferOverviewComponent,\n    HttpDataTransferIndicatorComponent,\n  ],\n})\nexport class ElderDataTransferModule {}\n","import { Injectable } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { map, tap } from 'rxjs/operators'\nimport { fromEvent, merge, Observable, of } from 'rxjs'\n\nexport class OnlineStatus {\n  public static online() {\n    return new OnlineStatus(true, new Date())\n  }\n\n  public static offline() {\n    return new OnlineStatus(false, new Date())\n  }\n\n  constructor(\n    public online: boolean,\n    public timeStamp: Date\n  ) {}\n}\n\n/**\n * This service manages the side content.\n * This is usually the left side which is a 'side nav' and the right side which shows detail information.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderConnectivityService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger('ElderConnectivityService')\n\n  private readonly _online$: Observable<OnlineStatus>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    this._online$ = merge(\n      of(new OnlineStatus(navigator.onLine, new Date())),\n      fromEvent(window, 'offline').pipe(map(() => OnlineStatus.offline())),\n      fromEvent(window, 'online').pipe(map(() => OnlineStatus.online()))\n    ).pipe(\n      tap((status) => {\n        if (status.online) {\n          this.log.debug('Established internet connection!')\n        } else {\n          this.log.warn('Lost internet connection!')\n        }\n      })\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get online$(): Observable<OnlineStatus> {\n    return this._online$\n  }\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { Observable } from 'rxjs'\nimport { ElderConnectivityService, OnlineStatus } from '../elder-connectivity.service'\nimport { TimeAgoPipe } from '../../../pipes/time-ago.pipe'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatTooltip } from '@angular/material/tooltip'\nimport { MatIconButton } from '@angular/material/button'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-offline-indicator',\n  templateUrl: './elder-offline-indicator.component.html',\n  styleUrls: ['./elder-offline-indicator.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatIconButton, MatTooltip, MatIcon, AsyncPipe, TimeAgoPipe],\n})\nexport class ElderOfflineIndicatorComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private connectivityService: ElderConnectivityService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get status$(): Observable<OnlineStatus> {\n    return this.connectivityService.online$\n  }\n}\n","@if (status$ | async; as status) {\n  @if (!status.online) {\n    <button\n      mat-icon-button\n      type=\"button\"\n      color=\"warn\"\n      matTooltip=\"Lost Internet Connection, {{ status.timeStamp | timeAgo }}\"\n    >\n      <mat-icon>offline_bolt</mat-icon>\n    </button>\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatTooltipModule } from '@angular/material/tooltip'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderOfflineIndicatorComponent } from './offline-indicator/elder-offline-indicator.component'\nimport { ElderPipesModule } from '../../pipes/elder-pipes.module'\n\nexport { ElderOfflineIndicatorComponent } from './offline-indicator/elder-offline-indicator.component'\n\n@NgModule({\n  imports: [\n    // Angular\n    CommonModule,\n    // Third Party\n    TranslateModule,\n    // Angular Material\n    MatIconModule,\n    MatTooltipModule,\n    MatButtonModule,\n    // ElderByte\n    ElderPipesModule,\n    ElderOfflineIndicatorComponent,\n  ],\n  exports: [ElderOfflineIndicatorComponent],\n})\nexport class ElderConnectivityModule {}\n","import { Directive, Input } from '@angular/core'\nimport { ElderSize } from '../../common/theme-sizes'\nimport { ElderClassHostBindingBase } from '../forms/directives/base/elder-class-hostbinding-base'\n\n/**\n * Set scrollbar width. Will only work in webkit-based browsers.\n */\n@Directive({\n  selector: '[elderScrollbar]',\n  standalone: true,\n})\nexport class ElderScrollbarDirective extends ElderClassHostBindingBase {\n  public static readonly DEFAULT_WIDTH: ElderSize = 'lg'\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private _size: ElderSize = ElderScrollbarDirective.DEFAULT_WIDTH\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {\n    super(ElderScrollbarDirective.buildClass(ElderScrollbarDirective.DEFAULT_WIDTH))\n    this.enabled = true // no size input is needed, we have a default\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Optional input to select a specific {@link ElderSize}\n   * @return size with default value lg\n   */\n  public get size(): ElderSize {\n    return this._size\n  }\n\n  @Input()\n  public set size(value: ElderSize) {\n    this._size = value\n    this.elementClass = this.buildClass(value)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildClass(size: ElderSize): string {\n    return ElderScrollbarDirective.buildClass(size)\n  }\n\n  private static buildClass(size: ElderSize): string {\n    return `scrollbar-${size}`\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { ElderScrollbarDirective } from './elder-scrollbar.directive'\n\nexport { ElderScrollbarDirective } from './elder-scrollbar.directive'\n\n@NgModule({\n  imports: [ElderScrollbarDirective],\n  exports: [ElderScrollbarDirective],\n})\nexport class ElderScrollbarModule {}\n","import { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { SearchInputState } from './search-input-state'\nimport { SearchInput } from './search-input'\nimport { Filter } from '../../../../../common/data/filters/filter'\nimport { InputFilterConverter } from '../../filter/input-filter-converter'\nimport DefaultInputFilterConverter from '../../filter/default-input-filter-converter'\n\nexport class SimpleSearchInput implements SearchInput {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _state: BehaviorSubject<SearchInputState>\n  private readonly _resetRequest = new Subject<void>()\n  private readonly _inputConverter: InputFilterConverter\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public queryKey: string,\n    private _readonly?: boolean\n  ) {\n    this._state = new BehaviorSubject(\n      SearchInputState.of(queryKey, [new Filter(queryKey, null)], true, false)\n    )\n    this._inputConverter = DefaultInputFilterConverter.of(() => queryKey)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public applyFilters(filters: Filter[]): void {\n    this.value = this._inputConverter.convertToValue(filters)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public set value(value: string | string[]) {\n    this._state.next(this.stateSnapshot.withFilter(new Filter(this.queryKey, value ? value : null)))\n  }\n\n  public get state$(): Observable<SearchInputState> {\n    return this._state.asObservable()\n  }\n\n  public get stateSnapshot(): SearchInputState {\n    return this._state.getValue()\n  }\n\n  public get resetRequest(): Observable<any> {\n    return this._resetRequest\n  }\n\n  public get readonly(): boolean {\n    return this._readonly\n  }\n\n  public reset(): void {\n    this._resetRequest.next()\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { MatSnackBarModule } from '@angular/material/snack-bar'\nimport { StandardToastComponent } from './standard-toast/standard-toast.component'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatButtonModule } from '@angular/material/button'\n\nexport * from './elder-toast.service'\nexport { StandardToastComponent } from './standard-toast/standard-toast.component'\n\n@NgModule({\n  exports: [StandardToastComponent],\n  imports: [\n    CommonModule,\n    MatSnackBarModule,\n    MatIconModule,\n    MatButtonModule,\n    StandardToastComponent,\n  ],\n})\nexport class ElderToastModule {}\n","import { ElderFromFieldEntityBase } from '../../../common/forms/elder-from-field-entity-base'\nimport { AfterViewInit, Directive, ViewChild } from '@angular/core'\nimport { ElderSelectComponent } from './elder-select/elder-select.component'\nimport { ElderSelectValueDirective } from '../elder-select-value.directive'\nimport { ElderApplyControlFn } from '../../../common/forms/elder-from-field-base'\nimport { SelectionModelPopupDirective } from '../popup/selection-model-popup.directive'\nimport { ElderSelectBase } from '../elder-select-base'\n\n@Directive()\nexport abstract class ElderSelectFormField<TEntity, TId>\n  extends ElderFromFieldEntityBase<TEntity, TId, ElderSelectComponent<TEntity, TId>>\n  implements AfterViewInit\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @ViewChild(ElderSelectValueDirective)\n  public selectValueTemplate: ElderSelectValueDirective\n\n  @ViewChild(SelectionModelPopupDirective)\n  public selectionModelPopupDirective: SelectionModelPopupDirective\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor(initSelectFn: ElderApplyControlFn<ElderSelectComponent<TEntity, TId>>) {\n    super()\n    this.applyToControl(initSelectFn)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit(): void {\n    const control = this.formFieldControl$.getValue()\n\n    if (control instanceof ElderSelectBase) {\n      if (this.selectValueTemplate) {\n        control.valueTemplate = this.selectValueTemplate.templateRef\n      }\n      if (this.selectionModelPopupDirective) {\n        control.selectionPopup = this.selectionModelPopupDirective\n      }\n    }\n  }\n}\n","import { AfterViewInit, Directive, ViewChild } from '@angular/core'\nimport { ElderSelectValueDirective } from '../elder-select-value.directive'\nimport { ElderApplyControlFn } from '../../../common/forms/elder-from-field-base'\nimport { ElderMultiSelectBase } from './elder-multi-select-base'\nimport { ElderFromFieldMultiEntityBase } from '../../../common/forms/elder-from-field-multi-entity-base'\nimport {\n  ElderSelectChipAvatarDirective,\n  ElderSelectChipDirective,\n  ElderSelectCustomInputDirective,\n} from '../elder-select-chip.directive'\nimport { ElderSelectBase } from '../elder-select-base'\nimport { ElderMultiSelectChipsComponent } from './elder-multi-select-chips/elder-multi-select-chips.component'\nimport { SelectionModelPopupDirective } from '../popup/selection-model-popup.directive'\nimport { ElderMultiSelectChipOptionsComponent } from './elder-multi-select-chip-options/elder-multi-select-chip-options.component'\n\n@Directive()\nexport abstract class ElderMultiSelectFormField<TEntity, TId, TValue = TEntity | TId>\n  extends ElderFromFieldMultiEntityBase<\n    TEntity,\n    TId,\n    TValue,\n    ElderMultiSelectBase<TId, TEntity, TValue>\n  >\n  implements AfterViewInit\n{\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @ViewChild(ElderSelectValueDirective)\n  public selectValueTemplate: ElderSelectValueDirective\n\n  @ViewChild(SelectionModelPopupDirective)\n  public selectionModelPopupDirective: SelectionModelPopupDirective\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  protected constructor(\n    initSelectFn: ElderApplyControlFn<ElderMultiSelectBase<TId, TEntity, TValue>>\n  ) {\n    super()\n    this.applyToControl(initSelectFn)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit(): void {\n    const control = this.formFieldControl$.getValue()\n\n    if (control instanceof ElderSelectBase) {\n      if (this.selectValueTemplate) {\n        control.valueTemplate = this.selectValueTemplate.templateRef\n      }\n      if (this.selectionModelPopupDirective) {\n        control.selectionPopup = this.selectionModelPopupDirective\n      }\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @ViewChild(ElderSelectChipDirective)\n  public set selectChipDirective(dir: ElderSelectChipDirective) {\n    const control = this.formFieldControl$.getValue()\n    if (control instanceof ElderMultiSelectChipsComponent) {\n      control.chipTemplate = dir?.templateRef\n    }\n    if (control instanceof ElderMultiSelectChipOptionsComponent) {\n      control.chipTemplate = dir?.templateRef\n    }\n  }\n\n  @ViewChild(ElderSelectChipAvatarDirective)\n  public set selectChipAvatarDirective(dir: ElderSelectChipAvatarDirective) {\n    const control = this.formFieldControl$.getValue()\n    if (control instanceof ElderMultiSelectChipsComponent) {\n      control.chipAvatarTemplate = dir?.templateRef\n    }\n    if (control instanceof ElderMultiSelectChipOptionsComponent) {\n      control.chipAvatarTemplate = dir?.templateRef\n    }\n  }\n\n  @ViewChild(ElderSelectCustomInputDirective)\n  public set selectCustomInputDirective(dir: ElderSelectChipAvatarDirective) {\n    const control = this.formFieldControl$.getValue()\n    if (control instanceof ElderMultiSelectChipsComponent) {\n      control.customInputTemplate = dir?.templateRef\n    }\n  }\n}\n","import {\n  DestroyRef,\n  Directive,\n  effect,\n  Inject,\n  input,\n  OnInit,\n  Optional,\n  signal,\n} from '@angular/core'\nimport { combineLatestWith, filter, map, switchMap } from 'rxjs/operators'\nimport { combineLatest } from 'rxjs'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { ElderMultiSelectChipsComponent } from './elder-multi-select-chips.component'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport {\n  IncludeExcludeSelectionModel,\n  IncludeExcludeValue,\n} from '../../filter/include-exclude-selection-model'\n\n@Directive({\n  selector: 'elder-multi-select-chips[elderShowOptions]',\n  standalone: true,\n})\nexport class ElderMultiSelectChipsOptionsDirective<TId, TEntity> implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly maxOptions = input<number>(10)\n  private readonly inControlOfOptions = signal<boolean>(false)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private multiSelect: ElderMultiSelectChipsComponent<TId, TEntity>,\n    @Optional()\n    @Inject(IncludeExcludeSelectionModel)\n    private inclExclModel: IncludeExcludeSelectionModel<TEntity> | undefined,\n    public destroyRef: DestroyRef\n  ) {\n    this.autoReloadOnDataChangeEvents()\n    this.subscribeToEntities()\n\n    effect(() => {\n      multiSelect.allowRemove.set(!this.inControlOfOptions())\n      multiSelect.readonly = this.inControlOfOptions()\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    this.startDataContextIfNeeded()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private get dataContext$() {\n    return this.multiSelect.dataContext$.pipe(filter((dc) => !!dc))\n  }\n\n  private autoReloadOnDataChangeEvents(): void {\n    this.dataContext$\n      .pipe(\n        map((dc) => dc.dataSource),\n        switchMap((ds) => ds.dataChanged),\n        takeUntilDestroyed(this.destroyRef),\n        combineLatestWith(this.dataContext$)\n      )\n      .subscribe({\n        next: ([_, dc]) => dc.reload(),\n      })\n  }\n\n  private subscribeToEntities(): void {\n    const data$ = this.dataContext$.pipe(switchMap((dc) => dc.data))\n    const templateOptions$ = this.multiSelect.templateOptions$.pipe(\n      map((options) => options.map((option) => option.value))\n    )\n    combineLatest([data$, templateOptions$])\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(([entities, templateEntities]) =>\n        this.applyAllOptions([...entities, ...templateEntities])\n      )\n  }\n\n  private applyAllOptions(allOptions: TEntity[]): void {\n    if (this.maxOptions() >= allOptions.length) {\n      this.multiSelect.entities = allOptions\n      this.inControlOfOptions.set(true)\n    } else {\n      if (this.inControlOfOptions()) {\n        this.multiSelect.entities = this.multiSelect.entities.filter((e) => this.isOptionInUse(e))\n      }\n      this.inControlOfOptions.set(false)\n    }\n  }\n\n  private isOptionInUse(option: TEntity): boolean {\n    if (this.inclExclModel) {\n      return (\n        this.inclExclModel.isInMode(option, IncludeExcludeValue.INCLUDE) ||\n        this.inclExclModel.isInMode(option, IncludeExcludeValue.EXCLUDE)\n      )\n    }\n    return false\n  }\n\n  private startDataContextIfNeeded(): void {\n    const data = this.multiSelect.dataContext\n    if (data && !data.isStarted) {\n      data.start()\n    }\n  }\n}\n","/**\n * Represents a known Currency Code (ISO 4217)\n * https://en.wikipedia.org/wiki/ISO_4217\n *\n * Enum name: Unit name\n * Enum value: Unit code\n */\nexport enum CurrencyCode {\n  CHF = 'CHF',\n  DKK = 'DKK',\n  EUR = 'EUR',\n  GBP = 'GBP',\n  RUB = 'RUB',\n  SEK = 'SEK',\n  TRY = 'TRY',\n  UAH = 'UAH',\n  ILS = 'ILS',\n  CAD = 'CAD',\n  CLP = 'CLP',\n  COP = 'COP',\n  MXN = 'MXN',\n  PEN = 'PEN',\n  USD = 'USD',\n  AUD = 'AUD',\n  BDT = 'CAD',\n  CNY = 'CNY',\n  HKD = 'HKD',\n  JPY = 'JPY',\n  NZD = 'NZD',\n  PHP = 'PHP',\n  THB = 'THB',\n  VND = 'VND',\n  BTC = 'BTC',\n  LTC = 'LTC',\n  ETH = 'ETH',\n}\n","import { CurrencyCode } from './currency-code'\n\nexport class CurrencyUnit {\n  public static from(code: CurrencyCode, symbol: string): CurrencyUnit {\n    return new CurrencyUnit(code, symbol)\n  }\n\n  constructor(\n    public readonly code: CurrencyCode,\n    public readonly symbol: string\n  ) {}\n}\n","import { CurrencyCode } from './currency-code'\nimport { CurrencyUnit } from './currency-unit'\n\nexport class CurrencyUnitRegistry {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly UNIT_INFO: Map<CurrencyCode, CurrencyUnit> = new Map<\n    CurrencyCode,\n    CurrencyUnit\n  >()\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public getUnitSymbol(unit: CurrencyCode): string {\n    return this.getUnitInfo(unit)?.symbol ?? (unit as string)\n  }\n\n  public registerUnit(unitInfo: CurrencyUnit): void {\n    this.UNIT_INFO.set(unitInfo.code, unitInfo)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Initializer                                                      *\n   *                                                                         *\n   **************************************************************************/\n\n  private getUnitInfo(unit: CurrencyCode): CurrencyUnit {\n    return this.UNIT_INFO.get(unit)\n  }\n}\n","import { CurrencyCode } from './currency-code'\n\n/**\n * Represents an amount of currency.\n */\nexport class Currency {\n  public value: number\n  public unit: CurrencyCode\n\n  public static zero(unit: CurrencyCode): Currency {\n    return Currency.from(unit)\n  }\n\n  public static from(unit: CurrencyCode, value: number = 0) {\n    const quantity = new Currency()\n    quantity.value = value\n    quantity.unit = unit\n    return quantity\n  }\n}\n","import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core'\nimport { Currency } from './model/currency'\nimport { CurrencyFormatUtil, CurrencyIndication } from '../../common/format/curency-format-util'\n\n@Pipe({\n  name: 'elderCurrency',\n  standalone: true,\n})\nexport class ElderCurrencyPipe implements PipeTransform {\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(@Inject(LOCALE_ID) private _locale: string) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * @see formatElderCurrency\n   */\n  public transform(\n    currency: Currency,\n    display?: CurrencyIndication,\n    digitsInfo?: string,\n    locale?: string\n  ): string {\n    return CurrencyFormatUtil.formatElderCurrency(\n      currency,\n      locale ?? this._locale,\n      display,\n      digitsInfo\n    )\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule, CurrencyPipe } from '@angular/common'\nimport { ElderCurrencyPipe } from './elder-currency.pipe'\n\n@NgModule({\n  imports: [CommonModule, ElderCurrencyPipe],\n  exports: [ElderCurrencyPipe],\n  providers: [CurrencyPipe, ElderCurrencyPipe],\n})\nexport class ElderCurrencyModule {}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Input,\n  OnInit,\n  ViewChild,\n} from '@angular/core'\nimport { BehaviorSubject } from 'rxjs'\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser'\n\n@Component({\n  selector: 'elder-svg-viewer',\n  templateUrl: './elder-svg-viewer.component.html',\n  styleUrls: ['./elder-svg-viewer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class ElderSvgViewerComponent implements OnInit, AfterViewInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly svgContent$ = new BehaviorSubject<SafeHtml>(null)\n\n  @ViewChild('dataContainer', { static: true }) dataContainer: ElementRef\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private sanitizer: DomSanitizer) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit() {}\n\n  public ngAfterViewInit(): void {\n    this.update()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set svg(svgData: string) {\n    /*\n    this.svgContent$.next(\n      this.sanitizer.bypassSecurityTrustHtml(svgData)\n    );*/\n    this.svgContent$.next(svgData)\n    this.update()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private update(): void {\n    if (this.dataContainer) {\n      this.dataContainer.nativeElement.innerHTML = this.svgContent$.getValue()\n    }\n  }\n}\n","<div class=\"svg\" #dataContainer></div>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderSvgViewerComponent } from './elder-svg-viewer/elder-svg-viewer.component'\n\nexport { ElderSvgViewerComponent } from './elder-svg-viewer/elder-svg-viewer.component'\n\n@NgModule({\n  imports: [CommonModule, ElderSvgViewerComponent],\n  exports: [ElderSvgViewerComponent],\n})\nexport class ElderViewersModule {}\n","import { ChangeDetectionStrategy, Component, OnInit, ViewEncapsulation } from '@angular/core'\n\n@Component({\n  selector: 'elder-button-group',\n  templateUrl: './elder-button-group.component.html',\n  styleUrls: ['./elder-button-group.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  standalone: true,\n})\nexport class ElderButtonGroupComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit(): void {}\n}\n","<div class=\"layout-row elder-button-group\">\n  <ng-content></ng-content>\n</div>\n","import { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderUrlFragment } from '../elder-url-fragment'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu'\nimport { MatButton } from '@angular/material/button'\nimport { ElderButtonGroupComponent } from '../../button-group/elder-button-group/elder-button-group.component'\nimport { NgStyle } from '@angular/common'\n\n@Component({\n  selector: 'elder-url-fragment-switcher',\n  templateUrl: './elder-url-fragment-switcher.component.html',\n  styleUrls: ['./elder-url-fragment-switcher.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    ElderButtonGroupComponent,\n    MatButton,\n    NgStyle,\n    MatMenuTrigger,\n    MatIcon,\n    MatMenu,\n    MatMenuItem,\n  ],\n})\nexport class ElderUrlFragmentSwitcherComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Disables the component\n   */\n  public readonly disable = input<boolean>(true)\n\n  /**\n   * Regex which matches the part of the url which will get replaced\n   */\n  public readonly urlRegex = model<RegExp>(new RegExp('[.](\\\\w+)'))\n\n  /**\n   * Index of the regex group which will be replaced\n   */\n  public readonly regexArrayIndex = model<number>(0)\n\n  /**\n   * List of url fragments which can replace a part of the window location\n   */\n  public readonly urlFragments = model<ElderUrlFragment[]>([])\n\n  /**\n   * Window which will open the created url\n   */\n  public readonly windowOpenIn = input<string>('_self')\n\n  public readonly activeFragment = computed<ElderUrlFragment | undefined>(() =>\n    this.findActiveFragment()\n  )\n\n  private readonly logger = LoggerFactory.getLogger('ElderUrlFragmentSwitcherComponent')\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public replaceFragment(urlFragment: string): void {\n    this.logger.debug(urlFragment)\n    window.open(\n      window.location.href.replace(\n        this.urlRegex().exec(window.location.href)[this.regexArrayIndex()],\n        urlFragment\n      ),\n      this.windowOpenIn()\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private findActiveFragment(): ElderUrlFragment {\n    return this.urlFragments().find((c) => {\n      try {\n        return c.fragment === this.urlRegex().exec(window.location.href)[this.regexArrayIndex()]\n      } catch (e) {\n        return false\n      }\n    })\n  }\n}\n","@if (activeFragment(); as activeFragment) {\n  <elder-button-group>\n    <button\n      class=\"status-button\"\n      mat-stroked-button\n      type=\"button\"\n      disabled\n      [ngStyle]=\"{ 'background-color': activeFragment.color }\"\n    >\n      <div class=\"layout-col\">\n        @if (!disable()) {\n          <span class=\"caption\">{{ activeFragment.name }}</span>\n        }\n      </div>\n    </button>\n\n    @if (!disable()) {\n      <button\n        mat-stroked-button\n        type=\"button\"\n        [matMenuTriggerFor]=\"fragmentMenu\"\n        [ngStyle]=\"{ 'background-color': activeFragment.color }\"\n      >\n        <mat-icon>flip_camera_android</mat-icon>\n      </button>\n    }\n  </elder-button-group>\n\n  <mat-menu #fragmentMenu=\"matMenu\">\n    @for (urlFragment of urlFragments(); track urlFragment) {\n      <button mat-menu-item type=\"button\" (click)=\"replaceFragment(urlFragment.fragment)\">\n        <mat-icon [ngStyle]=\"{ color: urlFragment.color }\">flip_camera_android</mat-icon>\n        <span>{{ urlFragment.name }}</span>\n      </button>\n    }\n  </mat-menu>\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderButtonGroupComponent } from './elder-button-group/elder-button-group.component'\nimport { MatMenuModule } from '@angular/material/menu'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatButtonModule } from '@angular/material/button'\n\nexport * from './elder-button-group/elder-button-group.component'\n\n@NgModule({\n  imports: [CommonModule, MatMenuModule, MatIconModule, MatButtonModule, ElderButtonGroupComponent],\n  exports: [ElderButtonGroupComponent],\n})\nexport class ElderButtonGroupModule {}\n","export class ElderUrlFragment {\n  constructor(\n    public name: string,\n    public fragment: string,\n    public color: string = 'white',\n    public backgroundColor: string = 'transparent'\n  ) {}\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderUrlFragmentSwitcherComponent } from './url-fragment-switcher/elder-url-fragment-switcher.component'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatMenuModule } from '@angular/material/menu'\nimport { MatFormFieldModule } from '@angular/material/form-field'\nimport { MatSelectModule } from '@angular/material/select'\nimport { FormsModule } from '@angular/forms'\nimport { MatButtonModule } from '@angular/material/button'\nimport { ElderButtonGroupModule } from '../button-group/elder-button-group.module'\nimport { WebappDomainSwitcherDirective } from './webapp-domain/webapp-domain-switcher.directive'\nimport { WebappDomainSpecService } from './webapp-domain/webapp-domain-spec.service'\n\nexport * from './elder-url-fragment'\nexport { ElderUrlFragmentSwitcherComponent } from './url-fragment-switcher/elder-url-fragment-switcher.component'\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatIconModule,\n    MatMenuModule,\n    MatFormFieldModule,\n    MatSelectModule,\n    FormsModule,\n    MatButtonModule,\n    ElderButtonGroupModule,\n    ElderUrlFragmentSwitcherComponent,\n  ],\n  exports: [ElderUrlFragmentSwitcherComponent],\n})\nexport class ElderUrlFragmentModule {}\n","import { WebappDomainSpec } from './webapp-domain-spec'\nimport { Observable } from 'rxjs'\n\nexport abstract class WebappDomainSpecService {\n  abstract loadConfig(): Observable<WebappDomainSpec>\n}\n","export class WebappDomainSpec {\n  public hostRegex: string\n  public regexGroup: number\n  public urlFragments: WebappDomainFragmentSpec[]\n}\n\nexport class WebappDomainFragmentSpec {\n  public name: string\n  public fragment: string\n  public color?: string\n}\n","import { Directive, inject, OnInit } from '@angular/core'\nimport { WebappDomainSpecService } from './webapp-domain-spec.service'\nimport { WebappDomainFragmentSpec, WebappDomainSpec } from './webapp-domain-spec'\nimport { ElderUrlFragment } from '../elder-url-fragment'\nimport { ElderUrlFragmentSwitcherComponent } from '../url-fragment-switcher/elder-url-fragment-switcher.component'\n\nexport class WebappUrlFragmentSwitcherConfig {\n  constructor(\n    public hostRegex: RegExp,\n    public regexGroup: number,\n    public urlFragments: ElderUrlFragment[]\n  ) {}\n}\n\n/**\n * This directive loads the configured environment domain spec and sets up the {@link ElderUrlFragmentSwitcherComponent}.\n *\n * IMPORTANT:\n * Make sure a {@link WebappDomainSpecService} is implemented which provides the environment domain spec!\n */\n@Directive({\n  selector: 'elder-domain-switcher, [elder-domain-switcher], [elderDomainSwitcher]',\n  standalone: true,\n})\nexport class WebappDomainSwitcherDirective implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private envSwitchConfigService = inject(WebappDomainSpecService)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private urlFragmentSwitcher: ElderUrlFragmentSwitcherComponent) {}\n\n  public ngOnInit(): void {\n    this.envSwitchConfigService.loadConfig().subscribe((envSwitch) => {\n      const envSwitchConfig = this.buildElderEnvSwitch(envSwitch)\n      this.urlFragmentSwitcher.urlRegex.set(envSwitchConfig.hostRegex)\n      this.urlFragmentSwitcher.regexArrayIndex.set(envSwitchConfig.regexGroup)\n      this.urlFragmentSwitcher.urlFragments.set(envSwitchConfig.urlFragments)\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private buildElderEnvSwitch(spec: WebappDomainSpec): WebappUrlFragmentSwitcherConfig {\n    return new WebappUrlFragmentSwitcherConfig(\n      new RegExp(spec.hostRegex),\n      spec.regexGroup,\n      spec.urlFragments.map(this.buildUrlFragment)\n    )\n  }\n\n  private buildUrlFragment(fragment: WebappDomainFragmentSpec): ElderUrlFragment {\n    return new ElderUrlFragment(fragment.name, fragment.fragment, fragment.color)\n  }\n}\n","export class SubBar {\n  constructor(\n    public widthPercent: number,\n    public color: string\n  ) {}\n}\n","import { Component, ChangeDetectionStrategy, Input } from '@angular/core'\nimport { BehaviorSubject } from 'rxjs'\nimport { SubBar } from './sub-bar'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-progress-bar',\n  templateUrl: './elder-progress-bar.component.html',\n  styleUrls: ['./elder-progress-bar.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AsyncPipe],\n})\nexport class ElderProgressBarComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  @Input()\n  public minHeight = 6\n\n  /**\n   * This color is used when the bar is set via the 'value' input.\n   * It does not get used when multiple sub-bars are set directly.\n   */\n  @Input()\n  public barColor = '#28a745'\n\n  @Input()\n  public barBackgroundColor = 'lightgray'\n\n  public readonly bars$ = new BehaviorSubject<SubBar[]>([])\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set value(value: number) {\n    if (value != null) {\n      this.setSingleBarValue(value)\n    }\n  }\n\n  @Input()\n  public set bars(bars: SubBar[]) {\n    if (bars) {\n      const validBars = bars.filter((b) => b.widthPercent > 0)\n      this.checkAndAdjustPercentages(validBars)\n      this.bars$.next(validBars)\n    }\n  }\n\n  public get bars(): SubBar[] {\n    return this.bars$.getValue()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private setSingleBarValue(value: number): void {\n    const bars = this.bars.length === 1 ? [...this.bars] : [new SubBar(0, this.barColor)]\n    bars[0].widthPercent = value\n    this.bars = bars\n  }\n\n  private checkAndAdjustPercentages(bars: SubBar[]): void {\n    if (bars.length > 0) {\n      const totalPercentage = bars.map((b) => b.widthPercent).reduce((sum, number) => sum + number)\n      if (totalPercentage > 100) {\n        this.log.warn('Total bars width are greater than 100%, adjusting percentages...')\n        bars.forEach((b) => (b.widthPercent = (100 / totalPercentage) * b.widthPercent))\n      }\n    }\n  }\n}\n","@if (bars$ | async; as bars) {\n  <div\n    class=\"layout-row elder-flex-control\"\n    style=\"overflow: hidden\"\n    [style.background]=\"barBackgroundColor\"\n    [style.min-height.px]=\"minHeight\"\n    [style.border-radius.px]=\"2\"\n  >\n    @if (bars.length === 0) {\n      <div [style.font-size.px]=\"minHeight\"></div>\n    }\n    @for (bar of bars; track bar) {\n      <span\n        class=\"elder-progress-content\"\n        [style.max-width.%]=\"bar.widthPercent\"\n        [style.background]=\"bar.color\"\n        [style.min-height]=\"minHeight\"\n        [style.font-size.px]=\"minHeight\"\n      >\n        &nbsp;\n      </span>\n    }\n  </div>\n}\n","import { NgModule } from '@angular/core'\nimport { ElderProgressBarComponent } from './elder-progress-bar.component'\nimport { CommonModule } from '@angular/common'\n\nexport * from './elder-progress-bar.component'\nexport * from './sub-bar'\n\n@NgModule({\n  exports: [ElderProgressBarComponent],\n  imports: [CommonModule, ElderProgressBarComponent],\n})\nexport class ElderProgressBarModule {}\n","import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core'\nimport { NgStyle } from '@angular/common'\n\nexport type ScrollDirection = 'vertical' | 'horizontal'\n\n@Component({\n  selector: 'elder-scroll-container',\n  templateUrl: './elder-scroll-container.component.html',\n  styleUrls: ['./elder-scroll-container.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgStyle],\n})\nexport class ElderScrollContainerComponent implements OnInit {\n  @Input()\n  public direction: ScrollDirection = 'vertical'\n\n  @Input()\n  public padding = '8px'\n\n  constructor() {}\n  ngOnInit(): void {}\n\n  public isVertical(direction: ScrollDirection): boolean {\n    return direction === 'vertical'\n  }\n}\n","<div class=\"layout-col full scroll-fix\">\n  <div class=\"layout-col flex scroll-fix\">\n    <div\n      [class.layout-col]=\"isVertical(direction)\"\n      [class.layout-row]=\"!isVertical(direction)\"\n      class=\"gap-sm\"\n      [ngStyle]=\"{ padding: padding }\"\n      [class.vertical-scroll-wrapper]=\"isVertical(direction)\"\n      [class.horizontal-scroll-wrapper]=\"!isVertical(direction)\"\n    >\n      <ng-content></ng-content>\n    </div>\n  </div>\n</div>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderScrollContainerComponent } from './elder-scroll-container/elder-scroll-container.component'\n\nexport * from './elder-scroll-container/elder-scroll-container.component'\n\n@NgModule({\n  imports: [CommonModule, ElderScrollContainerComponent],\n  exports: [ElderScrollContainerComponent],\n})\nexport class ElderContainersModule {}\n","import * as StreamSaver from 'streamsaver'\nimport { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { IDataSource } from '../../common/data/datasource/data-source'\nimport { Filter } from '../../common/data/filters/filter'\nimport { Sort } from '../../common/data/sort'\nimport {\n  DataSourceProcessor,\n  ProcessIterationContext,\n} from '../../common/data/datasource/data-source-processor'\nimport { CsvSpec } from '../../common/csv/csv-spec'\nimport { CsvSerializer } from '../../common/csv/csv-serializer'\nimport { Observable } from 'rxjs/internal/Observable'\nimport { TranslateService } from '@ngx-translate/core'\nimport { tap } from 'rxjs/operators'\n\nexport class CsvStreamExporter<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /** Instance of TranslateService. Used for translating header texts. */\n  private readonly _translateService: TranslateService\n\n  /** The data source providing data to export */\n  private readonly _dataSource: IDataSource<T>\n\n  /** The CSV specification */\n  private readonly _csvSpec: CsvSpec<T>\n\n  /** Encoder used to encode stream output */\n  private readonly _encoder = new TextEncoder()\n\n  /** Chunk size to use for data loading */\n  private _chunkSize = 100\n\n  /***************************************************************************\n   *                                                                         *\n   * Static                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public static start<T>(\n    translateService: TranslateService,\n    dataSource: IDataSource<T>,\n    csvSpec: CsvSpec<T>\n  ): CsvStreamExporter<T> {\n    return new CsvStreamExporter<T>(translateService, dataSource, csvSpec)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(translateService: TranslateService, dataSource: IDataSource<T>, csvSpec: CsvSpec<T>) {\n    if (!translateService) {\n      throw new Error('TranslateService must be provided!')\n    }\n    if (!dataSource) {\n      throw new Error('A dataSource must be provided!')\n    }\n    if (!csvSpec) {\n      throw new Error('A csvSpec must be provided!')\n    }\n\n    this._translateService = translateService\n    this._dataSource = dataSource\n    this._csvSpec = csvSpec\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public start(filters?: Filter[], sorts?: Sort[]): void {\n    // const serializer = this._csvSpec.getSerializer(this._translateService);\n    const serializer = this._csvSpec.getSerializer(this._translateService)\n\n    const fileStream = StreamSaver.createWriteStream(this._csvSpec.filename, {\n      size: undefined, // (optional filesize) Will show progress\n      writableStrategy: undefined, // (optional)\n      readableStrategy: undefined, // (optional)\n    })\n\n    const writer = fileStream.getWriter()\n\n    if (this._csvSpec.includeHeader) {\n      this.writeHeader(writer, serializer).subscribe(\n        () => {},\n        (err) => {\n          throw new Error(err.message)\n        },\n        () => {\n          this.log.debug('Successfully processed csv headers')\n        }\n      )\n    }\n\n    this.writeRecords(writer, serializer, filters, sorts).subscribe(\n      () => {},\n      (err) => {\n        throw new Error(err.message)\n      },\n      () => {\n        this.log.debug('Successfully processed csv records')\n        writer.close()\n      }\n    )\n  }\n\n  public abort(): void {\n    throw new Error('Not yet implemented')\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fluent API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public chunkSize(chunkSize: number) {\n    if (chunkSize) {\n      this._chunkSize = chunkSize\n    }\n    return this\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private writeHeader(\n    writer: WritableStreamDefaultWriter,\n    serializer: CsvSerializer<T>\n  ): Observable<string> {\n    return serializer.serializeHeaders().pipe(\n      tap((headerString) => {\n        this.writeString(writer, headerString)\n        this.writeNewLine(writer)\n      })\n    )\n  }\n\n  private writeNewLine(writer: WritableStreamDefaultWriter): void {\n    this.writeString(writer, '\\n')\n  }\n\n  private writeString(writer: WritableStreamDefaultWriter, value: string): void {\n    writer.write(this._encoder.encode(value))\n  }\n\n  private writeRecords(\n    writer: WritableStreamDefaultWriter,\n    serializer: CsvSerializer<T>,\n    filters?: Filter[],\n    sorts?: Sort[]\n  ): Observable<ProcessIterationContext<T>> {\n    return DataSourceProcessor.start(this._dataSource, this._chunkSize).process$(\n      this.getProcessFn(writer, serializer),\n      filters,\n      sorts\n    )\n  }\n\n  private getProcessFn(\n    writer: WritableStreamDefaultWriter,\n    serializer: CsvSerializer<T>\n  ): (chunk: T[]) => void {\n    return (chunk: T[]) => {\n      chunk.forEach((record) => {\n        this.writeString(writer, serializer.serializeRow(record))\n        this.writeNewLine(writer)\n      })\n    }\n  }\n}\n","import { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { TranslateService } from '@ngx-translate/core'\nimport { CsvStreamExporter } from './elder-csv-stream-exporter'\nimport { IDataSource } from '../../common/data/datasource/data-source'\nimport { CsvSpec } from '../../common/csv/csv-spec'\n\nexport class CsvStreamExporterBuilder<T> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /** Chunk size to use for data loading */\n  private _chunkSize: number\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private translateService: TranslateService,\n    private dataSource: IDataSource<T>,\n    private csvSpec: CsvSpec<T>\n  ) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public build(): CsvStreamExporter<T> {\n    return CsvStreamExporter.start(this.translateService, this.dataSource, this.csvSpec).chunkSize(\n      this._chunkSize\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fluent API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public chunkSize(chunkSize: number) {\n    this._chunkSize = chunkSize\n    return this\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { Injectable } from '@angular/core'\nimport { TranslateService } from '@ngx-translate/core'\nimport { CsvStreamExporterBuilder } from './elder-csv-stream-exporter-builder'\nimport { IDataSource } from '../../common/data/datasource/data-source'\nimport { CsvSpec } from '../../common/csv/csv-spec'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CsvStreamExporterBuilderService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private translateService: TranslateService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public start<T>(dataSource: IDataSource<T>, csvSpec: CsvSpec<T>): CsvStreamExporterBuilder<T> {\n    return new CsvStreamExporterBuilder(this.translateService, dataSource, csvSpec)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core'\nimport { IDataSource } from '../../../common/data/datasource/data-source'\nimport { Filter } from '../../../common/data/filters/filter'\nimport { Sort } from '../../../common/data/sort'\nimport { CsvStreamExporter } from '../elder-csv-stream-exporter'\nimport { Logger, LoggerFactory } from '@elderbyte/ts-logger'\nimport { CsvSpec } from '../../../common/csv/csv-spec'\nimport { CsvStreamExporterBuilderService } from '../elder-csv-stream-exporter-builder.service'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconButton } from '@angular/material/button'\n\n@Component({\n  selector: 'elder-csv-export-btn',\n  templateUrl: './elder-csv-export-btn.component.html',\n  styleUrls: ['./elder-csv-export-btn.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatIconButton, MatIcon],\n})\nexport class ElderCsvExportBtnComponent<T> implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log: Logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private _dataSource: IDataSource<T>\n\n  private _csvSpec: CsvSpec<T>\n\n  private _csvStreamExporter: CsvStreamExporter<T>\n\n  @Input()\n  public set dataSource(dataSource: IDataSource<T>) {\n    this._dataSource = dataSource\n    this.initStreamExporter()\n  }\n\n  @Input()\n  public set csvSpec(csvSpec: CsvSpec<T>) {\n    this._csvSpec = csvSpec\n    this.initStreamExporter()\n  }\n\n  @Input()\n  public filters: Filter[]\n\n  @Input()\n  public sorts: Sort[]\n\n  @Input()\n  public chunkSize: number\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private csvStreamExportBuilder: CsvStreamExporterBuilderService) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public startExport(): void {\n    this._csvStreamExporter.start(this.filters, this.sorts)\n  }\n\n  public abortExport(): void {\n    this._csvStreamExporter.abort()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private initStreamExporter() {\n    if (this._dataSource && this._csvSpec) {\n      this._csvStreamExporter = this.csvStreamExportBuilder\n        .start(this._dataSource, this._csvSpec)\n        .chunkSize(this.chunkSize)\n        .build()\n    }\n  }\n}\n","<button type=\"button\" mat-icon-button (click)=\"startExport()\">\n  <mat-icon>file_download</mat-icon>\n</button>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderCsvExportBtnComponent } from './elder-csv-export-btn/elder-csv-export-btn.component'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatIconModule } from '@angular/material/icon'\n\nexport * from './elder-csv-export-btn/elder-csv-export-btn.component'\nexport * from './elder-csv-stream-exporter-builder.service'\nexport * from './elder-csv-stream-exporter-builder'\nexport * from './elder-csv-stream-exporter'\n\n@NgModule({\n  imports: [CommonModule, MatButtonModule, MatIconModule, ElderCsvExportBtnComponent],\n  exports: [ElderCsvExportBtnComponent],\n  providers: [],\n})\nexport class ElderCsvModule {}\n","import { ElderDataViewOptions } from '../data-view/base/elder-data-view-options'\n\nexport class TypedEventMessage<T, D> {\n  // type predicate to check weather an object is a DataViewMessage type\n  public static isOfType(obj: any): obj is TypedEventMessage<any, any> {\n    return (obj as TypedEventMessage<any, any>).type !== undefined\n  }\n\n  constructor(\n    public type: T,\n    public data?: D\n  ) {}\n}\n\nexport class DataViewSelectionInit<T> {\n  constructor(\n    public options: ElderDataViewOptions,\n    public initialSelection: T[] = [],\n    public idField: string = 'id'\n  ) {}\n}\n\nexport class DataViewSelection<T> {\n  constructor(public selection: T[]) {}\n}\n\nexport const DataViewMessageTypeValues = ['SELECTION_INIT', 'SELECTION_SELECTED'] as const\nexport type DataViewMessageType = (typeof DataViewMessageTypeValues)[number]\nexport const isDataViewMessageType = (x: any): x is DataViewMessageType =>\n  DataViewMessageTypeValues.includes(x)\n\nexport class DataViewMessage<\n  T,\n  D = DataViewSelectionInit<T> | DataViewSelection<T>,\n> extends TypedEventMessage<DataViewMessageType, D> {\n  public static initialSelection<D>(init: DataViewSelectionInit<D>): DataViewMessage<D> {\n    return new DataViewMessage('SELECTION_INIT', init)\n  }\n\n  public static selection<D>(selection: DataViewSelection<D>): DataViewMessage<D> {\n    return new DataViewMessage('SELECTION_SELECTED', selection)\n  }\n\n  // type predicate to check weather an object is a DataViewMessage type\n  public static override isOfType(obj: any): obj is DataViewMessage<any, any> {\n    return isDataViewMessageType(obj?.type)\n  }\n\n  constructor(\n    public override type: DataViewMessageType,\n    public override data: D\n  ) {\n    super(type, data)\n  }\n}\n","export class IframeMessages {\n  public static readonly CLOSE = 'CLOSE'\n\n  public static readonly VIEW_READY_EVENT = 'VIEW_READY_EVENT'\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject } from 'rxjs'\nimport { TypedEventMessage } from '../typed-event-message'\nimport { IframeMessages } from '../iframe-messages'\nimport { ElderSafeUrlPipe } from '../../../pipes/elder-safe-url.pipe'\nimport { MatIcon } from '@angular/material/icon'\nimport { MatIconAnchor } from '@angular/material/button'\nimport { ElderThemeDirective } from '../../theme/elder-theme.directive'\nimport { MatToolbar } from '@angular/material/toolbar'\nimport { AsyncPipe } from '@angular/common'\n\nexport type IFrameStateType = 'LOADING' | 'LOADED' | 'VIEW_READY' | 'ERROR'\n\nexport class IFrameState {\n  constructor(\n    public readonly type: IFrameStateType,\n    public readonly message: string | null = null\n  ) {}\n\n  public get isLoading(): boolean {\n    return this.type === 'LOADING'\n  }\n\n  public get hasLoaded(): boolean {\n    return this.type === 'LOADED'\n  }\n\n  public get isViewReady(): boolean {\n    return this.type === 'VIEW_READY'\n  }\n\n  public get hasError(): boolean {\n    return this.type === 'ERROR'\n  }\n}\n\nexport interface IFrameParams {\n  /**\n   * Source URL of iframe.\n   */\n  readonly srcUrl: string\n\n  /**\n   * Width of the iframe.\n   */\n  readonly width?: string\n\n  /**\n   * Height of the iframe.\n   */\n  readonly height?: string\n\n  /**\n   * If true, the bottom action bar\n   * is hidden.\n   */\n  readonly hideActionBar?: boolean\n}\n\n@Component({\n  selector: 'elder-i-frame-host',\n  templateUrl: './iframe-host.component.html',\n  styleUrls: ['./iframe-host.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatToolbar, ElderThemeDirective, MatIconAnchor, MatIcon, AsyncPipe, ElderSafeUrlPipe],\n})\nexport class IframeHostComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly iframeParams$ = new BehaviorSubject<IFrameParams>(null)\n  public readonly iframeState$ = new BehaviorSubject<IFrameState>(new IFrameState('LOADING'))\n\n  @ViewChild('iframe')\n  public iframe: ElementRef\n\n  @Output()\n  public message = new EventEmitter<TypedEventMessage<any, any>>()\n\n  @Output()\n  public close = new EventEmitter<any>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Listeners                                                               *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Listens for messages from window.\n   * Makes it possible to react upon messages from iframe child window.\n   *\n   * @param event message from child window\n   */\n  @HostListener('window:message', ['$event'])\n  public onWindowMessage(event: MessageEvent): boolean {\n    if (event && event.data) {\n      if (TypedEventMessage.isOfType(event.data)) {\n        this.log.debug('Received message from child:', event.data)\n        this.handleMessageFromChild(event.data)\n      }\n    }\n    return true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Lifecycle                                                               *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set iframeParams(params: IFrameParams) {\n    this.iframeParams$.next(params)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onIframeLoadEvent(event: Event): void {\n    this.log.debug('Finished loading iframe', event)\n    this.iframeState$.next(new IFrameState('LOADED'))\n  }\n\n  public onIframeErrorEvent(err: any): void {\n    this.log.warn('Failed to load iframe', err)\n    this.iframeState$.next(new IFrameState('ERROR', err + ''))\n  }\n\n  public sendMessageToChild(msg: TypedEventMessage<any, any>): void {\n    this.log.debug('Sending message to iframe child:', msg)\n    this.iframe.nativeElement.contentWindow.postMessage(msg, '*')\n  }\n\n  public doClose(event?: Event): void {\n    this.close.emit()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleMessageFromChild(message: TypedEventMessage<any, any>): void {\n    this.message.next(message)\n\n    if (message.type === IframeMessages.CLOSE) {\n      this.close.emit(message.data)\n    }\n\n    if (message.type === IframeMessages.VIEW_READY_EVENT) {\n      this.iframeState$.next(new IFrameState('VIEW_READY'))\n    }\n  }\n}\n","@if ({ state: iframeState$ | async, params: iframeParams$ | async }; as ctx) {\n  <div class=\"layout-col full\">\n    <!-- In Case of Error -->\n    @if (ctx.state.hasError) {\n      <div class=\"layout-row place-center-center flex\">\n        <span>Failed to load Iframe: {{ ctx.state.message }}</span>\n      </div>\n    }\n    <!-- IFrame -->\n    @if (!ctx.state.hasError) {\n      <iframe\n        #iframe\n        (load)=\"onIframeLoadEvent($event)\"\n        (error)=\"onIframeErrorEvent($event)\"\n        [src]=\"ctx.params.srcUrl | elderSafeUrl\"\n        class=\"iframe flex\"\n        allow=\"clipboard *;clipboard-read *;clipboard-write *;\"\n      ></iframe>\n    }\n    <!-- Bottom Toolbar -->\n    @if (!ctx.params.hideActionBar) {\n      <mat-toolbar elderTheme class=\"layout-row place-between-center flex-none elder-dense-toolbar\">\n        <a mat-icon-button (click)=\"doClose($event)\" class=\"elder-icon-button-sm\">\n          <mat-icon>close</mat-icon>\n        </a>\n        <a\n          mat-icon-button\n          class=\"elder-icon-button-sm\"\n          [href]=\"ctx.params.srcUrl | elderSafeUrl\"\n          target=\"_blank\"\n        >\n          <mat-icon>open_in_new</mat-icon>\n        </a>\n      </mat-toolbar>\n    }\n  </div>\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject } from 'rxjs'\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'\nimport { IFrameParams, IframeHostComponent } from '../iframe-host/iframe-host.component'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-i-frame-dialog',\n  templateUrl: './iframe-dialog.component.html',\n  styleUrls: ['./iframe-dialog.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [IframeHostComponent, AsyncPipe],\n})\nexport class IframeDialogComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  public readonly iframeParams$ = new BehaviorSubject<IFrameParams>(null)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    public dialogRef: MatDialogRef<IframeDialogComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: IFrameParams\n  ) {\n    this.iframeParams$.next(data)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Lifecycle                                                               *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public close(data?: any): void {\n    this.dialogRef.close(data)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n}\n","@if (iframeParams$ | async; as iFrameParams) {\n  <div class=\"full\">\n    <elder-i-frame-host class=\"full\" [iframeParams]=\"iFrameParams\" (close)=\"close($event)\">\n    </elder-i-frame-host>\n  </div>\n}\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'\nimport { ActivatedRoute, Params, Router } from '@angular/router'\nimport { BehaviorSubject, Subject } from 'rxjs'\nimport { IFrameParams, IframeHostComponent } from '../iframe-host/iframe-host.component'\nimport { takeUntil } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderShellService } from '../../shell/elder-shell.service'\nimport { AsyncPipe } from '@angular/common'\n\n@Component({\n  selector: 'elder-i-frame-side-host',\n  templateUrl: './iframe-side-content.component.html',\n  styleUrls: ['./iframe-side-content.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [IframeHostComponent, AsyncPipe],\n})\nexport class IframeSideContentComponent implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private static readonly QUERY_PARAM_SRC_URL = 'srcUrl'\n  private static readonly QUERY_PARAM_WIDTH = 'width'\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly destroy$ = new Subject<void>()\n\n  public readonly iframeParams$ = new BehaviorSubject<IFrameParams>(null)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private router: Router,\n    private route: ActivatedRoute,\n    private shellService: ElderShellService\n  ) {\n    this.route.queryParams.pipe(takeUntil(this.destroy$)).subscribe((params) => {\n      this.iframeParams$.next({\n        srcUrl: params[IframeSideContentComponent.QUERY_PARAM_SRC_URL],\n        width: params['width'] || '1000px',\n      })\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Lifecycle                                                               *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  public ngOnDestroy(): void {\n    this.destroy$.next()\n    this.destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public close(data?: any): void {\n    this.shellService\n      .closeSideContent()\n      .then(() =>\n        this.removeQueryParams([\n          IframeSideContentComponent.QUERY_PARAM_SRC_URL,\n          IframeSideContentComponent.QUERY_PARAM_WIDTH,\n        ])\n      )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private removeQueryParams(paramNames: string[]): void {\n    const params: Params = {}\n    paramNames.forEach((paramName) => (params[paramName] = null))\n\n    this.router.navigate([], {\n      queryParams: params,\n      queryParamsHandling: 'merge',\n    })\n  }\n}\n","@if (iframeParams$ | async; as iFrameParams) {\n  <div [style.width]=\"iFrameParams.width\" class=\"full\">\n    <elder-i-frame-host class=\"full\" [iframeParams]=\"iFrameParams\" (close)=\"close($event)\">\n    </elder-i-frame-host>\n  </div>\n}\n","import { Injectable } from '@angular/core'\nimport { Observable } from 'rxjs'\nimport { MatDialog } from '@angular/material/dialog'\nimport { IframeDialogComponent } from './iframe-dialog/iframe-dialog.component'\nimport { IFrameParams } from './iframe-host/iframe-host.component'\nimport { TypedEventMessage } from './typed-event-message'\nimport { IframeMessages } from './iframe-messages'\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class IframeService {\n  public static postToParent<T, D>(message: TypedEventMessage<T, D>): void {\n    parent.postMessage(message, '*') //  `*` on any domain\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(public dialog: MatDialog) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public openIframeDialog<R>(params: IFrameParams): Observable<R> {\n    return this.dialog\n      .open<IframeDialogComponent, IFrameParams, R>(IframeDialogComponent, {\n        panelClass: 'no-padding-dialog',\n        maxWidth: '100vw',\n        maxHeight: '100vh',\n        width: params.width || '90vw',\n        height: params.height || '90vh',\n        data: params,\n      })\n      .afterClosed()\n  }\n\n  public postCloseMessage<T>(data?: T): void {\n    IframeService.postToParent(new TypedEventMessage<string, T>(IframeMessages.CLOSE, data))\n  }\n\n  public postViewReadyEventMessage<T>(data?: T): void {\n    IframeService.postToParent(\n      new TypedEventMessage<string, T>(IframeMessages.VIEW_READY_EVENT, data)\n    )\n  }\n\n  public postDataMessage<T, D>(message: TypedEventMessage<T, D>): void {\n    IframeService.postToParent(message)\n  }\n}\n","import { Directive, HostListener, Input } from '@angular/core'\nimport { IframeService } from './iframe.service'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\n\n@Directive({\n  selector: '[elderIframeClose]',\n  exportAs: 'elderIframeClose',\n  standalone: true,\n})\nexport class IframeCloseDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /**\n   * Iframe close input.\n   */\n  @Input('elderIframeClose')\n  public iframeResult: any\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private iframeService: IframeService) {}\n\n  @HostListener('click', ['$event']) onClick(event: any) {\n    this.logger.debug('Iframe result:', this.iframeResult)\n    this.iframeService.postCloseMessage<any>(this.iframeResult)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  ViewChild,\n} from '@angular/core'\nimport { IframeHostComponent } from '../../iframe-host/iframe-host.component'\nimport { SelectionEventSource, SelectionModel } from '../../../../common/selection/selection-model'\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs'\nimport { filter, takeUntil } from 'rxjs/operators'\nimport {\n  DataViewMessage,\n  DataViewSelection,\n  DataViewSelectionInit,\n  TypedEventMessage,\n} from '../../typed-event-message'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderDataViewOptionsProvider } from '../../../data-view/base/elder-data-view-options-provider'\nimport { ElderDataViewOptions } from '../../../data-view/base/elder-data-view-options'\n\n/**\n * Container for displaying a remote data view in an iframe.\n * Provides capabilities to communicate between remote data view (child)\n * and iframe parent.\n */\n@Component({\n  selector: 'elder-data-view-iframe',\n  templateUrl: './data-view-iframe.component.html',\n  styleUrls: ['./data-view-iframe.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [IframeHostComponent],\n})\nexport class DataViewIframeComponent implements OnInit, OnDestroy, AfterViewInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _dataViewOptions$ = new BehaviorSubject<ElderDataViewOptions>(\n    ElderDataViewOptions.defaultOptions()\n  )\n\n  private readonly _destroy$ = new Subject<void>()\n\n  @Input()\n  public srcUrl: string\n\n  @Input()\n  public idField: string\n\n  @Input()\n  public initialSelection: any[]\n\n  @ViewChild(IframeHostComponent)\n  public iframeHost: IframeHostComponent\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    @Optional() private dataViewOptionsProvider: ElderDataViewOptionsProvider,\n    @Optional() private selectionModel: SelectionModel<any>\n  ) {\n    if (dataViewOptionsProvider) {\n      dataViewOptionsProvider.options$\n        .pipe(takeUntil(this._destroy$))\n        .subscribe((options) => (this.dataViewOptions = options))\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  public ngAfterViewInit(): void {\n    // iframe is only available after view init\n    this.setupDataViewOptionsBridge(this.iframeHost)\n  }\n\n  public ngOnDestroy() {\n    this._destroy$.next()\n    this._destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get dataViewOptions(): ElderDataViewOptions {\n    return this._dataViewOptions$.getValue()\n  }\n\n  @Input()\n  public set dataViewOptions(options: ElderDataViewOptions) {\n    const newOptions = this.dataViewOptions.withOptions(options)\n    this._dataViewOptions$.next(newOptions)\n  }\n\n  public get dataViewOptions$(): Observable<ElderDataViewOptions> {\n    return this._dataViewOptions$.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public onMessageFromChild(message: TypedEventMessage<any, any>): void {\n    if (DataViewMessage.isOfType(message)) {\n      switch (message.type) {\n        case 'SELECTION_SELECTED':\n          this.handleSelectionMessage(message.data)\n          break\n      }\n    }\n  }\n\n  public sendMessageToChild(message: DataViewMessage<any>) {\n    this.log.debug('Sending message to iframe child:', message)\n    this.iframeHost.sendMessageToChild(message)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleSelectionMessage(dataViewSelection: DataViewSelection<any>): void {\n    if (this.selectionModel) {\n      this.selectionModel.replaceSelection(dataViewSelection.selection, {\n        source: SelectionEventSource.SYSTEM,\n        info: 'iframe.message.dataViewSelection',\n      })\n    }\n  }\n\n  private setupDataViewOptionsBridge(iframeHost: IframeHostComponent) {\n    combineLatest([this._dataViewOptions$, iframeHost.iframeState$])\n      .pipe(\n        takeUntil(this._destroy$),\n        // Send message on load and viewReady state for backwards compatibility between host and child.\n        // Actually using only viewReady should be enough\n        filter(([options, state]) => !!options && (state.hasLoaded || state.isViewReady))\n      )\n      .subscribe(([options, state]) =>\n        this.sendMessageToChild(this.buildDataViewInitMessage(options, this.initialSelection))\n      )\n  }\n\n  private buildDataViewInitMessage(\n    options: ElderDataViewOptions,\n    initialSelection: any[]\n  ): DataViewMessage<DataViewSelectionInit<any>> {\n    return DataViewMessage.initialSelection(\n      new DataViewSelectionInit(options, initialSelection, this.idField)\n    )\n  }\n}\n","<div class=\"layout-col full\">\n  <elder-i-frame-host\n    class=\"flex\"\n    [iframeParams]=\"{ srcUrl: srcUrl, hideActionBar: true }\"\n    (message)=\"onMessageFromChild($event)\"\n  >\n  </elder-i-frame-host>\n</div>\n","import { Directive, HostListener, OnDestroy, OnInit } from '@angular/core'\nimport { SelectionEventSource, SelectionModel } from '../../../common/selection/selection-model'\nimport { Subject } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\nimport { DataViewMessage, DataViewSelection, DataViewSelectionInit } from '../typed-event-message'\nimport { IframeService } from '../iframe.service'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderDataViewOptionsProvider } from '../../data-view/base/elder-data-view-options-provider'\n\nexport function createSelectionModel(): SelectionModel<any> {\n  return new SelectionModel<any>()\n}\n\nexport function createDataOptionsProvider(): ElderDataViewOptionsProvider {\n  return new ElderDataViewOptionsProvider()\n}\n\n/**\n * An adapter bridging communication between\n * a data view displayed in an iframe and its parent.\n *\n * For example propagates selection model changes\n * to the iframe parent.\n */\n@Directive({\n  selector: '[elderDataViewIframeAdapter]',\n  providers: [\n    {\n      provide: SelectionModel,\n      useFactory: createSelectionModel,\n    },\n    {\n      provide: ElderDataViewOptionsProvider,\n      useFactory: createDataOptionsProvider,\n    },\n  ],\n  standalone: true,\n})\nexport class DataViewIframeAdapterDirective implements OnInit, OnDestroy {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly _destroy$ = new Subject<void>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly iframeService: IframeService,\n    private readonly selectionModel: SelectionModel<any>,\n    private readonly dataViewOptionsProvider: ElderDataViewOptionsProvider\n  ) {\n    selectionModel.selection\n      .pipe(takeUntil(this._destroy$))\n      .subscribe((selection) => this.propagateSelectionToParent(selection))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Listeners                                                               *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Listens for messages from parent window.\n   * Makes it possible to react upon messages from iframe parent.\n   *\n   * @param event message from parent window\n   */\n  @HostListener('window:message', ['$event'])\n  public onWindowsMessage(event: MessageEvent): boolean {\n    this.log.debug('Received message event from parent:', event)\n    if (event && event.data) {\n      if (DataViewMessage.isOfType(event.data)) {\n        this.log.debug('Received data view message from parent:', event)\n        this.handleMessageFromParent(event.data)\n      }\n    }\n    return true\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {\n    // indicating iframe host that we are ready (e.g. ready to receive messages)\n    this.iframeService.postViewReadyEventMessage()\n  }\n\n  public ngOnDestroy(): void {\n    this._destroy$.next()\n    this._destroy$.complete()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleMessageFromParent(message: DataViewMessage<any, any>): void {\n    switch (message.type) {\n      case 'SELECTION_INIT':\n        this.initializeDataView(message.data)\n        break\n    }\n  }\n\n  private initializeDataView(init: DataViewSelectionInit<any>): void {\n    // updating options of child data view given by iframe parent\n    this.dataViewOptionsProvider.updateOptions((options) => options.withOptions(init.options))\n\n    this.selectionModel.keyGetterFn = (entity) => entity[init.idField]\n    this.selectionModel.isMultipleSelection = init.options.selectionMultiEnabled\n    if (init.initialSelection) {\n      this.selectionModel.replaceSelection(init.initialSelection, {\n        source: SelectionEventSource.SYSTEM,\n        info: 'iframe.SELECTION_INIT',\n      })\n    }\n  }\n\n  private propagateSelectionToParent(selection: any[]): void {\n    this.log.debug('Propagating selection to iframe parent:', selection)\n\n    const message = this.buildSelectionMessage(selection)\n    this.iframeService.postDataMessage(message)\n  }\n\n  private buildSelectionMessage(selection: any[]): DataViewMessage<any> {\n    return DataViewMessage.selection(new DataViewSelection(selection))\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { MatIconModule } from '@angular/material/icon'\nimport { FormsModule } from '@angular/forms'\nimport { RouterModule } from '@angular/router'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { IframeHostComponent } from './iframe-host/iframe-host.component'\nimport { IframeDialogComponent } from './iframe-dialog/iframe-dialog.component'\nimport { IframeSideContentComponent } from './iframe-side-content/iframe-side-content.component'\nimport { MatButtonModule } from '@angular/material/button'\nimport { ElderPipesModule } from '../../pipes/elder-pipes.module'\nimport { IframeCloseDirective } from './iframe-close.directive'\nimport { DataViewIframeComponent } from './data-view/data-view-iframe/data-view-iframe.component'\nimport { DataViewIframeAdapterDirective } from './data-view/data-view-iframe-adapter.directive'\nimport { MatToolbarModule } from '@angular/material/toolbar'\nimport { ElderThemeModule } from '../theme/elder-theme.module'\n\nexport * from './iframe.service'\nexport * from './iframe-close.directive'\nexport * from './iframe-host/iframe-host.component'\nexport * from './iframe-side-content/iframe-side-content.component'\nexport * from './iframe-dialog/iframe-dialog.component'\nexport * from './typed-event-message'\nexport * from './data-view/data-view-iframe/data-view-iframe.component'\nexport * from './data-view/data-view-iframe-adapter.directive'\n\n@NgModule({\n  imports: [\n    // Angular\n    CommonModule,\n    RouterModule,\n    FormsModule,\n    // Third Party\n    TranslateModule,\n    // Angular Material\n    MatIconModule,\n    MatButtonModule,\n    // ElderByte\n    ElderPipesModule,\n    MatToolbarModule,\n    ElderThemeModule,\n    IframeHostComponent,\n    IframeDialogComponent,\n    IframeSideContentComponent,\n    IframeCloseDirective,\n    DataViewIframeComponent,\n    DataViewIframeAdapterDirective,\n  ],\n  exports: [\n    IframeHostComponent,\n    IframeDialogComponent,\n    IframeSideContentComponent,\n    IframeCloseDirective,\n    DataViewIframeComponent,\n    DataViewIframeAdapterDirective,\n  ],\n})\nexport class ElderIFrameModule {}\n","import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core'\nimport { BehaviorSubject } from 'rxjs'\nimport { ExceptionDetail } from '../../../common/errors/exception-detail'\nimport { MatInput } from '@angular/material/input'\nimport { MatFormField, MatLabel } from '@angular/material/form-field'\nimport { MatIcon } from '@angular/material/icon'\nimport {\n  MatAccordion,\n  MatExpansionPanel,\n  MatExpansionPanelHeader,\n  MatExpansionPanelTitle,\n  MatExpansionPanelDescription,\n} from '@angular/material/expansion'\nimport { AsyncPipe } from '@angular/common'\n\nexport class ExceptionDetailCtx {\n  public static Empty = new ExceptionDetailCtx(null)\n\n  public readonly panelTitle: string\n  public readonly panelDescription: string\n\n  public static of(detail: ExceptionDetail): ExceptionDetailCtx {\n    return new ExceptionDetailCtx(detail)\n  }\n\n  constructor(public readonly detail: ExceptionDetail) {\n    if (detail) {\n      this.panelTitle = detail.title?.substring(0, 50)\n      this.panelDescription = detail.detail.substring(0, 100)\n    }\n  }\n}\n\n@Component({\n  selector: 'elder-exception-detail',\n  templateUrl: './elder-exception-detail.component.html',\n  styleUrls: ['./elder-exception-detail.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatAccordion,\n    MatExpansionPanel,\n    MatExpansionPanelHeader,\n    MatExpansionPanelTitle,\n    MatIcon,\n    MatExpansionPanelDescription,\n    MatFormField,\n    MatLabel,\n    MatInput,\n    AsyncPipe,\n  ],\n})\nexport class ElderExceptionDetailComponent implements OnInit {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly errorCtx$ = new BehaviorSubject<ExceptionDetailCtx>(ExceptionDetailCtx.Empty)\n\n  @Input()\n  public expanded = false\n\n  @Input()\n  public stacktraceRows = 8\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngOnInit(): void {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input()\n  public set error(error: ExceptionDetail) {\n    this.errorCtx$.next(ExceptionDetailCtx.of(error))\n  }\n}\n","@if (errorCtx$ | async; as errorCtx) {\n  @if (errorCtx.detail; as error) {\n    <mat-accordion class=\"full\">\n      <mat-expansion-panel [expanded]=\"expanded\">\n        <mat-expansion-panel-header>\n          <mat-panel-title class=\"layout-row place-start-center gap-sm\">\n            <mat-icon color=\"warn\" class=\"noselect\">warning</mat-icon>\n            <span class=\"noselect\">{{ errorCtx.panelTitle }}</span>\n          </mat-panel-title>\n          <mat-panel-description class=\"noselect\">\n            <span class=\"mat-caption\">{{ errorCtx.panelDescription }}</span>\n          </mat-panel-description>\n        </mat-expansion-panel-header>\n        <div class=\"layout-col flex p-xs\" style=\"overflow: hidden\">\n          <mat-form-field class=\"full-width\">\n            <mat-label>Detail</mat-label>\n            <input matInput [value]=\"error.detail\" readonly />\n          </mat-form-field>\n          <mat-form-field class=\"full-width\">\n            <mat-label>Stacktrace</mat-label>\n            <textarea\n              class=\"stacktrace\"\n              matInput\n              [value]=\"error.stacktrace\"\n              [rows]=\"stacktraceRows\"\n            ></textarea>\n          </mat-form-field>\n        </div>\n      </mat-expansion-panel>\n    </mat-accordion>\n  }\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderExceptionDetailComponent } from './exception-detail/elder-exception-detail.component'\nimport { MatExpansionModule } from '@angular/material/expansion'\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatInputModule } from '@angular/material/input'\n\nexport * from './exception-detail/elder-exception-detail.component'\nexport * from './error-util'\n\n/**\n * Provides Error Indicators and Exception detail components.\n */\n@NgModule({\n  exports: [ElderExceptionDetailComponent],\n  imports: [\n    CommonModule,\n    MatExpansionModule,\n    MatIconModule,\n    MatInputModule,\n    ElderExceptionDetailComponent,\n  ],\n})\nexport class ElderErrorModule {}\n","import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core'\nimport { BehaviorSubject } from 'rxjs'\nimport { IAuditedEntity } from '../i-audited-entity'\nimport {\n  MatFormFieldAppearance,\n  MatFormField,\n  MatLabel,\n  MatHint,\n} from '@angular/material/form-field'\nimport { TimeAgoPipe } from '../../../pipes/time-ago.pipe'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { MatInput } from '@angular/material/input'\nimport { MatIcon } from '@angular/material/icon'\nimport { AsyncPipe, DatePipe } from '@angular/common'\n\nclass AuditedEntityCtx {\n  constructor(public readonly audited: IAuditedEntity) {}\n}\n\n@Component({\n  selector: 'elder-audited-entity',\n  templateUrl: './elder-audited-entity.component.html',\n  styleUrls: ['./elder-audited-entity.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatFormField,\n    MatLabel,\n    MatIcon,\n    MatInput,\n    MatHint,\n    AsyncPipe,\n    DatePipe,\n    TranslateModule,\n    TimeAgoPipe,\n  ],\n})\nexport class ElderAuditedEntityComponent implements OnInit {\n  @Input()\n  public appearance: MatFormFieldAppearance = undefined\n\n  @Input()\n  public dateFormat = 'short'\n\n  public readonly auditedCtx$ = new BehaviorSubject<AuditedEntityCtx>(null)\n\n  constructor() {}\n\n  ngOnInit(): void {}\n\n  @Input()\n  public set audited(audited: IAuditedEntity) {\n    this.auditedCtx$.next(new AuditedEntityCtx(audited))\n  }\n}\n","@if (auditedCtx$ | async; as ctx) {\n  <section class=\"layout-row wrap gap-sm\">\n    <mat-form-field [appearance]=\"appearance\">\n      <mat-label class=\"layout-row place-start-center gap-xs\">\n        <mat-icon class=\"decent noselect\" inline>add_circle_outline</mat-icon>\n        <span>{{ 'context.createdAt' | translate }} {{ ctx.audited?.createdAt | timeAgo }}</span>\n      </mat-label>\n      <input matInput name=\"created\" [value]=\"ctx.audited?.createdAt | date: dateFormat\" readonly />\n      <mat-hint>{{ ctx.audited?.createdBy }}</mat-hint>\n    </mat-form-field>\n    <mat-form-field [appearance]=\"appearance\">\n      <mat-label class=\"layout-row place-start-center gap-xs\">\n        <mat-icon class=\"decent noselect\">mode_edit_outline</mat-icon>\n        <span>{{ 'context.modifiedAt' | translate }} {{ ctx.audited?.modifiedAt | timeAgo }}</span>\n      </mat-label>\n      <input\n        matInput\n        name=\"modified\"\n        [value]=\"ctx.audited?.modifiedAt | date: dateFormat\"\n        readonly\n      />\n      <mat-hint>{{ ctx.audited?.modifiedBy }}</mat-hint>\n    </mat-form-field>\n  </section>\n}\n","import { IsoDateStr } from '../../common/time/date-util'\n\nexport interface IAuditedEntity {\n  readonly createdAt: IsoDateStr\n  readonly createdBy: string\n  readonly modifiedAt: IsoDateStr\n  readonly modifiedBy: string\n}\n\nexport abstract class AuditedEntity implements IAuditedEntity {\n  public createdAt: IsoDateStr\n  public createdBy: string\n  public modifiedAt: IsoDateStr\n  public modifiedBy: string\n}\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderAuditedEntityComponent } from './audited-entity/elder-audited-entity.component'\nimport { MatInputModule } from '@angular/material/input'\nimport { TranslateModule } from '@ngx-translate/core'\nimport { ElderPipesModule } from '../../pipes/elder-pipes.module'\nimport { MatIconModule } from '@angular/material/icon'\n\nexport * from './i-audited-entity'\nexport * from './audited-entity/elder-audited-entity.component'\n\n@NgModule({\n  exports: [ElderAuditedEntityComponent],\n  imports: [\n    CommonModule,\n    MatInputModule,\n    TranslateModule,\n    ElderPipesModule,\n    MatIconModule,\n    ElderAuditedEntityComponent,\n  ],\n})\nexport class ElderAuditModule {}\n","import { Directive, Input } from '@angular/core'\nimport { MatTab } from '@angular/material/tabs'\n\n@Directive({\n  selector: '[elderTab]',\n  standalone: true,\n})\nexport class ElderTabDirective {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  @Input('elderTab')\n  public id: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(public tab: MatTab) {}\n}\n","import {\n  AfterViewInit,\n  contentChildren,\n  Directive,\n  effect,\n  input,\n  OnDestroy,\n  output,\n  Signal,\n  untracked,\n} from '@angular/core'\nimport { MatTab, MatTabChangeEvent, MatTabGroup } from '@angular/material/tabs'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ElderTabDirective } from '../elder-tab/elder-tab.directive'\nimport { ElderUrlFragmentParamsService } from '../../../common/url/elder-url-fragment-params.service'\nimport { UrlQueryParams } from '../../../common/url/url-query-params'\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop'\n\nexport class RoutedTabActivationFailed {\n  public constructor(\n    public readonly tabGroup: string,\n    public readonly markers: string[],\n    public readonly currentTabIds: string[],\n    public readonly currentTabCount: number\n  ) {}\n}\n\n/**\n * Adds out-of-the-box url-fragment based tab navigation\n * within the mat-tab-group it is placed upon.\n *\n * Add elderTab directive to each tab of the group to\n * support id-based tab navigation.\n */\n@Directive({\n  selector: '[elderTabGroupRouting]',\n  exportAs: 'elderTabGroupRouting',\n  standalone: true,\n})\nexport class ElderTabGroupRoutingDirective implements AfterViewInit, OnDestroy {\n  /**\n   * Prefix used to indicate and index-based tab marker.\n   */\n  private static readonly TAB_INDEX_PREFIX = 'idx:'\n\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _log = LoggerFactory.getLogger(this.constructor.name)\n\n  /**\n   * Stores the last tab marker (either ID or index)\n   * which could not be activated. This is used to retry\n   * activation once changes on tab structure occur.\n   *\n   */\n  private lastFailedTabActivation: RoutedTabActivationFailed\n\n  /**\n   * String to use as query param key.\n   */\n  public readonly tabGroupQueryParamKey = input<string>(undefined, {\n    alias: 'elderTabGroupRouting',\n  })\n\n  /**\n   * The child tabs within this navigation context.\n   */\n  public readonly tabs = contentChildren<MatTab>(MatTab)\n\n  /**\n   * The child tabs within this navigation context\n   * marked with the elderTabs directive.\n   */\n  public elderTabs = contentChildren<ElderTabDirective>(ElderTabDirective)\n\n  /**\n   * The tab marked with elderTab directive which\n   * is currently active. May be null if\n   * elderTab markers are not used.\n   */\n  public activeElderTab: ElderTabDirective\n  private readonly fragmentParams: Signal<UrlQueryParams | undefined>\n\n  public readonly tabActivationFailed = output<RoutedTabActivationFailed>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private fragmentParamsService: ElderUrlFragmentParamsService,\n    private tabGroup: MatTabGroup\n  ) {\n    this.tabGroup.selectedTabChange\n      .pipe(takeUntilDestroyed())\n      .subscribe((event) => this.handleTabChangeEvent(event))\n\n    this.fragmentParams = toSignal(this.fragmentParamsService.params$)\n\n    effect(() => {\n      this.handleFragmentParamsChange(this.fragmentParams())\n    })\n\n    effect(() => {\n      const tabs = this.tabs()\n      const elderTabs = this.elderTabs()\n      this.retryLastFailedActivation()\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Life Cycle                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public ngAfterViewInit(): void {}\n\n  public ngOnDestroy(): void {\n    this.removeFragmentParam()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get activeTabId(): string {\n    return this.activeElderTab?.id\n  }\n\n  public get activeTabIndex(): number {\n    return this.tabGroup.selectedIndex\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private Methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private handleFragmentParamsChange(params: UrlQueryParams): void {\n    const tabMarker = this.getTabMarker(params)\n\n    if (tabMarker) {\n      const markers = tabMarker.split(',')\n      this.tryActivateTabByMarkerHierarchy(markers)\n    }\n  }\n\n  private tryActivateTabByMarkerHierarchy(markers: string[]): void {\n    let success: boolean = false\n    for (const marker of markers) {\n      success = this.activateTabByMarker(marker)\n      if (success) {\n        break\n      }\n    }\n\n    if (success) {\n      this.lastFailedTabActivation = null\n    } else {\n      // remember tab marker in case of failure to retry later.\n      this.lastFailedTabActivation = new RoutedTabActivationFailed(\n        untracked(this.tabGroupQueryParamKey),\n        markers,\n        untracked(this.elderTabs).map((tab) => tab.id),\n        untracked(this.tabs).length\n      )\n      this.tabActivationFailed.emit(this.lastFailedTabActivation)\n    }\n  }\n\n  private activateTabByMarker(tabMarker: string): boolean {\n    let success: boolean\n    if (this.isIndexMarker(tabMarker)) {\n      const index = this.parseIndexMarker(tabMarker)\n      success = this.activateTabByIndex(index)\n    } else {\n      // if no index is given we assume the marker is the id of the tab.\n      success = this.activateTabById(tabMarker)\n    }\n    return success\n  }\n\n  private activateTabByIndex(indexToActivate: number): boolean {\n    if (indexToActivate !== this.activeTabIndex) {\n      this._log.debug('Activating tab by index ', indexToActivate)\n\n      // First try to identify corresponding elder tab, so that we may work with its ID instead of index.\n      const elderTab = this.findElderTabByIndex(indexToActivate)\n\n      if (elderTab) {\n        return this.activateElderTab(elderTab)\n      } else {\n        // If no elder tab found, clear active elder tab to ensure consistent state.\n        this.activeElderTab = null\n        return this.setSelectedIndex(indexToActivate)\n      }\n    } else {\n      return true\n    }\n  }\n\n  private activateTabById(tabId: string): boolean {\n    const elderTab = this.findElderTabById(tabId)\n\n    if (elderTab) {\n      return this.activateElderTab(elderTab)\n    } else {\n      // If no elder tab found, clear active elder tab to ensure consistent state.\n      this.activeElderTab = null\n      this._log.warn(\n        'Could not find tab with ID \"' +\n          tabId +\n          '\". Ensure elderTab directive is added to corresponding tab.'\n      )\n      return false\n    }\n  }\n\n  private activateElderTab(elderTab: ElderTabDirective): boolean {\n    if (this.activeElderTab !== elderTab) {\n      this.activeElderTab = elderTab\n      const indexToActivate = this.getIndexOfTab(elderTab.tab)\n      return this.setSelectedIndex(indexToActivate)\n    } else {\n      return true\n    }\n  }\n\n  private handleTabChangeEvent(tabChangeEvent: MatTabChangeEvent): void {\n    this._log.debug('Handling tabChangeEvent: ', tabChangeEvent)\n    this.lastFailedTabActivation = null\n    this.activeElderTab = this.findElderTabByTab(tabChangeEvent.tab)\n    this.updateFragmentParam()\n  }\n\n  private retryLastFailedActivation(): void {\n    if (this.lastFailedTabActivation) {\n      this._log.trace('Retrying to activate tab by marker:', this.lastFailedTabActivation)\n      this.tryActivateTabByMarkerHierarchy(this.lastFailedTabActivation.markers)\n    }\n  }\n\n  private setSelectedIndex(index: number): boolean {\n    if (index !== this.activeTabIndex) {\n      if (this.isValidIndex(index)) {\n        this._log.debug('Activating tab by index ', index)\n        this.tabGroup.selectedIndex = index\n        return true\n      } else {\n        this._log.warn('Could not find tab with index \"' + index + '\".')\n        return false\n      }\n    } else {\n      return true\n    }\n  }\n\n  private isValidIndex(index: number): boolean {\n    return untracked(this.tabs).length > index\n  }\n\n  private findElderTabById(tabId: string): ElderTabDirective | null {\n    return untracked(this.elderTabs).find((t) => t.id === tabId)\n  }\n\n  private findElderTabByIndex(tabIndex: number): ElderTabDirective | null {\n    const tab = this.findTabByIndex(tabIndex)\n    if (tab) {\n      return this.findElderTabByTab(tab)\n    } else {\n      return null\n    }\n  }\n\n  private findElderTabByTab(tab: MatTab): ElderTabDirective | null {\n    return untracked(this.elderTabs).find((elderTab) => elderTab.tab === tab)\n  }\n\n  private findTabByIndex(tabIndex: number): MatTab | null {\n    const tabs = untracked(this.tabs)\n    if (tabs.length > tabIndex) {\n      return tabs[tabIndex]\n    } else {\n      return null\n    }\n  }\n\n  private getIndexOfTab(tab: MatTab): number | null {\n    return untracked(this.tabs).indexOf(tab)\n  }\n\n  private updateFragmentParam(): void {\n    const currentTabMarker = this.getTabMarker(this.fragmentParamsService.params)\n\n    // If possible, use tab ID as marker. If not, use tab index as fallback.\n    const newTabMarker = this.activeTabId\n      ? this.activeTabId\n      : this.serializeIndexMarker(this.activeTabIndex)\n\n    if (newTabMarker !== currentTabMarker) {\n      this.setFragmentParam(newTabMarker)\n    }\n  }\n\n  private setFragmentParam(value: string): void {\n    const params = this.fragmentParamsService.params\n    params.set(this.queryParamKey(), value)\n\n    this.fragmentParamsService.setParams(params)\n  }\n\n  private removeFragmentParam(): void {\n    const params = this.fragmentParamsService.params\n    params.remove(this.queryParamKey())\n\n    this.fragmentParamsService.setParams(params)\n  }\n\n  private getTabMarker(queryParams: UrlQueryParams): string {\n    return queryParams.has(this.queryParamKey()) ? queryParams.get(this.queryParamKey()) : null\n  }\n\n  private isIndexMarker(marker: string) {\n    return marker && marker.startsWith(ElderTabGroupRoutingDirective.TAB_INDEX_PREFIX)\n  }\n\n  private parseIndexMarker(marker: string): number {\n    if (this.isIndexMarker(marker)) {\n      const indexStr = marker.replace(ElderTabGroupRoutingDirective.TAB_INDEX_PREFIX, '')\n      return Number(indexStr)\n    } else {\n      throw new Error(\n        'Cannot parse index from marker  \"' + marker + '\". Check with isIndexMarker first!'\n      )\n    }\n  }\n\n  private queryParamKey(): string {\n    return untracked(this.tabGroupQueryParamKey)\n  }\n\n  private serializeIndexMarker(index: number): string {\n    return ElderTabGroupRoutingDirective.TAB_INDEX_PREFIX + String(index)\n  }\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { ElderTabDirective } from './elder-tab/elder-tab.directive'\nimport { ElderTabGroupRoutingDirective } from './elder-tab-group-routing/elder-tab-group-routing.directive'\n\nexport * from './elder-tab/elder-tab.directive'\nexport * from './elder-tab-group-routing/elder-tab-group-routing.directive'\n\n@NgModule({\n  imports: [CommonModule, ElderTabDirective, ElderTabGroupRoutingDirective],\n  exports: [ElderTabDirective, ElderTabGroupRoutingDirective],\n})\nexport class ElderTabModule {}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\nimport { PageExitLock } from '../page-exit-guard.service'\nimport { MatIcon } from '@angular/material/icon'\n\n@Component({\n  selector: 'elder-page-exit-lock',\n  imports: [MatIcon],\n  templateUrl: './page-exit-lock.component.html',\n  styleUrl: './page-exit-lock.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElderPageExitLockComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public lock = input.required<PageExitLock>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n}\n","<div class=\"flex layout-row p-xs\">\n  <div class=\"layout-col p-xs place-center-start\">\n    <mat-icon>lock</mat-icon>\n  </div>\n  <div class=\"layout-col place-center-start\">\n    <span class=\"mat-subtitle-2 noselect\">{{ lock()?.message }}</span>\n  </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core'\nimport { PageExitLock } from '../page-exit-guard.service'\nimport { MatCard, MatCardContent } from '@angular/material/card'\nimport { ElderPageExitLockComponent } from '../page-exit-lock/page-exit-lock.component'\n\n@Component({\n  selector: 'elder-page-exit-lock-overview',\n  imports: [MatCard, MatCardContent, ElderPageExitLockComponent],\n  templateUrl: './page-exit-lock-overview.component.html',\n  styleUrl: './page-exit-lock-overview.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElderPageExitLockOverviewComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public locks = input.required<PageExitLock[]>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n}\n","<mat-card appearance=\"raised\" class=\"layout-col full scrollable\">\n  <mat-card-content>\n    <div>\n      @for (lock of locks(); track lock.id) {\n        <elder-page-exit-lock [lock]=\"lock\"> </elder-page-exit-lock>\n      }\n    </div>\n  </mat-card-content>\n</mat-card>\n","import { Injectable } from '@angular/core'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { UuidUtil } from '../../../common/utils/uuid-util'\nimport { map } from 'rxjs/operators'\nimport { ReactiveMap } from '../../../common/reactive-map'\nimport { ElderToastService } from '../../toasts/elder-toast.service'\n\nexport class PageExitLock {\n  public readonly id: string\n\n  constructor(\n    public readonly message: string,\n    private lockService: PageExitGuardServiceInternal\n  ) {\n    this.id = UuidUtil.weakUuid4()\n  }\n\n  public release() {\n    this.lockService.unlock(this)\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PageExitGuardService {\n  private internal: PageExitGuardServiceInternal\n\n  constructor(private toast: ElderToastService) {\n    this.internal = new PageExitGuardServiceInternal(toast)\n  }\n\n  public get locks$(): Observable<PageExitLock[]> {\n    return this.internal.locks$\n  }\n\n  public get isPageExitBlocked$(): Observable<boolean> {\n    return this.internal.isPageExitBlocked$\n  }\n\n  public lock(message: string): PageExitLock {\n    return this.internal.lock(message)\n  }\n}\n\n/***************************************************************************\n *                                                                         *\n * Internal                                                                *\n *                                                                         *\n **************************************************************************/\n\nclass PageExitGuardServiceInternal {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly _beforeUnloadHandler: (event: Event) => void\n  private readonly _isPageExitBlocked$ = new BehaviorSubject<boolean>(false)\n  private readonly _lockMap$ = new ReactiveMap<string, PageExitLock>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get locks$(): Observable<PageExitLock[]> {\n    return this._lockMap$.map$.pipe(map((lockMap) => Array.from(lockMap.values())))\n  }\n\n  public get isPageExitBlocked$(): Observable<boolean> {\n    return this._isPageExitBlocked$.asObservable()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private toast: ElderToastService) {\n    this._beforeUnloadHandler = this.preventDefaultAndWarnEvent()\n\n    this._lockMap$.map$.subscribe({\n      next: (map) => {\n        if (map.size > 0) {\n          this.ensureListenerStarted()\n        } else {\n          this.ensureListenerStopped()\n        }\n      },\n    })\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public methods                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public lock(message: string): PageExitLock {\n    const newLock = new PageExitLock(message, this)\n    this._lockMap$.set(newLock.id, newLock)\n    return this._lockMap$.get(newLock.id)\n  }\n\n  public unlock(lock: PageExitLock): void {\n    this._lockMap$.delete(lock.id)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * starts an event listener that will prevent the user from immediately closing\n   * the tab / reloading, if it isn't already running.\n   *\n   * try to stop the alert service whenever you can to minimize the effect on\n   * performance.\n   * [more details here](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event#usage_notes)\n   *\n   */\n  private ensureListenerStarted(): void {\n    if (!this._isPageExitBlocked$.getValue()) {\n      this._isPageExitBlocked$.next(true)\n      window.addEventListener('beforeunload', this._beforeUnloadHandler)\n    }\n  }\n\n  /**\n   * removes the event listener, if the listener is running.\n   */\n  private ensureListenerStopped(): void {\n    if (this._isPageExitBlocked$.getValue()) {\n      this._isPageExitBlocked$.next(false)\n      window.removeEventListener('beforeunload', this._beforeUnloadHandler)\n    }\n  }\n\n  private preventDefaultAndWarnEvent(): (event: Event) => void {\n    return (event: Event) => {\n      const msgs = Array.from(this._lockMap$.values()).map((lock) => lock.message)\n      this.toast.warn('[' + this._lockMap$.size + '] ' + msgs)\n      event.preventDefault()\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, Signal } from '@angular/core'\nimport { PageExitGuardService, PageExitLock } from '../page-exit-guard.service'\nimport { MatIconButton } from '@angular/material/button'\nimport { MatIcon } from '@angular/material/icon'\nimport { ElderPageExitLockOverviewComponent } from '../page-exit-lock-overview/page-exit-lock-overview.component'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { ElderOverlayModule } from '../../../overlays/elder-overlay.module'\n\n@Component({\n  selector: 'elder-page-exit-lock-indicator',\n  imports: [MatIconButton, MatIcon, ElderOverlayModule, ElderPageExitLockOverviewComponent],\n  templateUrl: './page-exit-lock-indicator.component.html',\n  styleUrl: './page-exit-lock-indicator.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElderPageExitLockIndicatorComponent {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  public readonly isPageExitBlocked: Signal<boolean>\n  public readonly locks: Signal<PageExitLock[]>\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private pageExitGuardService: PageExitGuardService) {\n    this.isPageExitBlocked = toSignal(this.pageExitGuardService.isPageExitBlocked$)\n    this.locks = toSignal(this.pageExitGuardService.locks$)\n  }\n}\n","@if (isPageExitBlocked()) {\n  <button mat-icon-button [elderOverlayTrigger]=\"overlay\" type=\"button\">\n    <mat-icon color=\"accent\">lock_clock</mat-icon>\n  </button>\n}\n\n<elder-overlay #overlay=\"elderOverlay\" originX=\"center\" overlayX=\"center\">\n  <elder-page-exit-lock-overview [locks]=\"locks()\" class=\"panel\"> </elder-page-exit-lock-overview>\n</elder-overlay>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { ElderPageExitLockIndicatorComponent } from './page-exit-lock-indicator/page-exit-lock-indicator.component'\n\nexport * from './page-exit-guard.service'\nexport * from './page-exit-lock-indicator/page-exit-lock-indicator.component'\n\n@NgModule({\n  declarations: [],\n  imports: [CommonModule, ElderPageExitLockIndicatorComponent],\n  exports: [ElderPageExitLockIndicatorComponent],\n})\nexport class PageExitGuardModule {}\n","import { ChangeDetectionStrategy, Component, HostBinding } from '@angular/core'\n\n@Component({\n  selector: 'elder-pane',\n  imports: [],\n  host: {\n    class: 'elder-pane',\n  },\n  template: `<div class=\"elder-pane-inner\">\n    <ng-content select=\"elder-pane-header\"></ng-content>\n    <ng-content select=\"elder-pane-content\"></ng-content>\n    <ng-content></ng-content>\n  </div>`,\n  styles: `\n    :host {\n      display: block;\n      overflow: hidden;\n      border-radius: var(--elder-pane-border-radius);\n      background-color: var(--elder-pane-bg-color);\n      flex: 1 1 0;\n    }\n    .elder-pane-inner {\n      display: flex;\n      flex-flow: column nowrap;\n      width: 100%;\n      height: 100%;\n      overflow: hidden;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElderPaneComponent {\n  @HostBinding('class') class = ''\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\n\n@Component({\n  selector: 'elder-pane-content',\n  imports: [],\n  host: {\n    class: 'layout-col flex p-md',\n  },\n  template: '<ng-content></ng-content>',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styles: [\n    `\n      :host {\n        /* Enables vertical scroll */\n        overflow-y: auto;\n        overflow-x: hidden;\n        -webkit-overflow-scrolling: touch;\n      }\n    `,\n  ],\n})\nexport class ElderPaneContentComponent {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\n\n@Component({\n  selector: 'elder-pane-title',\n  imports: [],\n  host: {\n    class: '',\n  },\n  template: `<!-- template -->\n    <h3 class=\"elder-pane-title text-title-large\">\n      <ng-content></ng-content>\n    </h3> `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styles: `\n    .elder-pane-title {\n      margin-top: 2px;\n      margin-bottom: var(--elder-pane-title-margin-bottom);\n    }\n  `,\n})\nexport class ElderPaneTitleComponent {}\n","import { ChangeDetectionStrategy, Component, HostBinding, input } from '@angular/core'\nimport { ElderPaneTitleComponent } from './pane-title.component'\n\n@Component({\n  selector: 'elder-pane-header',\n  imports: [ElderPaneTitleComponent],\n  host: {\n    class: 'elder-pane-header',\n  },\n  template: `<!-- template -->\n    <div class=\"layout-row place-between-center\">\n      <div class=\"layout-row place-start-center gap-sm hide-if-empty\">\n        <ng-content select=\"mat-icon, [mat-icon-button]\"></ng-content>\n        <ng-content select=\"[start]\"></ng-content>\n        <ng-content select=\"elder-pane-title\"></ng-content>\n        @if (title()) {\n          <elder-pane-title>{{ title() }}</elder-pane-title>\n        }\n      </div>\n\n      <div class=\"layout-row place-around-center flex gap-sm hide-if-empty\">\n        <ng-content select=\"[center]\"></ng-content>\n      </div>\n\n      <div class=\"layout-row place-end-center gap-sm hide-if-empty\">\n        <ng-content select=\"elder-pane-actions\"></ng-content>\n        <ng-content select=\"[end]\"></ng-content>\n        <ng-content></ng-content>\n      </div>\n    </div>`,\n  styles: `\n    :host {\n      display: block;\n    }\n    .hide-if-empty:empty {\n      display: none;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElderPaneHeaderComponent {\n  @HostBinding('class') class = 'p-md'\n  title = input<string>('')\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\n\n@Component({\n  selector: 'elder-pane-subtitle',\n  imports: [],\n  host: {\n    class: '',\n  },\n  template: `<!-- template -->\n    <h4 class=\"elder-pane-subtitle text-title-medium\">\n      <ng-content></ng-content>\n    </h4> `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styles: `\n    .elder-pane-subtitle {\n      margin-top: 0 !important;\n      padding-bottom: 0 !important;\n      margin-bottom: var(--elder-pane-subtitle-margin-bottom) !important;\n    }\n  `,\n})\nexport class ElderPaneSubtitleComponent {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\n\n@Component({\n  selector: 'elder-pane-actions',\n  imports: [],\n  host: {\n    class: 'elder-pane-actions',\n  },\n  template: `<!-- template -->\n    <div class=\"layout-row gap-sm\">\n      <ng-content></ng-content>\n    </div> `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElderPaneActionsComponent {}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core'\nimport { ElderBasicPaneLayoutComponent } from '../basic-pane-layout/basic-pane-layout.component'\nimport { ElderPaneComponent } from '../pane/pane.component'\nimport { ElderPaneContentComponent } from '../pane/pane-content.component'\n\n@Component({\n  selector: 'elder-single-pane-wrapper',\n  standalone: true,\n  imports: [ElderBasicPaneLayoutComponent, ElderPaneComponent],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <elder-basic-pane-layout class=\"full\">\n      <elder-pane [class]=\"innerClass\">\n        <ng-content></ng-content>\n      </elder-pane>\n    </elder-basic-pane-layout>\n  `,\n  styles: `\n    :host {\n      display: block;\n    }\n  `,\n  host: {\n    class: 'full',\n  },\n})\nexport class ElderSinglePaneWrapperComponent {\n  @Input() innerClass = 'full'\n\n  @HostBinding('class') class = 'elder-single-pane-wrapper'\n}\n","export const elderNamedColors = [\n  'white',\n  'grey',\n  'blue',\n  'turquoise',\n  'green',\n  'orange',\n  'yellow',\n  'red',\n  'purple',\n  'pink',\n] as const\n\nexport type ElderNamedColor = (typeof elderNamedColors)[number] | undefined\n\nexport const elderNamedColorRoles = ['primary', 'darker', 'on'] as const\n\nexport type ElderNamedColorRole = (typeof elderNamedColorRoles)[number] | undefined\n\nexport function elderNamedColorToken(\n  color: ElderNamedColor,\n  role: ElderNamedColorRole = 'primary'\n): string {\n  return '--elder-named-color-' + renderRoleName(role) + color\n}\n\nfunction renderRoleName(role: ElderNamedColorRole): string {\n  return role === 'primary' ? '' : role + '-'\n}\n","import { Directive } from '@angular/core'\nimport { ElderSelectComponent } from '../../select/single/elder-select/elder-select.component'\nimport { ElderEnumTranslationService } from '../../../common/enums/elder-enum-translation.service'\nimport { elderNamedColors } from '../named/named-color'\nimport { Sort } from '../../../common/data/sort'\n\n@Directive({\n  selector: '[elderNamedColorSelect]',\n  standalone: true,\n})\nexport class NamedColorSelectDirective {\n  constructor(\n    private select: ElderSelectComponent,\n    enumTranslationService: ElderEnumTranslationService\n  ) {\n    this.select.displayProperty = 'displayValue'\n    this.select.dataSource = enumTranslationService.stringArrayDateSource(\n      elderNamedColors,\n      'elder.colors.named',\n      true\n    )\n    this.select.sorts = [new Sort('value', 'asc')]\n  }\n}\n","import { computed, Directive, input, model, Optional, signal } from '@angular/core'\nimport { ElderNamedColor, ElderNamedColorRole, elderNamedColorToken } from '../named/named-color'\nimport { MatIcon } from '@angular/material/icon'\n\n@Directive({\n  selector: '[elderNamedColor]',\n  host: {\n    '[style.color]': 'hostColor()',\n    '[style.background-color]': 'hostBackgroundColor()',\n  },\n})\nexport class NamedColorDirective {\n  public readonly namedColor = input.required<ElderNamedColor>({ alias: 'elderNamedColor' })\n\n  public readonly backgroundRole = model<ElderNamedColorRole | undefined>('primary')\n  public readonly frontRole = model<ElderNamedColorRole | undefined>('on')\n\n  public readonly hostColor = computed<string>(() =>\n    this.namedColorCssVariable(this.namedColor(), this.frontRole())\n  )\n\n  public readonly hostBackgroundColor = computed<string>(() =>\n    this.namedColorCssVariable(this.namedColor(), this.backgroundRole())\n  )\n\n  constructor(@Optional() icon: MatIcon) {\n    if (icon) {\n      this.backgroundRole.set(undefined)\n      this.frontRole.set('darker')\n    }\n  }\n\n  private namedColorCssVariable(\n    name: ElderNamedColor,\n    role: ElderNamedColorRole | undefined\n  ): string {\n    if (role) {\n      return 'var(' + elderNamedColorToken(name, role) + ')'\n    } else {\n      return undefined\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core'\nimport { MatIcon } from '@angular/material/icon'\nimport { NamedColorDirective } from '../named-color.directive'\nimport { ElderNamedColor } from '../named-color'\nimport { TranslatedEnumValue } from '../../../../common/enums/elder-enum-translation.service'\n\n@Component({\n  selector: 'elder-named-color-select-value',\n  imports: [MatIcon, NamedColorDirective],\n  templateUrl: './named-color-select-value.component.html',\n  styleUrl: './named-color-select-value.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class NamedColorSelectValueComponent {\n  public readonly value = input.required<TranslatedEnumValue>()\n  public readonly namedColor = computed<ElderNamedColor>(\n    () => this.value()?.value as ElderNamedColor\n  )\n}\n","<div class=\"layout-row place-start-center\">\n  <mat-icon [elderNamedColor]=\"namedColor()\">color_lens</mat-icon>\n  <span>{{ value()?.displayValue }}</span>\n</div>\n","import { Observable, Subject, Subscription } from 'rxjs'\nimport { NgZone } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { map } from 'rxjs/operators'\n\n/**\n * This class provides a reactive wrapper around an event source.\n *\n * It supports event type filtering out of the box and manages the registrations.\n *\n * Additionally, it also handles reconnects since the default reconect handling by browsers\n * is not working in a lot of cases (5xx errors etc).\n *\n */\nexport class ReactiveEventSource<T = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  private readonly eventTopics = new Map<string, Subject<MessageEvent>>()\n\n  private currentSource: EventSource\n  private currentListeners = new Set<string>()\n\n  private _closed: boolean\n\n  private _unsubscribeSub: Subscription\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static staticUrl<T>(\n    zone: NgZone,\n    eventSourceUrl: string,\n    eventSourceInitDict?: EventSourceInit\n  ): ReactiveEventSource<T> {\n    if (!eventSourceUrl) {\n      throw new Error('You must provide a event source url!')\n    }\n    return new ReactiveEventSource(zone, () => eventSourceUrl, eventSourceInitDict)\n  }\n\n  public static dynamicUrl<T>(\n    zone: NgZone,\n    eventSourceUrlProvider: () => string,\n    eventSourceInitDict?: EventSourceInit\n  ): ReactiveEventSource<T> {\n    return new ReactiveEventSource(zone, eventSourceUrlProvider, eventSourceInitDict)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  private constructor(\n    private readonly zone: NgZone,\n    private eventSourceUrlProvider: () => string,\n    private eventSourceInitDict?: EventSourceInit\n  ) {\n    if (!eventSourceUrlProvider) {\n      throw new Error('You must provide a event source url provider!')\n    }\n    this.open()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get closed(): boolean {\n    return this._closed\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Open the event source.\n   *\n   * Note: The connection is opened automatically upon object creation.\n   * This method should only be used if this reactive-event-source has\n   * been closed explicitly.\n   */\n  public open(): void {\n    this._closed = false\n    this.reconnect()\n  }\n\n  /**\n   * Get an event stream for the given event type.\n   * @param eventType The event type. Defaults to 'message'.\n   */\n  public events(eventType: string = 'message'): Observable<MessageEvent> {\n    if (!this.eventTopics.has(eventType)) {\n      this.eventTopics.set(eventType, new Subject<MessageEvent>())\n      this.ensureRegistrations()\n    }\n    const eventSubj = this.eventTopics.get(eventType)\n    return eventSubj.asObservable()\n  }\n\n  /**\n   * Get an event stream of messages parsed from json.\n   * (event.data must be in json format)\n   *\n   * @param eventType The event type. Defaults to 'message'.\n   */\n  public eventsJson(eventType: string = 'message'): Observable<T> {\n    return this.events(eventType).pipe(map((event) => JSON.parse(event.data)))\n  }\n\n  /**\n   * Close this event source. It wont reconnect.\n   */\n  public close(): void {\n    this._closed = true\n    this.closeCurrent()\n    this.logger.debug('Closing the event-source.')\n  }\n\n  /**\n   * Keeps this reactive event source open until the given observable emits an event.\n   * @param unsubscribe\n   */\n  public openUntil(unsubscribe: Observable<any>): this {\n    this.cleanUpOpenUntil()\n    this._unsubscribeSub = unsubscribe.subscribe(() => this.close())\n    return this\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private cleanUpOpenUntil(): void {\n    if (this._unsubscribeSub) {\n      this._unsubscribeSub.unsubscribe()\n      this._unsubscribeSub = null\n    }\n  }\n\n  /**\n   * Reconnects this event source, unless closed is true;\n   */\n  private reconnect(): void {\n    if (this._closed) {\n      return\n    }\n\n    this.closeCurrent()\n\n    const eventSourceUrl = this.eventSourceUrlProvider()\n\n    try {\n      this.currentSource = new EventSource(eventSourceUrl, this.eventSourceInitDict)\n\n      this.ensureRegistrations()\n\n      this.currentSource.onopen = (event) => {\n        this.logger.debug(\n          'EventSource connection opened to: ' +\n            eventSourceUrl +\n            ', state: ' +\n            this.readyStateAsString(this.currentSource),\n          event\n        )\n      }\n\n      this.currentSource.onerror = (error) => {\n        this.logger.trace(\n          'There was an SSE error, current state: ' + this.readyStateAsString(this.currentSource),\n          error\n        )\n\n        if (!this.closed) {\n          // There was an error - try reconnecting\n          this.logger.debug('Attempting to reconnect event-source at' + eventSourceUrl + '...')\n          setTimeout(() => this.reconnect(), 3000) // Delay the reconnect\n        } else {\n          this.logger.debug('There was an error in the sse connection (closed).', error)\n        }\n      }\n    } catch (err) {\n      this.logger.error('Failed to create EventSource for ' + eventSourceUrl, err)\n      setTimeout(() => this.reconnect(), 3000) // Delay the reconnect\n    }\n  }\n\n  private ensureRegistrations(): void {\n    if (this.currentSource) {\n      this.eventTopics.forEach((subject, type) => {\n        if (!this.currentListeners.has(type)) {\n          this.currentSource.addEventListener(\n            type,\n            (msg) => subject.next(msg as MessageEvent),\n            false\n          )\n          this.currentListeners.add(type)\n          this.logger.debug('Listening to event type: ' + type)\n        }\n      })\n    }\n  }\n\n  /**\n   * Close the current event source\n   */\n  private closeCurrent(): void {\n    this.currentListeners.clear()\n\n    if (!this.currentClosed) {\n      // Close Event Source if not already closed.\n      this.logger.debug('Closing the event-source.')\n      this.currentSource.close()\n      this.currentSource = null\n    }\n  }\n\n  private get currentClosed(): boolean {\n    return !this.currentSource || this.currentSource.readyState === this.currentSource.CLOSED\n  }\n\n  private readyStateAsString(source: EventSource): string {\n    if (source.readyState === source.OPEN) {\n      return 'OPEN'\n    } else if (source.readyState === source.CLOSED) {\n      return 'CLOSED'\n    } else if (source.readyState === source.CONNECTING) {\n      return 'CONNECTING'\n    } else {\n      return 'UNKNOWN'\n    }\n  }\n}\n","import { Injectable, NgZone } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { ReactiveEventSource } from './reactive-event-source'\n\n/**\n * Angular reactive EventSource integration\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElderEventSourceService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private zone: NgZone) {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates an reactive, automatic reconnecting event source.\n   *\n   * @param eventSourceUrl The url to the event source\n   * @param eventSourceInitDict Additional configuration to use when connecting. (optional)\n   */\n  public reactiveEventSource<T = any>(\n    eventSourceUrl: string,\n    eventSourceInitDict?: EventSourceInit\n  ): ReactiveEventSource<T> {\n    return ReactiveEventSource.staticUrl(this.zone, eventSourceUrl, eventSourceInitDict)\n  }\n\n  /**\n   * Creates an reactive, automatic reconnecting event source. Each time the event source\n   * reconnects, the url provider is invoked.\n   *\n   * @param eventSourceUrlProvider The url provider of the event source\n   * @param eventSourceInitDict Additional configuration to use when connecting. (optional)\n   */\n  public reactiveEventSourceDynamic<T = any>(\n    eventSourceUrlProvider: () => string,\n    eventSourceInitDict?: EventSourceInit\n  ): ReactiveEventSource<T> {\n    return ReactiveEventSource.dynamicUrl(this.zone, eventSourceUrlProvider, eventSourceInitDict)\n  }\n}\n","import {\n  EventSourceMessage,\n  EventStreamContentType,\n  fetchEventSource,\n} from '@microsoft/fetch-event-source'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs'\nimport { filter } from 'rxjs/operators'\n\nexport enum ReactiveEventSourceState {\n  IDLE = 'IDLE',\n  CONNECTING = 'CONNECTING',\n  OPEN = 'OPEN',\n  CLOSED = 'CLOSED',\n  ERROR = 'ERROR',\n}\n\nexport class ReactiveSSeMessage<T = any> {\n  constructor(\n    public readonly id: string,\n    public readonly event: string,\n    public readonly dataRaw: string,\n    public readonly retry?: number\n  ) {}\n\n  public json(): T {\n    return JSON.parse(this.dataRaw)\n  }\n\n  public jsonAs<TCustom>(): TCustom {\n    return this.json() as unknown as TCustom\n  }\n}\n\nexport interface EventSourceRequestInit {\n  request: RequestInfo\n  method?: string\n  headers?: Record<string, string>\n}\n\nexport class ReactiveFetchEventSource<T = any> {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly EVENT_TYPE_DEFAULT = 'message'\n  private readonly RECONNECT_DELAY_MS = 3000\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n  private _closed: boolean\n  private abortController: AbortController = null\n\n  private readonly state$ = new BehaviorSubject<ReactiveEventSourceState>(\n    ReactiveEventSourceState.IDLE\n  )\n  private _unsubscribeSub: Subscription\n\n  private readonly eventRelay = new Subject<ReactiveSSeMessage<T>>()\n\n  /***************************************************************************\n   *                                                                         *\n   * Static Builder                                                          *\n   *                                                                         *\n   **************************************************************************/\n\n  public static staticRequest<T>(requestInit: EventSourceRequestInit): ReactiveFetchEventSource<T> {\n    if (!requestInit) {\n      throw new Error('You must provide a event source url!')\n    }\n    return new ReactiveFetchEventSource(() => requestInit)\n  }\n\n  public static dynamicRequest<T>(\n    requestInitProvider: () => EventSourceRequestInit\n  ): ReactiveFetchEventSource<T> {\n    return new ReactiveFetchEventSource(requestInitProvider)\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  private constructor(private readonly requestInitProvider: () => EventSourceRequestInit) {\n    if (!requestInitProvider) {\n      throw new Error('You must provide a event source url provider!')\n    }\n    this.open()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public get closed(): boolean {\n    return this._closed\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Open the event source.\n   *\n   * Note: The connection is opened automatically upon object creation.\n   * This method should only be used if this reactive-event-source has\n   * been closed explicitly.\n   */\n  public open(): void {\n    this._closed = false\n    this.reconnect()\n  }\n\n  /**\n   * Get an event stream for the given event type.\n   * @param eventTypeRaw The event type. Defaults to 'message'.\n   */\n  public streamEventsOfType(eventTypeRaw?: string): Observable<ReactiveSSeMessage<T>> {\n    const eventType = this.eventTypeOrDefault(eventTypeRaw)\n    return this.streamEvents().pipe(filter((e) => e.event === eventType))\n  }\n\n  /**\n   * Get an event stream for all events no matter their type.\n   */\n  public streamEvents(): Observable<ReactiveSSeMessage<T>> {\n    return this.eventRelay.asObservable()\n  }\n\n  /**\n   * Close this event source. It won't reconnect.\n   */\n  public close(): void {\n    this._closed = true\n    this.closeCurrent()\n    this.log.debug('Closing the event-source.')\n  }\n\n  /**\n   * Keeps this reactive event source open until the given observable emits an event.\n   * @param unsubscribe\n   */\n  public openUntil(unsubscribe: Observable<any>): this {\n    this.cleanUpOpenUntil()\n    this._unsubscribeSub = unsubscribe.subscribe(() => this.close())\n    return this\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private cleanUpOpenUntil(): void {\n    if (this._unsubscribeSub) {\n      this._unsubscribeSub.unsubscribe()\n      this._unsubscribeSub = null\n    }\n  }\n\n  /**\n   * Close the current event source\n   */\n  private closeCurrent(reason?: string): void {\n    this.log.debug('Closing the event-source, reason: ' + reason)\n    const crt = this.abortController\n    if (crt) {\n      crt.abort(reason)\n    }\n  }\n\n  /**\n   * Reconnects this event source, unless closed is true;\n   */\n  private reconnect(): void {\n    if (this._closed) {\n      return\n    }\n    this.updateState(ReactiveEventSourceState.CONNECTING)\n    this.closeCurrent('Reconnect')\n    this.openEventSource()\n  }\n\n  private openEventSource(): void {\n    const requestInit = this.requestInitProvider()\n    const crt = (this.abortController = new AbortController())\n    fetchEventSource(requestInit.request, {\n      method: requestInit.method,\n      signal: crt.signal,\n      headers: requestInit.headers,\n      keepalive: true,\n      openWhenHidden: false,\n      onopen: (response) => this.handleOnOpen(response),\n      onmessage: (msg) => this.handleOnMessage(msg),\n      onerror: (err) => this.handleOnError(err),\n      onclose: () => this.handleOnClose(),\n    }).then((r) => {})\n  }\n\n  private handleOnOpen(response: Response): Promise<void> {\n    if (response.ok && response.headers.get('content-type') === EventStreamContentType) {\n      this.log.debug(\n        'EventSource connection sucessfully opened to: ' +\n          response.url +\n          ', state: ' +\n          response.status,\n        response\n      )\n      this.updateState(ReactiveEventSourceState.OPEN)\n    } else if (response.status >= 400 && response.status < 500 && response.status !== 429) {\n      // client-side errors are usually non-retriable:\n      this.updateState(ReactiveEventSourceState.ERROR)\n      this.log.error('Failed to open Event Source due to Client Error ' + response.status, response)\n    } else {\n      this.log.error('Failed to open Event Source due to Error ' + response.status, response)\n      this.updateState(ReactiveEventSourceState.ERROR)\n      this.tryReconnect()\n    }\n    return undefined // TODO: Return a promise?\n  }\n\n  private handleOnError(err: any): void {\n    this.updateState(ReactiveEventSourceState.ERROR)\n    this.log.trace('There was an SSE error.', err)\n    if (!this.closed) {\n      // There was an error - try reconnecting\n      this.log.debug('Attempting to reconnect event-source ...')\n      this.tryReconnect()\n    } else {\n      this.log.debug('There was an error in the sse connection (closed).', err)\n    }\n  }\n\n  private tryReconnect(): void {\n    if (!this._closed) {\n      setTimeout(() => this.reconnect(), this.RECONNECT_DELAY_MS) // Delay the reconnect\n    }\n  }\n\n  private handleOnMessage(msg: EventSourceMessage): void {\n    const eventType = this.eventTypeOrDefault(msg.event)\n    this.eventRelay.next(new ReactiveSSeMessage<T>(msg.id, eventType, msg.data, msg.retry))\n  }\n\n  private handleOnClose(): void {\n    this.log.debug('EventSource has closed.')\n    this.updateState(ReactiveEventSourceState.CLOSED)\n  }\n\n  private updateState(state: ReactiveEventSourceState) {\n    this.state$.next(state)\n  }\n\n  private eventTypeOrDefault(type?: string): string {\n    return type ?? this.EVENT_TYPE_DEFAULT\n  }\n}\n","import { Injectable } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { EventSourceRequestInit, ReactiveFetchEventSource } from './reactive-fetch-event-source'\n\n/**\n * Angular reactive EventSource integration\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class ReactiveFetchEventSourceService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly log = LoggerFactory.getLogger(this.constructor.name)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor() {}\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Creates an reactive, automatic reconnecting event source.\n   *\n   * @param requestInit The request to the event source\n   */\n  public reactiveEventSource<T = any>(\n    requestInit: EventSourceRequestInit\n  ): ReactiveFetchEventSource<T> {\n    return ReactiveFetchEventSource.staticRequest(requestInit)\n  }\n\n  /**\n   * Creates an reactive, automatic reconnecting event source. Each time the event source\n   * reconnects, the url provider is invoked.\n   *\n   * @param requestInitProvider The request provider of the event source\n   */\n  public reactiveEventSourceDynamic<T = any>(\n    requestInitProvider: () => EventSourceRequestInit\n  ): ReactiveFetchEventSource<T> {\n    return ReactiveFetchEventSource.dynamicRequest(requestInitProvider)\n  }\n}\n","import { Injectable } from '@angular/core'\n\nexport enum KafentEventTransport {\n  /**\n   * Use Server-Sent Events, with auto reconnect as transport layer\n   */\n  SSE = 'sse',\n\n  /**\n   * Effectively dont use Kafent integration as transport is disabled.\n   */\n  DISABLED = 'disabled',\n}\n\n/**\n * Kafent Client Configuration\n */\n@Injectable()\nexport class KafentConfig {\n  /**\n   * The url to the kavent event api\n   */\n  public kafentUrl: string\n\n  /**\n   * The token query param.\n   * (If not provided, defaults to access_token)\n   */\n  public tokenParam?: string\n\n  /**\n   * Specify the transport.\n   * If omitted, defaults to KafentEventTransport.SSE.\n   */\n  public transport?: KafentEventTransport\n}\n","import { KafentLiveEventRequest } from './kafent-live-event-request'\nimport { NEVER, Observable } from 'rxjs'\nimport { KafentEvent } from './kafent-event'\nimport { KafentEventTransport } from './kafent-config'\nimport { Injectable } from '@angular/core'\n\nexport abstract class KafentEventStream {\n  /**\n   * The transport layer of this event stream implementation\n   */\n  public readonly transport: KafentEventTransport\n\n  constructor(transport: KafentEventTransport) {\n    this.transport = transport\n  }\n\n  /**\n   * Get Kafent events from the given topic-request.\n   *\n   * This event stream is infinite and will never complete on its own.\n   * Therefore, ensure you unsubscribe from this observable to\n   * ensure resources are cleaned up properly.\n   *\n   * @param request\n   */\n  public abstract getLiveEventsWith(request: KafentLiveEventRequest): Observable<KafentEvent>\n}\n\n@Injectable()\nexport class KafentEventStreamDisabled extends KafentEventStream {\n  constructor() {\n    super(KafentEventTransport.DISABLED)\n  }\n\n  public getLiveEventsWith(request: KafentLiveEventRequest): Observable<KafentEvent> {\n    // We use NEVER as dummy, which means it will never emit any item and also never complete.\n    // This fits the overall api contract as Kafent Event Streams always infinite by nature.\n    return NEVER\n  }\n}\n","import { WebSessionStorage } from '../../common/webstorage/webstorage.service'\nimport { Injectable } from '@angular/core'\n\nexport abstract class KafentTokenProvider {\n  abstract getAccessToken(): string\n}\n\n@Injectable()\nexport class KafentTokenProviderSessionStorage extends KafentTokenProvider {\n  constructor(private readonly sessionStorage: WebSessionStorage) {\n    super()\n  }\n\n  public getAccessToken(): string {\n    return this.sessionStorage.getItem('access_token')\n  }\n}\n","import { KafentEvent } from './kafent-event'\nimport { map } from 'rxjs/operators'\nimport { Observable } from 'rxjs'\nimport { KafentLiveEventRequest } from './kafent-live-event-request'\nimport { Inject, Injectable } from '@angular/core'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { KafentConfig, KafentEventTransport } from './kafent-config'\nimport { KafentTokenProvider } from './access-token-provider'\nimport { KafentEventStream } from './kafent-event-stream'\n\n/**\n * Provides Kafent events over a simple API.\n *\n * Technically this is the Kafent Public API Facade, hides\n * transport and other technical optimisations from consumers.\n */\n@Injectable()\nexport class KafentEventService {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger('KafentEventService')\n  private readonly authTokenParam: string\n\n  private readonly transport: KafentEventTransport\n  private readonly kafentEventStream: KafentEventStream\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly config: KafentConfig,\n    private readonly tokenProvider: KafentTokenProvider,\n    @Inject(KafentEventStream) private eventStreams: KafentEventStream[]\n  ) {\n    this.authTokenParam = this.config.tokenParam || 'access_token'\n    this.transport = config.transport || KafentEventTransport.SSE\n\n    this.logger.info(\n      'Initializing Kafent with transport: ' +\n        this.transport +\n        ' and auth-token param: ' +\n        this.authTokenParam\n    )\n\n    this.kafentEventStream = eventStreams.find((es) => es.transport === this.transport)\n\n    if (this.kafentEventStream == null) {\n      throw new Error(\n        'Could not find an event-stream implementation supporting transport ' +\n          this.transport +\n          '. ' +\n          'Available implementations (' +\n          eventStreams.length +\n          ') [' +\n          eventStreams +\n          ']'\n      )\n    }\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Live Events Public API                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Get Kafent events from the given topic request.\n   *\n   * Ensure you unsubscribe from this observable to\n   * ensure resources are cleaned up properly.\n   *\n   * @param request\n   */\n  public getLiveEventsWith(request: KafentLiveEventRequest): Observable<KafentEvent> {\n    return this.kafentEventStream.getLiveEventsWith(request)\n  }\n\n  /**\n   * Get all events of the given topics\n   * @param topic\n   */\n  public getLiveEvents(topic: string): Observable<KafentEvent> {\n    return this.getLiveEventsWith({\n      topic: topic,\n    })\n  }\n\n  public getLiveEventValues<T>(topic: string): Observable<T> {\n    return this.getLiveEvents(topic).pipe(map((e) => e.value))\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Consumer Events Public API                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  // TODO\n}\n","import { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs'\nimport { KafentEvent } from '../kafent-event'\nimport { share } from 'rxjs/operators'\nimport { ReactiveEventSource } from '../../event-source/standard/reactive-event-source'\n\nexport class KafentTopicSse {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * The cold observable which proxies to the\n   * sse channel and tracks the open connections.\n   *\n   */\n  private readonly source: Observable<KafentEvent>\n\n  /**\n   * The shared, ref counting stream clients subscribe to.\n   */\n  private readonly hot: Observable<KafentEvent>\n\n  /**\n   * Intermediate channel transporting events from the sse stream to the\n   */\n  private readonly inter = new Subject<KafentEvent>()\n\n  private sse: ReactiveEventSource<KafentEvent>\n\n  private sseSub: Subscription\n\n  /**\n   * The open sse connections. Should only be 0 or 1 since multiple connections\n   * are shared by the hot stream.\n   */\n  private readonly connected = new BehaviorSubject(0)\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(private readonly topic: string) {\n    this.source = new Observable((observer) => {\n      const sub = this.inter.subscribe(observer)\n\n      if (this.noneConnected) {\n        this.incrementConnected()\n        this.renewSseSub()\n      }\n\n      // Teardown\n      return () => {\n        sub.unsubscribe()\n        this.decrementConnected()\n        if (this.noneConnected) {\n          this.unsubSse()\n        }\n      }\n    })\n    this.hot = this.source.pipe(share())\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Properties                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  /**\n   * Gets the events.\n   * Ensure to unsubscribe each subscription to avoid a resource leak.\n   */\n  public get events(): Observable<KafentEvent> {\n    return this.hot\n  }\n\n  /**\n   * Emits the current count of connected clients.\n   * If this value is 0, it means this kafent-topic is currently unused.\n   */\n  public get connectedCount(): Observable<number> {\n    return this.connected\n  }\n\n  public get anyConnected(): boolean {\n    return this.connected.getValue() > 0\n  }\n\n  public get noneConnected(): boolean {\n    return this.connected.getValue() === 0\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public connect(sse: ReactiveEventSource<KafentEvent>): void {\n    this.sse = sse\n    this.renewSseSub()\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private incrementConnected(): void {\n    let connected = this.connected.getValue()\n    this.connected.next(++connected)\n  }\n\n  private decrementConnected(): void {\n    let connected = this.connected.getValue()\n    this.connected.next(--connected)\n  }\n\n  private renewSseSub(): void {\n    this.unsubSse()\n\n    if (this.anyConnected) {\n      this.sseSub = this.sse.eventsJson(this.topic).subscribe(this.inter)\n    }\n  }\n\n  private unsubSse(): void {\n    if (this.sseSub) {\n      this.sseSub.unsubscribe()\n      this.sseSub = null\n    }\n  }\n}\n","import { KafentTopicSse } from './kafent-topic-sse'\nimport { KafentEvent } from '../kafent-event'\nimport { Observable } from 'rxjs'\nimport { KafentTokenProvider } from '../access-token-provider'\nimport { KafentConfig, KafentEventTransport } from '../kafent-config'\nimport { ReactiveEventSource } from '../../event-source/standard/reactive-event-source'\nimport { ElderEventSourceService } from '../../event-source/standard/elder-event-source.service'\nimport { UrlBuilder } from '../../../common/utils/url-builder'\nimport { Injectable } from '@angular/core'\nimport { KafentLiveEventRequest } from '../kafent-live-event-request'\nimport { skip } from 'rxjs/operators'\nimport { LoggerFactory } from '@elderbyte/ts-logger'\nimport { KafentEventStream } from '../kafent-event-stream'\n\nexport class KafentSseEventChannel {\n  public readonly id: string\n\n  constructor(\n    public readonly request: KafentLiveEventRequest,\n    public readonly eventChannelSub: KafentTopicSse\n  ) {\n    this.id = KafentSseEventChannel.hash(request)\n  }\n\n  public static hash(request: KafentLiveEventRequest): string {\n    return JSON.stringify(request)\n  }\n}\n\n@Injectable()\nexport class KafentEventStreamSse extends KafentEventStream {\n  /***************************************************************************\n   *                                                                         *\n   * Fields                                                                  *\n   *                                                                         *\n   **************************************************************************/\n\n  private readonly logger = LoggerFactory.getLogger('KafentEventServiceSse')\n\n  private readonly activeEventChannels = new Map<string, KafentSseEventChannel>()\n  private kafentSource: ReactiveEventSource<KafentEvent>\n\n  private readonly authTokenParam: string\n\n  /***************************************************************************\n   *                                                                         *\n   * Constructor                                                             *\n   *                                                                         *\n   **************************************************************************/\n\n  constructor(\n    private readonly config: KafentConfig,\n    private readonly eventSourceService: ElderEventSourceService,\n    private readonly tokenProvider: KafentTokenProvider\n  ) {\n    super(KafentEventTransport.SSE)\n    this.authTokenParam = this.config.tokenParam || 'access_token'\n\n    this.logger.info(\n      'Initialized KafentEventStreamSse with auth-token param: ' + this.authTokenParam\n    )\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Public API                                                              *\n   *                                                                         *\n   **************************************************************************/\n\n  public getLiveEventsWith(topic: KafentLiveEventRequest): Observable<KafentEvent> {\n    const kafentChannel = this.kafentEventChannel(topic)\n    return kafentChannel.eventChannelSub.events\n  }\n\n  /***************************************************************************\n   *                                                                         *\n   * Private methods                                                         *\n   *                                                                         *\n   **************************************************************************/\n\n  private kafentEventChannel(request: KafentLiveEventRequest): KafentSseEventChannel {\n    const channelId = KafentSseEventChannel.hash(request)\n    if (!this.activeEventChannels.has(channelId)) {\n      this.activeEventChannels.set(channelId, this.createKafentChannel(request))\n    }\n    return this.activeEventChannels.get(channelId)\n  }\n\n  private createKafentChannel(request: KafentLiveEventRequest): KafentSseEventChannel {\n    const ktopic = new KafentTopicSse(request.topic)\n    const channel = new KafentSseEventChannel(request, ktopic)\n\n    const sub = ktopic.connectedCount\n      .pipe(\n        skip(1) // Skip initial behaviour-subject value\n      )\n      .subscribe((connected) => {\n        if (connected === 1) {\n          // If the first has connected\n          this.updateKafentSseSub()\n        }\n        if (connected === 0) {\n          // If the last has disconnected\n          // Self deconstruct\n          this.activeEventChannels.delete(channel.id)\n          sub.unsubscribe()\n          this.updateKafentSseSub()\n        }\n      })\n    return channel\n  }\n\n  private updateKafentSseSub(): void {\n    this.clearSource()\n\n    const channels = Array.from(this.activeEventChannels.values())\n\n    const usedChannels = channels.filter((c) => c.eventChannelSub.anyConnected)\n\n    if (usedChannels.length > 0) {\n      this.kafentSource = this.buildKafentSource(usedChannels)\n      this.connect(this.kafentSource)\n    }\n  }\n\n  private clearSource(): void {\n    if (this.kafentSource) {\n      this.kafentSource.close()\n      this.kafentSource = null\n    }\n  }\n\n  private buildKafentSource(channels: KafentSseEventChannel[]): ReactiveEventSource<KafentEvent> {\n    return this.eventSourceService.reactiveEventSourceDynamic(() =>\n      this.buildEventSourceUrl(channels)\n    )\n  }\n\n  private buildEventSourceUrl(channels: KafentSseEventChannel[]): string {\n    const b = UrlBuilder.parse(this.config.kafentUrl)\n    channels\n      .map((c) => c.request)\n      .forEach((request) => b.appendParam('topicJson', btoa(JSON.stringify(request))))\n\n    const token = this.tokenProvider.getAccessToken()\n    if (token) {\n      this.logger.debug(\n        'Appending param: ' +\n          this.authTokenParam +\n          ' with access_token: ' +\n          token.substring(0, 5) +\n          '...'\n      )\n      b.appendParam(this.authTokenParam, token)\n    } else {\n      this.logger.warn('No access_token was provided, skipping auth param: ' + this.authTokenParam)\n    }\n\n    return b.build()\n  }\n\n  private connect(kafentSource: ReactiveEventSource<KafentEvent>): void {\n    this.activeEventChannels.forEach((v, k) => v.eventChannelSub.connect(kafentSource))\n  }\n}\n","export class KafentEvent<T = any> {\n  /**\n   * The event key. Usually the id of the entity.\n   */\n  public key: string\n\n  /**\n   * The event value.\n   * Null might indicate deletion (tombstone)\n   */\n  public value: T\n}\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core'\nimport { CommonModule } from '@angular/common'\nimport { KafentConfig } from './kafent-config'\nimport { KafentEventService } from './kafent-event.service'\nimport { KafentEventStreamSse } from './sse/kafent-event-stream-sse.service'\nimport { KafentTokenProvider, KafentTokenProviderSessionStorage } from './access-token-provider'\nimport { KafentEventStream, KafentEventStreamDisabled } from './kafent-event-stream'\n\nexport * from './kafent-live-event-request'\nexport * from './kafent-event'\nexport * from './kafent-config'\nexport * from './access-token-provider'\nexport * from './kafent-event.service'\nexport * from './kafent-event-stream'\nexport * from './sse/kafent-topic-sse'\nexport * from './sse/kafent-event-stream-sse.service'\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [],\n})\nexport class KafentModule {\n  /**\n   * Allows to configure the auth module dynamically.\n   * @param kafentConfigProvider A custom provider for the KafentConfig\n   * @param customKafentTokenProvider A custom security token provider\n   */\n  static forRootDynamic(\n    kafentConfigProvider: Provider,\n    customKafentTokenProvider?: Provider\n  ): ModuleWithProviders<KafentModule> {\n    return {\n      ngModule: KafentModule,\n      providers: [\n        kafentConfigProvider,\n        { provide: KafentEventStream, useClass: KafentEventStreamSse, multi: true },\n        { provide: KafentEventStream, useClass: KafentEventStreamDisabled, multi: true },\n\n        { provide: KafentEventService, useClass: KafentEventService },\n        customKafentTokenProvider || {\n          provide: KafentTokenProvider,\n          useClass: KafentTokenProviderSessionStorage,\n        },\n      ],\n    }\n  }\n\n  /**\n   * Configures the auth module statically.\n   * @param kafentConfig A static kafent configuration\n   *  @param customKafentTokenProvider A custom security token provider\n   */\n  static forRoot(\n    kafentConfig: KafentConfig,\n    customKafentTokenProvider?: Provider\n  ): ModuleWithProviders<KafentModule> {\n    return KafentModule.forRootDynamic(\n      { provide: KafentConfig, useValue: kafentConfig },\n      customKafentTokenProvider\n    )\n  }\n}\n","/*\n * Public API Surface of ngx-starter\n */\n\nexport * from './lib/pipes/public_api'\nexport * from './lib/common/public_api'\nexport * from './lib/components/public_api'\nexport * from './lib/features/public_api'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["switchMap","i1","i1.ElderThemeService","i2.WebLocalStorage","i2.ElderThemePreferenceService","i3","i2.ElderThemeService","i2","mergeMap","i1.HttpClientPristine","i3.ElderToastService","i1.ModifierKeyService","i1.SelectionModel","i2.ElderDataViewOptionsProvider","i3.DataViewInteractionControllerDirective","i1.ElderCompositeSortComponent","i2.ElderDialogService","i1.DataContextSelectionDirective","i1.ActivationModel","i1.DataViewInteractionControllerDirective","i2.ActivationModel","i3.DataViewActivationController","i1.DataViewDndControllerService","MatOption","i2.DataContextSelectionDirective","i2.ElderTableComponent","i1.ElderTableComponent","i1.ElderTableModel","i2.SelectionModel","i3.ElderDataViewOptionsProvider","i4","i5.ElderTableExtensionDirective","i6.DataViewInteractionControllerDirective","i2.ElderInfiniteScrollDirective","i1.ElderClipboardService","i1.CommonValidationMessageStrategy","i2.DynamicValidationMessageStrategy","i1.ValidationMessageRendererService","i1.ElderDataActivationDirective","i2.DataViewActivationController","i3.ElderDialogService","i1.ElderMasterDetailService","i1.ElderToolbarService","i1.ElderLanguageService","i1.ElderToolbarTitleService","i2.ElderMasterDetailService","i1.ElderToastService","i4.ElderMasterDetailService","i1.ElderUnitService","i1.ElderQuantityService","createSelectionModel","i3.SelectionModel","Subject","i1.ElderSuggestionPanelComponent","i2.ElderAutoSelectFirstService","i1.ElderSelectComponent","i2.ElderUnitService","i1.ElderMultiSelectChipOptionsComponent","i1.ElderMultiSelectChipsComponent","i2.IncludeExcludeSelectionModel","i1.SearchContextService","i1.ElderSearchContextDirective","i1.ElderNavListComponent","i2.ElderRouterOutletService","i1.ElderRouterOutletService","i1.ElderShellService","i2.ElderRouteOutletDrawerService","i3.ElderThemeService","i4.GlobalDragDropService","i2.ElderShellService","i1.SmartLocalDateParserService","Temporal","map","i7","i8","i1.ElderOverlayComponent","i2.ElderLanguageService","i1.ElderLocalizedInputDialogService","i2.LocalisationPickerService","combineLatestWith","i2.ElderSearchUrlService","i1.LocalisationPickerService","i1.ElderLocalizedInputComponent","i1.ElderDataTransferService","i1.ElderConnectivityService","i1.ElderUrlFragmentSwitcherComponent","i1.CsvStreamExporterBuilderService","i1.IframeService","i1.ElderDataViewOptionsProvider","i1.ElderUrlFragmentParamsService","i1.PageExitGuardService","i2.ElderOverlayComponent","i3.ElderOverlayTriggerDirective","i2.ElderEnumTranslationService","i1.WebSessionStorage","i1.KafentConfig","i2.ElderEventSourceService","i3.KafentTokenProvider"],"mappings":"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"}