{"version":3,"file":"ihk-gfi-lux-components.mjs","sources":["../../../projects/lux-components-lib/src/lib/lux-action/lux-action-model/lux-action-component-base.class.ts","../../../projects/lux-components-lib/src/lib/lux-components-config/lux-components-config.module.ts","../../../projects/lux-components-lib/src/lib/lux-components-config/lux-components-config.service.ts","../../../projects/lux-components-lib/src/lib/lux-util/env-utils.ts","../../../projects/lux-components-lib/src/lib/lux-icon/lux-icon/lux-icon-registry.service.ts","../../../projects/lux-components-lib/src/lib/lux-icon/lux-icon/lux-icon.component.ts","../../../projects/lux-components-lib/src/lib/lux-icon/lux-icon/lux-icon.component.html","../../../projects/lux-components-lib/src/lib/lux-util/lux-console.service.ts","../../../projects/lux-components-lib/src/lib/lux-action/lux-button-toggle/lux-button-toggle.component.ts","../../../projects/lux-components-lib/src/lib/lux-action/lux-button-toggle/lux-button-toggle.component.html","../../../projects/lux-components-lib/src/lib/lux-directives/lux-aria/lux-aria-base.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-aria/lux-aria-label.directive.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-form-control-wrapper/lux-form-control-wrapper.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-form-control-wrapper/lux-form-control-wrapper.component.html","../../../projects/lux-components-lib/src/lib/lux-directives/lux-tag-id/lux-tag-id.directive.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-tag-id/lux-custom-tag-id.directive.ts","../../../projects/lux-components-lib/src/lib/lux-util/lux-colors.enum.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-progress/lux-progress.component.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-progress/lux-progress.component.html","../../../projects/lux-components-lib/src/lib/lux-action/lux-button/lux-button.component.ts","../../../projects/lux-components-lib/src/lib/lux-action/lux-button/lux-button.component.html","../../../projects/lux-components-lib/src/lib/lux-action/lux-link-plain/lux-link-plain.component.ts","../../../projects/lux-components-lib/src/lib/lux-action/lux-link-plain/lux-link-plain.component.html","../../../projects/lux-components-lib/src/lib/lux-action/lux-link/lux-link.component.ts","../../../projects/lux-components-lib/src/lib/lux-action/lux-link/lux-link.component.html","../../../projects/lux-components-lib/src/lib/lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component.ts","../../../projects/lux-components-lib/src/lib/lux-action/lux-menu/lux-menu-subcomponents/lux-menu-panel-header.component.ts","../../../projects/lux-components-lib/src/lib/lux-action/lux-menu/lux-menu-subcomponents/lux-menu-section-title.component.ts","../../../projects/lux-components-lib/src/lib/lux-action/lux-menu/lux-menu-subcomponents/lux-menu-trigger.component.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-tabindex/lux-tab-index.directive.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-action-nav/lux-app-header-ac-action-nav-item/lux-app-header-ac-action-nav-item-custom.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-action-nav/lux-app-header-ac-action-nav-item/lux-app-header-ac-action-nav-item.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-action-nav/lux-app-header-ac-action-nav-item/lux-app-header-ac-action-nav-item.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-app-header-action-nav/lux-app-header-action-nav-item/lux-app-header-action-nav-item-custom.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-app-header-action-nav/lux-app-header-action-nav-item/lux-app-header-action-nav-item.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-app-header-action-nav/lux-app-header-action-nav-item/lux-app-header-action-nav-item.component.html","../../../projects/lux-components-lib/src/lib/lux-directives/lux-tooltip/lux-tooltip.directive.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-divider/lux-divider.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-divider/lux-divider.component.html","../../../projects/lux-components-lib/src/lib/lux-consent/lux-consent.model.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-dialog/lux-dialog-model/lux-dialog-config.interface.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-dialog/lux-dialog-model/lux-dialog-preset-config.interface.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-dialog/lux-dialog-model/lux-dialog-ref.class.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-actions.component.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-content.component.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-title.component.ts","../../../projects/lux-components-lib/src/lib/lux-util/lux-util.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure.component.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure.component.html","../../../projects/lux-components-lib/src/lib/lux-popups/lux-dialog/lux-dialog-preset/lux-dialog-preset.component.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-dialog/lux-dialog-preset/lux-dialog-preset.component.html","../../../projects/lux-components-lib/src/lib/lux-popups/lux-dialog/lux-dialog.service.ts","../../../projects/lux-components-lib/src/lib/lux-util/lux-media-query-observer.service.ts","../../../projects/lux-components-lib/src/lib/lux-consent/lux-consent-dialog-launcher.service.ts","../../../projects/lux-components-lib/src/lib/lux-consent/lux-consent-dialog-launcher.ts","../../../projects/lux-components-lib/src/lib/lux-consent/lux-consent-entries.ts","../../../projects/lux-components-lib/src/lib/lux-consent/lux-consent.service.ts","../../../projects/lux-components-lib/src/lib/lux-util/lux-storage.service.ts","../../../projects/lux-components-lib/src/lib/lux-theme/lux-theme.service.ts","../../../projects/lux-components-lib/src/lib/lux-action/lux-menu/lux-menu.component.ts","../../../projects/lux-components-lib/src/lib/lux-action/lux-menu/lux-menu.component.html","../../../projects/lux-components-lib/src/lib/lux-directives/lux-aria/lux-aria-describedby.directive.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-aria/lux-aria-expanded.directive.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-aria/lux-aria-haspopup.directive.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-aria/lux-aria-hidden.directive.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-aria/lux-aria-invalid.directive.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-aria/lux-aria-labelledby.directive.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-aria/lux-aria-required.directive.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-aria/lux-aria-role.directive.ts","../../../projects/lux-components-lib/src/lib/lux-pipes/lux-render-property/lux-render-property.pipe.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-form-control/lux-form-directives/lux-name/lux-name-directive.directive.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-form-control/lux-form-control-subcomponents/lux-form-hint.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-form-control/lux-form-control-subcomponents/lux-form-label.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-form-model/lux-form-component-base.class.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-input-ac/lux-input-ac-subcomponents/lux-input-ac-prefix.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-input-ac/lux-input-ac-subcomponents/lux-input-ac-suffix.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-autocomplete-ac/lux-autocomplete-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-autocomplete-ac/lux-autocomplete-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-chips-ac/lux-chips-subcomponents/lux-chip-ac-group.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-chips-ac/lux-chips-subcomponents/lux-chip-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-chips-ac/lux-chips-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-chips-ac/lux-chips-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-service/lux-lookup-handler.service.ts","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-service/lux-lookup.service.ts","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-model/lux-lookup-parameters.ts","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-model/lux-lookup-component.ts","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-model/lux-lookup-error-state-matcher.ts","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-autocomplete-ac/lux-autocomplete-error-state-matcher-ac.ts","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-autocomplete-ac/lux-lookup-autocomplete-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-autocomplete-ac/lux-lookup-autocomplete-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-directives/lux-autofocus/lux-autofocus.directive.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-badge-notification/lux-badge-notification.directive.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-infinite-scroll/lux-infinite-scroll.directive.ts","../../../projects/lux-components-lib/src/lib/lux-directives/lux-ripple/lux-ripple.directive.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-badge/lux-badge.component.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-badge/lux-badge.component.html","../../../projects/lux-components-lib/src/lib/lux-common/lux-label/lux-label.component.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-message-box/lux-message-box-subcomponents/lux-message.component.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-message-box/lux-message-box-subcomponents/lux-message.component.html","../../../projects/lux-components-lib/src/lib/lux-util/lux-paginator-intl.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-message-box/lux-message-box-model/lux-message-box.animations.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-message-box/lux-message-box.component.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-message-box/lux-message-box.component.html","../../../projects/lux-components-lib/src/lib/lux-common/lux-table/lux-table-column-visibility-store.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-table/lux-table-data-source.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-table/lux-table-subcomponents/lux-table-column-content.component.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-table/lux-table-subcomponents/lux-table-column-footer.component.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-table/lux-table-subcomponents/lux-table-column-header.component.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-table/lux-table-subcomponents/lux-table-column.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-form-model/lux-form-checkable-base.class.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-checkbox-ac/lux-checkbox-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-checkbox-ac/lux-checkbox-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-form-control/lux-form-directives/lux-maxlength/lux-max-length.directive.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-form-model/lux-form-input-base.class.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-input-ac/lux-input-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-input-ac/lux-input-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-select-filter/lux-select-filter-keyboard.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-select-filter/lux-select-filter-focus.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-select-filter/lux-select-filter-navigator.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-select-filter/lux-select-filter.utils.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-select-filter/lux-select-filter-state.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-select-filter/lux-select-filter.directive.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-select-filter/lux-select-panel-filter.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-select-filter/lux-select-panel-filter.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-select-filter/lux-select-visible-option-count.directive.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-form-model/lux-form-selectable-base.class.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-select-ac/lux-select-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-select-ac/lux-select-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-common/lux-table/lux-table.component.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-table/lux-table.component.html","../../../projects/lux-components-lib/src/lib/lux-common/lux-textbox/lux-textbox.component.ts","../../../projects/lux-components-lib/src/lib/lux-common/lux-textbox/lux-textbox.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-content.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-card/lux-card-model/lux-card-animations.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-actions.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-actions.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-content-expanded.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-custom-header.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-heading.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-info.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-card/lux-card.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-card/lux-card.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-content.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-header-title.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-accordion/lux-accordion.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-accordion/lux-accordion.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-panel/lux-panel.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-panel/lux-panel.component.html","../../../projects/lux-components-lib/src/lib/lux-error/lux-error-page/lux-error-services/lux-error-store.service.ts","../../../projects/lux-components-lib/src/lib/lux-error/lux-error-page/lux-error-page.component.ts","../../../projects/lux-components-lib/src/lib/lux-error/lux-error-page/lux-error-page.component.html","../../../projects/lux-components-lib/src/lib/lux-error/lux-error-page/lux-error-services/lux-error-service.ts","../../../projects/lux-components-lib/src/lib/lux-error/lux-http-error/lux-http-error-interceptor.ts","../../../projects/lux-components-lib/src/lib/lux-error/lux-http-error/lux-http-error.component.ts","../../../projects/lux-components-lib/src/lib/lux-error/lux-http-error/lux-http-error.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-datepicker-ac/lux-datepicker-ac-adapter.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-datepicker-ac/lux-datepicker-ac-custom-header/lux-datepicker-ac-custom-header.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-datepicker-ac/lux-datepicker-ac-custom-header/lux-datepicker-ac-custom-header.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-datepicker-ac/lux-datepicker-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-datepicker-ac/lux-datepicker-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-datetimepicker-ac/lux-datetime-overlay-ac/lux-datetime-overlay-content-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-datetimepicker-ac/lux-datetime-overlay-ac/lux-datetime-overlay-content-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-datetimepicker-ac/lux-datetime-overlay-ac/lux-datetime-overlay-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-datetimepicker-ac/lux-datetimepicker-ac-adapter.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-datetimepicker-ac/lux-datetimepicker-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-datetimepicker-ac/lux-datetimepicker-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-model/lux-file-error.interface.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-form-model/lux-form-file-base.class.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-model/lux-file-capture.directive.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-subcomponents/lux-file-progress/lux-file-progress.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-subcomponents/lux-file-progress/lux-file-progress.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-input-ac/lux-file-input-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-input-ac/lux-file-input-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-subcomponents/lux-file-replace-dialog/lux-file-replace-dialog.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-subcomponents/lux-file-replace-dialog/lux-file-replace-dialog.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-list/lux-file-list.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-list/lux-file-list.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-subcomponents/lux-file-delete-dialog/lux-file-delete-dialog.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-subcomponents/lux-file-delete-dialog/lux-file-delete-dialog.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-subcomponents/lux-file-rename-dialog/lux-file-rename-dialog.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-subcomponents/lux-file-rename-dialog/lux-file-rename-dialog.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-upload/lux-file-upload.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-file/lux-file-upload/lux-file-upload.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-radio-ac/lux-radio-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-radio-ac/lux-radio-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-slider-ac/lux-slider-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-slider-ac/lux-slider-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-textarea-ac/lux-textarea-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-textarea-ac/lux-textarea-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-form/lux-toggle-ac/lux-toggle-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-form/lux-toggle-ac/lux-toggle-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-filter/lux-filter-base/lux-filter.ts","../../../projects/lux-components-lib/src/lib/lux-filter/lux-filter-base/lux-filter-item.ts","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-combobox-ac/lux-lookup-combobox-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-combobox-ac/lux-lookup-combobox-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-filter/lux-filter-base/lux-filter-item.directive.ts","../../../projects/lux-components-lib/src/lib/lux-filter/lux-filter-dialog/lux-filter-load-dialog/lux-filter-load-dialog.component.ts","../../../projects/lux-components-lib/src/lib/lux-filter/lux-filter-dialog/lux-filter-load-dialog/lux-filter-load-dialog.component.html","../../../projects/lux-components-lib/src/lib/lux-filter/lux-filter-dialog/lux-filter-save-dialog/lux-filter-save-dialog.component.ts","../../../projects/lux-components-lib/src/lib/lux-filter/lux-filter-dialog/lux-filter-save-dialog/lux-filter-save-dialog.component.html","../../../projects/lux-components-lib/src/lib/lux-filter/lux-filter-form/lux-filter-form-extended/lux-filter-form-extended.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-action.component.ts","../../../projects/lux-components-lib/src/lib/lux-filter/lux-filter-form/lux-filter-form.component.ts","../../../projects/lux-components-lib/src/lib/lux-filter/lux-filter-form/lux-filter-form.component.html","../../../projects/lux-components-lib/src/lib/lux-consent/lux-consent-categories.ts","../../../projects/lux-components-lib/src/lib/lux-consent/lux-consent-dialog.component.ts","../../../projects/lux-components-lib/src/lib/lux-consent/lux-consent-dialog.component.html","../../../projects/lux-components-lib/src/lib/lux-icon/lux-image/lux-image.component.ts","../../../projects/lux-components-lib/src/lib/lux-icon/lux-image/lux-image.component.html","../../../projects/lux-components-lib/src/lib/lux-tenant-logo/lux-tenant-logo.component.ts","../../../projects/lux-components-lib/src/lib/lux-tenant-logo/lux-tenant-logo.component.html","../../../projects/lux-components-lib/src/lib/lux-util/lux-app.service.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-footer/lux-app-footer-fixed.service.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-content/lux-app-content.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-content/lux-app-content.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-footer/lux-app-footer-button-info.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-footer/lux-app-footer-button.service.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-footer/lux-app-footer-link-info.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-footer/lux-app-footer-link.service.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-footer/lux-app-footer.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-footer/lux-app-footer.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-session-timer/lux-app-header-ac-session-timer-dialog/lux-app-header-ac-session-timer-dialog.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-session-timer/lux-app-header-ac-session-timer-dialog/lux-app-header-ac-session-timer-dialog.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-session-timer/lux-app-header-ac-session-timer-service/lux-app-header-ac-session-timer.service.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-session-timer/lux-app-header-ac-session-timer.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-session-timer/lux-app-header-ac-session-timer.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-action-nav/lux-app-header-ac-action-nav.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-action-nav/lux-app-header-ac-action-nav.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-nav-menu/lux-app-header-ac-nav-menu-item/lux-app-header-ac-nav-menu-item.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-nav-menu/lux-app-header-ac-nav-menu.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-nav-menu/lux-app-header-ac-nav-menu.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-session-timer/lux-app-header-ac-session-timer-interceptor.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-user-menu.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-lang-select-ac/lux-lang-select-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-lang-select-ac/lux-lang-select-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header-ac/lux-app-header-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-app-header-action-nav/lux-app-header-action-nav.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-app-header-action-nav/lux-app-header-action-nav.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-app-header-right-nav/lux-app-header-right-nav.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-lang-select/lux-lang-select.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-lang-select/lux-lang-select.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-lang-select/lux-locale.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav-model/lux-side-nav-animations.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav-subcomponents/lux-side-nav-footer.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav-subcomponents/lux-side-nav-header.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav-subcomponents/lux-side-nav-item.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav-subcomponents/lux-side-nav-item.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-app-header/lux-app-header.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-checkbox-container-ac/lux-checkbox-container-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-checkbox-container-ac/lux-checkbox-container-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-list/lux-list-subcomponents/lux-list-item-content.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-list/lux-list-subcomponents/lux-list-item-custom-header.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-list/lux-list-subcomponents/lux-list-item-icon.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-list/lux-list-subcomponents/lux-list-item.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-list/lux-list-subcomponents/lux-list-item.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-list/lux-list.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-list/lux-list.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-master-detail-ac/lux-detail-header-ac/lux-detail-header-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-master-detail-ac/lux-detail-view-ac/lux-detail-view-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-master-detail-ac/lux-detail-view-ac/lux-detail-wrapper-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-pipes/lux-property-from-object/lux-property-from-object.pipe.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-tabs/lux-tabs-subcomponents/lux-tab.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-tabs/lux-tabs.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-tabs/lux-tabs.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-master-detail-ac/lux-master-footer-ac/lux-master-footer-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-master-detail-ac/lux-master-header-ac/lux-master-header-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-master-detail-ac/lux-master-header-ac/lux-master-header-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-master-detail-ac/lux-master-list-ac/lux-master-list-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-master-detail-ac/lux-master-detail-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-master-detail-ac/lux-master-detail-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-master-detail-ac/lux-master-header-ac/lux-master-header-content-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-header-description.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large-model/lux-stepper-large-button-info.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large-model/lux-stepper-large-click-event.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large-model/lux-stepper-large-selection-event.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large-model/lux-stepper-large-step.interface.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay-config.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay-data.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay-ref.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay.service.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-step/lux-stepper-large-step.component.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-snackbar/lux-snackbar-component/lux-snackbar.component.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-snackbar/lux-snackbar-component/lux-snackbar.component.html","../../../projects/lux-components-lib/src/lib/lux-popups/lux-snackbar/lux-snackbar.service.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper-large/lux-stepper-large.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper-helper.service.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper-model/lux-stepper-parent.class.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-step-content.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-step-header.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-step.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-stepper-nav-buttons/lux-stepper-nav-buttons.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-stepper-nav-buttons/lux-stepper-nav-buttons.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-stepper-horizontal/lux-stepper-horizontal.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-stepper-horizontal/lux-stepper-horizontal.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-stepper-vertical/lux-stepper-vertical.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-stepper-vertical/lux-stepper-vertical.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-stepper/lux-stepper.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-tile-ac/lux-tile-ac.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-tile-ac/lux-tile-ac.component.html","../../../projects/lux-components-lib/src/lib/lux-layout/lux-tile/lux-tile.component.ts","../../../projects/lux-components-lib/src/lib/lux-layout/lux-tile/lux-tile.component.html","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-label/lux-lookup-label.component.ts","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-label/lux-lookup-label.component.html","../../../projects/lux-components-lib/src/lib/lux-lookup/lux-lookup-model/lux-lookup-table-entry.ts","../../../projects/lux-components-lib/src/lib/lux-pipes/lux-alphabetically-sorted/lux-alphabetically-sorted.pipe.ts","../../../projects/lux-components-lib/src/lib/lux-pipes/lux-relative-timestamp/lux-relative-timestamp.pipe.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-popup/lux-popup-actions.directive.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-popup/lux-popup-trigger.directive.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-popup/lux-popup.component.ts","../../../projects/lux-components-lib/src/lib/lux-popups/lux-popup/lux-popup.component.html","../../../projects/lux-components-lib/src/lib/lux-popups/lux-snackbar/lux-snackbar-config.ts","../../../projects/lux-components-lib/src/lib/lux-tour-hint/lux-tour-hint-model/lux-tour-hint-ref.class.ts","../../../projects/lux-components-lib/src/lib/lux-tour-hint/lux-tour-hint-preset/lux-tour-hint-preset.component.ts","../../../projects/lux-components-lib/src/lib/lux-tour-hint/lux-tour-hint-preset/lux-tour-hint-preset.component.html","../../../projects/lux-components-lib/src/lib/lux-tour-hint/lux-tour-hint.component.ts","../../../projects/lux-components-lib/src/lib/lux-tour-hint/lux-tour-hint.component.html","../../../projects/lux-components-lib/src/lib/lux-tour-hint/lux-tour-hint.service.ts","../../../projects/lux-components-lib/src/lib/lux-breadcrumb/lux-breadcrumb.component.ts","../../../projects/lux-components-lib/src/lib/lux-breadcrumb/lux-breadcrumb.component.html","../../../projects/lux-components-lib/src/lib/lux-util/testing/lux-test-helper.ts","../../../projects/lux-components-lib/src/lib/lux-util/testing/lux-test-overlay-helper.ts","../../../projects/lux-components-lib/src/public_api.ts","../../../projects/lux-components-lib/src/ihk-gfi-lux-components.ts"],"sourcesContent":["import { Directive, EventEmitter, Input, Output } from '@angular/core';\nimport { LuxThemePalette } from '../../lux-util/lux-colors.enum';\n\n/**\n * Base-Klasse der LuxActionComponents.\n *\n * Enthält die Inputs/Outputs, die allen Action-Components gleich sind.\n */\n@Directive()\nexport class LuxActionComponentBaseClass {\n  @Input() luxLabel? = '';\n  @Input() luxColor?: LuxThemePalette;\n  @Input() luxRaised? = false;\n  @Input() luxIconName? = '';\n  @Input() luxIconShowRight? = false;\n  @Input() luxTagId?: string;\n  @Input() luxDisabled? = false;\n  @Input() luxRounded? = false;\n  @Input() luxFlat? = false;\n  @Input() luxStroked? = false;\n\n  @Output() luxClicked = new EventEmitter<Event>();\n}\n","import { CommonModule } from '@angular/common';\nimport { InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\nimport { LuxComponentsConfigParameters } from './lux-components-config-parameters.interface';\n\n// Diesen bitte !nicht! injecten, sondern den LuxComponentsConfigService.\nexport const LuxConfigTokenService = new InjectionToken<LuxComponentsConfigParameters>('luxConfig');\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: []\n})\nexport class LuxComponentsConfigModule {\n  // Den InjectionToken mit der übergebenen Konfiguration überschreiben, damit die Komponenten diese nutzen können\n  static forRoot(config: LuxComponentsConfigParameters): ModuleWithProviders<LuxComponentsConfigModule> {\n    return {\n      ngModule: LuxComponentsConfigModule,\n      providers: [\n        {\n          provide: LuxConfigTokenService,\n          useValue: config\n        }\n      ]\n    };\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { LuxComponentsConfigParameters } from './lux-components-config-parameters.interface';\nimport { LuxConfigTokenService } from './lux-components-config.module';\n\n/**\n * Dieser Service wird dazu verwendet, auf die Konfiguration der LuxComponents zuzugreifen und diese auszulesen bzw.\n * auch zu aktualisieren.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxComponentsConfigService {\n  public static readonly DEFAULT_CONFIG = {\n    iconBasePath: '/',\n    displayLuxConsoleLogs: false,\n    generateLuxTagIds: false,\n    lookupServiceUrl: '/lookup/',\n    tenantLogoLookupServiceUrl: '/assets/ihk-logos/',\n    labelConfiguration: {\n      allUppercase: false,\n      notAppliedTo: []\n    },\n    cardExpansionAnimationActive: true,\n    rippleConfiguration: {\n      exitDuration: 500,\n      enterDuration: 500\n    },\n    buttonConfiguration: {\n      throttleTimeMs: 600\n    },\n    viewConfiguration: {\n      centeredView: false,\n      centeredWidth: '1500px'\n    },\n    appFooter: {\n      fixedDesktop: true,\n      fixedMobile: true\n    }\n  };\n\n  private config$: BehaviorSubject<LuxComponentsConfigParameters> = new BehaviorSubject<LuxComponentsConfigParameters>(\n    LuxComponentsConfigService.DEFAULT_CONFIG\n  );\n\n  /**\n   * Gibt das Observable mit der aktuell gesetzten Konfiguration zurück.\n   */\n  get config(): Observable<LuxComponentsConfigParameters> {\n    return this.config$.asObservable();\n  }\n\n  /**\n   * Gibt die aktuell gesetzte Konfiguration direkt zurück.\n   */\n  get currentConfig(): LuxComponentsConfigParameters {\n    return this.config$.getValue();\n  }\n\n  constructor() {\n    const config = inject<LuxComponentsConfigParameters>(LuxConfigTokenService, { optional: true });\n\n    // Wenn keine Konfiguration geladen werden konnte, Standard-Konfiguration benutzen.\n    if (!config) {\n      this.config$.next(LuxComponentsConfigService.DEFAULT_CONFIG);\n    } else {\n      this.config$.next(this.mergeDefaultData(config));\n    }\n  }\n  /**\n   * Gibt zurück, ob die Labels als Uppercase gekennzeichnet sind und ob\n   * die übergebenen Selektoren in den Ausnahmen geführt sind.\n   * @param selector\n   */\n  isLabelUppercaseForSelector(selector: string): boolean {\n    const config = this.config$.value;\n    return (\n      !!config.labelConfiguration &&\n      config.labelConfiguration.allUppercase &&\n      config.labelConfiguration.notAppliedTo.indexOf(selector) === -1\n    );\n  }\n\n  /**\n   * Ersetzt die aktuelle Konfiguration mit der übergebenen (wenn gültiger Wert).\n   * @param config\n   */\n  updateConfiguration(config: LuxComponentsConfigParameters) {\n    if (!config) {\n      console.warn('The new configuration is undefined or null and was ignored.');\n    } else {\n      this.config$.next(this.mergeDefaultData(config));\n    }\n  }\n\n  /**\n   * Kombiniert die übergebene Konfiguration mit der Standard-Konfiguration.\n   *\n   * Übernimmt die Werte aus der Standard-Konfiguration, die nicht im übergebenen gesetzt wurden.\n   * @param config\n   */\n  private mergeDefaultData(config: LuxComponentsConfigParameters): LuxComponentsConfigParameters {\n    return { ...LuxComponentsConfigService.DEFAULT_CONFIG, ...config };\n  }\n}\n","export function isTestEnv(): boolean {\n  const testGlobals = globalThis as typeof globalThis & {\n    jasmine?: unknown;\n    __karma__?: unknown;\n    process?: {\n      env?: Record<string, string | undefined>;\n    };\n  };\n\n  return (\n    typeof testGlobals.jasmine !== 'undefined' ||\n    typeof testGlobals.__karma__ !== 'undefined' ||\n    typeof testGlobals.process?.env?.['JEST_WORKER_ID'] !== 'undefined' ||\n    typeof testGlobals.process?.env?.['KARMA_WORKER_ID'] !== 'undefined'\n  );\n}\n","import { Injectable, inject } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { isTestEnv } from '../../lux-util/env-utils';\nimport iconFilesJson from './lux-icons.json';\nimport { LuxSvgIcon } from './lux-svg-icon';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxIconRegistryService {\n  private matIconRegistry = inject(MatIconRegistry);\n  private sanitizer = inject(DomSanitizer);\n  private configService = inject(LuxComponentsConfigService);\n\n  private registeredIcons = new Array<string>();\n  private svgIcons: LuxSvgIcon[] = iconFilesJson;\n  private iconBasePath = '';\n\n  constructor() {\n    this.iconBasePath = this.configService.currentConfig.iconBasePath ?? '';\n    if (this.iconBasePath.endsWith('/')) {\n      this.iconBasePath = this.iconBasePath.substring(0, this.iconBasePath.length - 1);\n    }\n  }\n\n  registerIcon(iconName: string) {\n    const requested = iconName.toLowerCase();\n    const icon = this.svgIcons.find((item) => this.normalizeIconName(item.iconName) === requested);\n\n    if (icon) {\n      if (!this.registeredIcons.includes(iconName)) {\n        if (isTestEnv()) {\n          // In unit tests, avoid real HTTP requests by registering a minimal inline SVG.\n          // This prevents MatIconRegistry from issuing GET requests to external asset URLs.\n          this.matIconRegistry.addSvgIconLiteral(\n            iconName,\n            this.sanitizer.bypassSecurityTrustHtml('<svg xmlns=\"http://www.w3.org/2000/svg\"></svg>')\n          );\n        } else {\n          const iconPath = this.getIconBasePath(icon) + icon.iconPath;\n          this.matIconRegistry.addSvgIcon(iconName, this.sanitizer.bypassSecurityTrustResourceUrl(iconPath));\n        }\n        this.registeredIcons.push(iconName);\n      }\n    } else {\n      throw new Error(`Unbekanntes Icon: ${iconName}`);\n    }\n  }\n\n  getSvgIconList(): LuxSvgIcon[] {\n    return this.svgIcons;\n  }\n\n  private normalizeIconName(iconName: string): string {\n    return iconName.split('--')[0].toLowerCase();\n  }\n\n  private getIconBasePath(icon: LuxSvgIcon): string {\n    let basePath = icon.iconBasePath !== undefined ? icon.iconBasePath : this.iconBasePath;\n\n    if (basePath === '/') {\n      basePath = '';\n    }\n\n    return basePath;\n  }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { Component, EventEmitter, HostBinding, Input, Output, inject } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { LuxIconColor } from '../../lux-util/lux-colors.enum';\nimport { LuxIconRegistryService } from './lux-icon-registry.service';\n\n@Component({\n  selector: 'lux-icon',\n  templateUrl: './lux-icon.component.html',\n  styleUrls: ['./lux-icon.component.scss'],\n  imports: [MatIcon, NgStyle, NgClass]\n})\nexport class LuxIconComponent {\n  private iconReg = inject(LuxIconRegistryService);\n\n  private _luxIconSize: string | undefined = '';\n  private _luxIconName = '';\n  private _luxPadding = '';\n  private _backgroundCSSClass = '';\n  private _fontCSSClass = 'blue';\n\n  notFoundIconName = 'lux-interface-alert-warning-diamond';\n\n  @HostBinding('style.margin') styleMargin = '0';\n  @HostBinding('class.lux-icon-rounded') _luxRounded = false;\n\n  @Input() luxColor?: LuxIconColor;\n\n  @Input() set luxRounded(rounded: boolean) {\n    this._luxRounded = rounded;\n  }\n  get luxRounded(): boolean {\n    return this._luxRounded;\n  }\n\n  get luxMargin(): string {\n    return this.styleMargin;\n  }\n\n  // 'standard margin Werte z.B. '5px 4px 3px 2px'\n  @Input() set luxMargin(margin: string) {\n    this.styleMargin = margin;\n  }\n\n  get luxPadding(): string {\n    return this._luxPadding;\n  }\n\n  // standard padding Werte z.B. '5px 4px 3px 2px'\n  @Input() set luxPadding(padding: string) {\n    this._luxPadding = padding;\n  }\n\n  get luxIconSize(): string | undefined {\n    return this._luxIconSize;\n  }\n\n  @Input() set luxIconSize(iconSizeValue: string | undefined) {\n    this._luxIconSize = iconSizeValue;\n    if (this.luxIconSize && this.luxIconSize.length === 2 && this.luxIconSize.endsWith('x')) {\n      const size = this.luxIconSize.slice(0, 1);\n      this._luxIconSize = size + 'em';\n    } else if (this.luxIconSize) {\n      this._luxIconSize = iconSizeValue;\n    }\n  }\n\n  get luxIconName(): string | undefined {\n    return this._luxIconName;\n  }\n\n  @Input()\n  set luxIconName(iconNameValue: string | undefined) {\n    if (!iconNameValue) {\n      this._luxIconName = '';\n      return;\n    }\n\n    if (iconNameValue === this._luxIconName) {\n      return;\n    }\n\n    this._luxIconName = iconNameValue;\n    this.registerIcon(iconNameValue);\n  }\n\n  @Output() luxLoad = new EventEmitter<Event>();\n\n  private registerIcon(iconName: string) {\n    try {\n      this.iconReg.registerIcon(iconName);\n    } catch (error) {\n      console.warn(\n        `Das Icon \"${iconName}\" konnte nicht gefunden werden. Stattdessen wird das Icon \"${this.notFoundIconName}\" verwendet. Bitte anpassen!`\n      );\n      this._luxIconName = this.notFoundIconName;\n    }\n  }\n}\n","@if (luxIconName) {\n<mat-icon\n  [svgIcon]=\"luxIconName\"\n  [ngStyle]=\"{ padding: luxPadding, width: luxIconSize, height: luxIconSize }\"\n  [ngClass]=\"['lux-icon-' + luxColor, 'lux-icon-on-' + luxColor, luxRounded ? 'lux-icon-rounded-' + luxIconSize : '']\"\n  class=\"lux-icon\"\n></mat-icon>\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LuxComponentsConfigParameters } from '../lux-components-config/lux-components-config-parameters.interface';\nimport { LuxComponentsConfigService } from '../lux-components-config/lux-components-config.service';\n\nexport const noop = (): any => undefined;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxConsoleService implements OnDestroy {\n  static config: LuxComponentsConfigParameters = {};\n\n  configSubscription: Subscription;\n\n  constructor() {\n    this.configSubscription = inject(LuxComponentsConfigService).config.subscribe((newConfig: LuxComponentsConfigParameters) => {\n      LuxConsoleService.config = newConfig;\n    });\n  }\n\n  /* Nicht-statische Log-Methoden, sie zeigen auch die Quelle des Logs an! */\n\n  get log() {\n    if (LuxConsoleService.isDebugMode()) {\n      return console.log.bind.call(console.log, console, LuxConsoleService.logDate() + ' -');\n    } else {\n      return noop;\n    }\n  }\n\n  get info() {\n    if (LuxConsoleService.isDebugMode()) {\n      return console.info.bind.call(console.info, console);\n    } else {\n      return noop;\n    }\n  }\n\n  get warn() {\n    if (LuxConsoleService.isDebugMode()) {\n      return console.warn.bind.call(console.warn, console, LuxConsoleService.logDate() + ' -');\n    } else {\n      return noop;\n    }\n  }\n\n  get error() {\n    if (LuxConsoleService.isDebugMode()) {\n      return console.error.bind.call(console.error, console, LuxConsoleService.logDate() + ' -');\n    } else {\n      return noop;\n    }\n  }\n\n  get group() {\n    if (LuxConsoleService.isDebugMode()) {\n      return console.group.bind.call(console.group, console);\n    } else {\n      return noop;\n    }\n  }\n\n  get groupEnd() {\n    if (LuxConsoleService.isDebugMode()) {\n      return console.groupEnd.bind.call(console.groupEnd, console);\n    } else {\n      return noop;\n    }\n  }\n\n  /* Statische Log-Methoden, sie zeigen nicht die Quelle des Logs an! */\n\n  static LOG(...args: any[]) {\n    if (!LuxConsoleService.isDebugMode()) {\n      return;\n    }\n    if (args.length === 1 && args[0] !== null && typeof args[0] === 'object') {\n      console.log(LuxConsoleService.logDate() + ' -', args[0]);\n    } else if (args.length === 1) {\n      console.log(LuxConsoleService.logDate() + ' -', args[0]);\n    } else {\n      console.log(LuxConsoleService.logDate() + ' - ' + this.getLogValue(args));\n    }\n  }\n\n  static WARN(...args: any[]) {\n    if (!LuxConsoleService.isDebugMode()) {\n      return;\n    }\n    if (args.length === 1 && args[0] !== null && typeof args[0] === 'object') {\n      console.warn(LuxConsoleService.logDate() + ' -', args[0]);\n    } else if (args.length === 1) {\n      console.warn(LuxConsoleService.logDate() + ' -', args[0]);\n    } else {\n      console.warn(LuxConsoleService.logDate() + ' - ' + this.getLogValue(args));\n    }\n  }\n\n  static ERROR(...args: any[]) {\n    if (!LuxConsoleService.isDebugMode()) {\n      return;\n    }\n    if (args.length === 1 && args[0] !== null && typeof args[0] === 'object') {\n      console.error(LuxConsoleService.logDate() + ' -', args[0]);\n    } else if (args.length === 1) {\n      console.error(LuxConsoleService.logDate() + ' -', args[0]);\n    } else {\n      console.error(LuxConsoleService.logDate() + ' - ' + this.getLogValue(args));\n    }\n  }\n\n  private static logDate() {\n    const now = new Date();\n\n    const day = LuxConsoleService.checkTime(now.getDate());\n    const month = LuxConsoleService.checkTime(now.getMonth() + 1);\n    const year = LuxConsoleService.checkTime(now.getFullYear());\n    const hours = LuxConsoleService.checkTime(now.getHours());\n    const minutes = LuxConsoleService.checkTime(now.getMinutes());\n    const seconds = LuxConsoleService.checkTime(now.getSeconds());\n\n    return day + '.' + month + '.' + year + ' ' + hours + ':' + minutes + ':' + seconds;\n  }\n\n  private static getLogValue(...args: any[]) {\n    const logValue: string[] = [];\n\n    args.forEach((arg) => {\n      if (arg !== null && typeof arg === 'object') {\n        arg = JSON.stringify(arg);\n      }\n      logValue.push(arg);\n    });\n\n    return logValue;\n  }\n\n  private static isDebugMode() {\n    return LuxConsoleService.config ? LuxConsoleService.config.displayLuxConsoleLogs : false;\n  }\n\n  private static checkTime(timeUnit: number) {\n    return timeUnit < 10 ? '0' + timeUnit : timeUnit;\n  }\n\n  ngOnDestroy(): void {\n    this.configSubscription.unsubscribe();\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  Injector,\n  OnInit,\n  effect,\n  inject,\n  input,\n  model,\n  signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlContainer, ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { MatButtonToggle, MatButtonToggleChange, MatButtonToggleGroup } from '@angular/material/button-toggle';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxConsoleService } from '../../lux-util/lux-console.service';\n\nexport interface LuxButtonToggleOption<T = unknown> {\n  label: string;\n  value: T;\n  disabled?: boolean;\n  ariaLabel?: string;\n}\n\n@Component({\n  selector: 'lux-button-toggle',\n  templateUrl: './lux-button-toggle.component.html',\n  styleUrls: ['./lux-button-toggle.component.scss'],\n  host: {\n    class: 'lux-flex',\n    '[class.lux-dense]': 'luxDense()'\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [MatButtonToggleGroup, MatButtonToggle, LuxIconComponent],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: LuxButtonToggleComponent,\n      multi: true\n    }\n  ]\n})\nexport class LuxButtonToggleComponent<T = unknown> implements ControlValueAccessor, OnInit {\n  private static nextUniqueId = 0;\n  private readonly cdr = inject(ChangeDetectorRef);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly injector = inject(Injector);\n  private readonly controlContainer = inject(ControlContainer, { optional: true });\n  private readonly uniqueId = LuxButtonToggleComponent.nextUniqueId++;\n  private readonly tService = inject(TranslocoService);\n  private readonly defaultAriaLabel = signal(this.tService.translate('luxc.button-toggle.aria_label'));\n\n  readonly luxDense = input(false);\n  readonly luxAriaLabel = input<string | undefined>(undefined);\n  readonly luxOptions = input<LuxButtonToggleOption<T>[]>([]);\n  readonly luxMultiple = input(false);\n  readonly luxDisabled = input(false);\n  readonly luxRequired = input(false);\n  readonly luxHint = input<string | undefined>(undefined);\n  readonly luxError = input<string | undefined>(undefined);\n  readonly luxControlBinding = input<string | undefined>(undefined);\n  readonly luxCompareWith = input<(a: T, b: T) => boolean>((a, b) => a === b);\n\n  readonly hintElementId = `lux-button-toggle-hint-${this.uniqueId}`;\n  readonly errorElementId = `lux-button-toggle-error-${this.uniqueId}`;\n\n  readonly luxSelected = model<T | undefined>(undefined);\n  readonly luxSelectedValues = model<T[]>([]);\n\n  private onChange: (value: T | T[] | undefined) => void = () => {};\n  private onTouched: () => void = () => {};\n  private writingValue = false;\n  private cvaDisabled = false;\n  private touched = false;\n  private ngControl: NgControl | null = null;\n  private ngControlResolved = false;\n  private boundFormControl: FormControl<T | T[] | null> | null = null;\n\n  constructor() {\n    effect(() => {\n      this.validateMinimumOptions();\n    });\n\n    effect(() => {\n      this.syncSelectionToMode();\n    });\n\n    effect(() => {\n      this.normalizeSingleSelectionToOption();\n    });\n  }\n\n  ngOnInit(): void {\n    this.tService.langChanges$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.defaultAriaLabel.set(this.tService.translate('luxc.button-toggle.aria_label'));\n    });\n\n    const bindingName = this.luxControlBinding();\n    if (!bindingName || this.getNgControl()) {\n      return;\n    }\n\n    const control = this.controlContainer?.control?.get(bindingName);\n    if (!(control instanceof FormControl)) {\n      LuxConsoleService.WARN(`LuxButtonToggleComponent: Kein FormControl für luxControlBinding=\"${bindingName}\" gefunden.`);\n      return;\n    }\n\n    this.boundFormControl = control as FormControl<T | T[] | null>;\n    this.writeValue(this.boundFormControl.value);\n    this.cvaDisabled = this.boundFormControl.disabled;\n\n    this.boundFormControl.valueChanges\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((value) => this.writeValue(value as T | T[] | null));\n    this.boundFormControl.statusChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.cvaDisabled = !!this.boundFormControl?.disabled;\n      this.cdr.markForCheck();\n    });\n    this.boundFormControl.events.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.cdr.markForCheck();\n    });\n  }\n\n  get hasMinimumOptions(): boolean {\n    return this.luxOptions().length >= 2;\n  }\n\n  get isDisabled(): boolean {\n    return this.luxDisabled() || this.cvaDisabled;\n  }\n\n  get hasError(): boolean {\n    return this.isFormInvalid() || this.isRequiredMissingSelection();\n  }\n\n  get shouldShowError(): boolean {\n    return this.hasError && this.isTouchedOrDirty();\n  }\n\n  get errorMessage(): string | undefined {\n    if (!this.shouldShowError) {\n      return undefined;\n    }\n\n    if (this.luxError()) {\n      return this.luxError();\n    }\n\n    if (this.hasRequiredError()) {\n      return this.tService.translate('luxc.button-toggle.error_message.required');\n    }\n\n    return undefined;\n  }\n\n  get hintMessage(): string | undefined {\n    return this.shouldShowError ? undefined : this.luxHint();\n  }\n\n  get ariaLabel(): string {\n    return this.luxAriaLabel() ?? this.defaultAriaLabel();\n  }\n\n  isChecked(value: T): boolean {\n    return this.luxSelectedValues().some((selectedValue) => this.luxCompareWith()(selectedValue, value));\n  }\n\n  onSingleSelectionChange(event: MatButtonToggleChange): void {\n    if (this.luxMultiple()) {\n      return;\n    }\n\n    this.luxSelected.set(event.value != null ? (event.value as T) : undefined);\n    this.emitCvaValue(true);\n    this.markAsTouched();\n  }\n\n  onMultipleSelectionChange(value: T, checked: boolean): void {\n    const currentValues = [...this.luxSelectedValues()];\n\n    if (checked && !this.isChecked(value)) {\n      currentValues.push(value);\n    }\n\n    if (!checked) {\n      const index = currentValues.findIndex((currentValue) => this.luxCompareWith()(currentValue, value));\n      if (index > -1) {\n        currentValues.splice(index, 1);\n      }\n    }\n\n    this.luxSelectedValues.set(currentValues);\n    this.emitCvaValue(true);\n    this.markAsTouched();\n  }\n\n  writeValue(value: T | T[] | null): void {\n    this.writingValue = true;\n\n    if (this.luxMultiple()) {\n      if (Array.isArray(value)) {\n        this.luxSelectedValues.set(value as T[]);\n      } else if (value === null || value === undefined) {\n        this.luxSelectedValues.set([]);\n      } else {\n        this.luxSelectedValues.set([value as T]);\n      }\n    } else {\n      if (Array.isArray(value)) {\n        this.luxSelected.set(value.length > 0 ? (value[0] as T) : undefined);\n      } else {\n        if (value === null || value === undefined) {\n          this.luxSelected.set(undefined);\n        } else {\n          const optionValue = this.luxOptions().find((option) => this.luxCompareWith()(option.value, value as T))?.value;\n          this.luxSelected.set((optionValue ?? value) as T);\n        }\n      }\n    }\n\n    this.writingValue = false;\n  }\n\n  registerOnChange(fn: (value: T | T[] | undefined) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.cvaDisabled = isDisabled;\n  }\n\n  markAsTouched(): void {\n    this.touched = true;\n    this.boundFormControl?.markAsTouched();\n    this.onTouched();\n  }\n\n  private validateMinimumOptions(): void {\n    if (!this.hasMinimumOptions) {\n      LuxConsoleService.WARN('LuxButtonToggleComponent benötigt mindestens 2 Optionen.');\n    }\n  }\n\n  private syncSelectionToMode(): void {\n    if (this.luxMultiple()) {\n      const selected = this.luxSelected();\n      if (this.luxSelectedValues().length === 0 && selected !== undefined) {\n        this.luxSelectedValues.set([selected]);\n        this.emitCvaValue();\n      }\n      return;\n    }\n\n    if (this.luxSelected() === undefined && this.luxSelectedValues().length > 0) {\n      this.luxSelected.set(this.luxSelectedValues()[0]);\n      this.emitCvaValue();\n    }\n  }\n\n  private normalizeSingleSelectionToOption(): void {\n    if (this.luxMultiple()) {\n      return;\n    }\n\n    const selected = this.luxSelected();\n    if (selected === undefined || selected === null) {\n      return;\n    }\n\n    const optionValue = this.luxOptions().find((option) => this.luxCompareWith()(option.value, selected))?.value;\n    if (optionValue !== undefined && optionValue !== selected) {\n      this.luxSelected.set(optionValue);\n      this.cdr.markForCheck();\n    }\n  }\n\n  private emitCvaValue(fromUserInteraction = false): void {\n    if (this.writingValue) {\n      return;\n    }\n\n    const nextValue = this.luxMultiple() ? this.luxSelectedValues() : this.luxSelected();\n    this.onChange(nextValue);\n    this.boundFormControl?.setValue((nextValue ?? null) as T | T[] | null, { emitEvent: false });\n    if (fromUserInteraction) {\n      this.boundFormControl?.markAsDirty();\n    }\n    this.boundFormControl?.updateValueAndValidity({ emitEvent: false });\n  }\n\n  private hasSelection(): boolean {\n    if (this.luxMultiple()) {\n      return this.luxSelectedValues().length > 0;\n    }\n\n    return this.luxSelected() !== undefined && this.luxSelected() !== null;\n  }\n\n  private isRequiredMissingSelection(): boolean {\n    return this.luxRequired() && !this.hasSelection();\n  }\n\n  private hasRequiredError(): boolean {\n    const control = this.getNgControl()?.control ?? this.boundFormControl;\n    return control?.hasError('required') || this.isRequiredMissingSelection();\n  }\n\n  private isFormInvalid(): boolean {\n    const control = this.getNgControl()?.control ?? this.boundFormControl;\n    return !!control?.invalid;\n  }\n\n  private isTouchedOrDirty(): boolean {\n    const control = this.getNgControl()?.control ?? this.boundFormControl;\n    if (control) {\n      return control.touched || control.dirty;\n    }\n\n    return this.touched;\n  }\n\n  private getNgControl(): NgControl | null {\n    if (!this.ngControlResolved) {\n      this.ngControl = this.injector.get(NgControl, null, { self: true, optional: true });\n      this.ngControlResolved = true;\n    }\n\n    return this.ngControl;\n  }\n}\n","@if (hasMinimumOptions) {\n  <div class=\"lux-button-toggle-wrapper\">\n    <mat-button-toggle-group\n      class=\"lux-button-toggle-group\"\n      [attr.aria-label]=\"ariaLabel\"\n      [attr.aria-describedby]=\"errorMessage ? errorElementId : hintMessage ? hintElementId : null\"\n      [multiple]=\"luxMultiple()\"\n      [disabled]=\"isDisabled\"\n      [attr.required]=\"luxRequired() ? '' : null\"\n      [value]=\"luxMultiple() ? undefined : luxSelected()\"\n      (change)=\"onSingleSelectionChange($event)\"\n      (focusout)=\"markAsTouched()\"\n    >\n      @for (option of luxOptions(); track option.value) {\n        <mat-button-toggle\n          class=\"lux-button-toggle\"\n          [disableRipple]=\"true\"\n          [value]=\"option.value\"\n          [disabled]=\"!!option.disabled\"\n          [attr.aria-label]=\"option.ariaLabel || option.label\"\n          [checked]=\"luxMultiple() ? isChecked(option.value) : undefined\"\n          (change)=\"luxMultiple() ? onMultipleSelectionChange(option.value, $event.source.checked) : null\"\n        >\n          {{ option.label }}\n        </mat-button-toggle>\n      }\n    </mat-button-toggle-group>\n\n    <div class=\"lux-flex lux-button-toggle-misc\">\n      @if (errorMessage) {\n        <div [attr.id]=\"errorElementId\" class=\"lux-button-toggle-error\" role=\"alert\">\n          <lux-icon\n            class=\"lux-color-red lux-alert-icon\"\n            luxIconName=\"lux-interface-alert-warning-triangle\"\n            luxIconSize=\"0.875rem\"\n            luxPadding=\"2px\"\n            luxMargin=\"0px 2px 0px 0px\"\n          ></lux-icon\n          ><span>{{ errorMessage }}</span>\n        </div>\n      } @else if (hintMessage) {\n        <div [attr.id]=\"hintElementId\" class=\"lux-button-toggle-hint\">{{ hintMessage }}</div>\n      }\n    </div>\n  </div>\n}\n","import { AfterViewInit, Directive, ElementRef, inject, Renderer2 } from '@angular/core';\n\n@Directive()\nexport abstract class LuxAriaBase<T> implements AfterViewInit {\n  protected init = false;\n  protected elementRef = inject(ElementRef);\n  protected renderer = inject(Renderer2);\n  protected abstract ariaTagName: string;\n\n  ngAfterViewInit(): void {\n    this.init = true;\n\n    this.renderAria();\n  }\n\n  protected renderAria() {\n    if (this.init) {\n      const selector = this.getSelector();\n\n      let el;\n      if (selector) {\n        el = this.elementRef.nativeElement.querySelector(selector);\n      } else {\n        el = this.elementRef.nativeElement;\n      }\n\n      if (el) {\n        const value = this.getValue();\n        if (value === null || value === undefined) {\n          this.renderer.removeAttribute(el, this.ariaTagName);\n        } else {\n          this.renderer.setAttribute(el, this.ariaTagName, '' + value);\n        }\n      }\n    }\n  }\n\n  abstract getSelector(): string | undefined;\n\n  abstract getValue(): T | undefined;\n}\n","import { Directive, Input } from '@angular/core';\nimport { LuxAriaBase } from './lux-aria-base';\n\n@Directive({\n  selector: '[luxAriaLabel]'\n})\nexport class LuxAriaLabelDirective extends LuxAriaBase<string> {\n  protected ariaTagName = 'aria-label';\n  _luxAriaLabel?: string;\n\n  @Input() luxAriaLabelSelector?: string;\n\n  @Input()\n  get luxAriaLabel() {\n    return this._luxAriaLabel;\n  }\n\n  set luxAriaLabel(label: string | undefined) {\n    this._luxAriaLabel = label;\n\n    this.renderAria();\n  }\n\n  constructor() {\n    super();\n    if (!this.luxAriaLabelSelector) {\n      const tagName = this.elementRef.nativeElement.tagName.toLowerCase();\n      if (tagName === 'lux-button') {\n        this.luxAriaLabelSelector = 'button';\n      } else if (tagName === 'lux-app-header-action-nav-item') {\n        this.luxAriaLabelSelector = 'button';\n      }\n    }\n  }\n\n  getSelector(): string | undefined {\n    return this.luxAriaLabelSelector;\n  }\n\n  getValue(): string | undefined {\n    return this._luxAriaLabel;\n  }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectorRef, Component, ElementRef, HostBinding, Input, inject } from '@angular/core';\nimport { MatError, MatHint } from '@angular/material/form-field';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxFormComponentBase } from '../lux-form-model/lux-form-component-base.class';\n\nexport const luxFormControlSelektor = 'lux-form-control-wrapper';\n\n@Component({\n  selector: 'lux-form-control-wrapper',\n  templateUrl: './lux-form-control-wrapper.component.html',\n  imports: [NgClass, NgTemplateOutlet, MatError, MatHint, LuxIconComponent, LuxAriaLabelDirective, TranslocoPipe]\n})\nexport class LuxFormControlWrapperComponent {\n  private cdr = inject(ChangeDetectorRef);\n\n  focused = false;\n\n  @HostBinding('class.lux-form-control-no-top-label') _luxNoTopLabel = false;\n  @HostBinding('class.lux-form-control-no-labels') _luxNoLabels = false;\n  @HostBinding('class.lux-form-control-no-bottom-label') _luxNoBottomLabel = false;\n\n  /**\n   * Die zugrunde liegende FormComponent\n   */\n  @Input() luxFormComponent!: LuxFormComponentBase;\n  @Input() luxFormComponentElementRef!: ElementRef;\n  @Input() luxIgnoreDefaultLabel = false;\n  @Input() luxCounterLabel = '';\n  @Input() luxHideCounterLabel = false;\n  @Input() luxLabelLongFormat = false;\n  @Input() luxNoInputRow = false;\n  @Input() luxDisplayClearErrorButton = false;\n\n  /**\n   * Dient dazu, bei einer Component den Label-Container auszublenden.\n   * @param noLabel\n   */\n  @Input() set luxNoTopLabel(noLabel: boolean) {\n    this._luxNoTopLabel = noLabel;\n  }\n\n  get luxNoTopLabel(): boolean {\n    return this._luxNoTopLabel;\n  }\n\n  /**\n   * Dient dazu, bei einer Component den Label-Container und den Misc-Container auszublenden.\n   * @param noLabel\n   */\n  @Input() set luxNoLabels(noLabel: boolean) {\n    this._luxNoLabels = noLabel;\n  }\n\n  get luxNoLabels(): boolean {\n    return this._luxNoLabels;\n  }\n\n  /**\n   * Dient dazu, bei einer Component den Misc-Container auszublenden.\n   * @param noLabel\n   */\n  @Input() set luxNoBottomLabel(noLabel: boolean) {\n    this._luxNoBottomLabel = noLabel;\n  }\n\n  get luxNoBottomLabel(): boolean {\n    return this._luxNoBottomLabel;\n  }\n\n  /**\n   * Gibt wieder, ob der Fehler für diese FormComponent dargestellt werden soll.\n   */\n  shouldDisplayError() {\n    return this.luxFormComponent.errorMessage && this.luxFormComponent.formControl.touched && !this.luxFormComponent.luxReadonly;\n  }\n\n  shouldDisplayMisc() {\n    return !this.luxNoBottomLabel && !this.luxNoLabels;\n  }\n\n  shouldDisplayLabelByProperty() {\n    return !this.luxFormComponent.formLabelComponent && this.luxFormComponent.luxLabel;\n  }\n\n  shouldDisplayHintByProperty() {\n    return this.luxFormComponent.formHintComponent && !this.luxFormComponent.luxHint;\n  }\n\n  /**\n   * Aktiviert den Fokus dieser Component.\n   */\n  focusin() {\n    this.focused = true;\n    this.cdr.detectChanges();\n  }\n\n  /**\n   * Deaktiviert den Fokus dieser Component.\n   */\n  focusout() {\n    this.focused = false;\n    this.cdr.detectChanges();\n  }\n\n  onCloseErrorMessage() {\n    this.luxFormComponent.errorMessage = undefined;\n    this.luxFormComponent.formControl.updateValueAndValidity();\n  }\n}\n","<div\n  class=\"lux-form-control-wrapper\"\n  [ngClass]=\"{\n    'lux-form-control-error-authentic': shouldDisplayError(),\n    'lux-form-control-disabled-authentic': luxFormComponent.luxDisabled,\n    'lux-form-control-readonly-authentic': luxFormComponent.luxReadonly,\n    'lux-focused-authentic': focused,\n    'lux-dense-authentic': luxFormComponent.luxDense\n  }\"\n  (focusin)=\"focusin()\"\n  (focusout)=\"focusout()\"\n>\n  <!-- Container für das Label -->\n  @if (!luxNoTopLabel && !luxNoLabels) {\n  <div class=\"lux-form-control-label-authentic\" [ngClass]=\"{ 'lux-label-long-format': luxLabelLongFormat }\">\n    <!-- Hier wird entweder das luxLabel oder das übergebene Tag heraus gerendert -->\n    @if (!luxIgnoreDefaultLabel) {\n    <div class=\"lux-label-authentic\">\n      @if (luxFormComponent.formLabelComponent || luxFormComponent.luxLabel) {\n      <label class=\"lux-form-label-authentic\" [id]=\"luxFormComponent.uid + '-label'\" [for]=\"luxFormComponent.uid\">\n        @if (luxFormComponent.luxLabel) {&nbsp;{{ luxFormComponent.luxLabel }}&nbsp;} @else { <!-- Nicht in die nächste Zeile verschieben, sonst bricht das Label an dem Leerzeichen um. -->\n        <ng-container *ngTemplateOutlet=\"luxFormComponent.formLabelComponent?.templateRef ?? null\"></ng-container>} @if\n        (luxFormComponent.luxRequired) {\n        <span aria-hidden=\"true\">&nbsp;*</span>\n        }\n      </label>\n      }\n    </div>\n    }\n  </div>\n  }\n  <!-- Container für das FormControl -->\n  <div class=\"lux-form-control-container-authentic\" [ngClass]=\"{ 'lux-no-input-row': luxNoInputRow }\">\n    <ng-content></ng-content>\n  </div>\n\n  <!-- Container für das Hint und den Error und den Counter -->\n  @if (!luxNoBottomLabel && !luxNoLabels) {\n  <div class=\"lux-form-control-misc-authentic\" [ngClass]=\"{ 'lux-no-input-row': luxNoInputRow }\">\n    @switch (shouldDisplayError()) { @case (true) {\n    <div class=\"lux-form-control-error-container\">\n      <lux-icon\n        class=\"lux-color-red lux-alert-icon\"\n        luxIconName=\"lux-interface-alert-warning-triangle\"\n        luxIconSize=\"0.875rem\"\n        luxPadding=\"1px\"\n        luxMargin=\"0px 2px 0px 0px\"\n      ></lux-icon>\n      <mat-error [id]=\"luxFormComponent.uid + '-error'\">\n        {{ luxFormComponent.errorMessage }}\n      </mat-error>\n      @if (luxDisplayClearErrorButton) {\n      <lux-icon\n        luxIconName=\"lux-interface-delete-1\"\n        luxAriaLabel=\"{{ 'luxc.form.delete.error.button' | transloco }}\"\n        class=\"lux-error-icon\"\n        [tabIndex]=\"0\"\n        (keydown.enter)=\"onCloseErrorMessage()\"\n        (click)=\"onCloseErrorMessage()\"\n      ></lux-icon>\n      }\n    </div>\n    } @default {\n    <!-- Hier wird entweder das luxHint oder das übergebene Tag heraus gerendert -->\n    @if ( (luxFormComponent.formHintComponent || luxFormComponent.luxHint) && (!luxFormComponent.luxHintShowOnlyOnFocus ||\n    (luxFormComponent.luxHintShowOnlyOnFocus && focused)) ) {\n    <mat-hint [id]=\"luxFormComponent.uid + '-hint'\" [attr.aria-disabled]=\"luxFormComponent.luxDisabled\">\n      @if (luxFormComponent.luxHint) {\n      {{ luxFormComponent.luxHint }}\n      } @else {\n      <ng-container *ngTemplateOutlet=\"luxFormComponent.formHintComponent?.templateRef ?? null\"></ng-container>\n      }\n    </mat-hint>\n    } } }\n    <!-- Container für Character-Counter -->\n    @if (!luxHideCounterLabel && luxCounterLabel) {\n    <div class=\"lux-form-control-character-counter-authentic\">\n      @if (focused) {\n      {{ luxCounterLabel }}\n      }\n    </div>\n    }\n  </div>\n  }\n</div>\n","import { AfterViewInit, Directive, ElementRef, Input, OnDestroy, Renderer2, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LuxComponentsConfigParameters } from '../../lux-components-config/lux-components-config-parameters.interface';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { luxFormControlSelektor } from '../../lux-form/lux-form-control-wrapper/lux-form-control-wrapper.component';\n\n@Directive({ selector: '[luxTagIdHandler]' })\nexport class LuxTagIdDirective implements AfterViewInit, OnDestroy {\n  private elementRef = inject(ElementRef);\n  private renderer = inject(Renderer2);\n  componentsConfigService = inject(LuxComponentsConfigService);\n\n  public static readonly luxTagIdAttrName: string = 'data-luxtagid';\n  public static readonly sepParent: string = '.';\n  public static readonly sepComponent: string = '#';\n\n  private configSubscription: Subscription;\n\n  @Input() luxTagId?: string;\n  @Input() luxTagIdStartElement: Element | null = null;\n  @Input() luxTagIdTargetSelf = false;\n\n  generateLuxTagIds = false;\n\n  constructor() {\n    this.configSubscription = this.componentsConfigService.config.subscribe((newConfig: LuxComponentsConfigParameters) => {\n      this.generateLuxTagIds = newConfig.generateLuxTagIds ?? false;\n    });\n  }\n\n  ngAfterViewInit() {\n    if (this.generateLuxTagIds) {\n      const luxComponent: Element | null = this.findLuxComponent(this.luxTagIdStartElement || this.elementRef.nativeElement);\n\n      if (luxComponent) {\n        const targetElement = this.luxTagIdTargetSelf ? this.elementRef.nativeElement : luxComponent;\n\n        let newTagId = this.luxTagId ?? this.getLuxTagId(luxComponent);\n        if (newTagId) {\n          newTagId = this.mergeTagIds(\n            this.getLuxTagIdParent(luxComponent.parentElement, ''),\n            luxComponent.nodeName + LuxTagIdDirective.sepComponent + newTagId\n          );\n          newTagId = newTagId.toLowerCase();\n\n          this.renderer.setAttribute(targetElement, LuxTagIdDirective.luxTagIdAttrName, newTagId);\n        } else {\n          newTagId = this.getLuxTagIdParent(luxComponent.parentElement, '');\n          let usedLabel = false;\n          if (luxComponent.getAttribute('luxLabel')) {\n            newTagId = this.mergeTagIds(newTagId, luxComponent.getAttribute('luxLabel'));\n            newTagId = newTagId.toLowerCase();\n            this.renderer.setAttribute(targetElement, LuxTagIdDirective.luxTagIdAttrName, newTagId);\n\n            usedLabel = true;\n          } else if (luxComponent.getAttribute('ng-reflect-lux-label')) {\n            newTagId = this.mergeTagIds(newTagId, luxComponent.getAttribute('ng-reflect-lux-label'));\n            newTagId = newTagId.toLowerCase();\n            this.renderer.setAttribute(targetElement, LuxTagIdDirective.luxTagIdAttrName, newTagId);\n\n            usedLabel = true;\n          } else if (luxComponent.getAttribute('ng-reflect-label')) {\n            newTagId = this.mergeTagIds(newTagId, luxComponent.getAttribute('ng-reflect-label'));\n            newTagId = newTagId.toLowerCase();\n            this.renderer.setAttribute(targetElement, LuxTagIdDirective.luxTagIdAttrName, newTagId);\n\n            usedLabel = true;\n          } else if (luxComponent.getElementsByClassName('lux-form-label')[0]) {\n            const text = luxComponent.getElementsByClassName('lux-form-label')[0].textContent;\n            newTagId = this.mergeTagIds(newTagId, text ? text.trim() : null);\n            newTagId = newTagId.toLowerCase();\n            this.renderer.setAttribute(targetElement, LuxTagIdDirective.luxTagIdAttrName, newTagId);\n\n            usedLabel = true;\n          } else if (luxComponent.getElementsByClassName('lux-form-label-authentic')[0]) {\n            const text = luxComponent.getElementsByClassName('lux-form-label-authentic')[0].textContent;\n            newTagId = this.mergeTagIds(newTagId, text ? text.trim() : null);\n            newTagId = newTagId.toLowerCase();\n            this.renderer.setAttribute(targetElement, LuxTagIdDirective.luxTagIdAttrName, newTagId);\n\n            usedLabel = true;\n          } else if (luxComponent.nodeName && luxComponent.nodeName.toLowerCase() === 'lux-button') {\n            const labelEl = luxComponent.querySelector('.lux-button-label');\n            if (labelEl && labelEl.textContent && labelEl.textContent.trim()) {\n              newTagId = this.mergeTagIds(newTagId, labelEl.textContent.trim());\n              newTagId = newTagId.toLowerCase();\n              this.renderer.setAttribute(targetElement, LuxTagIdDirective.luxTagIdAttrName, newTagId);\n\n              usedLabel = true;\n            }\n          }\n\n          if (!usedLabel) {\n            console.warn(\n              'Dem Tag \"' +\n                this.getNodeName(luxComponent) +\n                '(' +\n                this.getParentPath(luxComponent.parentElement, '') +\n                ')' +\n                '\" fehlt das luxTagId-Attribut. Dieses Attribut wird für die automatischen Tests benötigt.'\n            );\n          }\n        }\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this.configSubscription.unsubscribe();\n  }\n\n  private getParentPath(element: Element | null, currentTagId: string): string {\n    if (element && element.parentElement) {\n      return this.getParentPath(element.parentElement, currentTagId + '.' + this.getNodeName(element.parentElement));\n    }\n\n    return currentTagId;\n  }\n\n  private getLuxTagIdParent(element: Element | null, currentTagId: string): string {\n    if (element) {\n      let newTagId: string = currentTagId;\n      if (element.hasAttribute('luxTagId')) {\n        newTagId = this.mergeTagIds('luxTagId', newTagId);\n      } else if (element.hasAttribute(LuxTagIdDirective.luxTagIdAttrName)) {\n        newTagId = this.mergeTagIds(element.getAttribute(LuxTagIdDirective.luxTagIdAttrName), newTagId);\n      } else if (element.hasAttribute('luxcontrolbinding')) {\n        newTagId = this.mergeTagIds(element.getAttribute('luxcontrolbinding'), newTagId);\n      } else if (element.hasAttribute('formgroupname')) {\n        newTagId = this.mergeTagIds('formgroup' + LuxTagIdDirective.sepComponent + element.getAttribute('formgroupname'), newTagId);\n      }\n\n      return this.getLuxTagIdParent(element.parentElement, newTagId);\n    }\n\n    return currentTagId;\n  }\n\n  private mergeTagIds(tagId1: string | null, tagId2: string | null) {\n    let tagId: string;\n\n    if (tagId1 && tagId2) {\n      tagId = tagId1 + LuxTagIdDirective.sepParent + tagId2;\n    } else if (tagId1 && !tagId2) {\n      tagId = tagId1;\n    } else if (!tagId1 && tagId2) {\n      tagId = tagId2;\n    } else {\n      tagId = '';\n    }\n\n    return tagId;\n  }\n\n  private getLuxTagId(element: Element): string {\n    let newId = '';\n\n    if (element) {\n      if (element.hasAttribute('luxTagId')) {\n        newId = this.getAttributeValue(element, 'luxTagId');\n      } else if (element.hasAttribute(LuxTagIdDirective.luxTagIdAttrName)) {\n        newId = this.getAttributeValue(element, LuxTagIdDirective.luxTagIdAttrName);\n      } else if (element.hasAttribute('luxcontrolbinding')) {\n        newId = this.getAttributeValue(element, 'luxcontrolbinding');\n      } else if (element.hasAttribute('formgroupname')) {\n        newId = this.getAttributeValue(element, 'formgroupname');\n      }\n    }\n\n    return newId;\n  }\n\n  private getAttributeValue(element: Element, attrName: string): string {\n    return element.getAttribute(attrName) ?? '';\n  }\n\n  private findLuxComponent(element: Element | null): Element | null {\n    if (element) {\n      const nodeName: string = this.getNodeName(element);\n      if (nodeName && nodeName.startsWith('lux-'.toUpperCase()) && nodeName !== luxFormControlSelektor.toUpperCase()) {\n        return element;\n      } else {\n        return this.findLuxComponent(element.parentElement);\n      }\n    }\n\n    return null;\n  }\n\n  private getNodeName(element: Element): string {\n    return element && element.nodeName ? element.nodeName : '';\n  }\n}\n","import { AfterViewInit, Directive, ElementRef, Input, OnDestroy, Renderer2, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LuxComponentsConfigParameters } from '../../lux-components-config/lux-components-config-parameters.interface';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { LuxTagIdDirective } from './lux-tag-id.directive';\n\n@Directive({ selector: '[luxCustomTagId]' })\nexport class LuxCustomTagIdDirective implements AfterViewInit, OnDestroy {\n  protected elementRef = inject(ElementRef);\n  protected renderer = inject(Renderer2);\n  componentsConfigService = inject(LuxComponentsConfigService);\n\n  generateLuxTagIds = false;\n  configSubscription: Subscription;\n\n  @Input() luxCustomTagId?: string;\n  @Input() luxCustomTagIdSelector?: string;\n\n  constructor() {\n    this.configSubscription = this.componentsConfigService.config.subscribe((newConfig: LuxComponentsConfigParameters) => {\n      this.generateLuxTagIds = newConfig.generateLuxTagIds ?? false;\n    });\n  }\n\n  ngAfterViewInit(): void {\n    if (this.generateLuxTagIds) {\n      let el;\n      if (this.luxCustomTagIdSelector) {\n        el = this.elementRef.nativeElement.querySelector(this.luxCustomTagIdSelector);\n      } else {\n        el = this.elementRef.nativeElement;\n      }\n\n      if (el) {\n        this.renderer.setAttribute(el, LuxTagIdDirective.luxTagIdAttrName, this.luxCustomTagId ?? '');\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this.configSubscription.unsubscribe();\n  }\n}\n","export declare type LuxThemePalette = 'primary' | 'accent' | 'warn' | undefined;\nexport declare type LuxFgColor = 'white' | 'black';\nexport declare type LuxBgBaseColor = 'red' | 'green' | 'purple' | 'blue' | 'gray' | 'orange' | 'yellow' | 'pink' | 'lightblue';\nexport declare type LuxBgAllColor = LuxBgBaseColor | 'black' | 'white';\nexport declare type LuxBadgeColor = LuxBgBaseColor | 'black';\nexport declare type LuxIconColor = LuxBgBaseColor | 'black';\nexport declare type LuxMessageBoxColor = LuxBgBaseColor | 'white';\nexport declare type LuxProgressColor = LuxBgBaseColor;\nexport declare type LuxSnackbarColor = LuxBgBaseColor | 'white';\nexport declare type LuxTextboxColor = 'red' | 'blue' | 'green' | 'yellow';\nexport declare type LuxAccordionColor = 'primary' | 'accent' | 'warn' | 'neutral';\n\nexport const LuxBgAllColors: LuxBgAllColor[] = [\n  'red',\n  'green',\n  'purple',\n  'blue',\n  'gray',\n  'orange',\n  'black',\n  'white',\n  'yellow',\n  'pink',\n  'lightblue'\n];\nexport const LuxBadgeColors: LuxBadgeColor[] = [\n  'blue',\n  'green',\n  'red',\n  'orange',\n  'yellow',\n  'lightblue',\n  'pink',\n  'gray',\n  'purple'\n];\nexport const LuxIconColors: LuxIconColor[] = [\n  'red',\n  'green',\n  'purple',\n  'blue',\n  'gray',\n  'orange',\n  'black',\n  'yellow',\n  'pink',\n  'lightblue'\n];\nexport const LuxMessageBoxColors: LuxMessageBoxColor[] = ['white', 'blue', 'red', 'green', 'gray', 'orange', 'yellow', 'purple'];\nexport const LuxProgressColors: LuxProgressColor[] = ['red', 'green', 'purple', 'blue', 'gray', 'orange'];\nexport const LuxSnackbarColors: LuxSnackbarColor[] = ['white', 'red', 'blue', 'green', 'orange', 'yellow'];\nexport const LuxTextboxColors: LuxTextboxColor[] = ['red', 'blue', 'green', 'yellow'];\nexport const LuxAccordionColors: LuxAccordionColor[] = ['primary', 'accent', 'warn', 'neutral'];\n","import { NgClass } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxCustomTagIdDirective } from '../../lux-directives/lux-tag-id/lux-custom-tag-id.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxProgressColor, LuxProgressColors } from '../../lux-util/lux-colors.enum';\n\nexport declare type LuxProgressModeType = 'determinate' | 'indeterminate';\nexport declare type LuxProgressType = 'Progressbar' | 'Spinner';\nexport declare type LuxProgressSizeType = 'small' | 'medium' | 'large';\n\n@Component({\n  selector: 'lux-progress',\n  templateUrl: './lux-progress.component.html',\n  imports: [NgClass, MatProgressBar, LuxTagIdDirective, LuxAriaLabelDirective, LuxCustomTagIdDirective, MatProgressSpinner, TranslocoPipe]\n})\nexport class LuxProgressComponent {\n  readonly DEFAULT_PROGRESS_COLOR: LuxProgressColor = 'blue';\n\n  private _luxMode?: LuxProgressModeType;\n  private _luxType?: LuxProgressType;\n  private _luxColor?: LuxProgressColor;\n\n  animDurationCSS = '';\n  typeCSS = '';\n\n  @Input() luxValue = 0;\n  @Input() luxAriaLabel = ''\n  // Nur für ProgressBar\n  @Input() luxSize: LuxProgressSizeType = 'medium';\n  @Input() luxTagId?: string;\n\n  @Input()\n  set luxColor(value: LuxProgressColor | undefined) {\n    this._luxColor = LuxProgressColors.find((entry) => entry === value) ?? this.DEFAULT_PROGRESS_COLOR;\n  }\n\n  get luxColor(): LuxProgressColor | undefined {\n    return this._luxColor;\n  }\n\n  @Input() set luxMode(mode: LuxProgressModeType) {\n    this._luxMode = mode;\n  }\n\n  get luxMode() {\n    if (this._luxMode !== 'determinate' && this._luxMode !== 'indeterminate') {\n      return 'indeterminate';\n    }\n    return this._luxMode;\n  }\n\n  @Input() set luxType(type: LuxProgressType | undefined) {\n    this._luxType = type;\n    if (this._luxType === 'Progressbar') {\n      this.typeCSS = 'lux-progress-bar';\n    } else if (this._luxType === 'Spinner') {\n      this.typeCSS = 'lux-progress-spinner';\n    } else {\n      this.luxType = 'Progressbar';\n    }\n  }\n\n  get luxType(): LuxProgressType | undefined {\n    return this._luxType;\n  }\n\n  constructor() {\n    this.luxMode = 'indeterminate';\n    this.luxType = 'Progressbar';\n  }\n}\n","<div [class]=\"animDurationCSS\" [ngClass]=\"['lux-progress-' + luxSize, luxType === 'Spinner' ? 'spinner-padding' : '']\">\n  @switch (luxType) { @case ('Progressbar') {\n  <mat-progress-bar\n    luxAriaLabel=\"{{ luxAriaLabel || ('luxc.progress.arialabel' | transloco) }}\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [luxCustomTagId]=\"luxTagId\"\n    [ngClass]=\"[typeCSS, 'lux-color-' + luxColor]\"\n    [mode]=\"luxMode\"\n    [value]=\"luxValue\"\n  >\n  </mat-progress-bar>\n  } @case ('Spinner') {\n  <mat-progress-spinner\n    luxAriaLabel=\"{{ luxAriaLabel || ('luxc.progress.arialabel' | transloco) }}\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [luxCustomTagId]=\"luxTagId\"\n    [ngClass]=\"[typeCSS, 'lux-color-' + luxColor]\"\n    [mode]=\"luxMode\"\n    [value]=\"luxValue\"\n  >\n  </mat-progress-spinner>\n  } }\n</div>\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, HostBinding, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { MatButton, MatFabButton, MatIconButton } from '@angular/material/button';\nimport { Subject, Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\nimport { LuxProgressComponent, LuxProgressModeType } from '../../lux-common/lux-progress/lux-progress.component';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxTooltipDirective } from '../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxThemePalette } from '../../lux-util/lux-colors.enum';\nimport { LuxActionComponentBaseClass } from '../lux-action-model/lux-action-component-base.class';\n\n@Component({\n  selector: 'lux-button',\n  templateUrl: './lux-button.component.html',\n  styleUrls: ['./lux-button.component.scss'],\n  imports: [MatButton, LuxTagIdDirective, NgClass, NgTemplateOutlet, MatFabButton, MatIconButton, LuxIconComponent, LuxProgressComponent],\n  host: {\n    '[class.lux-flat]': 'luxFlat',\n    '[class.lux-raised]': 'luxRaised',\n    '[class.lux-rounded]': 'luxRounded',\n    '[class.lux-stroked]': 'luxStroked',\n    '[class.lux-icon-button]': 'luxIconButton'\n  }\n})\nexport class LuxButtonComponent extends LuxActionComponentBaseClass implements OnInit, OnDestroy {\n  elementRef = inject(ElementRef);\n  componentsConfigService = inject(LuxComponentsConfigService);\n  tooltipDirective?: LuxTooltipDirective;\n\n  private configSubscription!: Subscription;\n\n  private clickSubject = new Subject<MouseEvent>();\n  private clickSubscription!: Subscription;\n\n  private auxClickSubject = new Subject<MouseEvent>();\n  private auxClickSubscription!: Subscription;\n  private clickNotAllowedSubject = new Subject<MouseEvent>();\n  private clickNotAllowedSubscription!: Subscription;\n\n  @Input() luxType: 'button' | 'reset' | 'submit' = 'button';\n  @Input() luxThrottleTime!: number;\n  @Input() luxButtonBadge?: string;\n  @Input() luxButtonBadgeColor?: LuxThemePalette = 'primary';\n  @Input() luxSpinnerMode: LuxProgressModeType = 'indeterminate';\n  @Input() luxSpinnerValue = 70;\n  @Input() luxLoading = false;\n  @Input() luxDisabledAria = false;\n  @Input() luxIconButton = false;\n\n  @Output() luxAuxClicked = new EventEmitter<Event>();\n  @Output() luxClickNotAllowed = new EventEmitter<Event>();\n\n  @HostBinding('class.lux-uppercase') labelUppercase!: boolean;\n\n  ngOnInit() {\n    if (!this.luxThrottleTime) {\n      this.luxThrottleTime = this.componentsConfigService.currentConfig.buttonConfiguration?.throttleTimeMs\n        ? this.componentsConfigService.currentConfig.buttonConfiguration.throttleTimeMs\n        : LuxComponentsConfigService.DEFAULT_CONFIG.buttonConfiguration.throttleTimeMs;\n    }\n\n    if (\n      (this.luxRaised && this.luxFlat) ||\n      (this.luxRaised && this.luxStroked) ||\n      (this.luxStroked && this.luxFlat) ||\n      (this.luxIconButton && (this.luxRaised || this.luxFlat || this.luxStroked || this.luxRounded))\n    ) {\n      console.log(\n        'Es kann nur eine Button-Variante gesetzt werden!',\n        'luxRaised: ',\n        this.luxRaised,\n        'luxFlat: ',\n        this.luxFlat,\n        'luxStroked: ',\n        this.luxStroked,\n        'luxRounded: ',\n        this.luxRounded,\n        'luxIconButton: ',\n        this.luxIconButton\n      );\n    }\n\n    this.configSubscription = this.componentsConfigService.config.subscribe(() => {\n      // Hintergrund: LuxLink, LuxSideNavItem und LuxMenuItem benutzen alle unter der Haube\n      // den LuxButton. Wenn diese nun als Ausnahmen für Uppercase in der Config eingetragen werden,\n      // darf eine Uppercase-Einstellung für den LuxButton diese nicht überschreiben.\n      // Deshalb prüft der LuxButton hier, ob er Teil einer dieser Komponenten ist.\n      this.detectParent();\n    });\n\n    this.clickSubscription = this.clickSubject.pipe(throttleTime(this.luxThrottleTime)).subscribe((e) => this.luxClicked.emit(e));\n\n    this.auxClickSubscription = this.auxClickSubject.pipe(throttleTime(this.luxThrottleTime)).subscribe((e) => this.luxAuxClicked.emit(e));\n\n    this.clickNotAllowedSubscription = this.clickNotAllowedSubject\n      .pipe(throttleTime(this.luxThrottleTime))\n      .subscribe((e) => this.luxClickNotAllowed.emit(e));\n  }\n\n  ngOnDestroy() {\n    this.configSubscription?.unsubscribe();\n    this.clickSubscription?.unsubscribe();\n    this.auxClickSubscription?.unsubscribe();\n    this.clickNotAllowedSubscription?.unsubscribe();\n  }\n\n  clicked(event: MouseEvent) {\n    if (this.shouldHandleNotAllowedClick()) {\n      this.emitClickNotAllowed(event);\n      return;\n    }\n\n    this.clickSubject.next(event);\n  }\n\n  auxClicked(event: MouseEvent) {\n    if (this.shouldHandleNotAllowedClick()) {\n      this.emitClickNotAllowed(event);\n      return;\n    }\n\n    this.auxClickSubject.next(event);\n  }\n\n  private detectParent() {\n    const className = this.elementRef.nativeElement.className;\n\n    let selector;\n    if (className.indexOf('lux-link') > -1) {\n      selector = 'lux-link';\n    } else if (className.indexOf('lux-side-nav-item-button') > -1) {\n      selector = 'lux-side-nav-item';\n    } else if (className.indexOf('lux-menu-item') > -1) {\n      selector = 'lux-menu-item';\n    } else {\n      selector = 'lux-button';\n    }\n\n    this.labelUppercase = this.componentsConfigService.isLabelUppercaseForSelector(selector);\n  }\n\n  private shouldHandleNotAllowedClick(): boolean {\n    return !!this.luxDisabledAria && !this.luxDisabled;\n  }\n\n  private emitClickNotAllowed(event: MouseEvent) {\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    this.clickNotAllowedSubject.next(event);\n  }\n}\n","@if (luxRaised && !luxRounded && !luxFlat && !luxStroked) {\n  <button\n    matButton=\"elevated\"\n    class=\"lux-button lux-button-raised\"\n    (focus)=\"tooltipDirective?.show()\"\n    (blur)=\"tooltipDirective?.hide()\"\n    [disableRipple]=\"true\"\n    [color]=\"luxColor\"\n    (click)=\"clicked($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    [disabled]=\"luxDisabled\"\n    [type]=\"luxType\"\n    class=\"lux-button\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName, 'lux-button-spinner': luxLoading }\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabledAria ? 'true' : null\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxButtonContent\"></ng-container>\n  </button>\n} @else if (!luxRaised && !luxRounded && luxFlat && !!luxColor && !luxStroked) {\n  <button\n    matButton=\"filled\"\n    class=\"lux-button lux-button-flat\"\n    (focus)=\"tooltipDirective?.show()\"\n    (blur)=\"tooltipDirective?.hide()\"\n    [disableRipple]=\"true\"\n    [color]=\"luxColor\"\n    (click)=\"clicked($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    [disabled]=\"luxDisabled\"\n    [type]=\"luxType\"\n    class=\"lux-button\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName }\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabledAria ? 'true' : null\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxButtonContent\"></ng-container>\n  </button>\n} @else if (!luxRaised && !luxRounded && !luxFlat && luxStroked) {\n  <button\n    matButton=\"outlined\"\n    class=\"lux-button lux-button-stroked\"\n    (focus)=\"tooltipDirective?.show()\"\n    (blur)=\"tooltipDirective?.hide()\"\n    [disableRipple]=\"true\"\n    [color]=\"luxColor\"\n    (click)=\"clicked($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    [disabled]=\"luxDisabled\"\n    [type]=\"luxType\"\n    class=\"lux-button\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName }\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabledAria ? 'true' : null\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxButtonContent\"></ng-container>\n  </button>\n} @else if (!luxRaised && !luxRounded && !luxFlat && !luxStroked && luxIconButton) {\n  <button\n    mat-icon-button\n    class=\"lux-button lux-button-icon-only\"\n    (focus)=\"tooltipDirective?.show()\"\n    (blur)=\"tooltipDirective?.hide()\"\n    [disableRipple]=\"true\"\n    [color]=\"luxColor\"\n    (click)=\"clicked($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    [disabled]=\"luxDisabled\"\n    [type]=\"luxType\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [ngClass]=\"{ 'lux-icon-button': true, 'lux-button-spinner': luxLoading }\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabledAria ? 'true' : null\"\n  >\n    @if (luxLoading && !luxDisabled) {\n      <lux-progress\n        inert\n        luxType=\"Spinner\"\n        luxSize=\"small\"\n        [luxMode]=\"luxSpinnerMode\"\n        [luxValue]=\"luxSpinnerValue\"\n        luxAnimationDuration=\"slow\"\n        class=\"lux-button-spinner\"\n      ></lux-progress>\n    }\n    @if ((!luxLoading || (luxLoading && luxDisabled)) && luxIconName) {\n      <lux-icon [luxIconName]=\"luxIconName\" luxPadding=\"unset\" luxMargin=\"unset\" class=\"lux-button-icon\"></lux-icon>\n    }\n  </button>\n} @else if (luxRounded && !luxStroked) {\n  <button\n    mat-fab\n    (focus)=\"tooltipDirective?.show()\"\n    (blur)=\"tooltipDirective?.hide()\"\n    [disableRipple]=\"true\"\n    [color]=\"luxColor\"\n    (click)=\"clicked($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    [disabled]=\"luxDisabled\"\n    [type]=\"luxType\"\n    class=\"lux-button lux-button-rounded\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName, 'lux-fab-rounded-default': !luxColor }\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabledAria ? 'true' : null\"\n  >\n    @if (luxLoading && !luxDisabled) {\n      <lux-progress\n        inert\n        luxType=\"Spinner\"\n        luxSize=\"small\"\n        [luxMode]=\"luxSpinnerMode\"\n        [luxValue]=\"luxSpinnerValue\"\n        luxAnimationDuration=\"slow\"\n        class=\"lux-button-spinner\"\n      ></lux-progress>\n    }\n    @if (!luxLoading || (luxLoading && luxDisabled)) {\n      <lux-icon [luxIconName]=\"luxIconName\" luxPadding=\"0px\" luxMargin=\"0px\" class=\"lux-button-icon-round\"></lux-icon>\n    }\n  </button>\n} @else if (luxRounded && luxStroked) {\n  <button\n    mat-fab\n    (focus)=\"tooltipDirective?.show()\"\n    (blur)=\"tooltipDirective?.hide()\"\n    [disableRipple]=\"true\"\n    [color]=\"luxColor\"\n    (click)=\"clicked($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    [disabled]=\"luxDisabled\"\n    [type]=\"luxType\"\n    class=\"lux-button lux-button-rounded lux-stroked\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName, 'lux-fab-stroked-default': !luxColor }\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabledAria ? 'true' : null\"\n  >\n    @if (luxLoading && !luxDisabled) {\n      <lux-progress\n        inert\n        luxType=\"Spinner\"\n        luxSize=\"small\"\n        [luxMode]=\"luxSpinnerMode\"\n        [luxValue]=\"luxSpinnerValue\"\n        luxAnimationDuration=\"slow\"\n        class=\"lux-button-spinner\"\n      ></lux-progress>\n    }\n    @if (!luxLoading || (luxLoading && luxDisabled)) {\n      <lux-icon [luxIconName]=\"luxIconName\" luxPadding=\"0px\" luxMargin=\"0px\" class=\"lux-button-icon-round\"></lux-icon>\n    }\n  </button>\n} @else {\n  <button\n    matButton\n    class=\"lux-button lux-button-default\"\n    (focus)=\"tooltipDirective?.show()\"\n    (blur)=\"tooltipDirective?.hide()\"\n    [disableRipple]=\"true\"\n    [color]=\"luxColor\"\n    (click)=\"clicked($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    [disabled]=\"luxDisabled\"\n    [type]=\"luxType\"\n    class=\"lux-button\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName }\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabledAria ? 'true' : null\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxButtonContent\"></ng-container>\n  </button>\n}\n\n<ng-template #luxButtonContent>\n  <div class=\"lux-button-content-container\">\n    @if (luxLoading && !luxIconShowRight && !luxDisabled) {\n      <lux-progress\n        inert\n        luxType=\"Spinner\"\n        luxSize=\"small\"\n        [luxMode]=\"luxSpinnerMode\"\n        [luxValue]=\"luxSpinnerValue\"\n        luxAnimationDuration=\"slow\"\n        class=\"lux-button-spinner\"\n      ></lux-progress>\n    }\n    @if (luxIconName && !luxIconShowRight && !luxLoading) {\n      <lux-icon [luxIconName]=\"luxIconName\" luxPadding=\"0px\" luxMargin=\"0px\" class=\"lux-button-icon\"></lux-icon>\n    }\n    @if (luxLabel) {\n      <span class=\"lux-button-label\">\n        {{ luxLabel }}\n      </span>\n    }\n    @if (luxButtonBadge && !luxDisabled) {\n      <span\n        class=\"lux-button-badge lux-bg-color-primary-20\"\n        [ngClass]=\"{\n          'lux-button-badge-primary': luxButtonBadgeColor === 'primary',\n          'lux-button-badge-warn': luxButtonBadgeColor === 'warn',\n          'lux-button-badge-accent': luxButtonBadgeColor === 'accent',\n          'lux-mr-3': !!luxIconName && luxIconShowRight\n        }\"\n      >\n        {{ luxButtonBadge }}\n      </span>\n    }\n    @if (luxIconName && luxIconShowRight && !luxLoading) {\n      <lux-icon [luxIconName]=\"luxIconName\" luxPadding=\"0px\" luxMargin=\"0px\" class=\"lux-button-icon\"></lux-icon>\n    }\n    @if (luxLoading && luxIconShowRight && !luxDisabled) {\n      <lux-progress\n        inert\n        luxType=\"Spinner\"\n        luxSize=\"small\"\n        [luxMode]=\"luxSpinnerMode\"\n        [luxValue]=\"luxSpinnerValue\"\n        luxAnimationDuration=\"slow\"\n        class=\"lux-button-spinner\"\n      ></lux-progress>\n    }\n  </div>\n</ng-template>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectorRef, Component, HostBinding, Input, OnInit, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxTooltipDirective } from '../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxActionComponentBaseClass } from '../lux-action-model/lux-action-component-base.class';\n\n@Component({\n  selector: 'lux-link-plain',\n  templateUrl: './lux-link-plain.component.html',\n  styleUrls: ['./lux-link-plain.component.scss'],\n  host: { '[class.lux-disabled]': 'luxDisabled' },\n  imports: [LuxAriaLabelDirective, NgClass, LuxIconComponent]\n})\nexport class LuxLinkPlainComponent extends LuxActionComponentBaseClass implements OnInit {\n  private router = inject(Router);\n  cdr = inject(ChangeDetectorRef);\n  tooltipDirective?: LuxTooltipDirective;\n\n  @HostBinding('class') classes = '';\n  @Input() luxHref = '';\n  @Input() luxBlank = false;\n\n  private _customClass = '';\n  get luxCustomClass() {\n    return this._customClass;\n  }\n  @Input() set luxCustomClass(customClass: string) {\n    if (customClass) {\n      this._customClass = customClass;\n      this.updateHostClasses();\n    }\n  }\n\n  ngOnInit() {\n    this.updateHostClasses();\n  }\n\n  private updateHostClasses() {\n    if (this.luxCustomClass) {\n      this.classes = this.luxCustomClass;\n    } else {\n      this.classes = 'default-style';\n    }\n  }\n\n  isExternal(): boolean {\n    if (!this.luxHref) return false;\n    const href = this.luxHref.trim();\n    return (\n      href.startsWith('http://') ||\n      href.startsWith('https://') ||\n      href.startsWith('//') ||\n      href.startsWith('mailto:') ||\n      href.startsWith('tel:')\n    );\n  }\n\n  auxClicked(event: MouseEvent) {\n    if (event.which === 2) {\n      this.redirectToHref(event);\n    }\n  }\n\n  redirectToHref($event: any) {\n    this.luxClicked.emit($event);\n\n    if (!this.luxHref) return;\n\n    $event.preventDefault();\n    const href = this.luxHref.trim();\n\n    if (this.isExternal()) {\n      // Externe Links: Öffne im aktuellen oder neuen Fenster\n      window.open(href, this.luxBlank || $event.ctrlKey || $event.metaKey || $event.which === 2 ? '_blank' : '_self');\n    } else {\n      // Interne Links: Nutze Angular Router\n      if (this.luxBlank || $event.ctrlKey || $event.metaKey || $event.which === 2) {\n        const newRelativeUrl = this.router.createUrlTree([href]);\n        const baseUrl = window.location.href.replace(this.router.url, '');\n        window.open(baseUrl + newRelativeUrl, '_blank');\n      } else {\n        this.router.navigate([href]);\n      }\n    }\n  }\n}\n","<a\n  class=\"link-wrapper\"\n  [attr.href]=\"luxDisabled || !luxHref ? null : luxHref\"\n  [target]=\"luxBlank ? '_blank' : '_self'\"\n  tabindex=\"{{ luxDisabled ? -1 : 0 }}\"\n  (focus)=\"tooltipDirective?.show()\"\n  (blur)=\"tooltipDirective?.hide()\"\n  luxAriaLabel=\"{{ luxLabel }}\"\n  [attr.disabled]=\"luxDisabled ? true : null\"\n  [attr.aria-disabled]=\"luxDisabled ? 'true' : null\"\n  [ngClass]=\"[luxDisabled ? 'lux-disabled' : '']\"\n  (click)=\"!luxDisabled ? redirectToHref($event) : null\"\n  (keydown.enter)=\"!luxDisabled ? redirectToHref($event) : null\"\n  (auxclick)=\"!luxDisabled ? auxClicked($event) : null\"\n>\n  @if (!luxIconShowRight && luxIconName) {\n  <lux-icon [luxIconName]=\"luxIconName\"></lux-icon>\n  }\n  <span class=\"lux-link-plain-text\">\n    {{ luxLabel }}\n  </span>\n  @if (luxIconShowRight && luxIconName) {\n  <lux-icon [luxIconName]=\"luxIconName\"></lux-icon>\n  }\n</a>\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectorRef, Component, ElementRef, Input, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButton, MatFabButton } from '@angular/material/button';\nimport { Router } from '@angular/router';\nimport { LuxIconComponent } from '../../../lib/lux-icon/lux-icon/lux-icon.component';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxTooltipDirective } from '../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxActionComponentBaseClass } from '../lux-action-model/lux-action-component-base.class';\n\n@Component({\n  selector: 'lux-link',\n  templateUrl: './lux-link.component.html',\n  styleUrls: ['./lux-link.component.scss'],\n  imports: [NgClass, LuxTagIdDirective, LuxIconComponent, NgTemplateOutlet, MatButton, MatFabButton],\n  host: {\n    '[class.lux-uppercase]': 'labelUppercase',\n    '[class.lux-flat]': 'luxFlat',\n    '[class.lux-raised]': 'luxRaised',\n    '[class.lux-rounded]': 'luxRounded',\n    '[class.lux-stroked]': 'luxStroked'\n  }\n})\nexport class LuxLinkComponent extends LuxActionComponentBaseClass {\n  private router = inject(Router);\n  cdr = inject(ChangeDetectorRef);\n  elementRef = inject(ElementRef);\n  componentsConfigService = inject(LuxComponentsConfigService);\n  tooltipDirective?: LuxTooltipDirective;\n  labelUppercase!: boolean;\n\n  public readonly iconSize: string = '2x';\n\n  @Input() luxHref = '';\n  @Input() luxBlank? = false;\n\n  constructor() {\n    super();\n\n    this.componentsConfigService.config.pipe(takeUntilDestroyed()).subscribe(() => {\n      this.detectParent();\n    });\n  }\n\n  auxClicked(event: Event) {\n    if (event instanceof UIEvent && event.which === 2) {\n      this.redirectToHref(event);\n    }\n  }\n\n  isExternal(): boolean {\n    if (!this.luxHref) return false;\n    const href = this.luxHref.trim();\n    return href.startsWith('http://') ||\n           href.startsWith('https://') ||\n           href.startsWith('//') ||\n           href.startsWith('mailto:') ||\n           href.startsWith('tel:');\n  }\n\n  redirectToHref(event: Event) {\n    this.luxClicked.emit(event);\n    \n    if (!this.luxHref) return;\n    \n    event.preventDefault();\n    const href = this.luxHref.trim();\n    \n    if (this.isExternal()) {\n      // Externe Links: Öffne im aktuellen oder neuen Fenster\n      window.open(href, this.isOpenInNewTab(event) ? '_blank' : '_self');\n    } else {\n      // Interne Links: Nutze Angular Router\n      if (this.isOpenInNewTab(event)) {\n        const newRelativeUrl = this.router.createUrlTree([href]);\n        const baseUrl = window.location.href.replace(this.router.url, '');\n        window.open(baseUrl + newRelativeUrl, '_blank');\n      } else {\n        this.router.navigate([href]).then(() => {});\n      }\n    }\n  }\n\n  isOpenInNewTab(event: Event): boolean {\n    let result = false;\n\n    if (event instanceof MouseEvent || event instanceof KeyboardEvent) {\n      result = this.luxBlank || event.ctrlKey || event.metaKey || event.which === 2;\n    }\n\n    return result;\n  }\n\n  private detectParent() {\n    const className = this.elementRef.nativeElement.className;\n\n    let selector;\n    if (className.indexOf('lux-side-nav-item-button') > -1) {\n      selector = 'lux-side-nav-item';\n    } else if (className.indexOf('lux-menu-item') > -1) {\n      selector = 'lux-menu-item';\n    } else {\n      selector = 'lux-link';\n    }\n\n    this.labelUppercase = this.componentsConfigService.isLabelUppercaseForSelector(selector);\n  }\n}\n","@if (luxRaised && !luxRounded && !luxFlat && !luxStroked) {\n  <a\n    matButton=\"elevated\"\n    role=\"button\"\n    draggable=\"false\"\n    class=\"lux-button lux-button-raised lux-link\"\n    [attr.href]=\"luxDisabled || !luxHref ? null : luxHref\"\n    [target]=\"luxBlank ? '_blank' : '_self'\"\n    [class.mat-primary]=\"luxColor === 'primary'\"\n    [class.mat-accent]=\"luxColor === 'accent'\"\n    [class.mat-warn]=\"luxColor === 'warn'\"\n    (click)=\"redirectToHref($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    (keydown.space)=\"redirectToHref($event)\"\n    [attr.disabled]=\"luxDisabled? true : null\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabled ? 'true' : null\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName, 'lux-disabled': luxDisabled }\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxLinkContent\"></ng-container>\n  </a>\n} @else if (!luxRaised && !luxRounded && luxFlat && !!luxColor && !luxStroked) {\n  <a\n    matButton=\"filled\"\n    role=\"button\"\n    draggable=\"false\"\n    class=\"lux-button lux-button-flat lux-link\"\n    [attr.href]=\"luxDisabled || !luxHref ? null : luxHref\"\n    [target]=\"luxBlank ? '_blank' : '_self'\"\n    [class.mat-primary]=\"luxColor === 'primary'\"\n    [class.mat-accent]=\"luxColor === 'accent'\"\n    [class.mat-warn]=\"luxColor === 'warn'\"\n    (click)=\"redirectToHref($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    (keydown.space)=\"redirectToHref($event)\"\n    [attr.disabled]=\"luxDisabled? true : null\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabled ? 'true' : null\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName, 'lux-disabled': luxDisabled }\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxLinkContent\"></ng-container>\n  </a>\n} @else if (!luxRaised && !luxRounded && !luxFlat && luxStroked) {\n  <a\n    matButton=\"outlined\"\n    role=\"button\"\n    draggable=\"false\"\n    class=\"lux-button lux-button-stroked lux-link\"\n    [attr.href]=\"luxDisabled || !luxHref ? null : luxHref\"\n    [target]=\"luxBlank ? '_blank' : '_self'\"\n    [class.mat-primary]=\"luxColor === 'primary'\"\n    [class.mat-accent]=\"luxColor === 'accent'\"\n    [class.mat-warn]=\"luxColor === 'warn'\"\n    (click)=\"redirectToHref($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    (keydown.space)=\"redirectToHref($event)\"\n    [attr.disabled]=\"luxDisabled? true : null\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabled ? 'true' : null\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName, 'lux-disabled': luxDisabled }\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxLinkContent\"></ng-container>\n  </a>\n} @else if (!luxRaised && luxRounded && !luxFlat && !luxStroked) {\n  <a\n    mat-fab\n    role=\"button\"\n    draggable=\"false\"\n    class=\"lux-button lux-button-rounded lux-link\"\n    [class.mat-primary]=\"luxColor === 'primary'\"\n    [class.mat-accent]=\"luxColor === 'accent'\"\n    [class.mat-warn]=\"luxColor === 'warn'\"\n    [attr.href]=\"luxDisabled || !luxHref ? null : luxHref\"\n    [target]=\"luxBlank ? '_blank' : '_self'\"\n    (click)=\"redirectToHref($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    (keydown.space)=\"redirectToHref($event)\"\n    [attr.disabled]=\"luxDisabled? true : null\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabled ? 'true' : null\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName, 'lux-disabled': luxDisabled }\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxLinkContent\"></ng-container>\n  </a>\n} @else if (luxRounded && luxStroked) {\n  <a\n    mat-fab\n    role=\"button\"\n    draggable=\"false\"\n    class=\"lux-button lux-button-rounded lux-stroked lux-link\"\n    [class.mat-primary]=\"luxColor === 'primary'\"\n    [class.mat-accent]=\"luxColor === 'accent'\"\n    [class.mat-warn]=\"luxColor === 'warn'\"\n    [attr.href]=\"luxDisabled || !luxHref ? null : luxHref\"\n    [target]=\"luxBlank ? '_blank' : '_self'\"\n    (click)=\"redirectToHref($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    (keydown.space)=\"redirectToHref($event)\"\n    [attr.disabled]=\"luxDisabled? true : null\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabled ? 'true' : null\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName, 'lux-fab-stroked-default': !luxColor, 'lux-disabled': luxDisabled }\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxLinkContent\"></ng-container>\n  </a>\n} @else {\n  <a\n    matButton\n    role=\"button\"\n    draggable=\"false\"\n    class=\"lux-button lux-button-basic lux-link\"\n    [attr.href]=\"luxDisabled || !luxHref ? null : luxHref\"\n    [target]=\"luxBlank ? '_blank' : '_self'\"\n    [class.mat-primary]=\"luxColor === 'primary'\"\n    [class.mat-accent]=\"luxColor === 'accent'\"\n    [class.mat-warn]=\"luxColor === 'warn'\"\n    (click)=\"redirectToHref($event)\"\n    (auxclick)=\"auxClicked($event)\"\n    (keydown.space)=\"redirectToHref($event)\"\n    [attr.disabled]=\"luxDisabled ? true : null\"\n    [attr.aria-label]=\"luxLabel ? luxLabel : ''\"\n    [attr.aria-disabled]=\"luxDisabled ? 'true' : null\"\n    [ngClass]=\"{ 'lux-icon-button': !!luxIconName, 'lux-disabled': luxDisabled }\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxLinkContent\"></ng-container>\n  </a>\n}\n\n<ng-template #luxLinkContent>\n  <div class=\"lux-button-content-container\">\n    @if (!luxIconShowRight && luxIconName) {\n      <lux-icon [luxIconName]=\"luxIconName\" class=\"lux-button-icon\"></lux-icon>\n    }\n    @if (luxLabel && !luxRounded) {\n      <span class=\"lux-button-label\">\n        {{ luxLabel }}\n      </span>\n    }\n    @if (luxIconShowRight && luxIconName) {\n      <lux-icon [luxIconName]=\"luxIconName\" class=\"lux-button-icon\"></lux-icon>\n    }\n  </div>\n</ng-template>\n","import { Component, EventEmitter, input, Input, Output } from '@angular/core';\nimport { LuxThemePalette } from '../../../lux-util/lux-colors.enum';\nimport { LuxActionComponentBaseClass } from '../../lux-action-model/lux-action-component-base.class';\n\n@Component({\n  selector: 'lux-menu-item',\n  template: ''\n})\nexport class LuxMenuItemComponent extends LuxActionComponentBaseClass {\n  @Input() luxButtonTooltip = '';\n  @Input() luxMenuTooltip = '';\n  @Input() luxPrio = 0;\n  @Input() luxButtonBadge?: string;\n  @Input() luxButtonBadgeColor: LuxThemePalette = 'primary';\n  luxMenuItemSubtitle = input<string>('');\n  luxMenuItemSelected = input<boolean>(false);\n\n  @Output() luxHiddenChange = new EventEmitter<boolean>();\n  @Output() luxHideLabelIfExtendedChange = new EventEmitter<boolean>();\n  @Output() luxAlwaysVisibleChange = new EventEmitter<boolean>();\n\n  _luxAlwaysVisible = true;\n  _luxHideLabelIfExtended = false;\n  _luxHidden = false;\n\n  // Wird vom LuxMenuComponent mit dem berechneten Breitenwert belegt\n  width = 0;\n  // Wird vom LuxMenuComponent mit dem passenden Zustand belegt\n  extended = false;\n\n  get luxAlwaysVisible() {\n    return this._luxAlwaysVisible;\n  }\n\n  @Input() set luxAlwaysVisible(value: boolean) {\n    this._luxAlwaysVisible = value;\n\n    this.luxAlwaysVisibleChange.emit(value);\n  }\n\n  get luxHideLabelIfExtended() {\n    return this._luxHideLabelIfExtended;\n  }\n\n  @Input() set luxHideLabelIfExtended(value: boolean) {\n    this._luxHideLabelIfExtended = value;\n\n    this.luxHideLabelIfExtendedChange.emit(value);\n  }\n\n  get luxHidden() {\n    return this._luxHidden;\n  }\n\n  @Input() set luxHidden(value: boolean) {\n    this._luxHidden = value;\n\n    this.luxHiddenChange.emit(value);\n  }\n\n  @Input() luxClass?: string | string[] | Set<string> | Record<string, any>; //vgl. ngClass\n\n  constructor() {\n    super();\n  }\n\n  clicked(event: Event) {\n    this.luxClicked.emit(event);\n  }\n}\n","import { Component, input } from '@angular/core';\n\n@Component({\n  selector: 'lux-menu-panel-header',\n  template: ''\n})\nexport class LuxMenuPanelHeaderComponent {\n  luxTitle = input<string>('');\n  luxSubtitle = input<string | undefined>(undefined);\n}\n","import { Component, input } from '@angular/core';\n\n@Component({\n  selector: 'lux-menu-section-title',\n  template: ''\n})\nexport class LuxMenuSectionTitleComponent {\n  luxTitle = input<string>('');\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-menu-trigger',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxMenuTriggerComponent {\n  constructor() {}\n}\n","import { AfterViewInit, Directive, ElementRef, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges, inject } from '@angular/core';\nimport { ReplaySubject, Subscription } from 'rxjs';\n\n@Directive({ selector: '[luxTabIndex]' })\nexport class LuxTabIndexDirective implements AfterViewInit, OnChanges, OnDestroy {\n  private elementRef = inject(ElementRef);\n  private renderer = inject(Renderer2);\n\n  private changesSubscription?: Subscription;\n  private changes$: ReplaySubject<SimpleChanges> = new ReplaySubject<SimpleChanges>(1);\n\n  @Input() luxTabIndex = '0';\n  @Input() luxApplyToParent = false;\n  @Input() luxApplyToChildren = true;\n  @Input() luxPotentialChildren: string[] = ['input', 'textarea', 'a', 'button', 'mat-select'];\n\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    this.changes$.next(simpleChanges);\n  }\n\n  ngAfterViewInit() {\n    this.updateElementsWithTabIndex();\n    // Dadurch verhindern wir, dass Changes vor afterViewInit zu etwaigen Fehlern führen könnten und erst danach aufgelöst werden\n    this.changesSubscription = this.changes$.subscribe(this.onChanges.bind(this));\n  }\n\n  ngOnDestroy() {\n    if (this.changesSubscription) {\n      this.changesSubscription.unsubscribe();\n    }\n  }\n\n  /**\n   * Eigener Listener für Änderungen, der erst nach dem AfterViewInit-Lifecycle greift.\n   * Sicherheitshalber, um evtl. noch unaufgelösten Elementen zu entgehen.\n   * @param simpleChanges\n   */\n  private onChanges(simpleChanges: SimpleChanges) {\n    if (simpleChanges['luxTabIndex']) {\n      this.updateElementsWithTabIndex();\n    }\n  }\n\n  /**\n   * Aktualisiert den Tabindex für\n   *  - das Zielelement, wenn luxApplyToParent === true (default = false) ist\n   *  - potentielle Kindelemente, wenn luxApplyToChildren === true (default) ist\n   */\n  private updateElementsWithTabIndex() {\n    if (this.luxApplyToParent) {\n      this.setTabIndexForElement(this.elementRef.nativeElement);\n    }\n\n    if (this.luxApplyToChildren) {\n      this.luxPotentialChildren.forEach((childQuery: string) => this.setTabIndexByQuery(childQuery));\n    }\n  }\n\n  private setTabIndexByQuery(elementQuery: string) {\n    const elements = this.elementRef.nativeElement.querySelectorAll(elementQuery);\n    for (const element of elements) {\n      this.setTabIndexForElement(element);\n    }\n  }\n\n  private setTabIndexForElement(element: HTMLElement) {\n    this.renderer.setAttribute(element, 'tabIndex', this.luxTabIndex);\n  }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-app-header-ac-action-nav-item-custom',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxAppHeaderAcActionNavItemCustomComponent {\n  constructor() {}\n}\n","import { NgClass } from '@angular/common';\nimport { Component, ContentChild, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { LuxButtonComponent } from '../../../../../lux-action/lux-button/lux-button.component';\nimport { LuxThemePalette } from '../../../../../lux-util/lux-colors.enum';\nimport { LuxAppHeaderAcActionNavItemCustomComponent } from './lux-app-header-ac-action-nav-item-custom.component';\n\n@Component({\n  selector: 'lux-app-header-ac-action-nav-item',\n  templateUrl: './lux-app-header-ac-action-nav-item.component.html',\n  imports: [NgClass, LuxButtonComponent]\n})\nexport class LuxAppHeaderAcActionNavItemComponent {\n  @Input() luxLabel = '';\n  @Input() luxIconName?: string;\n  @Input() luxColor: LuxThemePalette;\n  @Input() luxDisabled = false;\n  @Input() luxTagId?: string;\n\n  @Output() luxClicked = new EventEmitter<Event>();\n\n  @ViewChild(LuxButtonComponent, { static: false }) buttonComponent?: LuxButtonComponent;\n  @ContentChild(LuxAppHeaderAcActionNavItemCustomComponent) customComponent?: LuxAppHeaderAcActionNavItemCustomComponent;\n\n  constructor() {}\n}\n","@if (!customComponent) {\n<lux-button\n  [ngClass]=\"{ 'lux-button-with-label': !!luxLabel }\"\n  [luxLabel]=\"luxLabel\"\n  [luxIconName]=\"luxIconName\"\n  [luxColor]=\"luxColor\"\n  [luxRaised]=\"false\"\n  [luxRounded]=\"true\"\n  [luxDisabled]=\"luxDisabled\"\n  [luxTagId]=\"luxTagId\"\n  (luxClicked)=\"luxClicked.emit($event)\"\n  class=\"lux-action-nav-item-btn\"\n>\n</lux-button>\n}\n<ng-content select=\"lux-app-header-ac-action-nav-item-custom\"></ng-content>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-app-header-action-nav-item-custom',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxAppHeaderActionNavItemCustomComponent {\n  constructor() {}\n}\n","import { NgClass } from '@angular/common';\nimport { Component, ContentChild, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { LuxButtonComponent } from '../../../../../lux-action/lux-button/lux-button.component';\nimport { LuxThemePalette } from '../../../../../lux-util/lux-colors.enum';\nimport { LuxAppHeaderActionNavItemCustomComponent } from './lux-app-header-action-nav-item-custom.component';\n\n@Component({\n  selector: 'lux-app-header-action-nav-item',\n  templateUrl: './lux-app-header-action-nav-item.component.html',\n  imports: [NgClass, LuxButtonComponent]\n})\nexport class LuxAppHeaderActionNavItemComponent {\n  @Input() luxLabel = '';\n  @Input() luxIconName?: string;\n  @Input() luxColor: LuxThemePalette;\n  @Input() luxDisabled = false;\n  @Input() luxTagId?: string;\n\n  @Output() luxClicked = new EventEmitter<Event>();\n\n  @ViewChild(LuxButtonComponent, { static: false }) buttonComponent?: LuxButtonComponent;\n  @ContentChild(LuxAppHeaderActionNavItemCustomComponent) customComponent?: LuxAppHeaderActionNavItemCustomComponent;\n\n  constructor() {}\n}\n","@if (!customComponent) {\n<lux-button\n  [ngClass]=\"{ 'lux-button-with-label': !!luxLabel }\"\n  [luxLabel]=\"luxLabel\"\n  [luxIconName]=\"luxIconName\"\n  [luxColor]=\"luxColor\"\n  [luxRaised]=\"false\"\n  [luxRounded]=\"false\"\n  [luxDisabled]=\"luxDisabled\"\n  [luxTagId]=\"luxTagId\"\n  (luxClicked)=\"luxClicked.emit($event)\"\n  class=\"lux-action-nav-item-button\"\n>\n</lux-button>\n}\n<ng-content select=\"lux-app-header-action-nav-item-custom\"></ng-content>\n","import { AfterViewInit, Directive, HostListener, inject, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { MatTooltip, TooltipPosition } from '@angular/material/tooltip';\nimport { LuxButtonComponent } from '../../lux-action/lux-button/lux-button.component';\nimport { LuxLinkPlainComponent } from '../../lux-action/lux-link-plain/lux-link-plain.component';\nimport { LuxLinkComponent } from '../../lux-action/lux-link/lux-link.component';\nimport { LuxMenuComponent } from '../../lux-action/lux-menu/lux-menu.component';\nimport { LuxAppHeaderAcActionNavItemComponent } from '../../lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-action-nav/lux-app-header-ac-action-nav-item/lux-app-header-ac-action-nav-item.component';\nimport { LuxAppHeaderActionNavItemComponent } from '../../lux-layout/lux-app-header/lux-app-header-subcomponents/lux-app-header-action-nav/lux-app-header-action-nav-item/lux-app-header-action-nav-item.component';\n\n@Directive({\n  selector: '[luxTooltip]',\n  exportAs: 'luxTooltip'\n})\nexport class LuxTooltipDirective extends MatTooltip implements OnChanges, AfterViewInit {\n  @Input() luxTooltip = '???';\n  @Input() luxTooltipHideDelay = 0;\n  @Input() luxTooltipShowDelay = 0;\n  @Input() luxTooltipPosition: TooltipPosition = 'above';\n  @Input() luxTooltipDisabled = false;\n\n  luxButton = inject(LuxButtonComponent, { optional: true });\n  luxLink = inject(LuxLinkComponent, { optional: true });\n  luxLinkPlain = inject(LuxLinkPlainComponent, { optional: true });\n  luxActionNavAc = inject(LuxAppHeaderAcActionNavItemComponent, { optional: true });\n  luxActionNav = inject(LuxAppHeaderActionNavItemComponent, { optional: true });\n  luxMenu = inject(LuxMenuComponent, { optional: true });\n\n  @HostListener('longpress') _handleLongPress() {\n    super.show(this.luxTooltipShowDelay);\n  }\n\n  @HostListener('document:keydown.escape') _handleEscape() {\n    super.hide(0);\n  }\n\n  override show(delay?: number): void {\n    super.show(delay || this.luxTooltipShowDelay);\n  }\n\n  override hide(delay?: number): void {\n    super.hide(delay || this.luxTooltipHideDelay);\n  }\n\n  override ngAfterViewInit(): void {\n    if (this.luxButton) {\n      this.luxButton.tooltipDirective = this;\n    }\n    if (this.luxLink) {\n      this.luxLink.tooltipDirective = this;\n    }\n    if (this.luxLinkPlain) {\n      this.luxLinkPlain.tooltipDirective = this;\n    }\n    if (this.luxActionNavAc && this.luxActionNavAc.buttonComponent) {\n      \n      this.luxActionNavAc.buttonComponent.tooltipDirective = this;\n    }\n    if (this.luxActionNav && this.luxActionNav.buttonComponent) {\n      \n      this.luxActionNav.buttonComponent.tooltipDirective = this;\n    }\n    if (this.luxMenu && this.luxMenu.defaultTriggerComponent) {\n      this.luxMenu.defaultTriggerComponent.tooltipDirective = this;\n    }\n      \n    super.ngAfterViewInit();\n  }\n\n  ngOnChanges(_simpleChanges: SimpleChanges) {\n    this.message = this.luxTooltip;\n    this.hideDelay = this.luxTooltipHideDelay;\n    this.showDelay = this.luxTooltipShowDelay;\n    this.position = this.luxTooltipPosition;\n    this.disabled = this.luxTooltipDisabled;\n  }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { MatDivider } from '@angular/material/divider';\n\n@Component({\n  selector: 'lux-divider',\n  templateUrl: './lux-divider.component.html',\n  styleUrls: ['./lux-divider.component.scss'],\n  imports: [MatDivider],\n  host: {\n    '[class.lux-vertical-divider]': 'luxVertical()',\n    '[class.lux-horizontal-divider]': '!luxVertical()'\n  }\n  ,changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LuxDividerComponent {\n  luxInset = input<boolean>(false);\n  luxVertical = input<boolean>(false);\n\n  constructor() {}\n}\n","<mat-divider [inset]=\"luxInset()\" [vertical]=\"luxVertical()\" class=\"lux-divider\"> </mat-divider>\n","export enum LuxConsentPurpose {\n  Essential = 'essential',\n  Preferences = 'preferences',\n  Statistics = 'statistics',\n  Marketing = 'marketing',\n  Other = 'other'\n}\n\nexport enum LuxConsentStorageType {\n  Cookie = 'Cookie',\n  LocalStorage = 'Local Storage',\n  SessionStorage = 'Session Storage'\n}\n\nexport interface LuxConsentEntry {\n  type: LuxConsentStorageType;\n  name: string;\n  /** Wenn true, gilt der `name` als Prefix für dynamische Keys (z. B. \"[lux-tour-hint-dsa]\") */\n  nameIsPrefix?: boolean;\n  processingCountry: string;\n  purpose: LuxConsentPurpose;\n  duration: string;\n  description: string;\n}\n\nexport interface LuxConsentState {\n  purposes: LuxConsentPurpose[];\n  timestamp: string;\n}\n\nexport interface LuxCookieCategory {\n  purpose: LuxConsentPurpose;\n  name: string;\n  enabled: boolean;\n  disabled: boolean;\n  hint: string;\n}\n","/**\n * Config-Interface für die Dialoge.\n */\nexport interface ILuxDialogConfig {\n  width?: string;\n  height?: string;\n  minWidth?: string;\n  minHeight?: string;\n  maxWidth?: string;\n  maxHeight?: string;\n  panelClass?: string | string[];\n  disableClose?: boolean;\n}\n\nexport const DEFAULT_DIALOG_CONF: ILuxDialogConfig = {\n  width: 'auto',\n  height: 'auto',\n  panelClass: [],\n  disableClose: true\n};\n","import { TemplateRef } from '@angular/core';\nimport { ILuxDialogAction } from './lux-dialog-action.interface';\nimport { ILuxDialogConfig } from './lux-dialog-config.interface';\n\nexport declare type LuxDialogDefaultButton = 'confirm' | 'decline' | undefined;\n\n/**\n * Config-Interface für die LuxDialogPresetComponent.\n */\nexport interface ILuxDialogPresetConfig extends ILuxDialogConfig {\n  confirmAction?: ILuxDialogAction;\n  declineAction?: ILuxDialogAction;\n  defaultButton?: LuxDialogDefaultButton;\n  title?: string;\n  iconName?: string;\n  content?: string;\n  contentTemplate?: TemplateRef<any>;\n}\n\nexport const DEFAULT_DIALOG_PRESET_CONF: ILuxDialogPresetConfig = {\n  width: 'auto',\n  height: 'auto',\n  title: '',\n  content: '',\n  panelClass: [],\n  disableClose: true,\n  contentTemplate: undefined,\n  confirmAction: {\n    label: '',\n    flat: true,\n    color: 'primary'\n  },\n  declineAction: {\n    label: '',\n    outlined: true,\n    color: 'primary'\n  },\n  defaultButton: undefined\n};\n","import { Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\n@Injectable()\nexport class LuxDialogRef<T = any> {\n  _matDialogRef!: MatDialogRef<any>;\n  _dialogConfirmed = new ReplaySubject<void>(1);\n  _dialogDeclined = new ReplaySubject<void>(1);\n  _dialogClosed = new ReplaySubject<any>(1);\n  _data: any;\n\n  /**\n   * Gibt die Component, die in dem Dialog angezeigt wird wieder.\n   */\n  get componentInstance(): any {\n    return this._matDialogRef.componentInstance;\n  }\n\n  /**\n   * Damit hier ein Wert abgegeben wird, muss \"closeDialog\" ein Result mit dem Wert \"true\" übergeben bekommen.\n   */\n  get dialogConfirmed(): Observable<void> {\n    return this._dialogConfirmed.asObservable();\n  }\n\n  /**\n   * Damit hier ein Wert abgegeben wird, muss \"closeDialog\" ein Result mit dem Wert \"false\" übergeben bekommen.\n   */\n  get dialogDeclined(): Observable<void> {\n    return this._dialogDeclined.asObservable();\n  }\n\n  /**\n   * Wird beim Beenden des Dialogs ausgelöst.\n   */\n  get dialogClosed(): Observable<any> {\n    return this._dialogClosed.asObservable();\n  }\n\n  /**\n   * Enthält die Daten für die Dialog-Component.\n   */\n  get data(): T {\n    return this._data;\n  }\n\n  constructor() {}\n\n  /**\n   * (Re-)Initialisiert diese Dialog-Referenz neu.\n   * @param matDialogRef\n   * @param data\n   */\n  init(matDialogRef: MatDialogRef<any>, data: any) {\n    this._matDialogRef = matDialogRef;\n    this._dialogConfirmed = new ReplaySubject(1);\n    this._dialogDeclined = new ReplaySubject(1);\n    this._dialogClosed = new ReplaySubject(1);\n    this._data = data;\n\n    if (!this._matDialogRef.disableClose) {\n      this._matDialogRef.backdropClick().subscribe(this.backdropFn(this._dialogClosed));\n      this._matDialogRef.keydownEvents().subscribe((event) => {\n        if (event.key === 'Escape') {\n          this.closeDialog();\n        }\n      });\n    }\n  }\n\n  /**\n   * @deprecated Wird nicht mehr benötigt, da die Dialogreferenz nicht mehr zwischengespeichert wird.\n   */\n  storeDialogRef() {\n  }\n\n  /**\n   * @deprecated Wird nicht mehr benötigt, da die Dialogreferenz nicht mehr zwischengespeichert wird.\n   */\n  restoreDialogRef() {\n  }\n\n  /**\n   * Schließt den Dialog und gibt nach Beenden die entsprechenden Events aus.\n   * @param result\n   */\n  closeDialog(result?: any) {\n    this._matDialogRef.close(result);\n    this._matDialogRef\n      .afterClosed()\n      .pipe(take(1))\n      .subscribe((dialogResult: any) => {\n        if (dialogResult === true) {\n          this._dialogConfirmed.next();\n        } else if (dialogResult === false) {\n          this._dialogDeclined.next();\n        }\n        this._dialogClosed.next(result);\n      });\n  }\n\n  private backdropFn(dialogClosed: ReplaySubject<void>) {\n    const myDialogClosed = dialogClosed;\n    return () => {\n      myDialogClosed.next(undefined);\n    };\n  }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-dialog-actions',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxDialogActionsComponent {\n  constructor() {}\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-dialog-content',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxDialogContentComponent {\n  constructor() {}\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-dialog-title',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxDialogTitleComponent {\n  constructor() {}\n}\n","import {\n  BACKSPACE,\n  DELETE,\n  DOWN_ARROW,\n  END,\n  ENTER,\n  ESCAPE,\n  HOME,\n  LEFT_ARROW,\n  PAGE_DOWN,\n  PAGE_UP,\n  RIGHT_ARROW,\n  SPACE,\n  TAB,\n  UP_ARROW\n} from '@angular/cdk/keycodes';\nimport { HttpRequest } from '@angular/common/http';\nimport { FormArray, FormControl, FormGroup, UntypedFormArray, UntypedFormGroup } from '@angular/forms';\nimport { TranslocoService } from '@jsverse/transloco';\n\nexport class LuxUtil {\n  public static readonly ISO_8601_FULL = new RegExp('^\\\\d{4}-\\\\d\\\\d-\\\\d\\\\dT\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d(\\\\.\\\\d+)?(([+-]\\\\d\\\\d:\\\\d\\\\d)|Z)?$', 'i');\n\n  /**\n   * Diese Methode wirft einen Fehler, wenn der Wert nicht gesetzt wurde.\n   * @param name Ein Name.\n   * @param value Ein Wert.\n   */\n  public static assertNonNull(name: string, value: any) {\n    if (value === undefined || value === null) {\n      throw Error(`${name} should be initialized.`);\n    }\n  }\n\n  /**\n   * Liest aus einem Objekt ein bestimmtes Feld aus.\n   * Lässt sich auch über mehrere Unterobjekte verschachteln.\n   * Beispiele für propertyNamePath:\n   * \"value\"\n   * \"unterobjekt1.unterobjekt2.value\"\n   * @param el\n   * @param propertyNamePath\n   * @returns any\n   */\n  public static readPropertyValueFromObject(el: any, propertyNamePath: string): any {\n    let result = null;\n    if (el && propertyNamePath) {\n      const splitProperties = propertyNamePath.split('.');\n\n      if (splitProperties.length > 0) {\n        let tempObject = el;\n\n        for (const property of splitProperties) {\n          tempObject = tempObject[property];\n        }\n        result = tempObject;\n      } else {\n        result = el[propertyNamePath];\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Gibt eine von verschiedenen vordefinierten Fehlernachrichten passend zu den\n   * vorhandenen Fehlern der übergebenen FormControl zurück.\n   * @param tService Der TranslocoService.\n   * @param formControl\n   * @returns string\n   */\n  public static getErrorMessage(tService: TranslocoService, formControl: FormControl<any>): string {\n    if (formControl) {\n      if (formControl.hasError('required')) {\n        return tService.translate('luxc.util.error_message.required');\n      }\n\n      if (formControl.hasError('minlength')) {\n        return tService.translate('luxc.util.error_message.minlength', { minlength: formControl.getError('minlength').requiredLength });\n      }\n\n      if (formControl.hasError('maxlength')) {\n        return tService.translate('luxc.util.error_message.maxlength', { maxlength: formControl.getError('maxlength').requiredLength });\n      }\n\n      if (formControl.hasError('email')) {\n        return tService.translate('luxc.util.error_message.email');\n      }\n\n      if (formControl.hasError('min')) {\n        return tService.translate('luxc.util.error_message.min', { min: formControl.getError('min').min });\n      }\n\n      if (formControl.hasError('max')) {\n        return tService.translate('luxc.util.error_message.max', { max: formControl.getError('max').max });\n      }\n\n      if (formControl.hasError('pattern')) {\n        const pattern = formControl.getError('pattern').requiredPattern;\n        return tService.translate('luxc.util.error_message.pattern', { pattern: pattern.substring(1, pattern.length - 1) });\n      }\n    }\n    return '';\n  }\n\n  /**\n   * Prüft, ob der übergebene Wert ein JS-Datum ist.\n   * @param value\n   * @returns boolean\n   */\n  public static isDate(value: any) {\n    return value instanceof Date && !isNaN(value.valueOf());\n  }\n\n  /**\n   * Diese Methode liefert ein neues Date-Objekt auf Basis des übergebenen Date-Objekts zurück.\n   * Das zurückgelieferte Date-Objekt hat denselben Tag, Monat und das Jahr wie das übergebene Date-Objekt,\n   * die Stunden, Minuten und Sekunden sind jedoch 0.\n   *\n   * Sollte der Methode kein Date-Objekt übergeben werden, wird ein neues Date-Objekt erzeugt.\n   * @param date oder nichts\n   * @returns date\n   */\n  public static newDateWithoutTime(date = new Date()): Date {\n    const result = new Date(0);\n    result.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n\n    return result;\n  }\n\n  /**\n   * Zeigt die Validierungsfehler der einzelnen FormControls innerhalb der FormGroup an.\n   * Wenn innerhalb der übergebenen FormGroup weitere Formgroups enthalten sind, werden\n   * diese ebenfalls validiert.\n   * @param formGroup\n   */\n  public static showValidationErrors(formGroup: FormGroup | UntypedFormGroup) {\n    Object.keys(formGroup.controls).forEach((field) => {\n      const control = formGroup.get(field);\n      if (control instanceof FormGroup || control instanceof UntypedFormGroup) {\n        this.showValidationErrors(control);\n      } else if (control instanceof FormArray || control instanceof UntypedFormArray) {\n        control.controls.forEach((current) => {\n          if (current instanceof FormGroup || current instanceof UntypedFormGroup) {\n            this.showValidationErrors(current);\n          } else if (current) {\n            control.markAsTouched({ onlySelf: true });\n          }\n        });\n      } else if (control) {\n        control.markAsTouched({ onlySelf: true });\n      }\n    });\n  }\n\n  /**\n   * Diese Methode scrollt zu der übergebenen Id.\n   * @param id Eine Element-Id (z.B. <tag id=\"myId\">...)\n   */\n  public static goTo(id: string): void {\n    const element = document.querySelector('#' + id);\n    if (element) {\n      setTimeout(() => {\n        element.scrollIntoView();\n      });\n    }\n  }\n\n  /**\n   * Diese Methode scrollt zum übergebenen Selector.\n   * @param selector Ein Selector. Sollte kein Selector übergeben werden, wird nach oben vom Inhaltsbereich gescrollt.\n   */\n  public static goToTop(selector = 'div.lux-app-content-container') {\n    const element = document.querySelector(selector);\n    if (element) {\n      setTimeout(() => {\n        element.scrollIntoView();\n      });\n    }\n  }\n\n  /**\n   * Diese Methode verhindert, dass ein Event weiterverarbeitet wird.\n   * @param event Ein beliebiges Event.\n   */\n  public static stopEventPropagation(event: Event) {\n    if (event) {\n      if (event.stopPropagation) {\n        event.stopPropagation();\n      } else {\n        console.log('Die Funktion \"event.stopPropagation()\" wird nicht unterstützt.');\n      }\n    }\n  }\n\n  public static isNumber(toCheck: any): boolean {\n    return !Number.isNaN(+toCheck);\n  }\n\n  public static base64ToArrayBuffer(data: string) {\n    const binaryString = window.atob(data);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die ArrowLeft-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyArrowLeft(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'ArrowLeft' || key === LEFT_ARROW;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die ArrowUp-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyArrowUp(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'ArrowUp' || key === UP_ARROW;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die ArrowRight-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyArrowRight(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'ArrowRight' || key === RIGHT_ARROW;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die ArrowDown-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyArrowDown(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'ArrowDown' || key === DOWN_ARROW;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die Home-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyHome(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'Home' || key === HOME;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die End-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyEnd(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'End' || key === END;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die PageDown-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyPageDown(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'PageDown' || key === PAGE_DOWN;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die PageUp-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyPageUp(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'PageUp' || key === PAGE_UP;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die Enter-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyEnter(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'Enter' || key === ENTER;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die Tab-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyTab(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'Tab' || key === TAB;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die Backspace-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyBackspace(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'Backspace' || key === BACKSPACE;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die Space-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeySpace(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'Space' || key === 'Spacebar' || key === ' ' || key === SPACE;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die Delete-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyDelete(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'Delete' || key === 'Del' || key === DELETE;\n  }\n\n  /**\n   * Diese Methode liefert true zurück, wenn es sich um die Escape-Taste handelt, false sonst.\n   * @param event Ein beliebiges KeyboardEvent\n   */\n  public static isKeyEscape(event: KeyboardEvent) {\n    const key = this.getKey(event);\n\n    return key === 'Escape' || key === 'Esc' || key === ESCAPE;\n  }\n\n  private static getKey(event: KeyboardEvent): string | number {\n    return event.key || event.keyCode;\n  }\n\n  /**\n   * Entfernt nicht-ASCII-Chars aus dem String (Beim IE wichtig, dieser fügt gerne versteckte Steuerzeichen\n   * in Input-Feldern an die Strings).\n   * @param dateString\n   */\n  public static stringWithoutASCIIChars(dateString: string): string {\n    const exp = new RegExp('[^A-Za-z 0-9.,?\"!@#$%^&*()-_=+;:<>\\\\/\\\\\\\\|}{\\\\[\\\\]`~]*', 'g');\n    return dateString.replace(exp, '');\n  }\n\n  /**\n   * Diese Methode liefert für die akzeptierten Dateitypen einen I18N-Nachrichtenteil zurück.\n   *\n   * Beispiel: acceptTypes = .pdf,.txt,.png\n   * de = PDF, TXT oder PNG\n   * en = PDF, TXT or PNG\n   * @param tService Der TranslocoService.\n   * @param acceptTypes Die akzeptierten Dateitypen (z.b. .pdf,.txt).\n   */\n  public static getAcceptTypesAsMessagePart(tService: TranslocoService, acceptTypes: string): string {\n    let message = '';\n\n    if (acceptTypes) {\n      let newAccept = acceptTypes;\n      newAccept = newAccept.replace(/\\./g, '');\n      newAccept = newAccept.replace(/\\*/g, '');\n\n      let typesArr = newAccept.split(',');\n      typesArr = typesArr.map((str) => str.trim().toUpperCase());\n\n      for (let i = 0; i < typesArr.length; i++) {\n        message += typesArr[i].toUpperCase();\n\n        if (i === typesArr.length - 2) {\n          message += tService.translate('luxc.file.upload.file.type.concat');\n        } else if (typesArr.length > 1 && i < typesArr.length - 2) {\n          message += ', ';\n        }\n      }\n    }\n\n    return message;\n  }\n\n  /**\n   * Diese Methode prüft, ob es sich um einen Asset-Request handelt. Dies ist der Fall wenn in der URL \"/assets/\" vorkommt.\n   * @param request\n   */\n\n  public static checkIfRequestIsAssetRequest(request: HttpRequest<any>): boolean {\n    return request.url.includes('/assets/');\n  }\n}\n","import { CdkScrollable } from '@angular/cdk/scrolling';\nimport { AfterViewInit, Component, ElementRef, Input, OnInit, ViewChild, inject } from '@angular/core';\nimport { MatDialogActions, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxAriaLabelDirective } from '../../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxIconComponent } from '../../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxUtil } from '../../../lux-util/lux-util';\nimport { LuxDialogRef } from '../lux-dialog-model/lux-dialog-ref.class';\n\n/**\n * Diese Component stellt eine Grundstruktur für Dialoge dar und kann von Aufrufern als Alternative\n * zu LuxDialogPresetComponent genutzt werden (wenn andere Inhalte, etc. gewünscht sind).\n */\n@Component({\n  selector: 'lux-dialog-structure',\n  templateUrl: './lux-dialog-structure.component.html',\n  imports: [LuxAriaLabelDirective, LuxIconComponent, MatDialogTitle, CdkScrollable, MatDialogContent, MatDialogActions, TranslocoPipe]\n})\nexport class LuxDialogStructureComponent implements OnInit, AfterViewInit {\n  private luxDialogRef = inject<LuxDialogRef<any>>(LuxDialogRef);\n\n  @ViewChild('dialogBase', { read: ElementRef, static: true }) dialogBase!: ElementRef;\n\n  disableClose!: boolean;\n\n  private _iconName = '';\n  @Input() set luxDialogIcon(name: string | undefined) {\n    if (name) this._iconName = name;\n  }\n  get luxDialogIcon() {\n    return this._iconName;\n  }\n\n  ngOnInit() {\n    this.disableClose = this.luxDialogRef?._matDialogRef?.disableClose ?? false;\n  }\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('dialogBase', this.dialogBase);\n\n    // den Fokus auf den Dialog selbst setzen (damit eine Tastatur-Steuerung von oben nach unten stattfinden kann)\n    (this.dialogBase.nativeElement as HTMLHeadingElement).focus();\n  }\n\n  onClose() {\n    this.luxDialogRef.closeDialog();\n  }\n}\n","<div class=\"lux-dialog lux-flex lux-flex-col lux-flex-auto lux-border-box\" #dialogBase>\n  <!--\n  Hier wird explizit auf die Direktive [mat-dialog-close] verzichtet,\n  da diese aktuell NICHT das dialogClosed-Event wirft. Dieses Event wird\n  jedoch benötigt, damit geschachtelte Dialoge (z.B. Löschbestätigung der\n  lux-file-upload-Komponente) funktionieren.\n  -->\n  @if (!disableClose) {\n  <div\n    (click)=\"onClose()\"\n    (keydown.enter)=\"onClose()\"\n    aria-label=\"\"\n    role=\"button\"\n    class=\"lux-icon-close lux-flex lux-align-self-end\"\n    tabindex=\"0\"\n    luxAriaLabel=\"{{ 'luxc.dialog.btn.close.arialabel' | transloco }}\"\n  >\n    <lux-icon luxIconName=\"lux-interface-delete-1\" luxIconSize=\"1x\"></lux-icon>\n  </div>\n  } @if (luxDialogIcon) {\n  <lux-icon\n    [luxIconName]=\"luxDialogIcon\"\n    luxIconSize=\"3x\"\n    luxMargin=\"16px\"\n    class=\"lux-color-blue lux-dialog-icon lux-flex lux-align-self-center\"\n  ></lux-icon>\n  }\n  <h2 mat-dialog-title class=\"lux-dialog-title lux-flex lux-flex-initial lux-place-content-start lux-items-start\">\n    <ng-content select=\"lux-dialog-title\"></ng-content>\n  </h2>\n  <div mat-dialog-content class=\"lux-dialog-content lux-flex lux-flex-grow-1 lux-flex-shrink-1 lux-flex-basis-full\">\n    <ng-content select=\"lux-dialog-content\"></ng-content>\n  </div>\n  <div mat-dialog-actions class=\"lux-dialog-actions lux-flex lux-flex-auto lux-flex-wrap lux-place-content-center lux-items-center\">\n    <ng-content select=\"lux-dialog-actions\"></ng-content>\n  </div>\n</div>\n","import { NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, Component, OnInit, ViewChild, inject } from '@angular/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../../../lux-action/lux-button/lux-button.component';\nimport { LuxTabIndexDirective } from '../../../lux-directives/lux-tabindex/lux-tab-index.directive';\nimport { ILuxDialogPresetConfig } from '../lux-dialog-model/lux-dialog-preset-config.interface';\nimport { LuxDialogRef } from '../lux-dialog-model/lux-dialog-ref.class';\nimport { LuxDialogActionsComponent } from '../lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-actions.component';\nimport { LuxDialogContentComponent } from '../lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-content.component';\nimport { LuxDialogTitleComponent } from '../lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-title.component';\nimport { LuxDialogStructureComponent } from '../lux-dialog-structure/lux-dialog-structure.component';\n\n/**\n * Diese Component wird von dem LuxDialogService zur Darstellung via \"open\" genutzt und nimmt ein Config-Objekt\n * vom Typ LuxDialogConfig entgegen.\n */\n@Component({\n  selector: 'lux-dialog-preset',\n  templateUrl: './lux-dialog-preset.component.html',\n  imports: [\n    LuxDialogStructureComponent,\n    LuxDialogTitleComponent,\n    LuxDialogContentComponent,\n    NgTemplateOutlet,\n    LuxDialogActionsComponent,\n    LuxButtonComponent,\n    LuxTabIndexDirective,\n    TranslocoPipe\n  ]\n})\nexport class LuxDialogPresetComponent implements OnInit, AfterViewInit {\n  dialogRef = inject<LuxDialogRef<ILuxDialogPresetConfig>>(LuxDialogRef);\n\n  @ViewChild('confirmButton') confirmButton?: LuxButtonComponent;\n  @ViewChild('declineButton') declineButton?: LuxButtonComponent;\n\n  data?: ILuxDialogPresetConfig;\n  defaultButton?: LuxButtonComponent;\n\n  ngOnInit() {\n    this.data = this.dialogRef.data;\n  }\n\n  ngAfterViewInit() {\n    this.initDefaultButton();\n\n    setTimeout(() => {\n      (this.defaultButton?.elementRef?.nativeElement as HTMLElement)?.querySelector('button')?.focus();\n    });\n  }\n\n  /**\n   * Schließt den Dialog beim \"positiven\" Beenden des Dialogs mit dem Wert true.\n   */\n  onConfirmClick() {\n    this.dialogRef.closeDialog(true);\n  }\n\n  /**\n   * Schließt den Dialog beim \"negativen\" Beenden des Dialogs mit dem Wert false.\n   */\n  onDeclineClick() {\n    this.dialogRef.closeDialog(false);\n  }\n\n  private initDefaultButton() {\n    switch (this.data?.defaultButton) {\n      case 'confirm':\n        this.defaultButton = this.confirmButton;\n        break;\n      case 'decline':\n        this.defaultButton = this.declineButton;\n        break;\n      default:\n        this.defaultButton = undefined;\n    }\n  }\n}\n","@if (data) {\n<lux-dialog-structure [luxDialogIcon]=\"data.iconName\">\n  <lux-dialog-title>{{ data.title }}</lux-dialog-title>\n  <lux-dialog-content>\n    @if (data.contentTemplate) {\n    <ng-container *ngTemplateOutlet=\"data.contentTemplate\"></ng-container>\n    } @if (data.content && !data.contentTemplate) {\n    {{ data.content }}\n    }\n  </lux-dialog-content>\n  <lux-dialog-actions>\n    @if (data.confirmAction) {\n    <lux-button\n      class=\"lux-mr-4 lux-dialog-preset-confirm\"\n      luxTabIndex=\"0\"\n      [luxPotentialChildren]=\"['button']\"\n      luxLabel=\"{{ data.confirmAction.label || ('luxc.dialog-preset.ok' | transloco) }}\"\n      [luxColor]=\"data.confirmAction.color\"\n      [luxRaised]=\"data.confirmAction.raised\"\n      [luxFlat]=\"data.confirmAction.flat\"\n      [luxStroked]=\"data.confirmAction.outlined\"\n      [luxIconName]=\"data.confirmAction.iconName\"\n      [luxTagId]=\"data.confirmAction.tagId\"\n      [luxDisabled]=\"data.confirmAction.disabled\"\n      [luxRounded]=\"data.confirmAction.rounded\"\n      (luxClicked)=\"onConfirmClick()\"\n      #confirmButton\n    >\n    </lux-button>\n    } @if (data.declineAction) {\n    <lux-button\n      class=\"lux-dialog-preset-decline\"\n      luxTabIndex=\"0\"\n      [luxPotentialChildren]=\"['button']\"\n      luxLabel=\"{{ data.declineAction.label || ('luxc.dialog-preset.cancel' | transloco) }}\"\n      [luxColor]=\"data.declineAction.color\"\n      [luxRaised]=\"data.declineAction.raised\"\n      [luxFlat]=\"data.declineAction.flat\"\n      [luxStroked]=\"data.declineAction.outlined\"\n      [luxIconName]=\"data.declineAction.iconName\"\n      [luxTagId]=\"data.declineAction.tagId\"\n      [luxDisabled]=\"data.declineAction.disabled\"\n      [luxRounded]=\"data.declineAction.rounded\"\n      (luxClicked)=\"onDeclineClick()\"\n      #declineButton\n    >\n    </lux-button>\n    }\n  </lux-dialog-actions>\n</lux-dialog-structure>\n}\n","import { ComponentType } from '@angular/cdk/portal';\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DEFAULT_DIALOG_CONF, ILuxDialogConfig } from './lux-dialog-model/lux-dialog-config.interface';\nimport { DEFAULT_DIALOG_PRESET_CONF, ILuxDialogPresetConfig } from './lux-dialog-model/lux-dialog-preset-config.interface';\nimport { LuxDialogRef } from './lux-dialog-model/lux-dialog-ref.class';\nimport { LuxDialogPresetComponent } from './lux-dialog-preset/lux-dialog-preset.component';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxDialogService {\n  private parentInjector = inject(Injector);\n  private matDialog = inject(MatDialog);\n\n  /**\n   * Öffnet einen Dialog basierend auf der übergebenen Component und den entsprechenden Daten.\n   * @param component\n   * @param config\n   * @param data\n   */\n  openComponent<T>(component: ComponentType<any>, config?: ILuxDialogConfig, data?: T): LuxDialogRef<T> {\n    return this.handleOpen(component, config, data, DEFAULT_DIALOG_CONF);\n  }\n\n  /**\n   * @deprecated Wird nicht mehr benötigt, da die Dialogreferenz nicht mehr zwischengespeichert wird.\n   */\n  storeDialogRef() {\n  }\n\n  /**\n   * @deprecated Wird nicht mehr benötigt, da die Dialogreferenz nicht mehr zwischengespeichert wird.\n   */\n  restoreDialogRef() {\n  }\n\n  /**\n   * Öffnet einen Dialog basierend auf der LuxDialogComponent und der LuxDialogConfig.\n   * @param config\n   */\n  open<T>(config?: ILuxDialogPresetConfig): LuxDialogRef<T> {\n    // Eine Dialog-Instanz erzeugen, als Data übergeben wir hier noch einmal die Config\n    return this.handleOpen(LuxDialogPresetComponent, config, config, DEFAULT_DIALOG_PRESET_CONF);\n  }\n\n  /**\n   * Prüft, ob bereits ein Dialog geöffnet ist und etwaige CSS-Klassen für den Dialog gegeben sind.\n   * Anschließend wird der Dialog mit den übergebenen Config-Optionen und Data-Informationen geöffnet.\n   * @param component\n   * @param config\n   * @param data\n   * @param defaultConfig\n   */\n  private handleOpen(\n    component: ComponentType<any>,\n    config?: ILuxDialogConfig,\n    data?: any,\n    defaultConfig: ILuxDialogConfig | ILuxDialogPresetConfig = DEFAULT_DIALOG_CONF\n  ): LuxDialogRef<any> {\n      // Wenn keine Config übergeben ist, die defaultConfig nehmen\n      config = config ? config : defaultConfig;\n\n      // Die CSS-Klassen fürs Panel herausfinden\n      const panelClass = ['lux-dialog'];\n      if (config.panelClass) {\n        if (Array.isArray(config.panelClass)) {\n          panelClass.push(...config.panelClass);\n        } else {\n          panelClass.push(config.panelClass);\n        }\n      }\n\n      // Workaround: https://github.com/IHK-GfI/lux-components-workspace/issues/3\n      // Blocked aria-hidden on an element because its descendant retained focus. \n      // The focus must not be hidden from assistive technology users. \n      // Avoid using aria-hidden on a focused element or its ancestor. \n      // Consider using the inert attribute instead, which will also prevent focus. \n      // For more details, see the aria-hidden section of the WAI-ARIA specification at https://w3c.github.io/aria/#aria-hidden.\n      // Element with focus: ...\n      // Ancestor with aria-hidden: <app-root>\n      const activeElement = document.activeElement as HTMLElement;\n      if (activeElement) {\n        activeElement.blur();\n      }\n\n      // Neue LuxDialogRef-Instanz für diesen Dialog erstellen\n      const dialogRef = new LuxDialogRef();\n      const injector = Injector.create({parent: this.parentInjector, providers: [{provide: LuxDialogRef, useValue: dialogRef}]});\n\n      // Dialog öffnen und Konfiguration übergeben\n      const matDialogRef = this.matDialog.open(component, {\n        injector,\n        width: config.width,\n        height: config.height,\n        minWidth: config.minWidth,\n        minHeight: config.minHeight,\n        maxWidth: config.maxWidth,\n        maxHeight: config.maxHeight,\n        autoFocus: false,\n        restoreFocus: true,\n        disableClose: config.disableClose,\n        panelClass\n      });\n\n      matDialogRef.afterClosed().subscribe(() => {\n        if (activeElement) {\n          activeElement.focus();\n        }\n      });\n\n      dialogRef.init(matDialogRef, data);\n\n\n    return dialogRef;\n  }\n}\n","import { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';\nimport { inject, Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, filter, Observable, Subscription } from 'rxjs';\nimport { LuxConsoleService } from './lux-console.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxMediaQueryObserverService implements OnDestroy {\n  private breakpointObserver = inject(BreakpointObserver);\n  private logger = inject(LuxConsoleService);\n\n  // prettier-ignore\n  public static BREAKPOINTS_ALL: string[] = ['xs', 'sm', 'md', 'lg', 'xl', 'Handset', 'Tablet', 'Web', 'HandsetPortrait', 'TabletPortrait', 'WebPortrait', 'HandsetLandscape', 'TabletLandscape', 'WebLandscape'];\n  public static BREAKPOINTS_DEFAULT: string[] = ['xs', 'sm', 'md', 'lg', 'xl'];\n\n  protected _mediaQueryChanged: BehaviorSubject<string> = new BehaviorSubject<string>('');\n  protected _mediaQueryAllChanged: BehaviorSubject<string> = new BehaviorSubject<string>('');\n  protected _subscriptions: Subscription[] = [];\n\n  constructor() {\n    this.addQuerySubscription(Breakpoints.XSmall, 'xs');\n    this.addQuerySubscription(Breakpoints.Small, 'sm');\n    this.addQuerySubscription(Breakpoints.Medium, 'md');\n    this.addQuerySubscription(Breakpoints.Large, 'lg');\n    this.addQuerySubscription(Breakpoints.XLarge, 'xl');\n    this.addQuerySubscription(Breakpoints.Handset, 'Handset');\n    this.addQuerySubscription(Breakpoints.Tablet, 'Tablet');\n    this.addQuerySubscription(Breakpoints.Web, 'Web');\n    this.addQuerySubscription(Breakpoints.HandsetPortrait, 'HandsetPortrait');\n    this.addQuerySubscription(Breakpoints.TabletPortrait, 'TabletPortrait');\n    this.addQuerySubscription(Breakpoints.WebPortrait, 'WebPortrait');\n    this.addQuerySubscription(Breakpoints.HandsetLandscape, 'HandsetLandscape');\n    this.addQuerySubscription(Breakpoints.TabletLandscape, 'TabletLandscape');\n    this.addQuerySubscription(Breakpoints.WebLandscape, 'WebLandscape');\n  }\n\n  public get activeMediaQuery() {\n    return this._mediaQueryChanged.getValue();\n  }\n\n  ngOnDestroy() {\n    this._subscriptions.forEach((subscription: Subscription) => subscription.unsubscribe());\n    this._mediaQueryChanged.complete();\n  }\n\n  public getMediaQueryChangedAsObservable(...breakpoints: string[]): Observable<string> {\n    if (breakpoints.length === 0) {\n      return this._mediaQueryChanged.asObservable();\n    }\n    return this._mediaQueryAllChanged.asObservable().pipe(filter((value: string) => breakpoints.includes(value)));\n  }\n\n  public isSmaller(query: string): boolean {\n    return this.sizeAsNumber(this._mediaQueryChanged.getValue()) - this.sizeAsNumber(query) < 0;\n  }\n\n  public isSmallerOrEqual(query: string): boolean {\n    return this.sizeAsNumber(this._mediaQueryChanged.getValue()) - this.sizeAsNumber(query) <= 0;\n  }\n\n  public isGreater(query: string): boolean {\n    return this.sizeAsNumber(this._mediaQueryChanged.getValue()) - this.sizeAsNumber(query) > 0;\n  }\n\n  public isGreaterOrEqual(query: string): boolean {\n    return this.sizeAsNumber(this._mediaQueryChanged.getValue()) - this.sizeAsNumber(query) >= 0;\n  }\n\n  private sizeAsNumber(query: string): number {\n    switch (query) {\n      case 'xs':\n        return 1;\n      case 'sm':\n        return 2;\n      case 'md':\n        return 3;\n      case 'lg':\n        return 4;\n      case 'xl':\n        return 5;\n      default:\n        return 0;\n    }\n  }\n\n  public isXS(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.XSmall);\n  }\n\n  public isSM(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.Small);\n  }\n\n  public isMD(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.Medium);\n  }\n\n  public isLG(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.Large);\n  }\n\n  public isXL(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.XLarge);\n  }\n\n  public isHandset(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.Handset);\n  }\n\n  public isTablet(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.Tablet);\n  }\n\n  public isWeb(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.Web);\n  }\n\n  public isHandsetPortrait(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.HandsetPortrait);\n  }\n\n  public isTabletPortrait(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.TabletPortrait);\n  }\n\n  public isWebPortrait(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.WebPortrait);\n  }\n\n  public isHandsetLandscape(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.HandsetLandscape);\n  }\n\n  public isTabletLandscape(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.TabletLandscape);\n  }\n\n  public isWebLandscape(): boolean {\n    return this.breakpointObserver.isMatched(Breakpoints.WebLandscape);\n  }\n\n  private addQuerySubscription(breakpoint: string, breakpointString: string) {\n    this._subscriptions.push(\n      this.breakpointObserver.observe([breakpoint]).subscribe((state: BreakpointState) => {\n        if (state.matches) {\n          if (LuxMediaQueryObserverService.BREAKPOINTS_DEFAULT.includes(breakpointString)) {\n            this._mediaQueryChanged.next(breakpointString);\n          }\n          this._mediaQueryAllChanged.next(breakpointString);\n          this.logger.log(`MediaQuery [${breakpointString}] activated.`);\n        }\n      })\n    );\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { take } from 'rxjs';\nimport { LuxDialogService } from '../lux-popups/lux-dialog/lux-dialog.service';\nimport { LuxMediaQueryObserverService } from '../lux-util/lux-media-query-observer.service';\nimport { ILuxConsentDialogLauncher } from './lux-consent-dialog-launcher';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxConsentDialogLauncherService implements ILuxConsentDialogLauncher {\n  private readonly dialogService = inject(LuxDialogService);\n  private readonly mediaService = inject(LuxMediaQueryObserverService);\n\n  open(onClosed?: () => void, onError?: (error: unknown) => void): void {\n    // Lazy-load to avoid circular dependency with the dialog component.\n    import('./lux-consent-dialog.component')\n      .then(({ LuxConsentDialogComponent }) => {\n        const dialogRef = this.dialogService.openComponent(LuxConsentDialogComponent, {\n          maxWidth: '90%',\n          maxHeight: this.mediaService.isSmallerOrEqual('sm') ? '90%' : '70%',\n          minHeight: '40%',\n          panelClass: 'lux-consent-dialog'\n        });\n\n        if (onClosed) {\n          dialogRef.dialogClosed.pipe(take(1)).subscribe(() => {\n            onClosed();\n          });\n        }\n      })\n      .catch((error) => {\n        onError?.(error);\n      });\n  }\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { LuxConsentDialogLauncherService } from './lux-consent-dialog-launcher.service';\n\nexport interface ILuxConsentDialogLauncher {\n  open(onClosed?: () => void, onError?: (error: unknown) => void): void;\n}\n\nexport const LUX_CONSENT_DIALOG_LAUNCHER = new InjectionToken<ILuxConsentDialogLauncher>(\n  'LUX_CONSENT_DIALOG_LAUNCHER',\n  {\n    providedIn: 'root',\n    factory: () => inject(LuxConsentDialogLauncherService)\n  }\n);\n","import { LuxConsentEntry } from './lux-consent.model';\n\nexport const LUX_CONSENT_ENTRIES: LuxConsentEntry[] = [];\n\nexport default LUX_CONSENT_ENTRIES;\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { CookieService } from 'ngx-cookie-service';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { isTestEnv } from '../lux-util/env-utils';\nimport { ILuxConsentConfig } from './lux-consent-config.interface';\nimport { LUX_CONSENT_DIALOG_LAUNCHER } from './lux-consent-dialog-launcher';\nimport LUX_CONSENT_ENTRIES from './lux-consent-entries';\nimport { LuxConsentEntry, LuxConsentPurpose, LuxConsentState } from './lux-consent.model';\n\nconst LUX_CONSENT_COOKIE_DEFAULT_KEY = 'lux-app-consent';\nconst LUX_CONSENT_COOKIE_DEFAULT_DURATION_DAYS = 365;\n\nexport const LUX_CONSENT_CONFIG = new InjectionToken<ILuxConsentConfig>('LUX_CONSENT_CONFIG', {\n  providedIn: 'root',\n  factory: (): ILuxConsentConfig => ({\n    cookieKey: LUX_CONSENT_COOKIE_DEFAULT_KEY,\n    consentCookieDurationDays: LUX_CONSENT_COOKIE_DEFAULT_DURATION_DAYS\n  })\n});\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxConsentService {\n  private readonly cookieService = inject(CookieService);\n  private readonly dialogLauncher = inject(LUX_CONSENT_DIALOG_LAUNCHER);\n  private readonly consentConfig = inject(LUX_CONSENT_CONFIG);\n  private consentState$ = new BehaviorSubject<LuxConsentState | null>(null);\n  private runtimeConfigOverride?: Partial<ILuxConsentConfig>;\n\n  constructor() {\n    this.loadConsent();\n  }\n\n  getCurrentConfig(): ILuxConsentConfig {\n    return this.resolveConfig();\n  }\n\n  open(configOverride?: Partial<ILuxConsentConfig>): void {\n    this.runtimeConfigOverride = configOverride;\n    const config = this.resolveConfig();\n    this.dialogLauncher.open(\n      () => {\n        this.onCloseDialog(config);\n        this.runtimeConfigOverride = undefined;\n        if (configOverride) {\n          this.loadConsent();\n        }\n      },\n      (error) => {\n        console.error('Konnte den Consent-Dialog nicht öffnen.', error);\n        this.runtimeConfigOverride = undefined;\n        if (configOverride) {\n          this.loadConsent();\n        }\n      }\n    );\n  }\n\n  openIfNeeded(configOverride?: Partial<ILuxConsentConfig>): void {\n    this.loadConsent(configOverride);\n\n    const shouldShow = this.shouldShowDialog(configOverride);\n    if (shouldShow) {\n      this.open(configOverride);\n      return;\n    }\n\n    if (configOverride) {\n      this.loadConsent();\n    }\n  }\n\n  getConsentState(): Observable<LuxConsentState | null> {\n    return this.consentState$.asObservable();\n  }\n\n  hasConsent(purpose: LuxConsentPurpose): boolean {\n    const state = this.consentState$.value;\n    return !!state && Array.isArray(state.purposes) ? state.purposes.includes(purpose) : false;\n  }\n\n  /**\n   * Prüft, ob der Consent-Dialog angezeigt werden soll.\n   * Der Dialog wird angezeigt, wenn mindestens ein nicht-funktionaler Eintrag konfiguriert ist\n   * und weder ein Consent-Cookie noch ein temporärer Session-Storage-Eintrag vorhanden ist.\n   */\n  shouldShowDialog(configOverride?: Partial<ILuxConsentConfig>): boolean {\n    if (!this.hasNonEssentialEntries(configOverride)) {\n      return false;\n    }\n\n    const config = this.resolveConfig(configOverride);\n    if (sessionStorage.getItem(config.cookieKey)) {\n      return false;\n    }\n    return !this.cookieService.check(config.cookieKey);\n  }\n\n  acceptAll(configOverride?: Partial<ILuxConsentConfig>): void {\n    this.saveConsent(this.getAcceptedPurposesForAcceptAll(configOverride), configOverride);\n  }\n\n  declineNonFunctional(configOverride?: Partial<ILuxConsentConfig>): void {\n    this.saveConsent([LuxConsentPurpose.Essential], configOverride);\n  }\n\n  saveCustomConsent(purposes: LuxConsentPurpose[], configOverride?: Partial<ILuxConsentConfig>): void {\n    const withFunctional = purposes.includes(LuxConsentPurpose.Essential) ? purposes : [LuxConsentPurpose.Essential, ...purposes];\n\n    this.saveConsent(withFunctional, configOverride);\n  }\n\n  onCloseDialog(configOverride?: Partial<ILuxConsentConfig>): void {\n    const config = this.resolveConfig(configOverride);\n    // Cookie bereits gesetzt\n    if (this.cookieService.check(config.cookieKey)) {\n      return;\n    }\n\n    // Kein Cookie gesetzt, nur Session Storage mit funktionaler Einwilligung setzen\n    const state: LuxConsentState = {\n      purposes: [LuxConsentPurpose.Essential],\n      timestamp: new Date().toISOString()\n    };\n    const stateJson = JSON.stringify(state);\n    sessionStorage.setItem(config.cookieKey, stateJson);\n    this.consentState$.next(state);\n  }\n\n  clearConsent(configOverride?: Partial<ILuxConsentConfig>): void {\n    const config = this.resolveConfig(configOverride);\n    this.cookieService.delete(config.cookieKey, '/');\n    sessionStorage.removeItem(config.cookieKey);\n    this.consentState$.next(null);\n  }\n\n  clearSessionConsent(configOverride?: Partial<ILuxConsentConfig>): void {\n    const config = this.resolveConfig(configOverride);\n    sessionStorage.removeItem(config.cookieKey);\n    if (!this.cookieService.check(config.cookieKey)) {\n      this.consentState$.next(null);\n    }\n  }\n\n  private saveConsent(purposes: LuxConsentPurpose[], configOverride?: Partial<ILuxConsentConfig>): void {\n    if (!this.hasNonEssentialEntries(configOverride)) {\n      return;\n    }\n\n    const config = this.resolveConfig(configOverride);\n    const state: LuxConsentState = {\n      purposes,\n      timestamp: new Date().toISOString()\n    };\n\n    const stateJson = JSON.stringify(state);\n\n    this.cookieService.set(config.cookieKey, stateJson, config.consentCookieDurationDays, '/', undefined, false, 'Lax');\n\n    // Session-Storage Einwilligung entfernen, da Cookie gesetzt wurde\n    sessionStorage.removeItem(config.cookieKey);\n    this.consentState$.next(state);\n  }\n\n  private getAcceptedPurposesForAcceptAll(configOverride?: Partial<ILuxConsentConfig>): LuxConsentPurpose[] {\n    const config = this.resolveConfig(configOverride);\n    const configuredEntries: LuxConsentEntry[] = [...LUX_CONSENT_ENTRIES, ...(config.entries ?? [])];\n    const acceptedPurposes = new Set(configuredEntries.map((entry) => entry.purpose));\n    acceptedPurposes.add(LuxConsentPurpose.Essential);\n\n    return Object.values(LuxConsentPurpose).filter((purpose) => acceptedPurposes.has(purpose));\n  }\n\n  private hasNonEssentialEntries(configOverride?: Partial<ILuxConsentConfig>): boolean {\n    const config = this.resolveConfig(configOverride);\n    const configuredEntries: LuxConsentEntry[] = [...LUX_CONSENT_ENTRIES, ...(config.entries ?? [])];\n\n    return configuredEntries.some((entry) => entry.purpose !== LuxConsentPurpose.Essential);\n  }\n\n  private loadConsent(configOverride?: Partial<ILuxConsentConfig>): void {\n    const config = this.resolveConfig(configOverride);\n\n    if (!configOverride && config.cookieKey === LUX_CONSENT_COOKIE_DEFAULT_KEY && !isTestEnv()) {\n      console.warn(\n        `Der Standard-cookieKey \"${LUX_CONSENT_COOKIE_DEFAULT_KEY}\" wird verwendet. Bitte geben Sie einen individuellen cookieKey in der Consent-Konfiguration an, um Konflikte mit anderen LUX-Anwendungen zu vermeiden!!!`\n      );\n    }\n\n    let cookieValue = this.cookieService.get(config.cookieKey);\n\n    if (!cookieValue) {\n      cookieValue = sessionStorage.getItem(config.cookieKey) || '';\n    }\n\n    if (cookieValue) {\n      try {\n        const parsedState = JSON.parse(cookieValue);\n        if (this.isValidConsentState(parsedState)) {\n          this.consentState$.next(parsedState);\n        } else {\n          this.cookieService.delete(config.cookieKey, '/');\n          sessionStorage.removeItem(config.cookieKey);\n          this.consentState$.next(null);\n        }\n      } catch {\n        this.cookieService.delete(config.cookieKey, '/');\n        sessionStorage.removeItem(config.cookieKey);\n        this.consentState$.next(null);\n      }\n    } else {\n      this.consentState$.next(null);\n    }\n  }\n\n  private isValidConsentState(value: unknown): value is LuxConsentState {\n    if (!value || typeof value !== 'object') {\n      return false;\n    }\n\n    const state = value as Partial<LuxConsentState>;\n    return (\n      Array.isArray(state.purposes) &&\n      state.purposes.every((purpose) => Object.values(LuxConsentPurpose).includes(purpose as LuxConsentPurpose)) &&\n      typeof state.timestamp === 'string'\n    );\n  }\n\n  private resolveConfig(configOverride?: Partial<ILuxConsentConfig>): ILuxConsentConfig {\n    const config = { ...this.consentConfig, ...this.runtimeConfigOverride, ...configOverride };\n\n    if (!config.cookieKey) {\n      config.cookieKey = LUX_CONSENT_COOKIE_DEFAULT_KEY;\n    }\n\n    if (typeof config.consentCookieDurationDays !== 'number') {\n      config.consentCookieDurationDays = LUX_CONSENT_COOKIE_DEFAULT_DURATION_DAYS;\n    }\n\n    return config;\n  }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Der LuxStorageService speichert Daten im lokalen Browserstorage.\n * Wenn man beim Speichern (Methode -> setItem) angibt, dass es sich um sensible Daten handelt,\n * können diese einfach über die Methode 'clearSensitiveItems' gelöscht werden.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxStorageService implements OnDestroy {\n  private readonly postfixSensitive = '.sensitive';\n\n  private itemSources = new Map<string, BehaviorSubject<string | null>>();\n\n  constructor() {\n    addEventListener('storage', this.onStorageEvent.bind(this));\n  }\n\n  ngOnDestroy(): void {\n    removeEventListener('storage', this.onStorageEvent);\n  }\n\n  private onStorageEvent(event: StorageEvent) {\n    if (event.key) {\n      if (this.itemSources.has(event.key)) {\n        this.itemSources.get(event.key)!.next(event.newValue);\n      }\n    }\n  }\n\n  /**\n   * Diese Methode liefert den Wert für den übergebenen Schlüssel zurück.\n   * @param key - Der eindeutige Schlüssel.\n   * @returns Liefert den Wert für den übergebenen Schlüssel zurück.\n   */\n  getItem(key: string): string | null {\n    if (!this.itemSources.has(key)) {\n      this.itemSources.set(key, new BehaviorSubject<string | null>(localStorage.getItem(key)));\n    }\n\n    return this.itemSources.get(key)!.getValue();\n  }\n\n  /**\n   * Diese Methode liefert ein Observable zurück, das über alle Änderungen an dem Schlüssel informiert wird.\n   * @param key - Der eindeutige Schlüssel.\n   * @returns Liefert ein Observable zurück, das über alle Änderungen an dem Schlüssel informiert wird.\n   */\n  getItemAsObservable(key: string): Observable<string | null> {\n    if (!this.itemSources.has(key)) {\n      this.itemSources.set(key, new BehaviorSubject<string | null>(localStorage.getItem(key)));\n    }\n\n    return this.itemSources.get(key)!.asObservable();\n  }\n\n  /**\n   * Liefert alle Keys im LocalStorage als Array zurück.\n   */\n  getKeys(): string[] {\n    const keys: string[] = [];\n    for (let i = 0; i < localStorage.length; i++) {\n      const k = localStorage.key(i);\n      if (k) {\n        keys.push(k);\n      }\n    }\n\n    return keys;\n  }\n\n  /**\n   * Liefert die Anzahl der Einträge im LocalStorage zurück.\n   */\n  get length(): number {\n    return localStorage.length;\n  }\n\n  /**\n   * Diese Methode setzt den übergebenen Wert für den Schlüssel. Zusätzlich muss angegeben werden, ob es sich um\n   * sensible oder personenbezogene Daten handelt.\n   * @param key - Der eindeutige Schlüssel.\n   * @param value - Der neue Wert.\n   * @param sensitive - Gibt an, ob es sich um sensible oder personenbezogene Daten handelt. Diese können leicht über\n   *                    die Methode 'clearSensitiveItems' (z.B. beim Ausloggen) gelöscht werden.\n   */\n  setItem(key: string, value: string, sensitive: boolean): void {\n    try {\n      localStorage.setItem(key, value);\n\n      if (sensitive) {\n        localStorage.setItem(key + this.postfixSensitive, 'true');\n      }\n      if (this.itemSources.has(key)) {\n        this.itemSources.get(key)!.next(localStorage.getItem(key));\n      }\n    } catch (error) {\n      this.itemSources.get(key)!.error(error);\n    }\n  }\n\n  /**\n   * Diese Methode entfernt den übergebenen Schlüssel.\n   * @param key - Der eindeutige Schlüssel.\n   */\n  removeItem(key: string): void {\n    localStorage.removeItem(key);\n    localStorage.removeItem(key + this.postfixSensitive);\n\n    if (this.itemSources.has(key)) {\n      this.itemSources.get(key)!.next(localStorage.getItem(key));\n    }\n  }\n\n  /**\n   * Diese Methode löscht alle sensiblen und personenbezogenen Einträge (d.h. alle Items bei denen das Flag 'sensitive'\n   * auf true gesetzt wurde).\n   */\n  clearSensitiveItems(): void {\n    // Alle Schlüssel sammeln.\n    const keys: string[] = [];\n    for (let i = 0; i < localStorage.length; i++) {\n      keys.push(localStorage.key(i)!);\n    }\n\n    // Alle sensiblen Einträge löschen.\n    keys.forEach((key) => {\n      if (key && key.endsWith(this.postfixSensitive)) {\n        this.removeItem(key.replace(this.postfixSensitive, ''));\n      }\n    });\n  }\n\n  /**\n   * Diese Methode löscht alle Einträge aus dem Storage.\n   */\n  clearAll(): void {\n    localStorage.clear();\n    this.itemSources.forEach((itemSource: BehaviorSubject<string | null>) => {\n      itemSource.next(null);\n      itemSource.complete();\n    });\n\n    this.itemSources.clear();\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { LuxConsentPurpose } from '../lux-consent/lux-consent.model';\nimport { LuxConsentService } from '../lux-consent/lux-consent.service';\nimport { LuxConsoleService } from '../lux-util/lux-console.service';\nimport { LuxStorageService } from '../lux-util/lux-storage.service';\nimport { LuxTheme } from './lux-theme';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxThemeService {\n  private storageService = inject(LuxStorageService);\n  private consentService = inject(LuxConsentService);\n  private readonly storageKeyThemeName = 'lux.app.theme.name';\n  private themes: LuxTheme[];\n  private theme$: BehaviorSubject<LuxTheme>;\n\n  constructor() {\n    this.themes = [\n      { name: 'authentic', styleUrl: 'assets/themes/luxtheme-authentic-min.css' },\n      { name: 'green', styleUrl: 'assets/themes/luxtheme-green-min.css' }\n    ];\n\n    this.theme$ = new BehaviorSubject<LuxTheme>(this.getInitTheme());\n  }\n\n  getThemeAsObservable(): Observable<LuxTheme> {\n    return this.theme$.asObservable();\n  }\n\n  getTheme(): LuxTheme {\n    return this.theme$.getValue();\n  }\n\n  setTheme(themeName: string) {\n    this.theme$.next(this.findTheme(themeName));\n    if (this.consentService.hasConsent(LuxConsentPurpose.Preferences)) {\n      this.storageService.setItem(this.storageKeyThemeName, themeName, false);\n    }\n    this.loadTheme();\n  }\n\n  private findTheme(themeName: string): LuxTheme {\n    const newTheme = this.themes.find((theme) => theme.name === themeName);\n\n    if (!newTheme) {\n      throw Error(`Theme \"${themeName}\" not found.`);\n    }\n\n    return newTheme;\n  }\n\n  setThemes(themes: LuxTheme[]) {\n    this.themes = themes;\n  }\n\n  loadTheme() {\n    this.loadStyle(this.getTheme().styleUrl).then(() => {\n      LuxConsoleService.LOG(`LUX-Theme \"${this.getTheme().name}\" selected.`);\n    });\n  }\n\n  loadStyle(stylesUrl: string, parent: HTMLElement = document.head) {\n    return new Promise<HTMLLinkElement>((resolve, reject) => {\n      // Zuerst das alte Theme entfernen\n      const links = parent.getElementsByTagName('link');\n      if (links) {\n        for (const link of links) {\n          const hrefAttr = link.getAttribute('href');\n          if (hrefAttr && hrefAttr.indexOf('luxtheme-') >= 0 && hrefAttr.indexOf('.css') >= 0) {\n            parent.removeChild(link);\n          }\n        }\n      }\n\n      // Das neue Theme hinzufügen\n      const link = document.createElement('link') as HTMLLinkElement;\n      link.rel = 'stylesheet';\n      link.href = stylesUrl;\n      link.onerror = reject;\n      link.onload = () => resolve(link);\n      parent.appendChild(link);\n    });\n  }\n\n  private getInitTheme() {\n    let theme;\n\n    if (this.consentService.hasConsent(LuxConsentPurpose.Preferences)) {\n      // Prüfe, ob im Storage ein Themename hinterlegt ist.\n      const storedThemeName = this.storageService.getItem(this.storageKeyThemeName);\n      if (storedThemeName) {\n        const selectedTheme = this.themes.find((currentTheme) => currentTheme.name === storedThemeName);\n        if (selectedTheme) {\n          theme = selectedTheme;\n        }\n      }\n    } else {\n      this.storageService.removeItem(this.storageKeyThemeName)\n    }\n\n    // Wenn kein Theme hinterlegt wurde, nimm das erste verfügbare Theme.\n    if (!theme) {\n      theme = this.themes[0];\n    }\n\n    return theme;\n  }\n}\n","import { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterContentInit,\n  AfterViewChecked,\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  ViewChild,\n  inject,\n  input\n} from '@angular/core';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatMenu, MatMenuItem, MatMenuTrigger } from '@angular/material/menu';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxTabIndexDirective } from '../../lux-directives/lux-tabindex/lux-tab-index.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxTooltipDirective } from '../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxDividerComponent } from '../../lux-layout/lux-divider/lux-divider.component';\nimport { LuxThemeService } from '../../lux-theme/lux-theme.service';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxButtonComponent } from '../lux-button/lux-button.component';\nimport { LuxMenuItemComponent } from './lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxMenuPanelHeaderComponent } from './lux-menu-subcomponents/lux-menu-panel-header.component';\nimport { LuxMenuSectionTitleComponent } from './lux-menu-subcomponents/lux-menu-section-title.component';\nimport { LuxMenuTriggerComponent } from './lux-menu-subcomponents/lux-menu-trigger.component';\n\n@Component({\n  selector: 'lux-menu',\n  templateUrl: './lux-menu.component.html',\n  imports: [\n    NgTemplateOutlet,\n    LuxButtonComponent,\n    LuxTabIndexDirective,\n    LuxAriaLabelDirective,\n    LuxTooltipDirective,\n    NgClass,\n    NgStyle,\n    MatMenu,\n    MatMenuItem,\n    LuxTagIdDirective,\n    MatMenuTrigger,\n    LuxIconComponent,\n    MatDivider,\n    TranslocoPipe\n  ]\n})\nexport class LuxMenuComponent implements AfterViewInit, AfterContentInit, AfterViewChecked, OnDestroy, OnInit {\n  private cdr = inject(ChangeDetectorRef);\n  private themeService = inject(LuxThemeService);\n  protected elementRef = inject(ElementRef);\n\n  // Diese Werte müssen angepasst werden, sollte das Styling dieser Component entsprechend geändert worden sein\n  private readonly PADDING_PX: number;\n  private readonly MARGIN_PX: number;\n  private readonly ICON_PX: number; // 15px breite plus 8px gap zwischen icon - label\n  private readonly FONT_SIZE: number;\n  private readonly FONT_WEIGHT: number;\n  private readonly FONT_FAMILY: string;\n  private readonly BADGE_SIZE: number;\n\n  // Alle verfügbaren MenuItems als Array\n  private _menuItems: LuxMenuItemComponent[] = [];\n  private _menuItemsNotExtended: (\n    | LuxMenuItemComponent\n    | LuxDividerComponent\n    | LuxMenuPanelHeaderComponent\n    | LuxMenuSectionTitleComponent\n  )[] = [];\n\n  // Das Canvas wird genutzt, um die Breite potenzieller MenuItem-Texte zu berechnen\n  private readonly canvas;\n\n  private menuItemSubscriptions: Subscription[] = [];\n  private menuItemChangeSubscription!: Subscription;\n\n  hideToggle = false;\n  triggerButtonDivEl?: HTMLElement;\n  customTriggerEl?: HTMLElement;\n\n  @ViewChild('defaultTrigger', { read: ElementRef }) defaultTriggerElRef?: ElementRef;\n  @ViewChild('defaultTrigger') defaultTriggerComponent?: LuxButtonComponent;\n  @ViewChild('menuTrigger', { read: ElementRef }) menuTriggerElRef?: ElementRef;\n  @ViewChild('menuExtendedContainer', { read: ElementRef, static: true }) menuExtendedContainer!: ElementRef;\n  @ContentChildren(LuxMenuItemComponent) luxMenuItemComponents!: QueryList<LuxMenuItemComponent>;\n  @ContentChildren('menuSection') menuNotExtendedPanel!: QueryList<\n    LuxMenuItemComponent | LuxDividerComponent | LuxMenuPanelHeaderComponent | LuxMenuSectionTitleComponent\n  >;\n  @ContentChild(LuxMenuTriggerComponent) luxMenuTriggerComponent?: LuxMenuTriggerComponent;\n\n  @Output() luxMenuClosed = new EventEmitter<void>();\n  @Output() luxMenuOpened = new EventEmitter<void>();\n\n  @Input() luxMenuLabel = '';\n  @Input() luxMenuIconName = 'lux-interface-setting-menu-1';\n  @Input() luxMenuTriggerIconShowRight = false;\n  @Input() luxMenuItemFixWidth = 0;\n  @Input() luxClassName = '';\n  @Input() luxTagId?: string;\n  @Input() luxToggleDisabled = false;\n  @Input() luxAriaMenuTriggerLabel = '';\n  luxShowSections = input<boolean>(false);\n  luxMenuPanelLarge = input<boolean>(false);\n\n  _luxDisplayExtended = false;\n  visibleMenuItems: LuxMenuItemComponent[] = [];\n  tooltipDirective?: LuxTooltipDirective;\n\n  get luxDisplayExtended() {\n    return this._luxDisplayExtended;\n  }\n\n  @Input() set luxDisplayExtended(value: boolean) {\n    this._luxDisplayExtended = value;\n\n    if (this.menuTriggerElRef) {\n      this.updateExtendedMenuItems();\n    }\n  }\n\n  @Input() luxDisplayMenuLeft = true;\n  @Input() luxMaximumExtended = 5;\n\n  @HostListener('window:resize') windowResize() {\n    this.updateExtendedMenuItems();\n  }\n\n  get menuItems(): LuxMenuItemComponent[] {\n    return this._menuItems;\n  }\n\n  set menuItems(menuItems: LuxMenuItemComponent[]) {\n    this._menuItems = menuItems ? menuItems : [];\n    this._menuItems.sort((a, b) => (a.luxPrio ? a.luxPrio : 0) - (b.luxPrio ? b.luxPrio : 0));\n\n    this.menuItems.forEach((item) => {\n      this.menuItemSubscriptions.push(\n        item.luxHiddenChange.subscribe(() => {\n          this.updateExtendedMenuItems();\n        })\n      );\n      this.menuItemSubscriptions.push(\n        item.luxAlwaysVisibleChange.subscribe(() => {\n          this.updateExtendedMenuItems();\n        })\n      );\n      this.menuItemSubscriptions.push(\n        item.luxHideLabelIfExtendedChange.subscribe(() => {\n          this.updateExtendedMenuItems();\n        })\n      );\n    });\n\n    this.cdr.detectChanges();\n  }\n\n  get menuItemsNotExtended(): (LuxMenuItemComponent | LuxDividerComponent | LuxMenuPanelHeaderComponent | LuxMenuSectionTitleComponent)[] {\n    return this._menuItemsNotExtended;\n  }\n\n  set menuItemsNotExtended(\n    menuItems: (LuxMenuItemComponent | LuxDividerComponent | LuxMenuPanelHeaderComponent | LuxMenuSectionTitleComponent)[]\n  ) {\n    this._menuItemsNotExtended = menuItems ? menuItems : [];\n  }\n\n  constructor() {\n    this.canvas = document.createElement('canvas');\n\n    // die folgenden Werte sind für die Berechnung der Breite der extended Menüitems\n    // sie müssen entsprechend dem aktuellen Theme gesetzt werden.\n    // Wird das Theme geändert müssen auch diese Werte angepasst werden.\n    // aktuell wird für die Klasse \".lux-extended-menu\" die Breite der Icons auf 15px gesetzt.\n    // bei Änderungen es Icon-Sets muss dieser Wert eventuell angepasst werden\n\n    switch (this.themeService.getTheme().name) {\n      case 'green':\n        this.PADDING_PX = 32;\n        this.MARGIN_PX = 8;\n        this.ICON_PX = 30; // 22px Breite plus 8px Gap zwischen Icon - Label\n        this.FONT_SIZE = 14; //im Theming wird die Fontsize der Buttons auf 14px gesetzt\n        this.FONT_WEIGHT = 400;\n        this.FONT_FAMILY = '\"Blogger Sans\", \"Source Sans Pro\",\"Helvetica\",\"Arial\",\"sans-serif\"';\n        this.BADGE_SIZE = 48; //max-width der Button-Badge\n        break;\n\n      case 'authentic':\n        this.PADDING_PX = 16;\n        this.MARGIN_PX = 8;\n        this.ICON_PX = 30; // 22px Breite plus 8px Gap zwischen Icon - Label\n        this.FONT_SIZE = 14;\n        this.FONT_WEIGHT = 400;\n        this.FONT_FAMILY = '\"Source Sans Pro\",\"Helvetica\",\"Arial\",\"sans-serif\"';\n        this.BADGE_SIZE = 38;\n        break;\n\n      default: // 28px Breite plus 8px Gap zwischen Icon - Button-Label\n        this.PADDING_PX = 16;\n        this.MARGIN_PX = 8;\n        this.ICON_PX = 30;\n        this.FONT_SIZE = 14;\n        this.FONT_WEIGHT = 400;\n        this.FONT_FAMILY = '\"Source Sans Pro\",\"Helvetica\",\"Arial\",\"sans-serif\"';\n        this.BADGE_SIZE = 38;\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.triggerButtonDivEl = this.elementRef.nativeElement.querySelector('div.lux-menu-trigger');\n    this.customTriggerEl = this.elementRef.nativeElement.querySelector('lux-menu-trigger');\n    this.customTriggerEl?.addEventListener('click', this.onTrigger.bind(this));\n  }\n\n  ngOnInit() {\n    if (this.luxShowSections() && this.luxDisplayExtended) {\n      console.warn(\n        'Das Menu mit den Abschnitten (LuxShowSections) kann nur angezeigt werden, wenn keine Buttons außerhalb des Menu angezeigt werden können.'\n      );\n    }\n  }\n\n  onTrigger() {\n    if (this.customTriggerEl && this.triggerButtonDivEl) {\n      this.triggerButtonDivEl.click();\n    }\n  }\n\n  ngAfterContentInit() {\n    if (this.luxShowSections()) {\n      this.addMenuElementsToArray();\n    }\n    this.menuItemChangeSubscription = this.luxMenuItemComponents.changes.subscribe(() => {\n      if (this.luxShowSections()) {\n        this.addMenuElementsToArray();\n      } else {\n        this.menuItems = this.luxMenuItemComponents.toArray();\n        this.calculateMenuItemWidths();\n        this.updateExtendedMenuItems();\n      }\n    });\n  }\n\n  addMenuElementsToArray() {\n    this.menuItemsNotExtended = this.menuNotExtendedPanel.toArray().map((ref) => (ref instanceof ElementRef ? ref.nativeElement : ref));\n    this.cdr.detectChanges();\n  }\n\n  ngAfterViewChecked() {\n    if (this.luxShowSections()) {\n      this.addMenuElementsToArray();\n    } else {\n      this.menuItems = this.luxMenuItemComponents.toArray();\n      this.calculateMenuItemWidths();\n      this.updateExtendedMenuItems();\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.customTriggerEl && this.triggerButtonDivEl) {\n      this.customTriggerEl?.removeEventListener('click', this.onTrigger);\n    }\n\n    if (this.menuItemChangeSubscription) {\n      this.menuItemChangeSubscription.unsubscribe();\n    }\n\n    this.menuItemSubscriptions.forEach((menuItemSubscription) => {\n      menuItemSubscription.unsubscribe();\n    });\n  }\n\n  /**\n   * Wird beim Klick auf ein MenuItem aufgerufen.\n   * @param menuItem\n   * @param event\n   */\n  menuItemClicked(menuItem: LuxMenuItemComponent, event: Event) {\n    menuItem.clicked(event);\n  }\n\n  /**\n   * Wird nach dem Schließen des Menus aufgerufen und emitted die Output-Property.\n   * Setzt den Fokus auf den Default-Trigger (Custom-Trigger => eigene Verantwortung).\n   */\n  onMenuClosed() {\n    this.luxMenuClosed.emit();\n    if (this.defaultTriggerElRef) {\n      (this.defaultTriggerElRef.nativeElement.children.item(0) as any).focus();\n    }\n  }\n\n  /**\n   * Wird nach dem Öffnen des Menus aufgerufen und emitted die Output-Property.\n   */\n  onMenuOpened() {\n    this.luxMenuOpened.emit();\n  }\n\n  /**\n   * Der Menü-Trigger in der Filterkomponente wird im Accordion-Panel eingesetzt.\n   * Damit sich das Panel bei der Verwendung des Menüs nicht öffnet und schließt,\n   * darf das Event nicht weiter gereicht werden.\n   * @param event\n   */\n  menuTriggerStopPropagation(event: Event) {\n    LuxUtil.stopEventPropagation(event);\n  }\n  /**\n   * Berechnet anhand der verfügbaren Breite des Containers (CSS-Class: lux-menu-extended) und der maximalen Anzahl an\n   * extended MenuItems die Anzahl an möglichen MenuItems, die außerhalb des eigentlichen Menus dargestellt werden können.\n   */\n  updateExtendedMenuItems() {\n    if (!this.luxDisplayExtended) {\n      this.hideToggle = false;\n      this.menuItems.forEach((menuItem: LuxMenuItemComponent) => {\n        menuItem.extended = false;\n      });\n      return;\n    }\n\n    const menuTriggerOffsetWidth = this.menuTriggerElRef?.nativeElement.offsetWidth;\n    const menuTriggerWidth = Math.max(menuTriggerOffsetWidth ? menuTriggerOffsetWidth : 0, 50);\n\n    let availableWidth: number = this.menuExtendedContainer.nativeElement.offsetWidth;\n    let count = 0;\n\n    availableWidth -= menuTriggerWidth;\n\n    // mit condition sind hier die Zustände luxVisible = true || false gemeint\n    this.visibleMenuItems = []; // die sichtbaren Menüitems werden neu einsortiert\n    for (const condition of [true, false]) {\n      for (const menuItem of this.menuItems) {\n        if (menuItem.luxAlwaysVisible === condition && !menuItem.luxHidden) {\n          this.visibleMenuItems.push(menuItem);\n        }\n      }\n    }\n    for (const menuItem of this.visibleMenuItems) {\n      // Wenn es das letzte sichtbare Menüitem ist, wird geprüft, ob es anstelle des\n      // Menüitemtriggers dargestellt werden kann.\n      if (menuItem === this.visibleMenuItems[this.visibleMenuItems.length - 1] && availableWidth + menuTriggerWidth >= menuItem.width) {\n        availableWidth += menuTriggerWidth;\n      }\n\n      availableWidth -= menuItem.width;\n\n      if (availableWidth >= 0 && count < this.luxMaximumExtended) {\n        menuItem.extended = true;\n        count++;\n      } else {\n        menuItem.extended = false;\n      }\n    }\n\n    // Jetzt müssen die sichtbaren Items noch nach der Priorität sortiert werden.\n    //\n    // Erklärung:\n    // Das Array \"visibleMenuItems\" wurde initial wie folgt aufgebaut:\n    // - zuerst alle Items mit \"luxAlwaysVisible=true\" und\n    // - danach alle Items mit \"luxAlwaysVisible=false\".\n    // Dies wurde gemacht, damit der zur Verfügung stehende Raum an die Items\n    // verteilt wird, die nach Möglichkeit immer angezeigt werden sollten.\n    // Bis zu diesem Zeitpunkt wurde bewusst auf die Berücksichtigung der\n    // Priorität verzichtet. Nachdem aber jetzt festgelegt wurde, welche Items\n    // überhaupt dargestellt werden, kann nach der Priorität sortiert werden.\n    this.visibleMenuItems.sort((a, b) => (a.luxPrio ? a.luxPrio : 0) - (b.luxPrio ? b.luxPrio : 0));\n\n    // wenn die Anzahl der extended dargestellten Items der Gesamtzahl entspricht blenden wir den Toggle aus\n    const extendedMenuItems = this.visibleMenuItems.filter((item: LuxMenuItemComponent) => item.extended);\n    this.hideToggle = extendedMenuItems.length === this.visibleMenuItems.length;\n    this.cdr.detectChanges();\n  }\n\n  /**\n   * Berechnet die Breite für jedes Menuitem und speichert diese abhängig davon, ob das Item immer sichtbar sein soll oder nicht\n   * in 2 verschiedenen Maps.\n   */\n  private calculateMenuItemWidths() {\n    this.menuItems.forEach((menuItem: LuxMenuItemComponent) => {\n      menuItem.extended = false;\n      menuItem.width = this.luxMenuItemFixWidth > 0 ? this.luxMenuItemFixWidth : this.getMenuItemWidth(menuItem);\n    });\n  }\n\n  /**\n   * Gibt die berechnete Breite des MenuItems zurück.\n   * Diese setzt sich aus dem Padding (links und rechts, je 16px), dem Icon (wenn vorhanden, 15px) und der berechneten\n   * Textbreite zusammen + 25px Sicherheitspuffer.\n   * @param menuItem\n   */\n  private getMenuItemWidth(menuItem: LuxMenuItemComponent): number {\n    if (!menuItem) {\n      return 0;\n    }\n\n    return (\n      this.PADDING_PX +\n      (menuItem.luxIconName ? this.ICON_PX : 0) +\n      (!menuItem.luxHideLabelIfExtended ? this.getTextWidth(menuItem.luxLabel) : 0) +\n      this.MARGIN_PX +\n      (menuItem.luxButtonBadge ? this.BADGE_SIZE : 0) +\n      25\n    );\n  }\n\n  /**\n   * Berechnet mithilfe eines Canvas-Objekts die Breite eines einzelnen Textes\n   * @param text\n   */\n  private getTextWidth(text: string | null | undefined): number {\n    if (!text) {\n      return 0;\n    }\n\n    const letterSpacing = 1; // px\n    const canvas = this.canvas;\n    const context = canvas.getContext('2d')!;\n    context.font = `${this.FONT_WEIGHT} ${this.FONT_SIZE}px ${this.FONT_FAMILY}`;\n    const metrics = context.measureText(text);\n    // Letter-Spacing multipliziert mit der Anzahl der Zeichen\n    const letterSpacingWidth = letterSpacing * text.length;\n    // Offset kann weiterhin genutzt werden, falls nötig\n    const offset = 0;\n    return metrics.width + letterSpacingWidth + offset;\n  }\n\n  hasVisibleMenuItems(): boolean {\n    let hasVisibleMenuItems = false;\n\n    if (!this.luxShowSections()) {\n      for (const element of this.menuItems) {\n        if (!element.luxHidden && !element.extended) {\n          hasVisibleMenuItems = true;\n          break;\n        }\n      }\n    } else {\n      for (const element of this.menuItemsNotExtended) {\n        if (this.isItemMenuItem(element) && !element.luxHidden && !element.extended) {\n          hasVisibleMenuItems = true;\n          break;\n        }\n      }\n    }\n\n    return hasVisibleMenuItems;\n  }\n\n  isItemDivider(menuItem: any): menuItem is LuxDividerComponent {\n    return menuItem instanceof LuxDividerComponent;\n  }\n\n  isItemMenuItem(menuItem: any): menuItem is LuxMenuItemComponent {\n    return menuItem instanceof LuxMenuItemComponent;\n  }\n\n  isPanelHeader(menuItem: any): menuItem is LuxMenuPanelHeaderComponent {\n    return menuItem instanceof LuxMenuPanelHeaderComponent;\n  }\n\n  isSectionTitle(menuItem: any): menuItem is LuxMenuSectionTitleComponent {\n    return menuItem instanceof LuxMenuSectionTitleComponent;\n  }\n}\n","<div class=\"lux-flex lux-place-content-end lux-items-stretch\">\n  <div class=\"lux-menu-extended lux-flex lux-flex-auto lux-place-content-end lux-items-center\" #menuExtendedContainer>\n    <!-- Trigger, wenn luxDisplayMenuLeft === false -->\n    @if (!luxDisplayMenuLeft) {\n    <ng-container [ngTemplateOutlet]=\"menuTriggerTemplate\"></ng-container>\n    } @for (menuItem of visibleMenuItems; track menuItem) {\n    <lux-button\n      class=\"lux-menu-item\"\n      [luxLabel]=\"menuItem.luxHideLabelIfExtended ? '' : menuItem.luxLabel\"\n      [luxColor]=\"menuItem.luxColor\"\n      [luxRaised]=\"menuItem.luxRaised\"\n      [luxFlat]=\"menuItem.luxFlat\"\n      [luxStroked]=\"menuItem.luxStroked\"\n      [luxIconName]=\"menuItem.luxIconName\"\n      [luxDisabled]=\"menuItem.luxDisabled\"\n      [luxTagId]=\"menuItem.luxTagId\"\n      [luxRounded]=\"menuItem.luxRounded\"\n      [luxButtonBadge]=\"menuItem.luxButtonBadge\"\n      [luxButtonBadgeColor]=\"menuItem.luxButtonBadgeColor\"\n      (luxClicked)=\"menuItemClicked(menuItem, $event)\"\n      luxAriaLabel=\"{{ menuItem.luxLabel }}\"\n      luxAriaLabelSelector=\"button\"\n      luxTabIndex=\"0\"\n      [luxTooltip]=\"menuItem.luxButtonTooltip\"\n      [luxApplyToChildren]=\"true\"\n      [ngClass]=\"menuItem.luxClass ?? ''\"\n      [ngStyle]=\"{ display: !menuItem.extended || menuItem.luxHidden ? 'none' : 'inline-block' }\"\n    >\n    </lux-button>\n    }\n    <!-- Trigger, wenn luxDisplayMenuLeft === true -->\n    @if (luxDisplayMenuLeft) {\n    <ng-container [ngTemplateOutlet]=\"menuTriggerTemplate\"></ng-container>\n    }\n  </div>\n</div>\n\n<!-- Das eigentliche Material-Menu -->\n<mat-menu\n  [classList]=\"\n    'lux-menu-panel ' +\n    luxClassName +\n    (luxShowSections() ? ' lux-menu-section-panel' : '') +\n    (luxMenuPanelLarge() ? ' lux-menu-panel-large' : '')\n  \"\n  (closed)=\"onMenuClosed()\"\n  #menu=\"matMenu\"\n>\n  @if (!luxShowSections()) {\n  <!-- Alle darin angezeigten MenuItems (Vorausgesetzt diese sind nicht als extended gekennzeichnet) -->\n  @for (menuItem of menuItems; track menuItem) { @if (!menuItem.extended && !menuItem.luxHidden) {\n  <button\n    mat-menu-item\n    [disableRipple]=\"true\"\n    class=\"lux-menu-item\"\n    [class.with-badge]=\"menuItem.luxButtonBadge\"\n    [luxTooltip]=\"menuItem.luxMenuTooltip\"\n    [disabled]=\"menuItem.luxDisabled\"\n    luxTagIdHandler\n    [luxTagIdStartElement]=\"elementRef.nativeElement\"\n    [luxTagIdTargetSelf]=\"true\"\n    [luxTagId]=\"menuItem.luxTagId\"\n    [ngClass]=\"menuItem.luxClass ?? ''\"\n    (click)=\"menuItemClicked(menuItem, $event)\"\n  >\n    @if (menuItem.luxIconName) {\n    <lux-icon\n      [luxIconName]=\"menuItem.luxIconName\"\n      luxPadding=\"0\"\n      [luxMargin]=\"menuItem.luxIconShowRight ? '0 0 0 1rem' : '0 1rem 0 0'\"\n      luxIconSize=\"unset\"\n      class=\"lux-menu-item-icon\"\n    ></lux-icon>\n    }\n    <span class=\"lux-button-label\">\n      {{ menuItem.luxLabel }}\n    </span>\n    @if (menuItem.luxButtonBadge) {\n    <span class=\"lux-button-badge-container\">\n      @if (menuItem.luxButtonBadge && !menuItem.luxDisabled) {\n      <span\n        class=\"lux-button-badge lux-bg-color-primary-20 lux-m-2\"\n        [ngClass]=\"{\n          'lux-bg-color-primary-20': menuItem.luxButtonBadgeColor === 'primary',\n          'lux-bg-color-warn-50': menuItem.luxButtonBadgeColor === 'warn',\n          'lux-bg-color-accent-70': menuItem.luxButtonBadgeColor === 'accent'\n        }\"\n      >\n        {{ menuItem.luxButtonBadge }}\n      </span>\n      }\n    </span>\n    }\n  </button>\n  } }} @else { @for (menuItem of menuItemsNotExtended; let i = $index ; track menuItem) {\n  <!-- Anzeige des Usernamen im Panel Header -->\n  @if (isPanelHeader(menuItem) && i === 0) {\n  <span class=\"lux-menu-panelheader-username\"\n    >{{ menuItem.luxTitle() }}\n    <span class=\"lux-menu-panelheader-username-subtitle\">{{ menuItem.luxSubtitle() }}</span>\n  </span>\n  }\n  <!-- Überschrift für die Sektionen im Panel -->\n  @if(isSectionTitle(menuItem)) {\n  <span class=\"lux-menu-section-title\">{{ menuItem.luxTitle() }}</span>\n  } @if(isItemMenuItem(menuItem) && !menuItem.luxHidden) {\n  <!-- Panel Large -->\n  @if(luxMenuPanelLarge()) {\n  <button\n    mat-menu-item\n    luxTagIdHandler\n    [disableRipple]=\"true\"\n    class=\"lux-menu-item\"\n    [class.with-badge]=\"menuItem.luxButtonBadge\"\n    [luxTooltip]=\"menuItem.luxMenuTooltip\"\n    [disabled]=\"menuItem.luxDisabled\"\n    [luxTagId]=\"menuItem.luxTagId\"\n    [ngClass]=\"(menuItem.luxClass ?? '') + (menuItem.luxMenuItemSelected() && !menuItem.luxDisabled ? ' lux-menu-item-selected' : '')\"\n    (click)=\"menuItemClicked(menuItem, $event)\"\n  >\n    <span class=\"lux-menu-item-content\">\n      @if (menuItem.luxIconName) {\n      <lux-icon\n        [luxIconName]=\"menuItem.luxIconName\"\n        luxPadding=\"0\"\n        [luxMargin]=\"menuItem.luxIconShowRight ? '0 0 0 1rem' : '0 1rem 0 0'\"\n        luxIconSize=\"unset\"\n        class=\"lux-menu-item-icon\"\n      ></lux-icon>\n      }\n      <span>\n        <span class=\"lux-button-label\" [ngClass]=\"menuItem.luxMenuItemSelected() && !menuItem.luxDisabled ? ' lux-menu-item-selected' : ''\">\n          {{ menuItem.luxLabel }}\n        </span>\n        <br />\n        <span\n          class=\"lux-button-label-subtitle\"\n          [ngClass]=\"menuItem.luxMenuItemSelected() && !menuItem.luxDisabled ? ' lux-menu-item-selected' : ''\"\n        >\n          {{ menuItem.luxMenuItemSubtitle() }}\n        </span>\n      </span>\n      @if (menuItem.luxButtonBadge) {\n      <span class=\"lux-button-badge-container lux-menu-item-badge-right\">\n        @if (menuItem.luxButtonBadge && !menuItem.luxDisabled) {\n        <span\n          class=\"lux-button-badge lux-bg-color-primary-20 lux-m-2\"\n          [ngClass]=\"{\n            'lux-bg-color-primary-20': menuItem.luxButtonBadgeColor === 'primary',\n            'lux-bg-color-warn-50': menuItem.luxButtonBadgeColor === 'warn',\n            'lux-bg-color-accent-70': menuItem.luxButtonBadgeColor === 'accent'\n          }\"\n        >\n          {{ menuItem.luxButtonBadge }}\n        </span>\n        }\n      </span>\n      }\n    </span>\n  </button>\n  }\n  <!-- das neue Panel mit Gruppierung -->\n  @else {\n  <button\n    mat-menu-item\n    [disableRipple]=\"true\"\n    class=\"lux-menu-item\"\n    [class.with-badge]=\"menuItem.luxButtonBadge\"\n    [luxTooltip]=\"menuItem.luxMenuTooltip\"\n    [disabled]=\"menuItem.luxDisabled\"\n    luxTagIdHandler\n    [luxTagId]=\"menuItem.luxTagId\"\n    [ngClass]=\"(menuItem.luxClass ?? '') + (menuItem.luxMenuItemSelected() && !menuItem.luxDisabled ? ' lux-menu-item-selected' : '')\"\n    (click)=\"menuItemClicked(menuItem, $event)\"\n  >\n    @if (menuItem.luxIconName) {\n    <lux-icon\n      [luxIconName]=\"menuItem.luxIconName\"\n      luxPadding=\"0\"\n      [luxMargin]=\"menuItem.luxIconShowRight ? '0 0 0 1rem' : '0 1rem 0 0'\"\n      luxIconSize=\"unset\"\n      class=\"lux-menu-item-icon\"\n    ></lux-icon>\n    }\n    <span class=\"lux-button-label\" [ngClass]=\"menuItem.luxMenuItemSelected() && !menuItem.luxDisabled ? ' lux-menu-item-selected' : ''\">\n      {{ menuItem.luxLabel }}\n    </span>\n    @if (menuItem.luxButtonBadge) {\n    <span class=\"lux-button-badge-container lux-menu-item-badge-right\">\n      @if (menuItem.luxButtonBadge && !menuItem.luxDisabled) {\n      <span\n        class=\"lux-button-badge lux-bg-color-primary-20 lux-m-2\"\n        [ngClass]=\"{\n          'lux-bg-color-primary-20': menuItem.luxButtonBadgeColor === 'primary',\n          'lux-bg-color-warn-50': menuItem.luxButtonBadgeColor === 'warn',\n          'lux-bg-color-accent-70': menuItem.luxButtonBadgeColor === 'accent'\n        }\"\n      >\n        {{ menuItem.luxButtonBadge }}\n      </span>\n      }\n    </span>\n    }</button\n  >} }\n  <!-- Trennstriche im Menu -->\n  @if (isItemDivider(menuItem)) {\n  <mat-divider [ngClass]=\"luxMenuPanelLarge() ? 'lux-menu-item-divider-large' : 'lux-menu-item-divider'\"></mat-divider>\n  } } }\n</mat-menu>\n\n<!-- Der Trigger des Menus -->\n<ng-template #menuTriggerTemplate>\n  <div\n    [matMenuTriggerFor]=\"menu\"\n    role=\"button\"\n    luxAriaLabel=\"{{ luxAriaMenuTriggerLabel || ('luxc.menu.trigger.btn' | transloco) }}\"\n    class=\"lux-menu-trigger lux-color-primary-20\"\n    [ngClass]=\"{ 'lux-display-none-important': hideToggle }\"\n    #menuTrigger\n    (menuOpened)=\"onMenuOpened()\"\n    #triggerdiv\n  ></div>\n\n  <!-- Custom-Trigger, der über Content-Projection geladen werden kann -->\n  @if (!hideToggle) {\n  <div class=\"lux-menu-custom-trigger\">\n    <ng-content select=\"lux-menu-trigger\"> </ng-content>\n  </div>\n  }\n\n  <!-- Default-Trigger -->\n  @if (!luxMenuTriggerComponent && hasVisibleMenuItems()) {\n  <lux-button\n    class=\"lux-menu-trigger-default\"\n    luxTagId=\"lux-menu-default-trigger\"\n    [luxLabel]=\"luxMenuLabel\"\n    [luxIconName]=\"luxMenuIconName\"\n    luxAriaLabel=\"{{ luxAriaMenuTriggerLabel || ('luxc.menu.trigger.btn' | transloco) }}\"\n    luxAriaLabelSelector=\"button\"\n    luxTabIndex=\"0\"\n    [luxApplyToChildren]=\"true\"\n    [luxIconShowRight]=\"luxMenuTriggerIconShowRight\"\n    [luxDisabled]=\"luxToggleDisabled\"\n    (luxClicked)=\"triggerdiv.click()\"\n    #defaultTrigger\n  >\n  </lux-button>\n  }\n</ng-template>\n","import { Directive, Input } from '@angular/core';\nimport { LuxAriaBase } from './lux-aria-base';\n\n@Directive({\n  selector: '[luxAriaDescribedby]'\n})\nexport class LuxAriaDescribedbyDirective extends LuxAriaBase<string> {\n  protected ariaTagName = 'aria-describedby';\n  _luxAriaDescribedby?: string;\n\n  @Input() luxAriaDescribedbySelector?: string;\n\n  @Input()\n  get luxAriaDescribedby() {\n    return this._luxAriaDescribedby;\n  }\n\n  set luxAriaDescribedby(describedby: string | undefined) {\n    this._luxAriaDescribedby = describedby;\n\n    this.renderAria();\n  }\n\n  constructor() {\n    super();\n    if (!this.luxAriaDescribedbySelector) {\n      const tagName = this.elementRef.nativeElement.tagName.toLowerCase();\n      if (tagName === 'lux-button') {\n        this.luxAriaDescribedbySelector = 'button';\n      } else if (tagName === 'lux-app-header-action-nav-item') {\n        this.luxAriaDescribedbySelector = 'button';\n      }\n    }\n  }\n\n  getSelector(): string | undefined {\n    return this.luxAriaDescribedbySelector;\n  }\n\n  getValue(): string | undefined {\n    return this._luxAriaDescribedby;\n  }\n}\n","import { Directive, Input } from '@angular/core';\nimport { LuxAriaBase } from './lux-aria-base';\n\n@Directive({\n  selector: '[luxAriaExpanded]'\n})\nexport class LuxAriaExpandedDirective extends LuxAriaBase<boolean> {\n  protected ariaTagName = 'aria-expanded';\n  _luxAriaExpanded?: boolean;\n\n  @Input() luxAriaExpandedSelector?: string;\n\n  @Input()\n  get luxAriaExpanded() {\n    return this._luxAriaExpanded;\n  }\n\n  set luxAriaExpanded(expanded: boolean | undefined) {\n    this._luxAriaExpanded = expanded;\n\n    this.renderAria();\n  }\n\n  constructor() {\n    super();\n    if (!this.luxAriaExpandedSelector) {\n      const tagName = this.elementRef.nativeElement.tagName.toLowerCase();\n      if (tagName === 'lux-button') {\n        this.luxAriaExpandedSelector = 'button';\n      }\n    }\n  }\n\n  getSelector(): string | undefined {\n    return this.luxAriaExpandedSelector;\n  }\n\n  getValue(): boolean | undefined {\n    return this._luxAriaExpanded;\n  }\n}\n","import { Directive, Input } from '@angular/core';\nimport { LuxAriaBase } from './lux-aria-base';\n\n@Directive({\n  selector: '[luxAriaHasPopup]'\n})\nexport class LuxAriaHaspopupDirective extends LuxAriaBase<boolean> {\n  protected ariaTagName = 'aria-haspopup';\n  _luxAriaHasPopup?: boolean | undefined;\n\n  @Input() luxAriaHasPopupSelector?: string;\n\n  @Input()\n  get luxAriaHasPopup() {\n    return this._luxAriaHasPopup;\n  }\n\n  set luxAriaHasPopup(hasPopup: boolean | undefined) {\n    this._luxAriaHasPopup = hasPopup;\n\n    this.renderAria();\n  }\n\n  constructor() {\n    super();\n    if (!this.luxAriaHasPopupSelector) {\n      const tagName = this.elementRef.nativeElement.tagName.toLowerCase();\n      if (tagName === 'lux-button') {\n        this.luxAriaHasPopupSelector = 'button';\n      } else if (tagName === 'lux-app-header-action-nav-item') {\n        this.luxAriaHasPopupSelector = 'button';\n      }\n    }\n  }\n\n  getSelector(): string | undefined {\n    return this.luxAriaHasPopupSelector;\n  }\n\n  getValue(): boolean | undefined {\n    return this._luxAriaHasPopup;\n  }\n}\n","import { Directive, Input } from '@angular/core';\nimport { LuxAriaBase } from './lux-aria-base';\n\n@Directive({\n  selector: '[luxAriaHidden]'\n})\nexport class LuxAriaHiddenDirective extends LuxAriaBase<boolean> {\n  protected ariaTagName = 'aria-hidden';\n  _luxAriaHidden?: boolean;\n\n  @Input() luxAriaHiddenSelector?: string;\n\n  @Input()\n  get luxAriaHidden() {\n    return this._luxAriaHidden;\n  }\n\n  set luxAriaHidden(hidden: boolean | undefined) {\n    this._luxAriaHidden = hidden;\n\n    this.renderAria();\n  }\n\n  getSelector(): string | undefined {\n    return this.luxAriaHiddenSelector;\n  }\n\n  getValue(): boolean | undefined {\n    return this._luxAriaHidden;\n  }\n}\n","import { Directive, Input } from '@angular/core';\nimport { LuxAriaBase } from './lux-aria-base';\n\n@Directive({\n  selector: '[luxAriaInvalid]'\n})\nexport class LuxAriaInvalidDirective extends LuxAriaBase<string> {\n  protected ariaTagName = 'aria-invalid';\n  _luxAriaInvalid?: string;\n\n  @Input() luxAriaInvalidSelector?: string;\n\n  @Input()\n  get luxAriaInvalid() {\n    return this._luxAriaInvalid;\n  }\n\n  set luxAriaInvalid(invalid: string | undefined) {\n    this._luxAriaInvalid = invalid;\n\n    this.renderAria();\n  }\n\n  getSelector(): string | undefined {\n    return this.luxAriaInvalidSelector;\n  }\n\n  getValue(): string | undefined {\n    return this._luxAriaInvalid;\n  }\n}\n","import { Directive, Input } from '@angular/core';\nimport { LuxAriaBase } from './lux-aria-base';\n\n@Directive({\n  selector: '[luxAriaLabelledby]'\n})\nexport class LuxAriaLabelledbyDirective extends LuxAriaBase<string> {\n  protected ariaTagName = 'aria-labelledby';\n  _luxAriaLabelledby?: string;\n\n  @Input() luxAriaLabelledbySelector?: string;\n\n  @Input()\n  get luxAriaLabelledby() {\n    return this._luxAriaLabelledby;\n  }\n\n  set luxAriaLabelledby(labelledby: string | undefined) {\n    this._luxAriaLabelledby = labelledby;\n\n    this.renderAria();\n  }\n\n  constructor() {\n    super();\n    if (!this.luxAriaLabelledbySelector) {\n      const tagName = this.elementRef.nativeElement.tagName.toLowerCase();\n      if (tagName === 'lux-button') {\n        this.luxAriaLabelledbySelector = 'button';\n      } else if (tagName === 'lux-app-header-action-nav-item') {\n        this.luxAriaLabelledbySelector = 'button';\n      }\n    }\n  }\n\n  getSelector(): string | undefined {\n    return this.luxAriaLabelledbySelector;\n  }\n\n  getValue(): string | undefined {\n    return this._luxAriaLabelledby;\n  }\n}\n","import { Directive, Input } from '@angular/core';\nimport { LuxAriaBase } from './lux-aria-base';\n\n@Directive({ \n  selector: '[luxAriaRequired]'\n})\nexport class LuxAriaRequiredDirective extends LuxAriaBase<boolean> {\n  protected ariaTagName = 'aria-required';\n  _luxAriaRequired?: boolean;\n\n  @Input() luxAriaRequiredSelector?: string;\n\n  @Input()\n  get luxAriaRequired() {\n    return this._luxAriaRequired;\n  }\n\n  set luxAriaRequired(required: boolean | undefined) {\n    this._luxAriaRequired = required;\n\n    this.renderAria();\n  }\n\n  getSelector(): string | undefined {\n    return this.luxAriaRequiredSelector;\n  }\n\n  getValue(): boolean | undefined {\n    return this._luxAriaRequired;\n  }\n}\n","import { Directive, Input } from '@angular/core';\nimport { LuxAriaBase } from './lux-aria-base';\n\n@Directive({\n  selector: '[luxAriaRole]'\n})\nexport class LuxAriaRoleDirective extends LuxAriaBase<string> {\n  protected ariaTagName = 'role';\n  _luxAriaRole?: string;\n\n  @Input() luxAriaRoleSelector?: string;\n\n  @Input()\n  get luxAriaRole() {\n    return this._luxAriaRole;\n  }\n\n  set luxAriaRole(role: string | undefined) {\n    this._luxAriaRole = role;\n\n    this.renderAria();\n  }\n\n  getSelector(): string | undefined {\n    return this.luxAriaRoleSelector;\n  }\n\n  getValue(): string | undefined {\n    return this._luxAriaRole;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'luxRenderProperty', pure: false })\nexport class LuxRenderPropertyPipe implements PipeTransform {\n  transform(value: any, renderPropertyName: string): string {\n    if (!renderPropertyName) {\n      return value;\n    }\n\n    if (!value || !value[renderPropertyName]) {\n      return '';\n    }\n\n    return value[renderPropertyName];\n  }\n}\n","import { Directive, ElementRef, Input, Renderer2, inject } from '@angular/core';\n\n@Directive({ selector: '[luxNameAttr]' })\nexport class LuxNameDirectiveDirective {\n  protected elementRef = inject(ElementRef);\n  protected renderer = inject(Renderer2);\n\n  _luxNameAttr? = '';\n\n  @Input()\n  get luxNameAttr() {\n    return this._luxNameAttr;\n  }\n\n  set luxNameAttr(name: string | undefined) {\n    this._luxNameAttr = name;\n\n    if (this._luxNameAttr) {\n      this.renderer.setAttribute(this.elementRef.nativeElement, 'name', this._luxNameAttr);\n    } else {\n      this.renderer.removeAttribute(this.elementRef.nativeElement, 'name');\n    }\n  }\n}\n","import { AfterViewInit, Component, TemplateRef, ViewChild } from '@angular/core';\nimport { LuxUtil } from '../../../lux-util/lux-util';\n\n@Component({\n  selector: 'lux-form-hint',\n  template: '<ng-template><ng-content></ng-content></ng-template>'\n})\nexport class LuxFormHintComponent implements AfterViewInit {\n  @ViewChild(TemplateRef, { static: true }) templateRef!: TemplateRef<any>;\n\n  constructor() {}\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('templateRef', this.templateRef);\n  }\n}\n","import { AfterViewInit, Component, TemplateRef, ViewChild } from '@angular/core';\nimport { LuxUtil } from '../../../lux-util/lux-util';\n\n@Component({\n  selector: 'lux-form-label',\n  template: '<ng-template><ng-content></ng-content></ng-template>'\n})\nexport class LuxFormLabelComponent implements AfterViewInit {\n  @ViewChild(TemplateRef, { static: true }) templateRef!: TemplateRef<any>;\n\n  constructor() {}\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('templateRef', this.templateRef);\n  }\n}\n","import {\n  ChangeDetectorRef,\n  ContentChild,\n  Directive,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild,\n  inject\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, FormControl, FormGroup, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { v4 as uuidv4 } from 'uuid';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { LuxConsoleService } from '../../lux-util/lux-console.service';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxFormHintComponent } from '../lux-form-control/lux-form-control-subcomponents/lux-form-hint.component';\nimport { LuxFormLabelComponent } from '../lux-form-control/lux-form-control-subcomponents/lux-form-label.component';\n\nexport declare type LuxValidationErrors = ValidationErrors;\nexport declare type ValidatorFnType = ValidatorFn | ValidatorFn[] | null | undefined;\nexport declare type LuxErrorCallbackFnType = (value: any, errors: LuxValidationErrors) => string | undefined;\n\n@Directive()\nexport abstract class LuxFormComponentBase<T = any> implements OnInit, DoCheck, OnDestroy {\n  protected static readonly DEFAULT_CTRL_NAME: string = 'control';\n\n  protected _formValueChangeSub?: Subscription;\n  protected _formStatusChangeSub?: Subscription;\n  protected _configSubscription?: Subscription;\n\n  private hasHadRequiredValidator = false;\n\n  protected latestErrors: any = null;\n  protected _initialValue?: any;\n  protected _initialDisabled?: boolean;\n  protected _luxDisabled = false;\n  protected _luxReadonly = false;\n  protected _luxRequired = false;\n  protected _luxControlValidators?: ValidatorFnType;\n\n  errorMessage: string | undefined = undefined;\n\n  protected controlContainer = inject(ControlContainer, { optional: true });\n  protected cdr = inject(ChangeDetectorRef);\n  protected logger = inject(LuxConsoleService);\n  protected configService = inject(LuxComponentsConfigService);\n  protected tService = inject(TranslocoService);\n\n  inForm = false;\n  formGroup!: FormGroup;\n  formControl!: FormControl<T>;\n\n  uid = '';\n\n  @ContentChild(LuxFormLabelComponent) formLabelComponent?: LuxFormLabelComponent;\n  @ContentChild(LuxFormHintComponent) formHintComponent?: LuxFormHintComponent;\n\n  @ViewChild(LuxFormControlWrapperComponent) formControlWrapperComponent?: LuxFormControlWrapperComponent;\n  @ViewChild(LuxFormControlWrapperComponent, { read: ElementRef}) formControlWrapperComponentRef?: ElementRef;\n\n  @HostBinding('class.lux-form-control-readonly') cssReadonly = false;\n\n  @Output() luxFocusIn = new EventEmitter<FocusEvent>();\n  @Output() luxFocusOut = new EventEmitter<FocusEvent>();\n  @Output() luxDisabledChange = new EventEmitter<boolean>();\n\n  @Input() luxId = '';\n  @Input() luxHint = '';\n  @Input() luxHintShowOnlyOnFocus = false;\n  @Input() luxLabel = '';\n  @Input() luxLabelLongFormat = false;\n\n  @Input() luxControlBinding?: string;\n  @Input() luxErrorMessage?: string;\n  @Input() luxErrorCallback: LuxErrorCallbackFnType = () => undefined;\n  @Input() luxDense = false;\n\n  get luxFormControl(): FormControl<T> {\n    return this.formControl;\n  }\n\n  @Input() set luxFormControl(formControl: FormControl<T>) {\n    this.formControl = formControl;\n  }\n\n  get luxFormGroup(): FormGroup {\n    return this.formGroup;\n  }\n\n  @Input() set luxFormGroup(formGroup: FormGroup) {\n    this.formGroup = formGroup;\n  }\n\n  get luxControlValidators(): ValidatorFnType {\n    return this._luxControlValidators;\n  }\n\n  @Input() set luxControlValidators(validators: ValidatorFnType) {\n    this._luxControlValidators = validators;\n    this.updateValidators(validators, false);\n  }\n\n  get luxDisabled(): boolean {\n    return this._luxDisabled;\n  }\n\n  @Input() set luxDisabled(disabled: boolean) {\n    this._luxDisabled = disabled;\n    this.cdr.detectChanges();\n\n    if (this.formControl) {\n      this.handleFormDisabledState();\n    } else {\n      this._initialDisabled = disabled;\n    }\n\n    this.luxDisabledChange.emit(this._luxDisabled);\n  }\n\n  get luxReadonly(): boolean {\n    return this._luxReadonly;\n  }\n\n  @Input() set luxReadonly(readonly: boolean) {\n    this._luxReadonly = readonly;\n    this.cssReadonly = readonly;\n    this.cdr.detectChanges();\n  }\n\n  get luxRequired(): boolean {\n    return this._luxRequired;\n  }\n\n  @Input() set luxRequired(required: boolean) {\n    if (this.inForm) {\n      this.logger.error(\n        `Attention: Use the Required-Validator instead of the ` +\n          `Property \"luxRequired\" for components within ReactiveForms..\\n` +\n          `Affected component: ${this.luxControlBinding ? this.luxControlBinding : 'No binding found'}`\n      );\n    } else {\n      this._luxRequired = required;\n      this.updateValidators(this.luxControlValidators, true);\n      this.cdr.detectChanges();\n    }\n  }\n\n  ngOnInit() {\n    if (this.luxId) {\n      this.uid = this.luxId;\n    } else {\n      this.uid = 'lux-form-control-' + uuidv4();\n    }\n\n    this.initFormControl();\n    this.initFormValueSubscription();\n    this.initFormStateSubscription();\n    this.updateValidators(this.luxControlValidators, true);\n  }\n\n  ngDoCheck() {\n    // Prüfen, ob es neue Fehlermeldungen gibt, wenn ja diese laden und speichern.\n    if (this.latestErrors !== this.formControl.errors && this.formControl.touched) {\n      this.latestErrors = this.formControl.errors;\n      this.errorMessage = this.fetchErrorMessage();\n    }\n  }\n\n  ngOnDestroy() {\n    if (this._formValueChangeSub) {\n      this._formValueChangeSub.unsubscribe();\n    }\n\n    if (this._formStatusChangeSub) {\n      this._formStatusChangeSub.unsubscribe();\n    }\n\n    if (this._configSubscription) {\n      this._configSubscription.unsubscribe();\n    }\n  }\n\n  /**\n   * Versucht eine Fehlermeldung für diese Komponente auszulesen und gibt diese zurück.\n   * Wenn das Element nicht den \"touched\"-Zustand besitzt, wird keine Fehlermeldung zurückgegeben.\n   */\n  protected fetchErrorMessage(): string | undefined {\n    // Control undefined/null oder unberührt? Keinen Fehler ausgeben\n    if (!this.formControl || !this.formControl.touched) {\n      return undefined;\n    }\n    const { value, errors } = this.formControl;\n\n    let errorMsg = undefined;\n    if (errors) {\n      // Gibt der Callback bereits einen User-definierten Fehler wieder? Diesen zurückgeben.\n      errorMsg = this.luxErrorMessage\n        ? this.luxErrorMessage\n        : this.luxErrorCallback\n          ? this.luxErrorCallback(value, errors || {})\n          : undefined;\n      if (errors && errorMsg) {\n        return errorMsg;\n      }\n\n      // Eventuell falls vorhanden Fehlerbehandlung der ableitenden Komponente aufrufen\n      errorMsg = this.errorMessageModifier(value, errors || {});\n      if (errorMsg) {\n        return errorMsg;\n      }\n      // Last-but-not-least => versuchen einen Standardfehler auszulesen\n      errorMsg = LuxUtil.getErrorMessage(this.tService, this.formControl as FormControl<T>);\n    }\n\n    return errorMsg;\n  }\n\n  /**\n   * Überträgt den Input-Wert aus disabled auf das FormControl.\n   */\n  protected handleFormDisabledState() {\n    if (this.luxDisabled && !this.formControl.disabled) {\n      this.formControl.disable();\n    }\n\n    if (!this.luxDisabled && this.formControl.disabled) {\n      this.formControl.enable();\n    }\n  }\n\n  /**\n   * Method-Stub der von ableitenden Klassen genutzt werden kann, um\n   * weitergreifende Fehlermeldungen anzugeben.\n   * @param value\n   * @param errors\n   */\n  protected errorMessageModifier(value: any, errors: LuxValidationErrors): string | undefined {\n    return undefined;\n  }\n\n  /**\n   * Standard-Getter Funktion für den aktuellen Wert in dieser FormComponent.\n   */\n  protected getValue(): T {\n    return this.formControl ? this.formControl.value : this._initialValue;\n  }\n\n  /**\n   * Standard-Setter Funktion für den aktuellen Wert in dieser FormComponent.\n   * @param value\n   */\n  protected setValue(value: T) {\n    // Wenn noch kein FormControl vorhanden, den init-Wert merken und Fn beenden\n    if (!this.formControl) {\n      this._initialValue = value;\n      return;\n    }\n\n    // Wenn der Wert bereits in dem FormControl bekannt ist, die Fn beenden\n    if (value === this.formControl.value) {\n      return;\n    }\n    // Den Wert im FormControl merken\n    this.formControl.setValue(value);\n  }\n\n  /**\n   * Wird nach der Aktualisierung des Wertes aufgerufen.\n   * Hier kann z.B. valueChange.emit() ausgeführt werden.\n   * @param formValue\n   */\n  protected notifyFormValueChanged(formValue: any) {}\n\n  /**\n   * Wird nach der Aktualisierung des Status aufgerufen.\n   * @param formStatus\n   */\n  protected notifyFormStatusChanged(formStatus: any) {\n    if (this.inForm && (formStatus === 'VALID' || formStatus === 'INVALID')) {\n      this.updateValidatorsInForm();\n    }\n  }\n\n  /**\n   * Prüft, ob das übergebene Control einen required-Validator besitzt.\n   * @param abstractControl\n   */\n  protected hasRequiredValidator(abstractControl: AbstractControl) {\n    if (abstractControl.validator) {\n      const validator = abstractControl.validator({} as AbstractControl);\n      if (validator && (validator['required'] || validator['requiredTrue'])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Initialisiert die FormGroup und das FormControl abhängig davon, ob es sich um eine ReactiveForm-Component\n   * handelt.\n   */\n  protected initFormControl() {\n    this.inForm = (!!this.controlContainer || !!this.formGroup) && !!this.luxControlBinding;\n\n    if (this.inForm && this.luxControlBinding) {\n      if (!this.formGroup) {\n        this.formGroup = this.controlContainer?.control as FormGroup;\n      }\n      if (!this.formControl) {\n        this.formControl = this.formGroup.controls[this.luxControlBinding] as FormControl<T>;\n      }\n      this.updateValidatorsInForm();\n    } else {\n      if (!this.formGroup) {\n        this.formGroup = new FormGroup({\n          control: new FormControl()\n        });\n        this.formControl = this.formGroup.get(LuxFormComponentBase.DEFAULT_CTRL_NAME) as FormControl<T>;\n      }\n      this.formControl.setValue(this._initialValue);\n    }\n\n    if (this._initialDisabled) {\n      this.formControl.disable();\n    }\n\n    this.luxDisabled = this.formControl.disabled;\n  }\n\n  /**\n   * Initialisiert das Handling von Wertaktualisierungen.\n   * Setzt den (optional vorhanden) Initial-Wert und folgende Änderungen über das FormControl.\n   */\n  protected initFormValueSubscription() {\n    if (this._initialValue !== null && this._initialValue !== undefined) {\n      this.setValue(this._initialValue);\n    }\n\n    // Aktualisierungen an dem FormControl-Value sollen auch via EventEmitter bekannt gemacht werden\n    this._formValueChangeSub = this.formControl.valueChanges.pipe(distinctUntilChanged()).subscribe((value: any) => {\n      this.notifyFormValueChanged(value);\n    });\n  }\n\n  /**\n   * Initialisiert das Handling von Statusaktualisierungen.\n   */\n  protected initFormStateSubscription() {\n    this._formStatusChangeSub = this.formControl.statusChanges.subscribe((status: any) => {\n      if (status === 'DISABLED' && !this.luxDisabled) {\n        // Das FormControl hat den Zustand \"DISABLED\", aber die Property \"luxDisabled\"\n        // hat noch den Wert \"false\". D.h. der FormControl-Status und die Property\n        // sind nicht mehr synchron.\n        this.luxDisabled = true;\n      } else if ((status === 'VALID' || status === 'INVALID') && this.luxDisabled) {\n        // Das FormControl hat den Zustand \"VALID\" oder \"INVALID\" und ist aktiv,\n        // aber die Property \"luxDisabled\" hat noch den Wert \"true\".\n        // D.h. der FormControl-Status und die Property sind nicht mehr synchron.\n        this.luxDisabled = false;\n      }\n\n      this.notifyFormStatusChanged(status);\n    });\n  }\n\n  /**\n   * Diese Funktion prüft ob luxRequired auf true gesetzt wurde und die übergebenen validators bereits den\n   * required-Validator besitzen.\n   * Für den Fall das luxRequired auf false gesetzt worden ist, wird der Validator entfernt.\n   *\n   * Hinweis: LuxFormCheckableBase überschreibt diese Funktion, um statt required requiredTrue zu setzen.\n   * @param validators\n   */\n  protected checkValidatorsContainRequired(validators: ValidatorFnType) {\n    if (this.luxRequired !== null && this.luxRequired !== undefined) {\n      if (this.luxRequired) {\n        // Fall: required = true, aber neue Validatoren werden gesetzt.\n        // Sind es mehrere Validatoren, aber kein \"required\"? Dann wird er ergänzt\n        if (Array.isArray(validators) && validators.indexOf(Validators.required) === -1) {\n          validators.push(Validators.required);\n        } else if (validators && !Array.isArray(validators) && validators !== Validators.required) {\n          // Ist es nur ein einzelner Validator und nicht \"required\"? Dann Array erstellen und beide kombinieren.\n          validators = [validators, Validators.required];\n        }\n      } else {\n        if (Array.isArray(validators)) {\n          validators = validators.filter((validator: ValidatorFn) => validator !== Validators.required);\n        } else if (validators === Validators.required) {\n          validators = undefined;\n        }\n      }\n    } else {\n      // Die Aufrufe mit \"null\" und \"undefined\" werden an dieser Stelle absichtlich nicht weiter behandelt.\n      // Todo: Mit der neuen Angular-Version sind neue Methoden wie z.B. FormControl.hasValidator hinzugekommen.\n      //       D.h. die komplizierte Behandlung von Validators.required kann vereinfacht werden.\n    }\n\n    return validators;\n  }\n\n  /**\n   * Versucht die Validatoren für diese Komponente zu setzen.\n   * Ist nur erfolgreich, wenn es sich hierbei nicht um eine ReactiveForm-Komponente handelt.\n   * @param validators\n   * @param checkRequiredValidator\n   */\n  protected updateValidators(validators: ValidatorFnType, checkRequiredValidator: boolean) {\n    if ((!Array.isArray(validators) && validators) || (Array.isArray(validators) && validators.length > 0)) {\n      if (!this.inForm) {\n        setTimeout(() => {\n          if (checkRequiredValidator) {\n            this._luxControlValidators = this.checkValidatorsContainRequired(validators);\n          }\n          this.formControl.setValidators(this.luxControlValidators ?? null);\n          this.formControl.updateValueAndValidity();\n        });\n      } else {\n        this.logger.warn(\n          `\nDie Validatoren des Formularelements (luxControlBinding=${this.luxControlBinding}) können ausschließlich über das Formular gesetzt werden,\naber nicht über das Property 'luxControlValidators'. Dieser Aufruf wurde ignoriert!`\n        );\n      }\n    }\n  }\n\n  private updateValidatorsInForm() {\n    const hasRequiredValidator = this.hasRequiredValidator(this.formControl);\n    if (this.hasHadRequiredValidator !== hasRequiredValidator) {\n      this._luxRequired = hasRequiredValidator;\n    }\n\n    this.hasHadRequiredValidator = hasRequiredValidator;\n  }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-input-ac-prefix',\n  template: ` <ng-content></ng-content> `,\n  styles: []\n})\nexport class LuxInputAcPrefixComponent {\n  constructor() {}\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-input-ac-suffix',\n  template: ` <ng-content></ng-content> `,\n  styles: []\n})\nexport class LuxInputAcSuffixComponent {\n  constructor() {}\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport { MatOption } from '@angular/material/core';\nimport { MatPrefix, MatSuffix } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { ReplaySubject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, startWith } from 'rxjs/operators';\nimport { LuxAriaDescribedbyDirective } from '../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxRenderPropertyPipe } from '../../lux-pipes/lux-render-property/lux-render-property.pipe';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxNameDirectiveDirective } from '../lux-form-control/lux-form-directives/lux-name/lux-name-directive.directive';\nimport { LuxFormComponentBase, LuxValidationErrors } from '../lux-form-model/lux-form-component-base.class';\nimport { LuxInputAcPrefixComponent } from '../lux-input-ac/lux-input-ac-subcomponents/lux-input-ac-prefix.component';\nimport { LuxInputAcSuffixComponent } from '../lux-input-ac/lux-input-ac-subcomponents/lux-input-ac-suffix.component';\n\n@Component({\n  selector: 'lux-autocomplete-ac',\n  templateUrl: './lux-autocomplete-ac.component.html',\n  styleUrls: ['./lux-autocomplete-ac.component.scss'],\n  imports: [\n    LuxFormControlWrapperComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatPrefix,\n    MatInput,\n    MatAutocompleteTrigger,\n    LuxNameDirectiveDirective,\n    MatSuffix,\n    MatAutocomplete,\n    MatOption,\n    NgTemplateOutlet,\n    LuxAriaDescribedbyDirective,\n    LuxTagIdDirective,\n    LuxRenderPropertyPipe\n  ]\n})\nexport class LuxAutocompleteAcComponent<V = any, O = any> extends LuxFormComponentBase<V> implements OnInit, OnDestroy, AfterViewInit {\n  tservice = inject(TranslocoService);\n  \n  private selected$: ReplaySubject<any> = new ReplaySubject<any>(1);\n  private subscriptions: Subscription[] = [];\n  private valueChangeSubscription?: Subscription;\n\n  filteredOptions: O[] = [];\n  displayedOptions: O[] = [];\n  loadingRunning = false;\n  activeIndex = -1;\n  focused = false;\n  _luxOptions: O[] = [];\n  autoFillObserver = new MutationObserver((mutations) => {\n    mutations.forEach((mutation) => {\n      if (this.luxStrict && mutation.attributeName === 'class') {\n        const targetElement = mutation.target as HTMLElement;\n        if (targetElement.classList && targetElement.classList.contains('cdk-text-field-autofilled')) {\n          this.updateFormControlValue();\n          this.formControl.markAsTouched();\n        }\n      }\n    });\n  });\n\n  @Input() luxPlaceholder = '';\n  @Input() luxOptionLabelProp = 'label';\n  @Input() luxLookupDelay = 500;\n  @Input() luxErrorMessageNotAnOption = '';\n  @Input() luxTagId?: string;\n  @Input() luxSelectAllOnClick = true;\n  @Input() luxStrict = true;\n  @Input() luxName?: string;\n  @Input() luxPickValue?: ((selected: O | null | undefined) => V) | undefined;\n  @Input() luxFilterFn?: (filterTerm: string, label: string, option: any) => boolean;\n  @Input() luxPanelWidth: string | number = '';\n  @Input() luxNoLabels = false;\n  @Input() luxNoTopLabel = false;\n  @Input() luxNoBottomLabel = false;\n  @Input() luxOptionBlockSize = 500;\n\n  @Output() luxValueChange = new EventEmitter<V | null>();\n  @Output() luxOptionSelected = new EventEmitter<V | null>();\n  @Output() luxBlur = new EventEmitter<FocusEvent>();\n  @Output() luxFocus = new EventEmitter<FocusEvent>();\n\n  @ContentChild('labelTemplate', { read: TemplateRef }) labelTemplate?: TemplateRef<any>;\n  @ContentChild(LuxInputAcPrefixComponent) inputPrefix?: LuxInputAcPrefixComponent;\n  @ContentChild(LuxInputAcSuffixComponent) inputSuffix?: LuxInputAcSuffixComponent;\n\n  @ViewChild('autoCompleteInput', { read: MatAutocompleteTrigger }) matAutoComplete!: MatAutocompleteTrigger;\n  @ViewChild('autoCompleteInput', { read: ElementRef }) matInput!: ElementRef;\n  @ViewChild(MatAutocomplete) matAutocompleteComponent!: MatAutocomplete;\n\n  get luxValue(): V {\n    return this.getValue();\n  }\n\n  @Input() set luxValue(value: V) {\n    if (value instanceof Object && !!this.luxPickValue) {\n      this.setValue(this.luxPickValue(value as any));\n    } else {\n      this.setValue(value);\n    }\n  }\n\n  get luxOptions(): O[] {\n    return this._luxOptions;\n  }\n\n  @Input()\n  set luxOptions(options: O[]) {\n    this._luxOptions = options ? options : [];\n\n    if (this.formControl) {\n      this.updateFilterOptions();\n      this.registerNewValueChangesListener();\n    }\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n\n    this.subscriptions.push(\n      this.selected$.pipe(distinctUntilChanged()).subscribe((value) => {\n        if (this.luxStrict) {\n          if (value === '' || value === null || value === undefined) {\n            this.luxOptionSelected.emit(null);\n            this.luxValueChange.emit(null);\n          } else {\n            const selectedOption = this.getPickValueOption(value);\n\n            let selected: V | null;\n            if (selectedOption instanceof Object && !!this.luxPickValue) {\n              selected = this.luxPickValue(selectedOption);\n            } else {\n              selected = selectedOption as any;\n            }\n\n            if (selected) {\n              this.luxOptionSelected.emit(selected);\n              this.luxValueChange.emit(selected);\n            }\n          }\n        } else {\n          this.luxOptionSelected.emit(value);\n          this.luxValueChange.emit(value);\n        }\n      })\n    );\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n\n    this.subscriptions.forEach((sub) => sub.unsubscribe());\n    this.valueChangeSubscription?.unsubscribe();\n\n    try {\n      this.autoFillObserver.disconnect();\n    } catch (error) {\n      // Nothing to do\n    }\n  }\n\n  ngAfterViewInit() {\n    this.subscriptions.push(\n      this.matAutoComplete.panelClosingActions.pipe(debounceTime(this.luxLookupDelay)).subscribe(() => {\n        this.updateFormControlValue();\n      })\n    );\n\n    this.subscriptions.push(\n      this.matAutocompleteComponent._keyManager.change.subscribe((index) => {\n        if (this.loadingRunning && index === -1) {\n          // Workaround: Bei Änderungen an den Optionen wird der Aktivindex zurückgesetzt!\n          //\n          // Beim Nachladen werden die Optionen verändert und der Aktivindex\n          // im KeyManager wird zurückgesetzt. D.h. der nächste Klick auf die\n          // Pfeiltaste (nach unten) aktiviert nicht die nächste Option, sondern\n          // die erste Option am Anfang der Liste. Aus diesem Grund wird hier\n          // der letzte Aktivindex wiederhergestellt, damit der Benutzer dort\n          // weitermachen kann, wo er aufgehört hat.\n          //\n          // Siehe: _MatAutocompleteTriggerBase._subscribeToClosingActions\n          // this._resetActiveItem();\n          setTimeout(() => {\n            this.matAutocompleteComponent._keyManager.setActiveItem(this.activeIndex!);\n            this.loadingRunning = false;\n          });\n        }\n      })\n    );\n\n    this.subscriptions.push(\n      this.matAutocompleteComponent.opened.subscribe(() => {\n        setTimeout(() => {\n          if (this.matAutocompleteComponent.panel) {\n            this.matAutocompleteComponent.panel.nativeElement.addEventListener('scroll', this.loadOnScroll.bind(this));\n          }\n        });\n      })\n    );\n\n    this.subscriptions.push(\n      this.matAutocompleteComponent.closed.subscribe(() => {\n        this.updateFilterOptions();\n        this.matAutocompleteComponent.panel.nativeElement.removeEventListener('scroll', this.loadOnScroll);\n      })\n    );\n\n    this.registerNewValueChangesListener();\n\n    this.autoFillObserver.observe(this.matInput.nativeElement, {\n      attributes: true,\n      childList: false,\n      characterData: false\n    });\n  }\n\n  /**\n   * Stößt das Nachladen von Elementen an, wenn ein bestimmter Scrollwert erreicht wurde.\n   * @param event - ScrollEvent\n   */\n  private loadOnScroll(event: Event) {\n    const position = event.target as any;\n    if (position && (position.scrollTop + position.clientHeight) / position.scrollHeight > 85 / 100) {\n      this.updateDisplayedEntries();\n    }\n  }\n\n  /**\n   * Läd den nächsten Block Daten aus den Entries nach.\n   */\n  updateDisplayedEntries() {\n    if (this.filteredOptions.length > 0) {\n      this.loadingRunning = true;\n      this.activeIndex = this.matAutocompleteComponent._keyManager.activeItemIndex ?? -1;\n      const start = 0;\n      const end = Math.min(this.luxOptionBlockSize, this.filteredOptions.length);\n      this.displayedOptions.push(...this.filteredOptions.splice(start, end));\n    }\n  }\n\n  /**\n   * @override\n   * @param value\n   * @param errors\n   */\n  override errorMessageModifier(value: any, errors: LuxValidationErrors): string | undefined {\n    if (errors['incorrect']) {\n      return this.luxErrorMessageNotAnOption || this.tservice.translate('luxc.autocomplete.error_message.not_an_option');\n    }\n    return undefined;\n  }\n\n  /**\n   * Regelt die Darstellung der gewählten Option im Normalfall.\n   * (Ausnahme: Focus-Verlust)\n   * @param value\n   * @returns string\n   */\n  displayFn(value: any): string {\n    let selected;\n    if (this.luxStrict && !!this.luxPickValue) {\n      selected = this.getPickValueOption(value);\n    } else {\n      selected = this.luxValue;\n    }\n    return this.getOptionLabel(selected);\n  }\n\n  /**\n   * Filtert das Options-Array nach dem filterTerm und\n   * gibt das Ergebnis als Array zurück.\n   * @param filterTerm\n   * @returns any[]\n   */\n  filter(filterTerm: any) {\n    return this.luxOptions.filter((option) => {\n      const filterText = filterTerm.trim().toLowerCase();\n      const optionLabel = this.getOptionLabel(option).trim().toLowerCase();\n\n      if (this.luxFilterFn) {\n        return this.luxFilterFn(filterText, optionLabel, option);\n      } else {\n        return optionLabel.indexOf(filterText) > -1;\n      }\n    });\n  }\n\n  /**\n   * Click-Event Handling\n   * selektiert den gesamten Text im Input, wenn selectAllOnClick = true ist.\n   * @param clickEvent\n   */\n  onClick(clickEvent: any) {\n    if (this.luxSelectAllOnClick) {\n      clickEvent.target.setSelectionRange(0, clickEvent.target.value.length);\n    }\n  }\n\n  /**\n   * Gibt den darzustellenden Wert einer Option bzw.\n   * die Option selbst (wenn string) wider.\n   * @param option\n   * @returns any\n   */\n  getOptionLabel(option: any) {\n    if (typeof option === 'string') {\n      return option;\n    } else if (!option) {\n      return '';\n    } else {\n      return option[this.luxOptionLabelProp];\n    }\n  }\n\n  selected(selectedEvent: MatAutocompleteSelectedEvent) {\n    if (this.luxStrict && !!this.luxPickValue) {\n      this.luxValue = this.luxPickValue(selectedEvent.option.value);\n    } else {\n      this.luxValue = selectedEvent.option.value;\n    }\n  }\n\n  onFocus(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocus.emit(e);\n  }\n\n  onFocusIn(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocusIn.emit(e);\n  }\n\n  onFocusOut(e: FocusEvent) {\n    this.updateFormControlValue();\n    this.focused = false;\n    this.luxFocusOut.emit(e);\n  }\n\n  descripedBy() {\n    if (this.errorMessage) {\n      return this.uid + '-error';\n    } else {\n      return (this.formHintComponent || this.luxHint) && (!this.luxHintShowOnlyOnFocus || (this.luxHintShowOnlyOnFocus && this.focused))\n        ? this.uid + '-hint'\n        : undefined;\n    }\n  }\n\n  private handleErrors() {\n    const errors = this.formControl ? this.formControl.errors : null;\n    if (\n      this.luxOptions.indexOf(this.luxStrict ? this.getPickValueOption(this.luxValue as any) : (this.luxValue as any)) > -1 ||\n      (!!errors && Object.keys(errors).length > 0 && errors['required'])\n    ) {\n      this.handleOtherErrors(errors);\n    } else {\n      this.handleIncorrectError(errors);\n    }\n  }\n\n  private handleOtherErrors(errors: any) {\n    if (errors && errors['incorrect']) {\n      delete errors['incorrect'];\n    }\n\n    this.formControl.setErrors(errors && Object.keys(errors).length !== 0 ? errors : null);\n  }\n\n  private handleIncorrectError(errors: any) {\n    if (this.luxStrict && this.luxValue) {\n      errors = errors ? errors : {};\n      if (!errors['incorrect']) {\n        errors['incorrect'] = true;\n      }\n      this.formControl.setErrors(errors);\n    }\n  }\n\n  override notifyFormValueChanged(formValue: any) {\n    let newValue;\n    if (this.luxStrict) {\n      newValue = formValue instanceof Object && !!this.luxPickValue ? this.luxPickValue(formValue) : formValue;\n    } else {\n      newValue = formValue;\n    }\n\n    this.selected$.next(newValue);\n\n    if (this.matInput && this.matInput.nativeElement && newValue) {\n      if ((typeof newValue === 'string' || newValue instanceof String) && newValue) {\n        this.matInput.nativeElement.value = newValue;\n      } else if (newValue[this.luxOptionLabelProp]) {\n        this.matInput.nativeElement.value = newValue[this.luxOptionLabelProp];\n      }\n    }\n  }\n\n  private getPickValueOption(value: O): O | null {\n    const pickValue = value instanceof Object && !!this.luxPickValue ? this.luxPickValue(value) : value;\n    const found = this.luxOptions.find((currentOption) => {\n      const pickOptionValue = currentOption instanceof Object && !!this.luxPickValue ? this.luxPickValue(currentOption) : currentOption;\n      return pickValue === pickOptionValue;\n    });\n\n    return found ?? null;\n  }\n\n  private updateFilterOptions() {\n    this.filteredOptions = this.filterOptions();\n    this.displayedOptions = [];\n    this.updateDisplayedEntries();\n  }\n\n  private registerNewValueChangesListener() {\n    // Die alte Subscription entfernen.\n    if (this.valueChangeSubscription) {\n      this.valueChangeSubscription.unsubscribe();\n    }\n\n    // Eine neue Subscription hinzufügen.\n    this.valueChangeSubscription = this.formControl.valueChanges\n      .pipe(\n        startWith(''),\n        debounceTime(this.luxLookupDelay),\n        map(() => {\n          return this.filterOptions();\n        })\n      )\n      .subscribe((result) => {\n        this.filteredOptions = result;\n        this.displayedOptions = [];\n        this.updateDisplayedEntries();\n      });\n  }\n\n  private filterOptions() {\n    const filterLabel = this.matInput.nativeElement.value;\n    return filterLabel ? this.filter(filterLabel) : [...this.luxOptions];\n  }\n\n  private updateFormControlValue() {\n    if (this.luxStrict) {\n      const filterResult = this.filter(this.matInput.nativeElement.value);\n\n      if (filterResult.length === 1 && this.luxOptions.length > 1) {\n        let selected;\n        if (this.luxStrict && !!this.luxPickValue) {\n          selected = this.luxPickValue(filterResult[0]);\n        } else {\n          selected = filterResult[0];\n        }\n        this.formControl.setValue(selected as any);\n      }\n\n      this.handleErrors();\n    }\n  }\n\n  /**\n   * Wrapper-Klick: Fokus setzen und Panel öffnen (falls erlaubt).\n   * Verwendet mousedown statt click, um Event-Bubbling nicht zu stören.\n   */\n  onWrapperClick(event: MouseEvent) {\n    if (this.luxDisabled || this.luxReadonly) {\n      return;\n    }\n\n    // Nicht auf mat-option Elemente reagieren (diese haben ihre eigene Logik)\n    const target = event.target as HTMLElement;\n    if (target.closest('mat-option')) {\n      return;\n    }\n\n    // Fokus auf Input\n    try {\n      this.matInput?.nativeElement?.focus();\n    } catch {\n      // Ignorieren\n    }\n\n    // Panel nur öffnen, wenn noch nicht offen\n    if (this.matAutoComplete && !this.matAutoComplete.panelOpen) {\n      this.matAutoComplete.openPanel();\n    }\n  }\n\n  /**\n   * Durch diese track-Funktion wird der folgendfe Fehler vermieden:\n   * NG0955: The provided track expression resulted in duplicated keys for a given collection.\n   * \n   * @param index\n   * @param option\n   * @returns\n   */\n  trackOption(index: number, option: O): unknown {\n    if (option === null || option === undefined) {\n      return index;\n    }\n\n    if (option instanceof Object) {\n      if (this.luxPickValue) {\n        const pickValue = this.luxPickValue(option);\n        if (pickValue !== undefined && pickValue !== null) {\n          return pickValue;\n        }\n      }\n      return option;\n    }\n\n    return `${option}-${index}`;\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  (mousedown)=\"onWrapperClick($event)\"\n  [luxFormComponent]=\"this\"\n  [formGroup]=\"formGroup\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  [luxLabelLongFormat]=\"luxLabelLongFormat\"\n  luxTagId=\"luxAutocompleteWrappper\"\n>\n  <div class=\"lux-input-row-authentic\">\n    @if (inputPrefix) {\n    <span class=\"lux-input-prefix-container\" matPrefix>\n      <ng-content select=\"lux-input-ac-prefix\"></ng-content>\n    </span>\n    }\n    <input\n      type=\"text\"\n      matInput\n      autocomplete=\"off\"\n      luxTagIdHandler\n      [luxNameAttr]=\"luxName\"\n      [luxTagId]=\"luxTagId\"\n      [formControl]=\"formControl\"\n      [placeholder]=\"luxPlaceholder\"\n      [matAutocomplete]=\"auto\"\n      [readonly]=\"luxReadonly\"\n      [required]=\"luxRequired\"\n      (click)=\"onClick($event)\"\n      (blur)=\"luxBlur.emit($event)\"\n      (focus)=\"onFocus($event)\"\n      (focusin)=\"onFocusIn($event)\"\n      (focusout)=\"onFocusOut($event)\"\n      [id]=\"uid\"\n      [luxAriaDescribedby]=\"uid + '-error ' + uid + '-hint'\"\n      #autoCompleteInput\n    />\n    @if (inputSuffix) {\n    <span class=\"lux-input-suffix-container\" matSuffix>\n      <ng-content select=\"lux-input-ac-suffix\"></ng-content>\n    </span>\n    }\n    <mat-autocomplete\n      #auto=\"matAutocomplete\"\n      class=\"lux-autocomplete-panel-ac\"\n      [class.lux-dense]=\"luxDense\"\n      [panelWidth]=\"luxPanelWidth\"\n      [disableRipple]=\"true\"\n      [displayWith]=\"displayFn.bind(this)\"\n      (optionSelected)=\"selected($event)\"\n    >\n      @for (option of displayedOptions; track trackOption($index, option)) {\n      <mat-option [value]=\"option\">\n        <ng-container *ngTemplateOutlet=\"labelTemplate || optionTemplate; context: { $implicit: option }\"></ng-container>\n      </mat-option>\n      }\n    </mat-autocomplete>\n  </div>\n</lux-form-control-wrapper>\n}\n\n<ng-template #optionTemplate let-option>\n  @if (option[luxOptionLabelProp]) {\n  {{ option | luxRenderProperty : luxOptionLabelProp }}\n  } @else {\n  {{ option }}\n  }\n</ng-template>\n","import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\nimport { LuxThemePalette } from '../../../lux-util/lux-colors.enum';\n\n@Component({\n  selector: 'lux-chip-ac-group',\n  template: ''\n})\nexport class LuxChipAcGroupComponent {\n  private _luxColor: LuxThemePalette = 'primary';\n\n  @ContentChild(TemplateRef) tempRef?: TemplateRef<any>;\n\n  @Output() luxChipClicked = new EventEmitter<number>();\n  @Output() luxChipAdded = new EventEmitter<string>();\n  @Output() luxChipRemoved = new EventEmitter<number>();\n\n  @Input() luxLabels: string[] = [];\n  @Input() luxDisabled = false;\n  @Input() luxRemovable = true;\n\n  get luxColor(): LuxThemePalette {\n    return this._luxColor;\n  }\n\n  @Input() set luxColor(color: LuxThemePalette) {\n    if (color !== 'primary' && color !== 'accent' && color !== 'warn') {\n      color = undefined;\n    }\n    this._luxColor = color;\n  }\n\n  constructor() {}\n\n  add(label: string) {\n    if (!this.luxLabels) {\n      this.luxLabels = [];\n    }\n\n    this.luxLabels.push(label);\n    this.luxChipAdded.emit(label);\n  }\n\n  remove(index: number) {\n    this.luxChipRemoved.emit(index);\n    this.luxLabels.splice(index, 1);\n  }\n\n  click(index: number) {\n    this.luxChipClicked.emit(index);\n  }\n}\n","import { AfterViewInit, Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { LuxThemePalette } from '../../../lux-util/lux-colors.enum';\nimport { LuxUtil } from '../../../lux-util/lux-util';\n\n@Component({\n  selector: 'lux-chip-ac',\n  template: `\n    <ng-template>\n      <ng-content></ng-content>\n    </ng-template>\n  `\n})\nexport class LuxChipAcComponent implements AfterViewInit {\n  private removeClicked = false;\n\n  private _luxColor: LuxThemePalette = 'primary';\n\n  @ViewChild(TemplateRef, { static: true }) templateRef!: TemplateRef<any>;\n\n  @Output() luxChipRemoved = new EventEmitter<number>();\n  @Output() luxChipClicked = new EventEmitter<number>();\n\n  @Input() luxDisabled = false;\n  @Input() luxRemovable = true;\n\n  get luxColor(): LuxThemePalette {\n    return this._luxColor;\n  }\n\n  @Input() set luxColor(color: LuxThemePalette) {\n    if (color !== 'primary' && color !== 'accent' && color !== 'warn') {\n      color = undefined;\n    }\n    this._luxColor = color;\n  }\n\n  constructor() {}\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('templateRef', this.templateRef);\n  }\n\n  remove(index: number) {\n    this.luxChipRemoved.emit(index);\n    this.removeClicked = true;\n  }\n\n  click(index: number) {\n    if (!this.removeClicked) {\n      this.luxChipClicked.emit(index);\n    }\n  }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterContentInit,\n  AfterViewInit,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  ViewChild,\n  ViewChildren\n} from '@angular/core';\nimport { MatAutocomplete, MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport { MatChip, MatChipGrid, MatChipInput, MatChipRemove, MatChipRow } from '@angular/material/chips';\nimport { MatOption } from '@angular/material/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, startWith } from 'rxjs/operators';\nimport { LuxTooltipDirective } from '../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxFormComponentBase } from '../lux-form-model/lux-form-component-base.class';\nimport { LuxChipAcGroupComponent } from './lux-chips-subcomponents/lux-chip-ac-group.component';\nimport { LuxChipAcComponent } from './lux-chips-subcomponents/lux-chip-ac.component';\n\nexport declare type LuxChipsAcOrientation = 'horizontal' | 'vertical';\nlet luxChipControlUID = 0;\n\n@Component({\n  selector: 'lux-chips-ac',\n  templateUrl: './lux-chips-ac.component.html',\n  styleUrls: ['./lux-chips-ac.component.scss'],\n  imports: [\n    LuxIconComponent,\n    LuxFormControlWrapperComponent,\n    NgClass,\n    MatChipGrid,\n    MatChipRow,\n    NgTemplateOutlet,\n    MatChipRemove,\n    MatChipInput,\n    MatAutocompleteTrigger,\n    MatAutocomplete,\n    MatOption,\n    TranslocoPipe,\n    LuxTooltipDirective\n  ]\n})\nexport class LuxChipsAcComponent extends LuxFormComponentBase<string[]> implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {\n  private subscriptions: Subscription[] = [];\n  private _luxAutocompleteOptions: string[] = [];\n\n  override uid: string = 'lux-chip-control-ac-' + luxChipControlUID++;\n\n  _filteredOptions: string[] = [];\n  displayedOptions: string[] = [];\n  loadingRunning = false;\n  activeIndex = -1;\n  onInitFinished = false;\n\n  get filteredOptions() {\n    return this._filteredOptions;\n  }\n\n  set filteredOptions(newOptions: string[]) {\n    if (newOptions && Array.isArray(newOptions)) {\n      const selectedChips = this.luxNewChipGroup && Array.isArray(this.luxNewChipGroup.luxLabels) ? this.luxNewChipGroup.luxLabels : [];\n      this._filteredOptions = newOptions.filter((option) => !selectedChips.includes(option));\n    } else {\n      this._filteredOptions = [];\n    }\n\n    if (this.onInitFinished) {\n      this.displayedOptions = [];\n      this.updateDisplayedEntries();\n    }\n  }\n\n  inputValue$: Subject<string> = new Subject<string>();\n  newChip$: Subject<any> = new Subject<any>();\n  canClose = false;\n  actionRunning = false;\n  initRunning = false;\n\n  @Input() luxOrientation: LuxChipsAcOrientation = 'horizontal';\n  @Input() luxInputAllowed = false;\n  @Input() luxNewChipGroup?: LuxChipAcGroupComponent;\n  @Input() luxStrict = false;\n  @Input() override luxLabelLongFormat = false;\n  @Input() luxPlaceholder = '';\n  @Input() luxOptionBlockSize = 500;\n  @Input() luxHideBorder = false;\n  @Input() luxInputLabelAlwaysVisible = false;\n\n  @Output() luxChipAdded = new EventEmitter<string>();\n\n  @ContentChildren(LuxChipAcComponent) luxChipComponents!: QueryList<LuxChipAcComponent>;\n  @ContentChildren(LuxChipAcGroupComponent) luxChipGroupComponents!: QueryList<LuxChipAcGroupComponent>;\n  @ViewChildren(MatChip) matChips!: QueryList<MatChip>;\n  @ViewChildren(MatChipRow, { read: ElementRef }) chipRowElements!: QueryList<ElementRef<HTMLElement>>;\n  @ViewChildren(LuxTooltipDirective) chipTooltips!: QueryList<LuxTooltipDirective>;\n\n  @ViewChild('input', { read: ElementRef }) matInput!: ElementRef;\n  @ViewChild('input', { read: MatAutocompleteTrigger }) matAutocompleteTrigger?: MatAutocompleteTrigger;\n  @ViewChild('auto', { read: MatAutocomplete }) matAutocomplete?: MatAutocomplete;\n  @ViewChild(MatAutocomplete) matAutocompleteComponent?: MatAutocomplete;\n  @ViewChild('chipsContainerDiv') chipContainerDivRef!: ElementRef;\n\n  override get luxDisabled(): boolean {\n    return this._luxDisabled;\n  }\n\n  @Input() override set luxDisabled(disabled: boolean) {\n    this._luxDisabled = disabled;\n    if (!this.initRunning) {\n      // Den Disabled-State nicht während der Initialisierung übertragen.\n      setTimeout(() => {\n        this.luxChipGroupComponents.forEach((chipGroup) => (chipGroup.luxDisabled = disabled));\n        this.luxChipComponents.forEach((chip) => (chip.luxDisabled = disabled));\n      });\n    }\n  }\n\n  get luxAutocompleteOptions(): string[] {\n    return this._luxAutocompleteOptions;\n  }\n\n  @Input() set luxAutocompleteOptions(options: string[]) {\n    this._luxAutocompleteOptions = options ? [...options] : [];\n    this.filteredOptions = this.luxAutocompleteOptions;\n  }\n\n  get luxInputLabel(): string {\n    return this.luxLabel;\n  }\n\n  @Input() set luxInputLabel(label: string) {\n    this.luxLabel = label;\n  }\n\n  get chipComponents(): LuxChipAcComponent[] {\n    return this.luxChipComponents ? this.luxChipComponents.toArray() : [];\n  }\n\n  get chipGroupComponents(): LuxChipAcGroupComponent[] {\n    return this.luxChipGroupComponents ? this.luxChipGroupComponents.toArray() : [];\n  }\n\n  constructor() {\n    super();\n\n    this.subscriptions.push(\n      this.newChip$.subscribe((value: string) => {\n        this.add(value);\n        this.filteredOptions = this.luxAutocompleteOptions ? this.luxAutocompleteOptions : [];\n      })\n    );\n\n    this.subscriptions.push(\n      this.inputValue$\n        .asObservable()\n        .pipe(\n          startWith(''),\n          distinctUntilChanged(),\n          map((value: string) => {\n            if (!value) {\n              this.filteredOptions = [...this.luxAutocompleteOptions];\n            } else {\n              this.filteredOptions = this.luxAutocompleteOptions.filter(\n                (compareValue: string) => compareValue.trim().toLowerCase().indexOf(value.trim().toLowerCase()) > -1\n              );\n            }\n          })\n        )\n        .subscribe()\n    );\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n\n    this.displayedOptions = [];\n    this.updateDisplayedEntries();\n    this.onInitFinished = true;\n  }\n\n  ngAfterContentInit() {\n    if (this.inForm && this.luxNewChipGroup) {\n      if (this.formControl.value && Array.isArray(this.formControl.value)) {\n        this.luxNewChipGroup.luxLabels = [...this.formControl.value];\n      } else {\n        this.luxNewChipGroup.luxLabels = [];\n      }\n\n      this.filteredOptions = this.luxAutocompleteOptions ? this.luxAutocompleteOptions : [];\n    }\n  }\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('chipContainerDivRef', this.chipContainerDivRef);\n\n    if (this.matAutocompleteTrigger && this.chipContainerDivRef) {\n      this.matAutocompleteTrigger.connectedTo = { elementRef: this.chipContainerDivRef };\n      this.cdr.detectChanges();\n    }\n\n    if (this.matAutocompleteComponent) {\n      this.subscriptions.push(\n        this.matAutocompleteComponent._keyManager.change.subscribe((index) => {\n          if (this.loadingRunning && index === -1) {\n            // Workaround: Bei Änderungen an den Optionen wird der Aktivindex zurückgesetzt!\n            //\n            // Beim Nachladen werden die Optionen verändert und der Aktivindex\n            // im KeyManager wird zurückgesetzt. D.h. der nächste Klick auf die\n            // Pfeiltaste (nach unten) aktiviert nicht die nächste Option, sondern\n            // die erste Option am Anfang der Liste. Aus diesem Grund wird hier\n            // der letzte Aktivindex wiederhergestellt, damit der Benutzer dort\n            // weitermachen kann, wo er aufgehört hat.\n            //\n            // Siehe: _MatAutocompleteTriggerBase._subscribeToClosingActions\n            // this._resetActiveItem();\n            setTimeout(() => {\n              if (this.matAutocompleteComponent) {\n                this.matAutocompleteComponent._keyManager.setActiveItem(this.activeIndex!);\n                this.loadingRunning = false;\n              }\n            });\n          }\n        })\n      );\n\n      this.subscriptions.push(\n        this.matAutocompleteComponent.opened.subscribe(() => {\n          setTimeout(() => {\n            if (this.matAutocompleteComponent) {\n              if (this.matAutocompleteComponent.panel) {\n                this.matAutocompleteComponent.panel.nativeElement.addEventListener('scroll', this.loadOnScroll.bind(this));\n              }\n            }\n          });\n        })\n      );\n\n      this.subscriptions.push(\n        this.matAutocompleteComponent.closed.subscribe(() => {\n          if (this.matAutocompleteComponent) {\n            this.matAutocompleteComponent.panel.nativeElement.removeEventListener('scroll', this.loadOnScroll);\n          }\n        })\n      );\n    }\n\n    if (this.chipRowElements) {\n      this.updateChipTooltips();\n      this.subscriptions.push(this.chipRowElements.changes.pipe(debounceTime(50)).subscribe(() => this.updateChipTooltips()));\n    }\n\n    if (this.chipTooltips) {\n      this.updateChipTooltips();\n      this.subscriptions.push(this.chipTooltips.changes.pipe(debounceTime(50)).subscribe(() => this.updateChipTooltips()));\n    }\n  }\n\n  private updateChipTooltips() {\n    if (!this.chipRowElements || !this.chipTooltips) {\n      return;\n    }\n\n    const rows = this.chipRowElements.toArray();\n    const tooltips = this.chipTooltips.toArray();\n    const count = Math.min(rows.length, tooltips.length);\n\n    // Tooltip-Änderungen asynchron durchführen, um ExpressionChangedAfterItHasBeenCheckedError zu vermeiden\n    Promise.resolve().then(() => {\n      // Re-check: Komponente könnte zwischenzeitlich zerstört worden sein\n      if (!this.chipRowElements || !this.chipTooltips) {\n        return;\n      }\n\n      for (let i = 0; i < count; i++) {\n        const rowElement = rows[i].nativeElement;\n        const text = rowElement.textContent?.trim() ?? '';\n        const tooltip = tooltips[i];\n        const labelElement = rowElement.querySelector<HTMLElement>('.mdc-evolution-chip__text-label, .lux-chip-label');\n        const targetElement = labelElement ?? rowElement;\n        const isTruncated = targetElement.scrollWidth > targetElement.clientWidth;\n\n        tooltip.luxTooltipShowDelay = 500;\n        tooltip.luxTooltip = isTruncated ? text : '';\n        tooltip.message = isTruncated ? text : '';\n        tooltip.disabled = !isTruncated;\n      }\n    });\n  }\n\n  /**\n   * Stößt das Nachladen von Elementen an, wenn ein bestimmter Scrollwert erreicht wurde.\n   * @param event - ScrollEvent\n   */\n  private loadOnScroll(event: Event) {\n    const position = event.target as any;\n    if (position && (position.scrollTop + position.clientHeight) / position.scrollHeight > 85 / 100) {\n      this.updateDisplayedEntries();\n    }\n  }\n\n  /**\n   * Läd den nächsten Block Daten aus den Entries nach.\n   */\n  updateDisplayedEntries() {\n    if (this.filteredOptions.length > 0) {\n      if (this.matAutocompleteComponent) {\n        this.loadingRunning = true;\n        this.activeIndex = this.matAutocompleteComponent._keyManager.activeItemIndex ?? -1;\n      }\n      const start = 0;\n      const end = Math.min(this.luxOptionBlockSize, this.filteredOptions.length);\n      this.displayedOptions.push(...this.filteredOptions.splice(start, end));\n    }\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n\n    this.subscriptions.forEach((sub) => sub.unsubscribe());\n  }\n\n  /**\n   * Fügt einen Chip hinzu.\n   * Fügt ihn entweder der explizit mitgeteilten newChipList hinzu oder einfach\n   * der letzten mitgegebenen Liste.\n   * @param value\n   */\n  add(value: string) {\n    try {\n      this.actionRunning = true;\n\n      if (value && value.trim().length > 0) {\n        if (this.luxNewChipGroup) {\n          const found =\n            this.luxAutocompleteOptions && this.luxAutocompleteOptions.length > 0\n              ? !!this.luxAutocompleteOptions.find((option) => option === value)\n              : true;\n          const foundLabel = this.luxNewChipGroup.luxLabels ? !!this.luxNewChipGroup.luxLabels.find((label) => label === value) : false;\n\n          if (!this.luxStrict || (found && !foundLabel)) {\n            this.luxNewChipGroup.add(value);\n\n            if (\n              this.luxNewChipGroup.luxLabels &&\n              Array.isArray(this.luxNewChipGroup.luxLabels) &&\n              this.luxNewChipGroup.luxLabels.length > 0\n            ) {\n              this.formControl.setValue([...this.luxNewChipGroup.luxLabels]);\n            } else {\n              this.formControl.setValue([]);\n            }\n          }\n        } else {\n          this.luxChipAdded.emit(value);\n        }\n\n        // Autocomplete-Feld in jedem Fall schließen (Delay über Timeout, damit kein visuelles Flackern entsteht)\n        setTimeout(() => {\n          if (this.matAutocompleteTrigger) {\n            this.matAutocompleteTrigger.closePanel();\n          }\n        });\n      }\n    } finally {\n      this.actionRunning = false;\n    }\n  }\n\n  onFocusOut() {\n    if (this.luxNewChipGroup) {\n      setTimeout(() => {\n        // Hier wird der markAsTouched-Aufruf gezielt verzögert,\n        // damit die Darstellung eines required-Chips nicht flackert\n        // (kurzzeitig rot, wegen der Pflichtfeldfehlermeldung,\n        // danach wieder normal, sobald der Wert gesetzt wurde).\n        this.formControl.markAsTouched();\n      }, 100);\n    }\n  }\n\n  onChipGroupRemove(chipGroup: LuxChipAcGroupComponent, index: number) {\n    try {\n      this.actionRunning = true;\n\n      chipGroup.remove(index);\n\n      if (chipGroup === this.luxNewChipGroup) {\n        if (chipGroup.luxLabels && Array.isArray(chipGroup.luxLabels) && chipGroup.luxLabels.length > 0) {\n          this.formControl.setValue([...chipGroup.luxLabels]);\n        } else {\n          this.formControl.setValue([]);\n        }\n\n        this.filteredOptions = this.luxAutocompleteOptions ? this.luxAutocompleteOptions : [];\n      }\n    } finally {\n      this.actionRunning = false;\n    }\n  }\n\n  /**\n   * Wird bei Eingabe von Werten in das Input-Feld aufgerufen und schreibt einen neuen Wert\n   * in das inputValue-Subject.\n   * @param value\n   */\n  inputChanged(value: string) {\n    this.inputValue$.next(value);\n  }\n\n  /**\n   * Diese Methode öffnet bei jedem Klick das Optionspanel des\n   * Autocomplete-Feldes.\n   *\n   * Details:\n   * Im Standard wird das Optionspanel eines Autocomplete-Feldes nur einmal\n   * geöffnet. Ein Autocomplete-Feld prüft bei jedem Klick, ob es selbst den\n   * Fokus hat und ob sein Optionspanel bereits zuvor geöffnet wurde. Wenn beide\n   * Bedingungen zutreffen, bleibt das Optionspanel beim erneuten Klicken\n   * standardmäßig geschlossen. Hier bei den Chips soll das Verhalten des\n   * Autocomplete-Feldes geändert werden. Jeder Klick soll immer das\n   * Optionspanel öffnen, unabhängig von irgendwelchen Bedingungen. Dadurch\n   * können die Benutzer auch mit der Maus mehrere Chips hintereinander\n   * auswählen.\n   */\n  onAutocompleteClick() {\n    if (this.matAutocompleteTrigger) {\n      this.matAutocompleteTrigger.openPanel();\n    }\n  }\n\n  /**\n   * Wird beim Selektieren einer Option im Autocomplete ausgeführt.\n   * @param input\n   * @param value\n   */\n  autoCompleteAdd(input: HTMLInputElement, value: string) {\n    this.newChip$.next(value);\n    input.value = '';\n  }\n\n  /**\n   * Wird beim Input-Event des Eingabefelds ausgeführt, fragt aber vorher ab, ob das Autocomplete offen ist.\n   * Wenn ja, wird kein neuer Chip erzeugt, da das Autocomplete dies übernimmt.\n   * @param input\n   */\n  inputAdd(input: HTMLInputElement) {\n    if (!this.matAutocomplete?.isOpen) {\n      // Falls nur eine Option übrig ist, wird diese als Wert anstelle des Inputtextes verwendet.\n      if (\n        input.value &&\n        input.value.length > 0 &&\n        this.luxAutocompleteOptions &&\n        this.luxAutocompleteOptions.length > 1 &&\n        this.displayedOptions &&\n        this.displayedOptions.length === 1\n      ) {\n        this.newChip$.next(this.displayedOptions[0]);\n        input.value = '';\n      } else {\n        this.newChip$.next(input.value);\n        input.value = '';\n      }\n    }\n  }\n\n  onAutoCompleteOpened() {\n    // Um einen ExpressionChangedAfterItHasBeenCheckedError im Attribute \"attr.aria-expanded\"\n    // zu umgehen, wird hier manuell die Change Detection ausgeführt.\n    this.cdr.detectChanges();\n\n    this.canClose = false;\n    setTimeout(() => {\n      // Workaround: Vorschlagsliste kann erst nach kurzer Verzögerung wieder geschlossen werden.\n      // Dieser Workaround ist nötig, da das Autocomplete-Panel in dem folgenden Fall sofort nach\n      // dem Öffnen wieder geschlossen wird.\n      //\n      // Fall: Keine Chips vorhanden und der Benutzer klickt auf die Pfeil-Action.\n      // In diesem Fall wird das Autocomplete-Panel durch die Material-Komponente (focusin) geöffnet\n      // und durch die Pfeil-Action direkt wieder geschlossen. D.h. man kann das Autocomplete-Panel\n      // nicht immer schließen, wenn es bereits geöffnet ist, weil man nicht erkennen kann, ob das\n      // Autocomplete-Panel gerade erst geöffnet wurde (Panel darf nicht geschlossen werden) oder\n      // bereits zu einem früheren Zeitpunkt (Panel darf geschlossen werden). Um das Problem zu\n      // umgehen, wird hier ein Timeout in Verbindung mit dem canClose-Flag verwendet.\n      this.canClose = true;\n    }, 250);\n  }\n\n  onArrowIcon() {\n    if (this.matAutocompleteTrigger?.panelOpen) {\n      if (this.matChips.length > 0 || this.canClose) {\n        this.matAutocompleteTrigger?.closePanel();\n      }\n    } else {\n      this.matAutocompleteTrigger?.openPanel();\n    }\n  }\n\n  protected override initFormControl() {\n    try {\n      this.initRunning = true;\n      super.initFormControl();\n    } finally {\n      this.initRunning = false;\n    }\n  }\n\n  protected override notifyFormValueChanged(formValue: any) {\n    super.notifyFormValueChanged(formValue);\n\n    // An dieser Stelle muss man die ValueChanged-Events ignorieren,\n    // welche durch die add- und onChipGroupRemove-Methode ausgelöst\n    // wurden. In diesen Fällen sind die luxLabels der ChipGroup\n    // bereits aktualisiert worden. Um das doppelte Setzen zu\n    // verhindern, wurde hier das actionRunning-Flag eingeführt.\n    if (!this.actionRunning && this.inForm && this.luxNewChipGroup) {\n      if (formValue && Array.isArray(formValue)) {\n        this.luxNewChipGroup.luxLabels = [...formValue];\n      } else {\n        this.luxNewChipGroup.luxLabels = [];\n      }\n\n      this.filteredOptions = this.luxAutocompleteOptions ? this.luxAutocompleteOptions : [];\n    }\n  }\n}\n","<div class=\"lux-chips\" #chipsContainerDiv>\n  <lux-form-control-wrapper\n    [luxFormComponent]=\"this\"\n    [luxIgnoreDefaultLabel]=\"!luxInputAllowed && !luxInputLabelAlwaysVisible\"\n    [luxLabelLongFormat]=\"luxLabelLongFormat\"\n    luxTagId=\"luxChipsWrapper\"\n    [ngClass]=\"{ 'lux-hide-input-border': luxHideBorder && !luxInputAllowed }\"\n  >\n    <mat-chip-grid\n      [ngClass]=\"[luxOrientation.toLocaleLowerCase() === 'vertical' ? 'lux-vertical' : 'lux-horizontal']\"\n      [disabled]=\"luxDisabled\"\n      [attr.aria-labelledby]=\"uid + '-label'\"\n      role=\"grid\"\n      #chips\n    >\n      <!-- Direkte Chip-Components -->\n      @for (chip of chipComponents; track chip; let i = $index) {\n      <div class=\"lux-chip-container\">\n        <mat-chip-row\n          class=\"lux-chip\"\n          [luxTooltip]=\"''\"\n          [ngClass]=\"{\n            'lux-chip-disabled': chip.luxDisabled,\n            'lux-chip-color-default': !chip.luxColor,\n            'lux-chip-color-primary': chip.luxColor === 'primary',\n            'lux-chip-color-accent': chip.luxColor === 'accent',\n            'lux-chip-color-warn': chip.luxColor === 'warn'\n          }\"\n          [removable]=\"chip.luxRemovable\"\n          [disabled]=\"chip.luxDisabled\"\n          [color]=\"chip.luxColor\"\n          [disableRipple]=\"true\"\n          (keydown.delete)=\"chip.remove(i)\"\n          (click)=\"chip.click(i)\"\n        >\n          <ng-template *ngTemplateOutlet=\"chip.templateRef\"></ng-template>\n          @if (chip.luxRemovable) {\n          <lux-icon\n            class=\"lux-chip-icon\"\n            [ngClass]=\"{ 'lux-chip-icon-disabled': chip.luxDisabled }\"\n            matChipRemove\n            aria-label=\"{{ 'luxc.chips.remove' | transloco }}\"\n            luxIconName=\"lux-interface-delete-circle\"\n            luxMargin=\"0 0 0 0.375rem\"\n            luxPadding=\"0\"\n            class=\"lux-chip-icon lux-cursor\"\n            (click)=\"chip.remove(i)\"\n            (keydown.enter)=\"chip.remove(i)\"\n            (keydown.space)=\"chip.remove(i)\"\n          ></lux-icon>\n          }\n        </mat-chip-row>\n      </div>\n      }\n\n      <!-- Chips via ChipGroup-Components -->\n      @for (chipGroup of chipGroupComponents; track chipGroup) { @for (label of chipGroup.luxLabels; track label; let i = $index) {\n      <div class=\"lux-chip-container\">\n        <mat-chip-row\n          class=\"lux-chip\"\n          [luxTooltip]=\"''\"\n          [ngClass]=\"{\n            'lux-chip-disabled': chipGroup.luxDisabled,\n            'lux-chip-color-default': !chipGroup.luxColor,\n            'lux-chip-color-primary': chipGroup.luxColor === 'primary',\n            'lux-chip-color-accent': chipGroup.luxColor === 'accent',\n            'lux-chip-color-warn': chipGroup.luxColor === 'warn'\n          }\"\n          [removable]=\"chipGroup.luxRemovable\"\n          [disabled]=\"chipGroup.luxDisabled\"\n          [disableRipple]=\"true\"\n          [color]=\"chipGroup.luxColor\"\n          (keydown.delete)=\"onChipGroupRemove(chipGroup, i)\"\n          (click)=\"chipGroup.click(i)\"\n        >\n          <ng-container\n            *ngTemplateOutlet=\"chipGroup.tempRef ? chipGroup.tempRef : noTemplateRef; context: { $implicit: label }\"\n          ></ng-container>\n          @if (chipGroup.luxRemovable) {\n          <lux-icon\n            class=\"lux-chip-icon\"\n            [ngClass]=\"{ 'lux-chip-icon-disabled': chipGroup.luxDisabled }\"\n            matChipRemove\n            aria-label=\"{{ 'luxc.chips.remove' | transloco }}\"\n            luxIconName=\"lux-interface-delete-circle\"\n            luxMargin=\"0 0 0 6px\"\n            luxPadding=\"0px\"\n            class=\"lux-chip-icon lux-cursor\"\n            (click)=\"onChipGroupRemove(chipGroup, i)\"\n            (keydown.enter)=\"onChipGroupRemove(chipGroup, i)\"\n            (keydown.space)=\"onChipGroupRemove(chipGroup, i)\"\n          ></lux-icon>\n          }\n        </mat-chip-row>\n      </div>\n      } }\n    </mat-chip-grid>\n    <div class=\"lux-chips-input-container\">\n      @if (luxInputAllowed) {\n      <input\n        [id]=\"uid\"\n        placeholder=\"{{ luxPlaceholder || ('luxc.chips.input.placeholder.lbl' | transloco) }}\"\n        [matChipInputFor]=\"chips\"\n        [matChipInputAddOnBlur]=\"true\"\n        [matAutocomplete]=\"auto\"\n        [attr.aria-labelledby]=\"uid + '-label'\"\n        [disabled]=\"luxDisabled\"\n        (matChipInputTokenEnd)=\"inputAdd(input)\"\n        (focusout)=\"onFocusOut()\"\n        (keyup)=\"inputChanged(input.value)\"\n        (click)=\"onAutocompleteClick()\"\n        type=\"text\"\n        class=\"lux-chips-autocomplete-input lux-flex lux-flex-grow-1 lux-flex-shrink-1 lux-flex-basis-auto\"\n        #input\n      />\n      @if (displayedOptions.length > 0) {\n      <svg\n        class=\"lux-select-arrow\"\n        [class.lux-rotate]=\"matAutocompleteTrigger?.panelOpen\"\n        focusable=\"false\"\n        viewBox=\"0 0 24 24\"\n        aria-hidden=\"true\"\n        (click)=\"onArrowIcon()\"\n      >\n        <path d=\"M7 10l5 5 5-5z\"></path>\n      </svg>\n      }\n      <mat-autocomplete\n        class=\"lux-autocomplete-panel-ac lux-chips-ac-autocomplete-panel\"\n        [class.lux-chips-ac-autocomplete-panel-dense]=\"luxDense\"\n        [disableRipple]=\"true\"\n        (optionSelected)=\"autoCompleteAdd(input, $event.option.value)\"\n        (opened)=\"onAutoCompleteOpened()\"\n        #auto=\"matAutocomplete\"\n      >\n        @for (option of displayedOptions; track option) {\n        <mat-option [value]=\"option\">\n          {{ option }}\n        </mat-option>\n        }\n      </mat-autocomplete>\n      } @else {\n      <!-- Wenn es kein Input gibt, wird der folgende Fehler geworfen:\n          filter-example.component.ts:165 ERROR Error: mat-chip-grid must be used in combination with matChipInputFor.\n          Aus diesem Grund wird hier ein unsichtbares Ersatzinput eingefügt.\n          -->\n      <input class=\"lux-display-none\" [matChipInputFor]=\"chips\" #input />\n      }\n    </div>\n  </lux-form-control-wrapper>\n</div>\n\n<ng-template #noTemplateRef let-label>\n  <span class=\"lux-chip-label\">{{ label }}</span>\n</ng-template>\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxLookupHandlerService {\n  private lookupElements = new Map<string, Subject<void>>();\n\n  constructor() {}\n\n  /**\n   * Fügt ein LookupComponent zu der Map hinzu.\n   * @param string name\n   * @param name\n   */\n  addLookupElement(name: string) {\n    this.lookupElements.set(name, new Subject<void>());\n  }\n\n  /**\n   * Gibt das Subject einer LookupComponent als Observable zurück (oder null).\n   * @param string name\n   * @param name\n   * @returns Observable<any> | null\n   */\n  getLookupElementObsv(name: string): Observable<any> | null {\n    const lookupEl = this.getLookupElementSubject(name);\n    if (lookupEl) {\n      return lookupEl.asObservable();\n    }\n    return null;\n  }\n\n  /**\n   * Gibt das Subject einer LookupComponent zurück (oder null).\n   * @param string name\n   * @param name\n   * @returns Observable<any> | null\n   */\n  getLookupElementSubject(name: string) {\n    const lookupEl = this.lookupElements.get(name);\n    if (lookupEl) {\n      return lookupEl;\n    }\n    return null;\n  }\n\n  /**\n   * Stößt das Neuladen von Schlüsseltabellendaten einer LookupComponent an.\n   * @param string name\n   * @param lookupId\n   */\n  reloadData(lookupId: string) {\n    const lookupEl = this.getLookupElementSubject(lookupId);\n    if (lookupEl) {\n      lookupEl.next();\n    } else {\n      console.error(`The lookup component ${lookupId} could not be found.`);\n    }\n  }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { LuxLookupParameters } from '../lux-lookup-model/lux-lookup-parameters';\nimport { LuxLookupTableEntry } from '../lux-lookup-model/lux-lookup-table-entry';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxLookupService {\n  private http = inject(HttpClient);\n\n  /**\n   * Liefert die Eintraege einer Schluesseltabelle.\n   * @param tableNo\n   * @param parameters\n   * @param url\n   * @returns Observable<LuxLookupTableEntry[]>\n   */\n  getLookupTable(tableNo: string, parameters: LuxLookupParameters, url: string): Observable<LuxLookupTableEntry[]> {\n    const httpParameters = this.generateParameters(parameters);\n    return this.http.get<LuxLookupTableEntry[]>(url + 'getLookupTable/' + tableNo, { params: httpParameters });\n  }\n\n  /**\n   * Generiert die Standard-Parameter fuer einen Lookup-Request.\n   * @param parameters\n   * @returns HttpParams\n   */\n  generateParameters(parameters: LuxLookupParameters): HttpParams {\n    let httpParameters = new HttpParams();\n    httpParameters = httpParameters.append('knr', '' + parameters.knr);\n    httpParameters = httpParameters.append('raw', '' + parameters.raw);\n\n    if (parameters.keys && parameters.keys.length > 0) {\n      parameters.keys.forEach((key: string) => {\n        httpParameters = httpParameters.append('keys', key);\n      });\n    }\n\n    if (parameters.fields && parameters.fields.length > 0) {\n      // Entferne alle ableitungsText-Felder\n      const fields = parameters.fields.filter((field) => !field.startsWith('ableitungsText'));\n\n      if (fields.length > 0) {\n        // Fuege alle nicht-ableitungsText-Felder als Http-Parameter hinzu\n        fields.forEach((field: string) => {\n          httpParameters = httpParameters.append('fields', field);\n        });\n      }\n\n      // Falls es ableitungsText-Felder gibt, fuege das spezifische Feld 'ableitungsfelder' hinzu.\n      // Der Lookup-Service erwartet dieses spezielle Feld, um alle Ableitungsfelder zu liefern.\n      // Aktuell ist es unmöglich, einzelne ableitungsText-Felder anzufordern.\n      if (parameters.fields.length !== fields.length) {\n        httpParameters = httpParameters.append('fields', 'ableitungsfelder');\n      }\n    }\n\n    return httpParameters;\n  }\n}\n","// no-shadow meldet fälschlicherweise einen Fehler\n/**\n * Enums, welche die auswaehlbaren Felder fuer den Response einer Lookup-Service-Abfrage beinhaltet.\n */\nexport enum LuxFieldValues {\n  kurz = 'kurz',\n  lang1 = 'lang1',\n  lang2 = 'lang2',\n  gueltig_von = 'gueltig_von',\n  gueltig_bis = 'gueltig_bis',\n  ableitungsText1 = 'ableitungsText1',\n  ableitungsText2 = 'ableitungsText2',\n  ableitungsText3 = 'ableitungsText3',\n  ableitungsText4 = 'ableitungsText4',\n  ableitungsText5 = 'ableitungsText5',\n  ableitungsText6 = 'ableitungsText6'\n}\n\nexport enum LuxBehandlungsOptionenUngueltige {\n  anzeigen = 'anzeigen',\n  ausgrauen = 'ausgrauen',\n  ausblenden = 'ausblenden'\n}\n\n/**\n * Class, welche benutzt wird um die Abfrage an den Lookup-Service zu modifizeren.\n */\nexport class LuxLookupParameters {\n  knr: number;\n  keys: any[];\n  fields: LuxFieldValues[];\n  raw: boolean;\n\n  constructor(data: { knr: number; keys?: string[]; fields?: LuxFieldValues[]; raw?: boolean }) {\n    this.knr = data.knr;\n    this.keys = data.keys ? data.keys : [];\n    this.fields = data.fields\n      ? data.fields\n      : [\n          LuxFieldValues.kurz,\n          LuxFieldValues.lang1,\n          LuxFieldValues.lang2,\n          LuxFieldValues.gueltig_bis,\n          LuxFieldValues.gueltig_von,\n          LuxFieldValues.ableitungsText1,\n          LuxFieldValues.ableitungsText2,\n          LuxFieldValues.ableitungsText3,\n          LuxFieldValues.ableitungsText4,\n          LuxFieldValues.ableitungsText5,\n          LuxFieldValues.ableitungsText6\n        ];\n    this.raw = data.raw ? data.raw : false;\n  }\n}\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LuxComponentsConfigParameters } from '../../lux-components-config/lux-components-config-parameters.interface';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { LuxFormComponentBase, LuxValidationErrors } from '../../lux-form/lux-form-model/lux-form-component-base.class';\nimport { LuxLookupHandlerService } from '../lux-lookup-service/lux-lookup-handler.service';\nimport { LuxLookupService } from '../lux-lookup-service/lux-lookup.service';\nimport { LuxBehandlungsOptionenUngueltige, LuxLookupParameters } from './lux-lookup-parameters';\nimport { LuxLookupTableEntry } from './lux-lookup-table-entry';\n\n/**\n * Der Typ für die Lookup-Vergleichsfunktionen.\n */\nexport type LuxLookupCompareFn<T = LuxLookupTableEntry> = (a: T, b: T) => number;\n\n/**\n * Diese Vergleichsfunktion sortiert die Schlüsseltabelleneinträge nach ihrem Schlüssel.\n * @param a Erster Schlüsseltabelleneintrag.\n * @param b Zweiter Schlüsseltabelleneintrag.\n */\nexport const luxLookupCompareKeyFn: LuxLookupCompareFn = (a: LuxLookupTableEntry, b: LuxLookupTableEntry) => {\n  let aText = a?.key ?? '';\n  let bText = b?.key ?? '';\n\n  aText = aText.padStart(20, '0');\n  bText = bText.padStart(20, '0');\n\n  return aText.localeCompare(bText);\n};\n\n/**\n * Diese Vergleichsfunktion sortiert die Schlüsseltabelleneinträge nach ihrem Kurztext.\n * @param a Erster Schlüsseltabelleneintrag.\n * @param b Zweiter Schlüsseltabelleneintrag.\n */\nexport const luxLookupCompareKurzTextFn: LuxLookupCompareFn = (a: LuxLookupTableEntry, b: LuxLookupTableEntry) => {\n  const aText = a?.kurzText ?? '';\n  const bText = b?.kurzText ?? '';\n\n  return aText.localeCompare(bText);\n};\n\n/**\n * Diese Vergleichsfunktion sortiert die Schlüsseltabelleneinträge nach ihrem Langtext1.\n * @param a Erster Schlüsseltabelleneintrag.\n * @param b Zweiter Schlüsseltabelleneintrag.\n */\nexport const luxLookupCompareLangText1Fn: LuxLookupCompareFn = (a: LuxLookupTableEntry, b: LuxLookupTableEntry) => {\n  const aText = a?.langText1 ?? '';\n  const bText = b?.langText1 ?? '';\n\n  return aText.localeCompare(bText);\n};\n\n/**\n * Diese Vergleichsfunktion sortiert die Schlüsseltabelleneinträge nach ihrem Langtext2.\n * @param a Erster Schlüsseltabelleneintrag.\n * @param b Zweiter Schlüsseltabelleneintrag.\n */\nexport const luxLookupCompareLangText2Fn: LuxLookupCompareFn = (a: LuxLookupTableEntry, b: LuxLookupTableEntry) => {\n  const aText = a?.langText2 ?? '';\n  const bText = b?.langText2 ?? '';\n\n  return aText.localeCompare(bText);\n};\n\n@Directive()\nexport abstract class LuxLookupComponent<T> extends LuxFormComponentBase<T> implements OnInit, OnDestroy {\n  \n  LuxBehandlungsOptionenUngueltige = LuxBehandlungsOptionenUngueltige;\n  \n  protected lookupService = inject(LuxLookupService);\n  protected lookupHandler = inject(LuxLookupHandlerService);\n\n  entries: LuxLookupTableEntry[] = [];\n  apiPath = LuxComponentsConfigService.DEFAULT_CONFIG.lookupServiceUrl;\n\n  @Input() luxPlaceholder = '';\n  @Input() luxLookupId!: string;\n  @Input() luxTableNo!: string;\n  @Input() luxRenderProp: any;\n  @Input() luxRenderPropNoPropertyLabel = '---';\n  @Input() luxBehandlungUngueltige: LuxBehandlungsOptionenUngueltige = LuxBehandlungsOptionenUngueltige.ausgrauen;\n  @Input() luxParameters?: LuxLookupParameters;\n  @Input() luxCustomStyles?: object | null;\n  @Input() luxCustomInvalidStyles?: object | null;\n  @Input() luxCompareFn?: LuxLookupCompareFn;\n  @Input() luxTagId?: string;\n  @Output() luxDataLoaded = new EventEmitter<boolean>();\n  @Output() luxDataLoadedAsArray: EventEmitter<T[]> = new EventEmitter<T[]>();\n  @Output() luxValueChange = new EventEmitter<T>();\n\n  subscriptions: Subscription[] = [];\n\n  get luxValue(): T {\n    return this.getValue();\n  }\n\n  @Input() set luxValue(value: T) {\n    this.setValue(value);\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n\n    if (!this.luxParameters) {\n      throw Error(`The lookup component with the table number ${this.luxTableNo} has no LookupParameter.`);\n    }\n\n    if (!this.luxLookupId) {\n      throw Error(`The lookup component with the table number ${this.luxTableNo} has no LookupId.`);\n    }\n\n    this.lookupHandler.addLookupElement(this.luxLookupId);\n\n    const lookupElementObs = this.lookupHandler.getLookupElementObsv(this.luxLookupId);\n    if (!lookupElementObs) {\n      throw Error(`Observable \"${this.luxLookupId}\" not found.\"`);\n    }\n\n    this.subscriptions.push(\n      lookupElementObs.subscribe(() => {\n        this.fetchLookupData();\n      })\n    );\n\n    this.subscriptions.push(\n      this.configService.config.subscribe((newConfig: LuxComponentsConfigParameters) => {\n        this.apiPath = newConfig.lookupServiceUrl ?? LuxComponentsConfigService.DEFAULT_CONFIG.lookupServiceUrl;\n\n        this.lookupHandler.reloadData(this.luxLookupId);\n      })\n    );\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n\n    this.subscriptions.forEach((sub) => sub.unsubscribe());\n  }\n\n  /**\n   * Gibt zurueck, ob die RenderProperty eine Funktion ist oder nicht.\n   * @returns boolean\n   */\n  isRenderPropAFunction(): boolean {\n    return typeof this.luxRenderProp === 'function';\n  }\n\n  /**\n   * Gibt zurück ob sich das entsprechende Element in der Liste ungültiger Elemente befindet.\n   * @param LuxLookupTableEntry entry\n   * @param entry\n   * @returns boolean\n   */\n  isUngueltig(entry: LuxLookupTableEntry) {\n    let isUngueltig = false;\n\n    if (entry) {\n      const nowFormatted = new Date().toISOString().slice(0, 10).replace(/-/g, '');\n\n      if (entry.gueltigkeitVon) {\n        isUngueltig = nowFormatted < entry.gueltigkeitVon;\n      }\n\n      if (!isUngueltig && entry.gueltigkeitBis) {\n        isUngueltig = nowFormatted > entry.gueltigkeitBis;\n      }\n    }\n\n    return isUngueltig;\n  }\n\n  /**\n   * Gibt zurück ob ungültige Einträge angezeigt werden sollen.\n   * @returns boolean\n   */\n  showUngueltige() {\n    return (\n      this.luxBehandlungUngueltige === this.LuxBehandlungsOptionenUngueltige.ausgrauen ||\n      this.luxBehandlungUngueltige === this.LuxBehandlungsOptionenUngueltige.anzeigen\n    );\n  }\n\n  /**\n   * Gibt zurück ob ungültige Einträge deaktiviert werden sollen.\n   * @returns boolean\n   */\n  disableUngueltige() {\n    return this.luxBehandlungUngueltige === this.LuxBehandlungsOptionenUngueltige.ausgrauen;\n  }\n\n  /**\n   * Gibt die mitgegebenen Styles abhaengig ob das Element invalid ist zurueck.\n   * @param boolean invalid\n   * @param invalid\n   * @returns LuxLookupOptionStyle\n   */\n  getStyles(invalid: boolean | undefined) {\n    if (invalid) {\n      return this.luxCustomInvalidStyles ? this.luxCustomInvalidStyles : {};\n    }\n    return this.luxCustomStyles ? this.luxCustomStyles : {};\n  }\n\n  /**\n   * @override\n   * @param value\n   * @param errors\n   */\n  override errorMessageModifier(value: any, errors: LuxValidationErrors): string | undefined {\n    if (errors['ungueltig']) {\n      return this.tService.translate(`luxc.lookup.error_message.invalid`);\n    }\n    return undefined;\n  }\n\n  getLabel(entry: any): string {\n    if (this.isRenderPropAFunction()) {\n      return this.luxRenderProp(entry);\n    }\n\n    if (Object.hasOwn(entry, this.luxRenderProp as string) && entry[this.luxRenderProp as string]) {\n      return entry[this.luxRenderProp as string];\n    } else {\n      return this.luxRenderPropNoPropertyLabel;\n    }\n  }\n\n  /**\n   * Holt die Lookup-Table Daten vom Backend\n   */\n  protected fetchLookupData() {\n    if (!this.luxParameters) {\n      throw Error('LuxParameters not found!');\n    }\n\n    const backendRequest = this.lookupService.getLookupTable(this.luxTableNo, this.luxParameters, this.apiPath);\n    this.subscriptions.push(\n      backendRequest.subscribe(\n        (entries: LuxLookupTableEntry[]) => {\n          this.setLookupData(entries);\n          this.luxDataLoaded.emit(true);\n          this.luxDataLoadedAsArray.emit(entries as any);\n        },\n        () => {\n          this.luxDataLoaded.emit(false);\n        }\n      )\n    );\n  }\n\n  /**\n   * Setzt die aktuellen Werte auf die mitgegebenen Entries.\n   * @param entries\n   */\n  protected setLookupData(entries: LuxLookupTableEntry[]) {\n    this.entries = entries;\n\n    if (this.entries && this.luxCompareFn) {\n      this.entries.sort(this.luxCompareFn);\n    }\n\n    if (this.entries) {\n      // Merken welche Einträge ungültig sind, um bei vielen Informationen\n      // nicht die ganzen Funktionsaufrufe zu haben\n      this.entries.forEach((entry: LuxLookupTableEntry) => {\n        entry.isUngueltig = this.isUngueltig(entry);\n      });\n    }\n  }\n\n  override notifyFormValueChanged(formValue: any) {\n    this.luxValueChange.emit(formValue);\n  }\n}\n","import { FormControl, FormGroupDirective, NgForm, UntypedFormControl } from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { LuxLookupComponent } from './lux-lookup-component';\n\nexport class LuxLookupErrorStateMatcher implements ErrorStateMatcher {\n  lookupComponent: LuxLookupComponent<any>;\n\n  constructor(lookupComponent: LuxLookupComponent<any>) {\n    this.lookupComponent = lookupComponent;\n  }\n\n  isErrorState(control: FormControl | UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    if (control) {\n      const lookupValue = this.lookupComponent.luxValue;\n      if (lookupValue) {\n        // Wenn ein selektierter Wert ungültig ist, Fehler anzeigen\n        if (\n          (!Array.isArray(lookupValue) && lookupValue.isUngueltig) ||\n          (Array.isArray(lookupValue) && lookupValue.filter((value) => value.isUngueltig).length > 0)\n        ) {\n          if (!control.errors || !control.errors['ungueltig']) {\n            setTimeout(() => {\n              control.setErrors({ ungueltig: 'true' });\n            });\n          }\n          return true;\n        }\n      }\n      return !!control.errors && control.touched;\n    } else {\n      return false;\n    }\n  }\n}\n","import { FormControl, FormGroupDirective, NgForm, UntypedFormControl } from '@angular/forms';\nimport { LuxLookupComponent } from '../lux-lookup-model/lux-lookup-component';\nimport { LuxLookupErrorStateMatcher } from '../lux-lookup-model/lux-lookup-error-state-matcher';\nimport { LuxLookupTableEntry } from '../lux-lookup-model/lux-lookup-table-entry';\n\nexport class LuxAutocompleteErrorStateMatcherAc extends LuxLookupErrorStateMatcher {\n  entries: LuxLookupTableEntry[] = [];\n\n  constructor(lookupComponent: LuxLookupComponent<any>, entries: LuxLookupTableEntry[]) {\n    super(lookupComponent);\n\n    this.entries = entries;\n  }\n\n  override isErrorState(control: FormControl | UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n    if (control && typeof control.value === 'string' && control.value.length > 0) {\n      if (!control.errors || !control.errors['noResult']) {\n        setTimeout(() => {\n          control.setErrors({ noResult: true });\n        });\n      }\n      return true;\n    }\n\n    return super.isErrorState(control, form);\n  }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';\nimport { MatOption } from '@angular/material/core';\nimport { MatInput } from '@angular/material/input';\nimport { debounceTime, distinctUntilChanged, map, startWith } from 'rxjs/operators';\nimport { LuxAriaDescribedbyDirective } from '../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxFormControlWrapperComponent } from '../../lux-form/lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxValidationErrors } from '../../lux-form/lux-form-model/lux-form-component-base.class';\nimport { LuxLookupComponent } from '../lux-lookup-model/lux-lookup-component';\nimport { LuxLookupErrorStateMatcher } from '../lux-lookup-model/lux-lookup-error-state-matcher';\nimport { LuxLookupTableEntry } from '../lux-lookup-model/lux-lookup-table-entry';\nimport { LuxAutocompleteErrorStateMatcherAc } from './lux-autocomplete-error-state-matcher-ac';\n@Component({\n  selector: 'lux-lookup-autocomplete-ac',\n  templateUrl: './lux-lookup-autocomplete-ac.component.html',\n  styleUrls: ['./lux-lookup-autocomplete-ac.component.scss'],\n  imports: [\n    LuxFormControlWrapperComponent,\n    ReactiveFormsModule,\n    MatInput,\n    MatAutocompleteTrigger,\n    LuxTagIdDirective,\n    LuxAriaDescribedbyDirective,\n    MatAutocomplete,\n    MatOption,\n    NgClass,\n    NgStyle\n  ]\n})\nexport class LuxLookupAutocompleteAcComponent<T = LuxLookupTableEntry | null>\n  extends LuxLookupComponent<T>\n  implements OnInit, AfterViewInit\n{\n  filtered: LuxLookupTableEntry[] = [];\n  entriesCount = 0;\n  latestSearchValue?: string;\n  stateMatcher: LuxLookupErrorStateMatcher;\n\n  @Input() luxDebounceTime = 250;\n  @Input() luxMaximumDisplayed = 50;\n  @Input() luxNoLabels = false;\n  @Input() luxNoTopLabel = false;\n  @Input() luxNoBottomLabel = false;\n\n  @Output() luxBlur = new EventEmitter<FocusEvent>();\n  @Output() luxFocus = new EventEmitter<FocusEvent>();\n\n  @ViewChild('autoCompleteInput', { read: ElementRef }) matInput!: ElementRef;\n  @ViewChild(MatAutocomplete) matAutocomplete?: MatAutocomplete;\n  @ViewChild(MatAutocompleteTrigger) matAutocompleteTrigger?: MatAutocompleteTrigger;\n\n  constructor() {\n    super();\n\n    this.stateMatcher = new LuxAutocompleteErrorStateMatcherAc(this, this.entries);\n  }\n\n  ngAfterViewInit() {\n    this.cdr.detectChanges();\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n\n    this.subscriptions.push(\n      this.formControl.valueChanges\n        .pipe(\n          debounceTime(this.luxDebounceTime),\n          distinctUntilChanged(),\n          startWith<any>(''),\n          map((value: any) => {\n            const searchValue = typeof value === 'string' ? value : this.displayFn(value);\n            return this.findFilteredOptions(searchValue);\n          })\n        )\n        .subscribe((filtered: LuxLookupTableEntry[]) => {\n          this.filtered = filtered;\n        })\n    );\n  }\n\n  protected override setLookupData(entries: LuxLookupTableEntry[]) {\n    super.setLookupData(entries);\n\n    const searchValue = typeof this.formControl.value === 'string' ? this.formControl.value : this.displayFn(this.formControl.value as any);\n    this.filtered = this.findFilteredOptions(searchValue);\n  }\n\n  /**\n   * Vergleicht den eingegebenen Wert mit den Display-Werten der Einträge.\n   * @param filterTerm\n   * @returns LuxLookupTableEntry[]\n   */\n  filter(filterTerm: any): LuxLookupTableEntry[] {\n    return this.entries.filter((option) => {\n      const compareValue = this.displayFn(option);\n      return compareValue.trim().toLowerCase().indexOf(filterTerm.trim().toLowerCase()) > -1;\n    });\n  }\n\n  /**\n   * Bestimmt wie eingegebene Optionen dargestellt werden.\n   * @param option\n   * @returns string\n   */\n  displayFn(option: LuxLookupTableEntry | string): string {\n    if (typeof option === 'string') {\n      return option;\n    } else if (this.isRenderPropAFunction()) {\n      return (this.luxRenderProp as (currentOption: LuxLookupTableEntry) => string)(option);\n    } else if (option && typeof this.luxRenderProp === 'string') {\n      const optionElement = option as any;\n      return optionElement[this.luxRenderProp] ?? 'Fehler beim Auslesen (Property unbekannt)';\n    } else {\n      return '';\n    }\n  }\n\n  /**\n   * Wird beim Klick auf das Input Feld aufgerufen.\n   * @param clickEvent\n   */\n  onClick(clickEvent: any) {\n    if (!this.luxReadonly && !this.luxDisabled) {\n      clickEvent.target.setSelectionRange(0, clickEvent.target.value.length);\n      // Beim Klick, wenn kein Wert gesetzt ist, das Panel öffnen\n      if (!this.luxValue && this.matAutocompleteTrigger) {\n        this.matAutocompleteTrigger._onChange('');\n        this.matAutocompleteTrigger.openPanel();\n      }\n    }\n  }\n\n  /**\n   * Wrapper-Klick: Fokus setzen und Panel öffnen (falls erlaubt).\n   * Verwendet mousedown statt click, um Event-Bubbling nicht zu stören.\n   */\n  onWrapperClick(event: MouseEvent) {\n    if (this.luxDisabled || this.luxReadonly) {\n      return;\n    }\n    \n    // Nicht auf mat-option Elemente reagieren (diese haben ihre eigene Logik)\n    const target = event.target as HTMLElement;\n    if (target.closest('mat-option')) {\n      return;\n    }\n    \n    // Fokus auf Input\n    try {\n      this.matInput?.nativeElement?.focus();\n    } catch {\n      // Ignorieren, falls ElementRef nicht verfügbar\n    }\n    \n    // Panel nur öffnen, wenn noch nicht offen\n    if (this.matAutocompleteTrigger && !this.matAutocompleteTrigger.panelOpen) {\n      this.matAutocompleteTrigger!.openPanel();\n    }\n  }\n\n  /**\n   * Setzt den aktuellen Value-Wert auf den ausgewählten Wert.\n   * @param MatAutocompleteSelectedEvent event\n   * @param event\n   */\n  selected(event: MatAutocompleteSelectedEvent) {\n    this.luxValue = event.option.value;\n    if (this.inForm) {\n      this.formControl.setValue(this.luxValue);\n    }\n  }\n\n  /**\n   * @override\n   * @param value\n   * @param errors\n   */\n  override errorMessageModifier(value: any, errors: LuxValidationErrors): string | undefined {\n    const msg = super.errorMessageModifier(value, errors);\n    if (msg) {\n      return msg;\n    }\n\n    if (errors['noResult']) {\n      return this.tService.translate(`luxc.lookup-autocomplete.error_message.not_available`);\n    }\n    return undefined;\n  }\n\n  private findFilteredOptions(searchValue: string): LuxLookupTableEntry[] {\n    this.latestSearchValue = searchValue;\n    let filteredValues = searchValue ? this.filter(searchValue) : this.entries ? this.entries.slice() : [];\n    this.entriesCount = filteredValues.length;\n    if (this.entriesCount > this.luxMaximumDisplayed) {\n      filteredValues = filteredValues.splice(0, this.luxMaximumDisplayed);\n    }\n    return filteredValues;\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  (mousedown)=\"onWrapperClick($event)\"\n  [luxFormComponent]=\"this\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  [formGroup]=\"formGroup\"\n  [luxLabelLongFormat]=\"luxLabelLongFormat\"\n  luxTagId=\"luxLookupAutocompleteWrapper\"\n>\n  <div class=\"lux-input-row-authentic\">\n    <input\n      type=\"text\"\n      [placeholder]=\"luxPlaceholder\"\n      matInput\n      [matAutocomplete]=\"auto\"\n      (click)=\"onClick($event)\"\n      autocomplete=\"off\"\n      luxTagIdHandler\n      [luxTagId]=\"luxTagId\"\n      [required]=\"luxRequired\"\n      [readonly]=\"luxReadonly\"\n      [formControl]=\"formControl\"\n      [errorStateMatcher]=\"stateMatcher\"\n      (blur)=\"luxBlur.emit($event)\"\n      (focus)=\"luxFocus.emit($event)\"\n      (focusin)=\"luxFocusIn.emit($event)\"\n      (focusout)=\"luxFocusOut.emit($event)\"\n      [id]=\"uid\"\n      [luxAriaDescribedby]=\"uid + '-error ' + uid + '-hint'\"\n      #autoCompleteInput\n    />\n    <mat-autocomplete\n      #auto=\"matAutocomplete\"\n      class=\"lux-autocomplete-panel-ac\"\n      [class.lux-dense]=\"luxDense\"\n      [displayWith]=\"displayFn.bind(this)\"\n      [disableRipple]=\"true\"\n      (optionSelected)=\"selected($event)\"\n    >\n      @if (entriesCount !== 1 && entriesCount > luxMaximumDisplayed && latestSearchValue) {\n      <mat-option [disabled]=\"true\" class=\"information-option\">\n        <div class=\"lux-flex\">\n          <div>{{ entriesCount - luxMaximumDisplayed }} Treffer werden nicht angezeigt. <br />Bitte verfeinern Sie Ihre Suche.</div>\n        </div>\n      </mat-option>\n      } @for (entry of filtered; track entry) { @if (!entry.isUngueltig || (entry.isUngueltig && showUngueltige())) {\n      <mat-option\n        [value]=\"entry\"\n        [ngClass]=\"{ invalid: entry.isUngueltig }\"\n        [ngStyle]=\"getStyles(entry.isUngueltig)\"\n        [disabled]=\"entry.isUngueltig && disableUngueltige()\"\n      >\n        <span>{{ getLabel(entry) }}</span>\n      </mat-option>\n      } }\n    </mat-autocomplete>\n  </div>\n</lux-form-control-wrapper>\n}\n","import { AfterViewInit, Directive, ElementRef, inject, Input } from '@angular/core';\nimport { LuxAutocompleteAcComponent } from '../../lux-form/lux-autocomplete-ac/lux-autocomplete-ac.component';\nimport { LuxChipsAcComponent } from '../../lux-form/lux-chips-ac/lux-chips-ac.component';\nimport { LuxLookupAutocompleteAcComponent } from '../../lux-lookup/lux-lookup-autocomplete-ac/lux-lookup-autocomplete-ac.component';\n\n@Directive({\n  selector: '[luxAutofocus]'\n})\nexport class LuxAutofocusDirective implements AfterViewInit {\n  private elementRef = inject(ElementRef);\n\n  @Input() luxAutofocusSelector?: string;\n  @Input() luxAutofocusComponent?: any;\n\n  constructor() {\n    if (!this.luxAutofocusSelector) {\n      const tagName = this.elementRef.nativeElement.tagName.toLowerCase();\n\n      if (\n        tagName === 'lux-input-ac' ||\n        tagName === 'lux-autocomplete-ac' ||\n        tagName === 'lux-lookup-autocomplete-ac' ||\n        tagName === 'lux-checkbox-ac' ||\n        tagName === 'lux-chips-ac' ||\n        tagName === 'lux-datepicker-ac' ||\n        tagName === 'lux-datetimepicker-ac' ||\n        tagName === 'lux-file-input-ac' ||\n        tagName === 'lux-radio-ac' ||\n        tagName === 'lux-slider-ac'\n      ) {\n        this.luxAutofocusSelector = 'input:not([disabled])';\n      } else if (tagName === 'lux-select-ac' || tagName === 'lux-lookup-combobox-ac') {\n        this.luxAutofocusSelector = 'mat-select';\n      } else if (tagName === 'lux-button' || tagName === 'lux-link' || tagName === 'lux-link-plain' || tagName === 'lux-toggle-ac') {\n        this.luxAutofocusSelector = 'button:not([disabled])';\n      } else if (tagName === 'lux-file-list') {\n        this.luxAutofocusSelector = 'lux-card.lux-file-list';\n      } else if (tagName === 'lux-file-upload') {\n        this.luxAutofocusSelector = 'div.lux-file-upload-drop-container';\n      } else if (tagName === 'lux-textarea-ac') {\n        this.luxAutofocusSelector = 'textarea:not([disabled])';\n      } else if (tagName == 'lux-tile' || tagName == 'lux-tile-ac') {\n        this.luxAutofocusSelector = 'mat-card';\n      } else if (tagName == 'lux-breadcrumb') {\n        this.luxAutofocusSelector = 'lux-breadcrumb a';\n      }\n    }\n  }\n\n  ngAfterViewInit(): void {\n    setTimeout(() => {\n      // Hier wird bewusst die focus()-Methode des nativen Elements aufgerufen, da das autofokus-Attribut\n      // nicht funktioniert, wenn die Seite nicht komplett neu geladen wird. Das Fokussieren soll\n      // jedes Mal funktionerien, wenn die Komponente erzeugt wird.\n      if (this.luxAutofocusSelector) {\n        const el = this.elementRef.nativeElement.querySelector(this.luxAutofocusSelector);\n        if (el) {\n          el.focus({ focusVisible: false });\n        }\n      } else {\n        this.elementRef.nativeElement.focus({ focusVisible: false });\n      }\n    });\n\n    setTimeout(() => {\n      // Workaround für Autocomplete-Elemente\n      // Wenn das Element ein Autocomplete ist, wird das Panel geschlossen,\n      // da es sonst geöffnet wird, wenn das Element fokussiert wird.\n      if (this.luxAutofocusComponent instanceof LuxAutocompleteAcComponent) {\n        this.luxAutofocusComponent.matAutoComplete.closePanel();\n      } else if (this.luxAutofocusComponent instanceof LuxLookupAutocompleteAcComponent) {\n        this.luxAutofocusComponent.matAutocompleteTrigger?.closePanel();\n      } else if (this.luxAutofocusComponent instanceof LuxChipsAcComponent) {\n        this.luxAutofocusComponent.matAutocompleteTrigger?.closePanel();\n      }\n    });\n  }\n}\n","import { Directive, ElementRef, Input, OnChanges, SimpleChanges, inject } from '@angular/core';\nimport { MatBadge } from '@angular/material/badge';\nimport { LuxUtil } from '../../lux-util/lux-util';\n\nexport declare type LuxBadgeNotificationColor = 'primary' | 'warn' | 'accent' | string;\nexport declare type LuxBadgeNotificationSize = 'small' | 'medium' | 'large';\nexport declare type LuxBadgeNotificationPosition = 'above after' | 'above before' | 'below before' | 'below after';\n\n@Directive({\n  selector: '[luxBadgeNotification], [lux-badge-notification]',\n  host: {\n    class: 'mat-badge',\n    '[class.mat-badge-overlap]': 'overlap',\n    '[class.mat-badge-above]': 'isAbove()',\n    '[class.mat-badge-below]': '!isAbove()',\n    '[class.mat-badge-before]': '!isAfter()',\n    '[class.mat-badge-after]': 'isAfter()',\n    '[class.mat-badge-small]': 'size === \"small\"',\n    '[class.mat-badge-medium]': 'size === \"medium\"',\n    '[class.mat-badge-large]': 'size === \"large\"',\n    '[class.mat-badge-hidden]': 'hidden || isHidden()',\n    '[class.mat-badge-disabled]': 'disabled',\n    '[class.lux-badge-color-default]': 'color !== \"primary\" && color !== \"warn\" && color !== \"accent\"'\n  }\n})\nexport class LuxBadgeNotificationDirective extends MatBadge implements OnChanges {\n  private luxElementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  static readonly WHITE_SPACE = '\\u{200b}';\n\n  @Input() luxBadgeNotification = '';\n  @Input() luxBadgeColor: LuxBadgeNotificationColor = 'default';\n  @Input() luxBadgeSize: LuxBadgeNotificationSize = 'medium';\n  @Input() luxBadgePosition: LuxBadgeNotificationPosition = 'above after';\n  @Input() luxBadgeDisabled = false;\n  @Input() luxBadgeHidden = false;\n  @Input() luxBadgeOverlap = true;\n  @Input() luxBadgeNoBorder = false;\n  @Input() luxBadgeCap = 0;\n\n  constructor() {\n    super();\n\n    this.luxElementRef.nativeElement.classList.add('lux-badge-notification');\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.updateContent(this.luxBadgeNotification);\n    this.color = this.luxBadgeColor as any;\n    this.size = this.luxBadgeSize;\n    this.position = this.luxBadgePosition;\n    this.disabled = this.luxBadgeDisabled;\n    this.hidden = this.luxBadgeHidden;\n    this.overlap = this.luxBadgeOverlap;\n    if (this.luxBadgeNoBorder) {\n      this.luxElementRef.nativeElement.classList.add('lux-badge-no-border');\n    } else {\n      this.luxElementRef.nativeElement.classList.remove('lux-badge-no-border');\n    }\n  }\n\n  updateContent(value: any) {\n    let newContent = value;\n\n    if (typeof newContent === 'number') {\n      if (this.luxBadgeCap && newContent > this.luxBadgeCap) {\n        newContent = this.luxBadgeCap + '+';\n      } else {\n        newContent = newContent + '';\n      }\n    } else if (typeof newContent === 'string' && LuxUtil.isNumber(newContent)) {\n      if (this.luxBadgeCap && +newContent > this.luxBadgeCap) {\n        newContent = this.luxBadgeCap + '+';\n      } else {\n        newContent = newContent + '';\n      }\n    } else if (!newContent) {\n      // Die Werte \"undefined\" und \"null\" zum Leerstring umwandeln,\n      // damit diese nicht angezeigt werden.\n      newContent = '';\n    }\n    this.content = newContent === ' ' ? LuxBadgeNotificationDirective.WHITE_SPACE : newContent;\n    this.description = newContent;\n  }\n\n  isHidden(): boolean {\n    return this.hidden || !this.content;\n  }\n}\n","import { AfterViewInit, Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { LuxScrollPosition } from './lux-scroll-position';\n\n@Directive({ selector: '[luxInfiniteScroll]' })\nexport class LuxInfiniteScrollDirective implements OnInit, AfterViewInit, OnDestroy {\n  private elementRef = inject(ElementRef);\n\n  // Zeitgrenze (ms) nach der das neuste Scroll-Event des Subjects genommen wird\n  static readonly SCROLL_DEBOUNCE_TIME: number = 200;\n\n  private scrollSubscription: Subscription;\n  private scroll$: Subject<void> = new Subject<void>();\n  private lastPosition: LuxScrollPosition = { scrollHeight: 0, scrollTop: 0, clientHeight: 0 };\n\n  // Prozentzahl nach der ein scrollCallback ausgelöst wird\n  @Input() luxScrollPercent = 85;\n  // Direkt bei Initialisierung einen ScrollEvent emitten\n  @Input() luxImmediateCallback = true;\n  // Flag, ob aktuell Daten geladen werden (aus aufrufender Komponente)\n  @Input() luxIsLoading = false;\n  // Emitter an den sich andere Komponenten hängen können, um auf den Scroll zu reagieren\n  @Output() luxScrolled = new EventEmitter<void>();\n\n  /**\n   * Constructor\n   * @param elementRef Ziel-Element dieser Direktive\n   */\n  constructor() {\n    // Die neuen Scroll-Events bündeln und nach der Zeitspanne SCROLL_DEBOUNCE_TIME prüfen, ob ein\n    // \"luxScrolled\" emitten soll oder nicht.\n    this.scrollSubscription = this.scroll$.pipe(debounceTime(LuxInfiniteScrollDirective.SCROLL_DEBOUNCE_TIME)).subscribe(() => {\n      this.performScrollCheck();\n    });\n  }\n\n  ngOnInit() {\n    window.addEventListener('scroll', this.onScroll.bind(this), true);\n  }\n\n  ngAfterViewInit() {\n    // Prüfen, ob ein initiales Laden von Daten starten soll\n    if (this.hasScrollbar() && this.luxImmediateCallback && !this.luxIsLoading) {\n      this.luxScrolled.emit();\n    }\n  }\n\n  ngOnDestroy() {\n    window.removeEventListener('scroll', this.onScroll, true);\n    this.scrollSubscription.unsubscribe();\n  }\n\n  /**\n   * Prüft, ob ein Scroll-Event auf dem Zielelement stattgefunden hat.\n   * Wenn ja, wird das Subject scroll$ angestoßen.\n   * @param event\n   */\n  onScroll(event: any) {\n    const target = event.target ? event.target : event.srcElement;\n    if (target === this.elementRef.nativeElement) {\n      this.scroll$.next();\n    }\n  }\n\n  /**\n   * Holt die aktuelle Position im Scroll-Bereich und führt\n   * einen Event-Emit durch, wenn die Bedingungen erfüllt sind.\n   */\n  private performScrollCheck() {\n    const position: LuxScrollPosition = {\n      scrollTop: this.elementRef.nativeElement.scrollTop,\n      scrollHeight: this.elementRef.nativeElement.scrollHeight,\n      clientHeight: this.elementRef.nativeElement.clientHeight\n    };\n\n    // Wenn nach unten gescrollt wird und die angegebene Prozentzahl überschritten wird\n    if (this.isUserScrollingDown(position) && this.isScrollExpectedPercent(position) && !this.luxIsLoading) {\n      this.luxScrolled.emit();\n    }\n\n    this.lastPosition = position;\n  }\n\n  /**\n   * Prüft, ob der User gerade nach unten scrollt.\n   * Vergleicht dabei die scrollTop Position des Users mit der des Elements.\n   * @param curPos\n   */\n  private isUserScrollingDown(curPos: LuxScrollPosition) {\n    return this.lastPosition.scrollTop < curPos.scrollTop;\n  }\n\n  /**\n   * Prüft, ob der Scrollbereich überschritten wurde.\n   * @param position\n   * @returns boolean\n   */\n  private isScrollExpectedPercent(position: LuxScrollPosition) {\n    return (position.scrollTop + position.clientHeight) / position.scrollHeight > this.luxScrollPercent / 100;\n  }\n\n  /**\n   * Prüft, ob das Zielelement eine Scrollbar gesetzt hat.\n   */\n  private hasScrollbar() {\n    return this.elementRef.nativeElement.scrollHeight > this.elementRef.nativeElement.clientHeight;\n  }\n}\n","import { Platform } from '@angular/cdk/platform';\nimport { Directive, ElementRef, Input, NgZone, OnDestroy, OnInit, inject } from '@angular/core';\nimport { MAT_RIPPLE_GLOBAL_OPTIONS, MatRipple, RippleGlobalOptions } from '@angular/material/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subscription } from 'rxjs';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\n\n@Directive({\n  selector: '[luxRipple], [lux-ripple]',\n  host: {\n    class: 'mat-ripple lux-ripple',\n    '[class.mat-ripple-unbounded]': 'unbounded'\n  }\n})\nexport class LuxRippleDirective extends MatRipple implements OnInit, OnDestroy {\n  private configService = inject(LuxComponentsConfigService);\n  private luxElementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private luxNgZone = inject(NgZone);\n  private luxPlatform = inject(Platform);\n  private luxGlobalOptions = inject<RippleGlobalOptions>(MAT_RIPPLE_GLOBAL_OPTIONS, { optional: true });\n  private luxAnimationMode = inject(ANIMATION_MODULE_TYPE, { optional: true });\n\n  configSubscription: Subscription;\n\n  _luxRippleColor = '';\n  _luxRippleUnbounded = false;\n  _luxRippleCentered = false;\n  _luxRippleDisabled = false;\n  _luxRippleRadius = 0;\n  _luxRippleEnterDuration = 0;\n  _luxRippleExitDuration = 0;\n\n  get luxRippleColor() {\n    return this._luxRippleColor;\n  }\n\n  @Input() set luxRippleColor(value: string) {\n    this._luxRippleColor = value;\n    this.color = value;\n  }\n\n  get luxRippleUnbounded() {\n    return this._luxRippleUnbounded;\n  }\n\n  @Input() set luxRippleUnbounded(value: boolean) {\n    this._luxRippleUnbounded = value;\n    this.unbounded = value;\n  }\n\n  get luxRippleCentered() {\n    return this._luxRippleCentered;\n  }\n\n  @Input() set luxRippleCentered(value: boolean) {\n    this._luxRippleCentered = value;\n    this.centered = value;\n  }\n\n  get luxRippleRadius() {\n    return this._luxRippleRadius;\n  }\n\n  @Input() set luxRippleRadius(value: number) {\n    this._luxRippleRadius = value;\n    this.radius = value;\n  }\n\n  get luxRippleDisabled() {\n    return this._luxRippleDisabled;\n  }\n\n  @Input() set luxRippleDisabled(value: boolean) {\n    this._luxRippleDisabled = value;\n    this.disabled = value;\n  }\n\n  get luxRippleEnterDuration() {\n    return this._luxRippleEnterDuration;\n  }\n\n  @Input() set luxRippleEnterDuration(value: number) {\n    this._luxRippleEnterDuration = value;\n\n    if (!this.animation) {\n      this.animation = {};\n    }\n    this.animation.exitDuration = value;\n  }\n\n  get luxRippleExitDuration() {\n    return this._luxRippleExitDuration;\n  }\n\n  @Input() set luxRippleExitDuration(value: number) {\n    this._luxRippleExitDuration = value;\n\n    if (!this.animation) {\n      this.animation = {};\n    }\n    this.animation.exitDuration = value;\n  }\n\n  constructor() {\n    super();\n\n    // Globale Konfiguration für die LUX-Ripples auslesen und die Component entsprechend aktualisieren\n    this.configSubscription = this.configService.config.subscribe(({ rippleConfiguration }) => {\n      if (rippleConfiguration) {\n        this.luxRippleEnterDuration = rippleConfiguration.enterDuration;\n        this.luxRippleExitDuration = rippleConfiguration.exitDuration;\n        this.luxRippleColor = rippleConfiguration.color ?? '';\n        this.luxRippleCentered = rippleConfiguration.centered ?? false;\n        this.luxRippleDisabled = rippleConfiguration.disabled ?? false;\n        this.luxRippleRadius = rippleConfiguration.radius ?? 0;\n        this.luxRippleUnbounded = rippleConfiguration.unbounded ?? false;\n      }\n    });\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n\n    if (this.configSubscription) {\n      this.configSubscription.unsubscribe();\n    }\n  }\n}\n","import { NgClass } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxBadgeColor } from '../../lux-util/lux-colors.enum';\n\n@Component({\n  selector: 'lux-badge',\n  templateUrl: './lux-badge.component.html',\n  styleUrls: ['./lux-badge.component.scss'],\n  imports: [NgClass, LuxIconComponent]\n})\nexport class LuxBadgeComponent {\n  readonly ICON_SIZE: string = '1x';\n  readonly DEFAULT_BADGE_COLOR = 'gray';\n\n  @Input() luxUppercase = true;\n  @Input() luxIconName = '';\n  @Input() luxColor: LuxBadgeColor = this.DEFAULT_BADGE_COLOR;\n}\n","@if (luxColor) {\n<div\n  class=\"lux-badge lux-mt-1 lux-mb-1 lux-ml-1 lux-mr-1 lux-pt-1 lux-pb-1 lux-pl-3 lux-pr-3\"\n  [ngClass]=\"['lux-badge-' + luxColor, 'lux-badge-on-' + luxColor, luxUppercase ? 'lux-badge-uppercase' : '']\"\n>\n  @if (luxIconName) {\n  <lux-icon [luxIconName]=\"luxIconName\" luxPadding=\"0\" [luxIconSize]=\"ICON_SIZE\" luxMargin=\"0 0.5rem 0 0\"></lux-icon>\n  }\n  <ng-content select=\"lux-label\"></ng-content>\n</div>\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'lux-label',\n  template: '<span [id]=\"luxId\"><ng-content></ng-content></span>'\n})\nexport class LuxLabelComponent implements OnInit {\n  @Input() luxId?: string;\n\n  constructor() {}\n\n  ngOnInit() {\n    if (!this.luxId) {\n      console.warn('lux-label -> The property \"luxId\" is missing.');\n    }\n  }\n}\n","import { NgClass } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../../../lux-action/lux-button/lux-button.component';\nimport { LuxAriaLabelDirective } from '../../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxAriaRoleDirective } from '../../../lux-directives/lux-aria/lux-aria-role.directive';\nimport { LuxIconComponent } from '../../../lux-icon/lux-icon/lux-icon.component';\nimport { ILuxMessage } from '../lux-message-box-model/lux-message.interface';\n\n@Component({\n  selector: 'lux-message',\n  templateUrl: './lux-message.component.html',\n  imports: [LuxAriaRoleDirective, LuxButtonComponent, LuxAriaLabelDirective, LuxIconComponent, TranslocoPipe, NgClass]\n})\nexport class LuxMessageComponent {\n  private _luxMessage?: ILuxMessage;\n\n  @Output() luxMessageClosed = new EventEmitter<ILuxMessage>();\n\n  @Input() set luxMessage(message: ILuxMessage | undefined) {\n    this._luxMessage = message;\n    if (this.luxMessage) {\n      this.updateColor();\n    }\n  }\n\n  get luxMessage(): ILuxMessage | undefined {\n    return this._luxMessage;\n  }\n\n  constructor() {}\n\n  /**\n   * Setzt die Messages auf ein leeres Array, um so die MessageBox auszublenden.\n   */\n  close() {\n    this.luxMessageClosed.emit(this.luxMessage);\n  }\n\n  /**\n   * Aktualisiert die Farbe dieser Box passend zur Farbe der Nachricht.\n   */\n  private updateColor() {\n    if (this.luxMessage) {\n      const color = this.luxMessage.color;\n    }\n  }\n}\n","@if (luxMessage) {\n<div class=\"lux-message-container\" [ngClass]=\"['lux-messagebox-' + luxMessage.color, 'lux-messagebox-on-' + luxMessage.color]\" luxAriaRole=\"listitem\">\n  @if (luxMessage.iconName) {\n  <lux-icon [luxIconName]=\"luxMessage.iconName\" luxIconSize=\"1.25rem\" luxPadding=\"0.25rem\" class=\"lux-message-icon\"></lux-icon>\n  } @if (!luxMessage.iconName) {\n  <div class=\"lux-message-icon\"></div>\n  }\n  <p tabindex=\"0\" class=\"lux-message-text\">{{ luxMessage.text }}</p>\n  <lux-button\n    class=\"lux-close-message-btn\"\n    [luxRounded]=\"true\"\n    luxIconName=\"lux-interface-delete-1\"\n    luxTagId=\"lux-message-box-close-btn\"\n    (luxClicked)=\"close()\"\n    luxAriaLabel=\"{{ 'luxc.message.btn.close.arialabel' | transloco }}\"\n  >\n  </lux-button>\n</div>\n}\n","import { inject, Injectable, OnDestroy } from '@angular/core';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\n\n@Injectable()\nexport class LuxPaginatorIntl extends MatPaginatorIntl implements OnDestroy {\n\n  private tService = inject(TranslocoService);\n  private langSub?: Subscription;\n\n  constructor() {\n    super();\n    this.updateLabels();\n    this.getRangeLabel = this.customRangeLabel;\n\n    // Bei Sprachwechsel Labels aktualisieren\n    this.langSub = this.tService.langChanges$.subscribe(() => {\n      this.updateLabels();\n      this.changes.next();\n    });\n  }\n\n  private updateLabels() {\n    this.itemsPerPageLabel = this.tService.translate('luxc.paginator.elements_on_page');\n    this.nextPageLabel = this.tService.translate('luxc.paginator.next_page');\n    this.previousPageLabel = this.tService.translate('luxc.paginator.previous_page');\n    this.lastPageLabel = this.tService.translate('luxc.paginator.last_page');\n    this.firstPageLabel = this.tService.translate('luxc.paginator.first_page');\n  }\n\n  /**\n   * Deutsche Fassung des Material-Paginators\n   * @param page\n   * @param pageSize\n   * @param length\n   */\n  private customRangeLabel(page: number, pageSize: number, length: number) {\n    if (length === 0 || pageSize === 0) {\n      return this.tService.translate('luxc.paginator.0_until_length', { length });\n    }\n    length = Math.max(length, 0);\n    const startIndex = page * pageSize;\n    // If the start index exceeds the list length, do not try and fix the end index to the end.\n    const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;\n    return this.tService.translate('luxc.paginator.page_part', { start: startIndex + 1, end: endIndex, length });\n  }\n\n  ngOnDestroy(): void {\n    this.langSub?.unsubscribe();\n  }\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\n\n/**\n * Animation für das Aus- und Einklappen der LuxMessageBox.\n */\nexport const visibilityTrigger = trigger('messageBoxVisibility', [\n  transition(':enter', [\n    style({ transform: 'translateY(-100%)', height: 0 }),\n    animate('.5s', style({ transform: 'translateY(0)', height: '*' }))\n  ]),\n  transition(':leave', [\n    style({ transform: 'translateY(0)', height: '*' }),\n    animate('.5s', style({ transform: 'translateY(-100%)', height: 0 }))\n  ])\n]);\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { NgClass } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild, inject } from '@angular/core';\nimport { MatPaginator, MatPaginatorIntl, PageEvent } from '@angular/material/paginator';\nimport { TranslocoPipe, TranslocoService } from '@jsverse/transloco';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxPaginatorIntl } from '../../lux-util/lux-paginator-intl';\nimport { visibilityTrigger } from './lux-message-box-model/lux-message-box.animations';\nimport { ILuxMessageChangeEvent, ILuxMessageCloseEvent } from './lux-message-box-model/lux-message-events.interface';\nimport { ILuxMessage } from './lux-message-box-model/lux-message.interface';\nimport { LuxMessageComponent } from './lux-message-box-subcomponents/lux-message.component';\n\n@Component({\n  selector: 'lux-message-box',\n  templateUrl: './lux-message-box.component.html',\n  animations: [visibilityTrigger],\n  providers: [{ provide: MatPaginatorIntl, useClass: LuxPaginatorIntl }],\n  imports: [LuxAriaLabelDirective, LuxMessageComponent, NgClass, MatPaginator, TranslocoPipe]\n})\nexport class LuxMessageBoxComponent {\n  private liveAnnouncer = inject(LiveAnnouncer);\n  private tService = inject(TranslocoService);\n\n  private _luxMessages: ILuxMessage[] = [];\n  private _luxMaximumDisplayed = 1;\n  private _luxIndex = 0;\n\n  displayedMessages: ILuxMessage[] = [];\n\n  @HostBinding('class.mat-elevation-z4') boxShadow = true;\n\n  @ViewChild('messagebox', { static: false }) messageBoxElRef?: ElementRef;\n\n  @Output() luxMessageChanged = new EventEmitter<ILuxMessageChangeEvent>();\n  @Output() luxMessageClosed = new EventEmitter<ILuxMessageCloseEvent>();\n  @Output() luxMessageBoxClosed = new EventEmitter<void>();\n  @Output() luxMessagesChange = new EventEmitter<ILuxMessage[]>();\n\n  @Input() luxGrabFocus = false;\n  @Input() set luxIndex(index: number) {\n    if (index < 0) {\n      index = 0;\n    }\n    if (index > this.luxMessages.length) {\n      index = this.luxMessages.length;\n    }\n\n    this._luxIndex = index;\n    this.updateDisplayedMessages(index);\n  }\n\n  get luxIndex(): number {\n    return this._luxIndex;\n  }\n\n  @Input() set luxMaximumDisplayed(max: number) {\n    if (max < 0) {\n      max = 0;\n    }\n    this._luxMaximumDisplayed = max;\n\n    this.updateDisplayedMessages(this.luxIndex);\n  }\n\n  get luxMaximumDisplayed(): number {\n    return this._luxMaximumDisplayed;\n  }\n\n  @Input() set luxMessages(messages: ILuxMessage[]) {\n    if (messages && messages.length > 0) {\n      this._luxMessages = messages;\n      this.updateDisplayedMessages(this.luxIndex);\n\n      setTimeout(() => {\n        if (this.luxGrabFocus) {\n          if (this.messageBoxElRef) {\n            this.messageBoxElRef.nativeElement.focus();\n          }\n        } else {\n          let messageText = '';\n          if (messages.length === 1) {\n            messageText += this.tService.translate('luxc.message.announce.1_message');\n          } else {\n            messageText += this.tService.translate('luxc.message.announce.x_messages', { count: messages.length });\n          }\n          messages.forEach((message) => (messageText += message.text + '\\n'));\n          this.liveAnnouncer.announce(messageText);\n        }\n      });\n    } else {\n      // Wenn es vorher Werte gab, ein Closed-Event ausgeben\n      if (this.luxMessages.length > 0) {\n        this.luxMessageBoxClosed.emit();\n      }\n      this._luxMessages = [];\n      this.liveAnnouncer.announce(this.tService.translate('luxc.message.announce.0_messages'));\n    }\n\n    this.luxMessagesChange.emit(this._luxMessages);\n  }\n\n  get luxMessages(): ILuxMessage[] {\n    return this._luxMessages;\n  }\n\n  /**\n   * Wird aufgerufen, wenn der Close-Button für eine MessageBox aufgerufen wurde.\n   *\n   * Gibt eine Event-Payload mit der betroffenen Nachricht mit Index weiter.\n   * @param closedMessage\n   */\n  messageClosed(closedMessage: ILuxMessage) {\n    const eventPayload: ILuxMessageCloseEvent = {\n      index: this.luxMessages.findIndex((compareMessage: ILuxMessage) => compareMessage === closedMessage),\n      message: closedMessage\n    };\n    this.luxMessageClosed.emit(eventPayload);\n\n    this.luxMessages = this.luxMessages.filter((message: ILuxMessage) => message !== closedMessage);\n  }\n\n  /**\n   * Aktualisiert die angezeigten Nachrichten und den Paginator,\n   * gibt außerdem das Change-Event mit den angezeigten/vorherigen Nachrichten.\n   * @param pageEvent\n   */\n  pageChanged(pageEvent: PageEvent) {\n    const previousDisplayedMessages = [...this.displayedMessages];\n    const previousIndex = this.luxIndex;\n\n    this.updateDisplayedMessages(pageEvent.pageIndex);\n\n    const messageChangePayload: ILuxMessageChangeEvent = {\n      currentPage: {\n        index: this.luxIndex,\n        messages: [...this.displayedMessages]\n      },\n      previousPage: {\n        index: previousIndex,\n        messages: previousDisplayedMessages\n      }\n    };\n\n    this.luxMessageChanged.emit(messageChangePayload);\n  }\n\n  /**\n   * Aktualisiert die aktuell angezeigten Nachrichten anhand des Index.\n   * @param pageIndex\n   */\n  updateDisplayedMessages(pageIndex: number) {\n    const start = pageIndex * this.luxMaximumDisplayed;\n    const end = start + this.luxMaximumDisplayed;\n\n    // Wenn der luxIndex und der PageIndex ungleich sind, den luxIndex aktualisieren\n    if (this.luxIndex !== pageIndex) {\n      this._luxIndex = pageIndex;\n    }\n\n    // Checken, ob der Index nicht die Array-Größe sprengt\n    if (this.luxIndex > this.luxMessages.length) {\n      this._luxIndex = this.luxMessages.length;\n    }\n\n    if (this.luxIndex < 0) {\n      this._luxIndex = 0;\n    }\n\n    // Nachrichten aktualisieren\n    this.displayedMessages = this.luxMessages.slice(start, end);\n\n    // Wenn die angezeigten Nachrichten leer sind, aber noch weitere vorhanden sind, die vorherige Seite anzeigen\n    if (this.displayedMessages.length === 0 && this.luxMessages.length > 0 && this.luxIndex > 0) {\n      this.updateDisplayedMessages(this.luxIndex - 1);\n    }\n  }\n}\n","@if (luxMessages && luxMessages.length > 0) {\n<div\n  @messageBoxVisibility\n  luxAriaLabel=\"{{ 'luxc.message.container.arialabel' | transloco}}\"\n  class=\"lux-message-box-content\"\n  tabindex=\"0\"\n  #messagebox\n>\n  <div role=\"list\">\n    @for (displayedMessage of displayedMessages; track displayedMessage.text) {\n    <lux-message class=\"lux-message-box\" [luxMessage]=\"displayedMessage\" (luxMessageClosed)=\"messageClosed($event)\"> </lux-message>\n    }\n  </div>\n  <div\n    class=\"lux-message-box-footer\"\n    [ngClass]=\"{ 'lux-display-none': luxMessages.length === 1 || luxMaximumDisplayed >= luxMessages.length }\"\n  >\n    <mat-paginator\n      [length]=\"luxMessages.length\"\n      [pageSize]=\"luxMaximumDisplayed\"\n      [hidePageSize]=\"true\"\n      [pageIndex]=\"luxIndex\"\n      (page)=\"pageChanged($event)\"\n    >\n    </mat-paginator>\n  </div>\n</div>\n}\n","/**\n * Interface für die Speicherung der Sichtbarkeit von Tabellenspalten.\n *\n * Der Key ist dabei ein eindeutiger Bezeichner für die Tabelle (z.B. \"userTable\").\n * Der Wert ist ein Array von Spalten-Definitionsnamen (columnDef), die ausgeblendet sind.\n */\nexport interface ILuxTableColumnVisibilityStore {\n  load(key: string): string[];\n  save(key: string, hidden: string[]): void;\n}\n\n/**\n * Einfache LocalStorage-Implementierung für versteckte Tabellenspalten.\n * Verwendet JSON-Array (z.B. [\"columnDef1\", \"columnDef2\"]).\n */\nimport { Injectable, inject } from '@angular/core';\nimport { LuxConsentPurpose } from '../../lux-consent/lux-consent.model';\nimport { LuxConsentService } from '../../lux-consent/lux-consent.service';\nimport { LuxStorageService } from '../../lux-util/lux-storage.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxTableLocalColumnVisibilityStore implements ILuxTableColumnVisibilityStore {\n  private consentService = inject(LuxConsentService);\n  private storageService = inject(LuxStorageService);\n\n  load(key: string): string[] {\n    try {\n      if (this.consentService.hasConsent(LuxConsentPurpose.Preferences)) {\n        const raw = this.storageService.getItem(key);\n        if (!raw) {\n          return [];\n        }\n        const arr = JSON.parse(raw);\n        return Array.isArray(arr) ? arr.filter((v) => typeof v === 'string') : [];\n      } else {\n        this.storageService.removeItem(key);\n        return [];\n      }\n    } catch {\n      return [];\n    }\n  }\n\n  save(key: string, hidden: string[]): void {\n    try {\n      if (this.consentService.hasConsent(LuxConsentPurpose.Preferences)) {\n        this.storageService.setItem(key, JSON.stringify(hidden || []), false);\n      } else {\n        this.storageService.removeItem(key);\n      }\n    } catch {\n      /* ignore quota errors */\n    }\n  }\n}\n","import { MatTableDataSource } from '@angular/material/table';\n\n/**\n * Diese Ableitung berücksichtigt bei der Sortierung Sonderzeichen (z.B. öäüßé,...)\n * und ignoriert die Groß- und Kleinschreibung.\n */\nexport class LuxTableDataSource<T> extends MatTableDataSource<T> {\n  totalElements = 0;\n  selectedEntries: Set<any> = new Set<any>();\n\n  /**\n   * Diese Methode liefert eine sortierte Kopie des Datenarrays zurück.\n   * Die Sortierung berücksichtigt ist nicht Case-Sensitive und berücksichtigt\n   * Sonderzeichen (z.B. öäüßé,...)\n   * @param data\n   */\n  override _orderData(data: T[]): T[] {\n    if (!this.sort || !this.sort.active || this.sort.direction === '') {\n      return data;\n    }\n\n    const active = this.sort.active;\n    const direction = this.sort.direction;\n\n    if (active === 'multiSelect') {\n      // muss checken welche in dem sorted array sind und alle anderen darunter\n      const selected = data.filter((value) => this.selectedEntries.has(value));\n      const notSelected = data.filter((value) => !selected.some((selectedValue) => selectedValue === value));\n\n      if (direction === 'asc') {\n        return [...selected, ...notSelected];\n      } else if (direction === 'desc') {\n        return [...notSelected, ...selected];\n      } else {\n        return data.slice();\n      }\n    }\n\n    return data.slice().sort((a, b) => {\n      let valueA = this.sortingDataAccessor(a, active);\n      let valueB = this.sortingDataAccessor(b, active);\n\n      if (!valueA) {\n        valueA = '';\n      }\n\n      if (!valueB) {\n        valueB = '';\n      }\n\n      if (typeof valueA === 'number' && typeof valueB === 'string') {\n        valueA = '' + valueA;\n      }\n\n      if (typeof valueA === 'string' && typeof valueB === 'number') {\n        valueB = '' + valueB;\n      }\n\n      if (typeof valueA === 'string' && typeof valueB === 'string') {\n        const stringA = (valueA as string).toLocaleLowerCase();\n        const stringB = (valueB as string).toLocaleLowerCase();\n        return stringA.localeCompare(stringB) * (direction === 'asc' ? 1 : -1);\n      }\n\n      return (valueA < valueB ? -1 : 1) * (direction === 'asc' ? 1 : -1);\n    });\n  }\n\n  /**\n   * Override update paginator method\n   * to ensure total unfiltered element count is consistent with the http result\n   * @param filteredDataLength\n   */\n  public override _updatePaginator(filteredDataLength: number): void {\n    if (this.filter === '') {\n      super._updatePaginator(this.totalElements);\n    } else {\n      super._updatePaginator(filteredDataLength);\n    }\n  }\n}\n","import { AfterContentInit, Component, ContentChild, TemplateRef } from '@angular/core';\nimport { LuxUtil } from '../../../lux-util/lux-util';\n\n@Component({\n  selector: 'lux-table-column-content',\n  template: ''\n})\nexport class LuxTableColumnContentComponent<T = any> implements AfterContentInit {\n  @ContentChild(TemplateRef) tempRef?: TemplateRef<T>;\n\n  ngAfterContentInit() {\n    LuxUtil.assertNonNull(`tempRef (missing <ng-template></ng-template> in <lux-table-column-content>)`, this.tempRef);\n  }\n}\n","import { AfterContentInit, Component, ContentChild, TemplateRef } from '@angular/core';\nimport { LuxUtil } from '../../../lux-util/lux-util';\n\n@Component({\n  selector: 'lux-table-column-footer',\n  template: ''\n})\nexport class LuxTableColumnFooterComponent<T = any> implements AfterContentInit {\n  @ContentChild(TemplateRef) tempRef!: TemplateRef<T>;\n\n  ngAfterContentInit() {\n    LuxUtil.assertNonNull(`tempRef (missing <ng-template></ng-template> in <lux-table-column-footer>)`, this.tempRef);\n  }\n}\n","import { AfterContentInit, Component, ContentChild, TemplateRef } from '@angular/core';\nimport { LuxUtil } from '../../../lux-util/lux-util';\n\n@Component({\n  selector: 'lux-table-column-header',\n  template: ''\n})\nexport class LuxTableColumnHeaderComponent<T = any> implements AfterContentInit {\n  @ContentChild(TemplateRef) tempRef!: TemplateRef<T>;\n\n  ngAfterContentInit() {\n    LuxUtil.assertNonNull(`tempRef (missing <ng-template></ng-template> in <lux-table-column-header>)`, this.tempRef);\n  }\n}\n","import { Component, ContentChild, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { LuxUtil } from '../../../lux-util/lux-util';\nimport { LuxTableColumnContentComponent } from './lux-table-column-content.component';\nimport { LuxTableColumnFooterComponent } from './lux-table-column-footer.component';\nimport { LuxTableColumnHeaderComponent } from './lux-table-column-header.component';\n\n@Component({\n  selector: 'lux-table-column',\n  template: `<ng-content select=\"lux-table-column-header\"></ng-content>\n    <ng-content select=\"lux-table-column-content\"></ng-content>\n    <ng-content select=\"lux-table-column-footer\"></ng-content>`\n})\nexport class LuxTableColumnComponent implements OnInit, OnChanges {\n  change$: Subject<void> = new Subject<void>();\n\n  @Input() luxConfigLabel?: string;\n  @Input() luxColumnDef!: string;\n  @Input() luxSortable = false;\n  @Input() luxSticky = false;\n  @Input() luxResponsiveBehaviour = '';\n  @Input() luxResponsiveAt: string | string[] | null = '';\n\n  @ContentChild(LuxTableColumnHeaderComponent) header?: LuxTableColumnHeaderComponent;\n  @ContentChild(LuxTableColumnContentComponent) content?: LuxTableColumnContentComponent;\n  @ContentChild(LuxTableColumnFooterComponent) footer?: LuxTableColumnFooterComponent;\n\n  constructor() {}\n\n  ngOnInit() {\n    LuxUtil.assertNonNull('luxColumnDef', this.luxColumnDef);\n  }\n\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    this.change$.next();\n  }\n}\n","import { Directive, EventEmitter, Input, Output } from '@angular/core';\nimport { ValidatorFn, Validators } from '@angular/forms';\nimport { LuxFormComponentBase, LuxValidationErrors, ValidatorFnType } from './lux-form-component-base.class';\n\n/**\n * Basis-Klasse für FormComponents, die einen ähnlichen Grundaufbau für das Aktivieren eines Boolean-Wertes besitzen\n * (LuxToggle und LuxCheckbox z.B.).\n */\n@Directive()\nexport abstract class LuxFormCheckableBaseClass<T> extends LuxFormComponentBase<T> {\n\n  @Output() luxCheckedChange = new EventEmitter<boolean>();\n\n  @Input() luxTagId?: string;\n\n  get luxChecked() {\n    return this.getValue();\n  }\n\n  @Input() set luxChecked(checked: T) {\n    this.setValue(checked);\n  }\n\n  override notifyFormValueChanged(formValue: boolean) {\n    // Aktualisierungen an dem FormControl-Value sollen auch via EventEmitter bekannt gemacht werden\n    this.luxCheckedChange.emit(formValue);\n\n    // Bei luxRequired = true && einem false-Wert entsprechend einen Fehler setzen\n    if (formValue === false && this.luxRequired && this.formControl.errors === null) {\n      this.formControl.setErrors({ required: true });\n    }\n  }\n\n  override errorMessageModifier(value: any, errors: LuxValidationErrors): string | undefined {\n    if (errors['required']) {\n      return this.tService.translate(`luxc.form-checkable-base.error_message.required`);\n    }\n    return undefined;\n  }\n\n  protected override checkValidatorsContainRequired(validators: ValidatorFnType) {\n    // Fall: required = true, aber neue Validatoren werden gesetzt\n    if (this.luxRequired !== null && this.luxRequired !== undefined) {\n      if (this.luxRequired) {\n        // Sind es mehrere Validatoren, aber kein \"requiredTrue\"? Dann wird er ergänzt.\n        if (Array.isArray(validators) && validators.indexOf(Validators.requiredTrue) === -1) {\n          validators.push(Validators.requiredTrue);\n        } else if (validators && !Array.isArray(validators) && validators !== Validators.requiredTrue) {\n          // Ist es nur ein einzelner Validator und nicht \"requiredTrue\"? Dann Array erstellen und beide kombinieren.\n          validators = [validators, Validators.requiredTrue];\n        }\n      } else {\n        if (Array.isArray(validators)) {\n          validators = validators.filter((validator: ValidatorFn) => validator !== Validators.requiredTrue);\n        } else if (validators === Validators.requiredTrue) {\n          validators = undefined;\n        }\n      }\n    } else {\n      // Die Aufrufe mit \"null\" und \"undefined\" werden an dieser Stelle absichtlich nicht weiter behandelt.\n      // Todo: Mit der neuen Angular-Version sind neue Methoden wie z.B. FormControl.hasValidator hinzugekommen.\n      //       D.h. die komplizierte Behandlung von Validators.required kann vereinfacht werden.\n    }\n\n    return validators;\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatCheckbox } from '@angular/material/checkbox';\nimport { LuxAriaDescribedbyDirective } from '../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxAriaInvalidDirective } from '../../lux-directives/lux-aria/lux-aria-invalid.directive';\nimport { LuxAriaRequiredDirective } from '../../lux-directives/lux-aria/lux-aria-required.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxFormCheckableBaseClass } from '../lux-form-model/lux-form-checkable-base.class';\n\n@Component({\n  selector: 'lux-checkbox-ac',\n  templateUrl: './lux-checkbox-ac.component.html',\n  imports: [\n    LuxFormControlWrapperComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatCheckbox,\n    NgTemplateOutlet,\n    LuxAriaDescribedbyDirective,\n    LuxAriaRequiredDirective,\n    LuxAriaInvalidDirective,\n    LuxTagIdDirective\n  ]\n})\nexport class LuxCheckboxAcComponent<T = boolean> extends LuxFormCheckableBaseClass<T> implements OnInit {\n  @Input() luxNoLabels = false;\n  @Input() luxNoTopLabel = false;\n  @Input() luxNoBottomLabel = false;\n\n  focused = false;\n\n  onFocusIn(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocusIn.emit(e);\n  }\n\n  onFocusOut(e: FocusEvent) {\n    this.focused = false;\n    this.luxFocusOut.emit(e);\n  }\n\n  descripedBy() {\n    if (this.errorMessage) {\n      return this.uid + '-error';\n    } else {\n      return (this.formHintComponent || this.luxHint) && (!this.luxHintShowOnlyOnFocus || (this.luxHintShowOnlyOnFocus && this.focused))\n        ? this.uid + '-hint'\n        : undefined;\n    }\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  [luxFormComponent]=\"this\"\n  [formGroup]=\"formGroup\"\n  [luxNoInputRow]=\"true\"\n  [luxIgnoreDefaultLabel]=\"true\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  luxTagId=\"luxCheckboxWrapper\"\n  (click)=\"formControl.markAsTouched()\"\n>\n  <mat-checkbox\n    class=\"lux-checkbox\"\n    [formControl]=\"formControl\"\n    [disableRipple]=\"true\"\n    [required]=\"luxRequired\"\n    color=\"primary\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [id]=\"uid\"\n    [luxAriaDescribedby]=\"descripedBy()\"\n    luxAriaDescribedbySelector=\".mat-checkbox-input\"\n    [luxAriaRequired]=\"luxRequired\"\n    luxAriaRequiredSelector=\".mat-checkbox-input\"\n    [luxAriaInvalid]=\"'' + formControl.invalid\"\n    luxAriaInvalidSelector=\".mat-checkbox-input\"\n    (focusin)=\"onFocusIn($event)\"\n    (focusout)=\"onFocusOut($event)\"\n    tabIndex=\"{{ luxReadonly ? -1 : 0 }}\"\n  >\n    @if (formLabelComponent || luxLabel) {\n    <span class=\"lux-form-label\">\n      @if (luxLabel) {&nbsp;{{ luxLabel }}&nbsp;} @else {<!-- Nicht in die nächste Zeile verschieben, sonst bricht das Label an dem Leerzeichen um. -->\n      <ng-container *ngTemplateOutlet=\"formLabelComponent?.templateRef ?? null\"></ng-container>\n      }{{ luxRequired ? '&nbsp;*' : '' }}\n    </span>\n    }\n  </mat-checkbox>\n</lux-form-control-wrapper>\n}\n","import { Directive, ElementRef, Input, Renderer2, inject } from '@angular/core';\n\n@Directive({ selector: '[luxMaxLengthAttr]' })\nexport class LuxMaxLengthDirective {\n  protected elementRef = inject(ElementRef);\n  protected renderer = inject(Renderer2);\n\n  _luxMaxLengthAttr = 0;\n\n  @Input()\n  get luxMaxLengthAttr() {\n    return this._luxMaxLengthAttr;\n  }\n\n  set luxMaxLengthAttr(maxLength: number) {\n    this._luxMaxLengthAttr = maxLength;\n\n    if (this._luxMaxLengthAttr) {\n      this.renderer.setAttribute(this.elementRef.nativeElement, 'maxlength', '' + this._luxMaxLengthAttr);\n    } else {\n      this.renderer.removeAttribute(this.elementRef.nativeElement, 'maxlength');\n    }\n  }\n}\n","import { Directive, EventEmitter, Input, Output } from '@angular/core';\nimport { LuxFormComponentBase } from './lux-form-component-base.class';\n\n/**\n * Basis-Klasse für FormComponents, die einen ähnlichen Grundaufbau für das Eintippen von String-Daten haben\n * (Input und Textarea z.B.).\n */\n@Directive()\nexport abstract class LuxFormInputBaseClass<T = any> extends LuxFormComponentBase<T> {\n  @Output() luxValueChange = new EventEmitter<T>();\n  @Output() luxBlur = new EventEmitter<FocusEvent>();\n  @Output() luxFocus = new EventEmitter<FocusEvent>();\n\n  @Input() luxPlaceholder = '';\n  @Input() luxTagId?: string;\n  @Input() luxName?: string;\n  @Input() luxAutocomplete = 'on';\n\n  get luxValue(): T {\n    return this.getValue();\n  }\n\n  @Input() set luxValue(value: T) {\n    this.setValue(value);\n  }\n\n  override notifyFormValueChanged(formValue: any) {\n    // Aktualisierungen an dem FormControl-Value sollen auch via EventEmitter bekannt gemacht werden\n    this.luxValueChange.emit(formValue);\n  }\n}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { NgClass } from '@angular/common';\nimport { Component, ContentChild, ElementRef, inject, Input, OnInit, ViewChild } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatPrefix, MatSuffix } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { LuxAriaDescribedbyDirective } from '../../../lib/lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxTagIdDirective } from '../../../lib/lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxMaxLengthDirective } from '../lux-form-control/lux-form-directives/lux-maxlength/lux-max-length.directive';\nimport { LuxNameDirectiveDirective } from '../lux-form-control/lux-form-directives/lux-name/lux-name-directive.directive';\nimport { LuxFormInputBaseClass } from '../lux-form-model/lux-form-input-base.class';\nimport { LuxInputAcPrefixComponent } from '../lux-input-ac/lux-input-ac-subcomponents/lux-input-ac-prefix.component';\nimport { LuxInputAcSuffixComponent } from '../lux-input-ac/lux-input-ac-subcomponents/lux-input-ac-suffix.component';\n\n@Component({\n  selector: 'lux-input-ac',\n  templateUrl: './lux-input-ac.component.html',\n  styleUrls: ['./lux-input-ac.component.scss'],\n  imports: [\n    LuxFormControlWrapperComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatPrefix,\n    MatInput,\n    LuxNameDirectiveDirective,\n    LuxMaxLengthDirective,\n    NgClass,\n    MatSuffix,\n    LuxTagIdDirective,\n    LuxAriaDescribedbyDirective\n  ]\n})\nexport class LuxInputAcComponent<T = string> extends LuxFormInputBaseClass<T> implements OnInit {\n  private readonly symbolRegExp = /[,.]/;\n\n  private liveAnnouncer = inject(LiveAnnouncer);\n\n  @Input() luxType = 'text';\n  @Input() luxNumberAlignLeft = false;\n  @Input() luxNoLabels = false;\n  @Input() luxNoTopLabel = false;\n  @Input() luxNoBottomLabel = false;\n  @Input() luxHideCounterLabel = false;\n\n  @Input() set luxMaxLength(maxLength: number) {\n    this._luxMaxLength = maxLength;\n    if (this.formControl) {\n      //erst nach ngOnInit() vorhanden\n      this.updateCounterLabel();\n    }\n  }\n\n  get luxMaxLength() {\n    return this._luxMaxLength;\n  }\n\n  @ContentChild(LuxInputAcPrefixComponent) inputPrefix?: LuxInputAcPrefixComponent;\n  @ContentChild(LuxInputAcSuffixComponent) inputSuffix?: LuxInputAcSuffixComponent;\n  @ViewChild('input', { read: ElementRef }) inputElement!: ElementRef;\n\n  counterLabel = '';\n  focused = false;\n  _luxMaxLength = 0;\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.updateCounterLabel();\n  }\n\n  /**\n   * Wird bei jedem Tastendruck auf dem Inputfeld aufgerufen.\n   * @param keyboardEvent\n   */\n  onKeyDown(keyboardEvent: KeyboardEvent) {\n    // Soll nur für number-Inputs greifen\n    if (this.inputElement) {\n      const value = this.inputElement.nativeElement.value;\n      // Doppelte Punkt-/Komma-Setzung und E's vermeiden\n      if (\n        value &&\n        this.symbolRegExp.test(keyboardEvent.key) &&\n        (this.inputElement.nativeElement.value.match(this.symbolRegExp) || []).length > 0\n      ) {\n        keyboardEvent.preventDefault();\n      }\n    }\n  }\n\n  onFocus(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocus.emit(e);\n  }\n\n  onFocusIn(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocusIn.emit(e);\n  }\n\n  onFocusOut(e: FocusEvent) {\n    this.focused = false;\n    this.luxFocusOut.emit(e);\n  }\n\n  descripedBy() {\n    if (this.errorMessage) {\n      return this.uid + '-error';\n    } else {\n      return (this.formHintComponent || this.luxHint) && (!this.luxHintShowOnlyOnFocus || (this.luxHintShowOnlyOnFocus && this.focused))\n        ? this.uid + '-hint'\n        : undefined;\n    }\n  }\n\n  override notifyFormValueChanged(formValue: any) {\n    this.updateCounterLabel();\n    super.notifyFormValueChanged(formValue);\n  }\n\n  private updateCounterLabel() {\n    if (this.luxMaxLength > 0 && this.luxType === 'text') {\n      if (typeof this.formControl.value === 'string') {\n        this.counterLabel = this.formControl.value.length + '/' + this.luxMaxLength;\n      } else {\n        this.counterLabel = '0/' + this.luxMaxLength;\n      }\n      this.liveAnnouncer.announce(this.counterLabel);\n    } else {\n      this.counterLabel = '';\n    }\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  (click)=\"!luxDisabled && !luxReadonly && inputElement.nativeElement.focus()\"\n  [luxFormComponent]=\"this\"\n  [formGroup]=\"formGroup\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  [luxCounterLabel]=\"counterLabel\"\n  [luxHideCounterLabel]=\"luxHideCounterLabel\"\n  [luxLabelLongFormat]=\"luxLabelLongFormat\"\n  luxTagId=\"luxInputWrapper\"\n>\n  <div class=\"lux-input-row-authentic\">\n    @if (inputPrefix) {\n    <span class=\"lux-input-prefix-container\" [attr.aria-disabled]=\"luxDisabled ? 'true' : null\" matPrefix>\n      <ng-content select=\"lux-input-ac-prefix\"></ng-content>\n    </span>\n    } @if (luxType !== 'number') {\n    <input\n      matInput\n      luxTagIdHandler\n      [luxNameAttr]=\"luxName\"\n      [luxTagId]=\"luxTagId\"\n      [placeholder]=\"luxPlaceholder\"\n      [type]=\"luxType\"\n      [luxMaxLengthAttr]=\"luxMaxLength\"\n      [formControl]=\"formControl\"\n      [required]=\"luxRequired\"\n      [readonly]=\"luxReadonly\"\n      [autocomplete]=\"luxAutocomplete\"\n      (blur)=\"luxBlur.emit($event)\"\n      (focus)=\"onFocus($event)\"\n      (focusin)=\"onFocusIn($event)\"\n      (focusout)=\"onFocusOut($event)\"\n      [luxAriaDescribedby]=\"descripedBy()\"\n      [id]=\"uid\"\n      #input\n    />\n    } @if (luxType === 'number') {\n    <input\n      matInput\n      luxTagIdHandler\n      [luxNameAttr]=\"luxName\"\n      [luxTagId]=\"luxTagId\"\n      [placeholder]=\"luxPlaceholder\"\n      type=\"number\"\n      [luxMaxLengthAttr]=\"luxMaxLength\"\n      [formControl]=\"formControl\"\n      [required]=\"luxRequired\"\n      [readonly]=\"luxReadonly\"\n      [autocomplete]=\"luxAutocomplete\"\n      [ngClass]=\"{\n        'lux-number ': luxType === 'number',\n        'lux-number-left': luxType !== 'number' || (luxType === 'number' && luxNumberAlignLeft)\n      }\"\n      (blur)=\"luxBlur.emit($event)\"\n      (focus)=\"onFocus($event)\"\n      (focusin)=\"onFocusIn($event)\"\n      (focusout)=\"onFocusOut($event)\"\n      (keydown)=\"onKeyDown($event)\"\n      [luxAriaDescribedby]=\"descripedBy()\"\n      [id]=\"uid\"\n      #input\n    />\n    } @if (inputSuffix) {\n    <span class=\"lux-input-suffix-container\" [attr.aria-disabled]=\"luxDisabled ? 'true' : null\" matSuffix>\n      <ng-content select=\"lux-input-ac-suffix\"></ng-content>\n    </span>\n    }\n  </div>\n</lux-form-control-wrapper>\n}\n","import { LuxUtil } from '../../lux-util/lux-util';\nimport { PendingCloseFocusAction } from './lux-select-filter-focus';\n\nexport type LuxSelectFilterKeyboardSource = 'input' | 'panel';\nexport type VisibleBoundary = 'start' | 'end';\nexport type FilterKeyboardOutcome = 'ignored' | 'handled' | PendingCloseFocusAction;\n\nexport interface LuxSelectFilterKeyboardHost {\n  isPanelOpen(): boolean;\n  isEventFromFilterInput(event: KeyboardEvent): boolean;\n  isListNavigationModifierAllowed(event: KeyboardEvent): boolean;\n  moveActiveVisibleOption(step: 1 | -1): void;\n  moveActiveVisibleOptionByPage(direction: 1 | -1): void;\n  moveToVisibleBoundary(boundary: VisibleBoundary): void;\n  selectActiveOrFirstVisibleOption(): void;\n}\n\nexport function handleSelectFilterKeyboard(\n  event: KeyboardEvent,\n  source: LuxSelectFilterKeyboardSource,\n  host: LuxSelectFilterKeyboardHost\n): FilterKeyboardOutcome {\n  if (!host.isPanelOpen()) {\n    return 'ignored';\n  }\n\n  if (source === 'panel' && host.isEventFromFilterInput(event)) {\n    return 'ignored';\n  }\n\n  if (LuxUtil.isKeyTab(event)) {\n    return handleTab(event, source);\n  }\n\n  if ((LuxUtil.isKeyPageDown(event) || LuxUtil.isKeyPageUp(event)) && host.isListNavigationModifierAllowed(event)) {\n    stopHandledEvent(event);\n    host.moveActiveVisibleOptionByPage(LuxUtil.isKeyPageDown(event) ? 1 : -1);\n    return 'handled';\n  }\n\n  if ((LuxUtil.isKeyHome(event) || LuxUtil.isKeyEnd(event)) && host.isListNavigationModifierAllowed(event)) {\n    stopHandledEvent(event);\n    host.moveToVisibleBoundary(LuxUtil.isKeyHome(event) ? 'start' : 'end');\n    return 'handled';\n  }\n\n  if (LuxUtil.isKeyArrowDown(event) || LuxUtil.isKeyArrowUp(event)) {\n    stopHandledEvent(event);\n    host.moveActiveVisibleOption(LuxUtil.isKeyArrowDown(event) ? 1 : -1);\n    return 'handled';\n  }\n\n  if (LuxUtil.isKeyEnter(event)) {\n    stopHandledEvent(event);\n    host.selectActiveOrFirstVisibleOption();\n    return 'handled';\n  }\n\n  return 'ignored';\n}\n\nfunction handleTab(event: KeyboardEvent, source: LuxSelectFilterKeyboardSource): FilterKeyboardOutcome {\n  if (source === 'panel') {\n    return 'preserve-external-focus';\n  }\n\n  stopHandledEvent(event);\n  return event.shiftKey ? 'manual-tab-backward' : 'manual-tab-forward';\n}\n\nfunction stopHandledEvent(event: KeyboardEvent): void {\n  event.preventDefault();\n  event.stopPropagation();\n}\n","export type ManualTabIntent = 'manual-tab-forward' | 'manual-tab-backward';\nexport type PendingCloseFocusAction = 'restore-trigger' | 'preserve-external-focus' | ManualTabIntent;\n\nexport class LuxSelectFilterFocusController {\n  private pendingCloseFocusAction: PendingCloseFocusAction = 'restore-trigger';\n\n  reset(): void {\n    this.pendingCloseFocusAction = 'restore-trigger';\n  }\n\n  queueManualTabNavigation(isBackward: boolean): void {\n    this.pendingCloseFocusAction = isBackward ? 'manual-tab-backward' : 'manual-tab-forward';\n  }\n\n  preserveExternalFocus(): void {\n    this.pendingCloseFocusAction = 'preserve-external-focus';\n  }\n\n  handleDocumentPointerdown(target: EventTarget | null, selectHost?: HTMLElement | null, panelElement?: HTMLElement | null): void {\n    if (isOutsideSelectContext(target, selectHost, panelElement)) {\n      this.preserveExternalFocus();\n    }\n  }\n\n  consumeCloseAction(): PendingCloseFocusAction {\n    const currentAction = this.pendingCloseFocusAction;\n    this.pendingCloseFocusAction = 'restore-trigger';\n    return currentAction;\n  }\n\n  shouldRestoreTriggerFocus(activeElement: Element | null, selectHost?: HTMLElement | null, panelElement?: HTMLElement | null): boolean {\n    return shouldRestoreTriggerFocus(activeElement, selectHost, panelElement);\n  }\n}\n\nfunction isMeaningfullyFocusedElement(element: Element | null): element is HTMLElement {\n  return element instanceof HTMLElement && element !== document.body && element !== document.documentElement;\n}\n\nfunction isOutsideSelectContext(target: EventTarget | null, selectHost?: HTMLElement | null, panelElement?: HTMLElement | null): boolean {\n  if (!(target instanceof Node)) {\n    return false;\n  }\n\n  return !(selectHost?.contains(target) ?? false) && !(panelElement?.contains(target) ?? false);\n}\n\nfunction shouldRestoreTriggerFocus(activeElement: Element | null, selectHost?: HTMLElement | null, panelElement?: HTMLElement | null): boolean {\n  if (!isMeaningfullyFocusedElement(activeElement)) {\n    return true;\n  }\n\n  if (!activeElement.isConnected) {\n    return true;\n  }\n\n  if (panelElement?.contains(activeElement)) {\n    return true;\n  }\n\n  return selectHost?.contains(activeElement) ?? false;\n}\n","import { ElementRef } from '@angular/core';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { VisibleBoundary } from './lux-select-filter-keyboard';\n\nconst PAGE_NAVIGATION_DELTA = 10;\n\nexport class LuxSelectFilterNavigator {\n  constructor(\n    private readonly matSelect: MatSelect,\n    private readonly internalSelect: MatSelectInternal,\n    private readonly getFilterHeight: (panel: HTMLElement) => number\n  ) {}\n\n  syncActiveItemToVisibleOptions(): void {\n    const keyManager = this.getInternalKeyManager();\n    if (!keyManager) {\n      return;\n    }\n\n    const visibleOptionIndexes = this.getVisibleOptionIndexes();\n    if (visibleOptionIndexes.length === 0) {\n      if (typeof keyManager.updateActiveItem === 'function') {\n        keyManager.updateActiveItem(-1);\n      } else {\n        keyManager.activeItemIndex = -1;\n      }\n      return;\n    }\n\n    const activeIndex = this.getActiveOptionIndex(keyManager);\n    if (activeIndex >= 0 && visibleOptionIndexes.includes(activeIndex)) {\n      return;\n    }\n\n    this.activateVisibleOptionByPosition(keyManager, visibleOptionIndexes, 0);\n  }\n\n  moveActiveVisibleOption(step: 1 | -1): void {\n    const keyManager = this.getInternalKeyManager();\n    if (!keyManager) {\n      return;\n    }\n\n    const visibleOptionIndexes = this.getVisibleOptionIndexes();\n    if (visibleOptionIndexes.length === 0) {\n      return;\n    }\n\n    const currentActiveIndex = this.getActiveOptionIndex(keyManager);\n    const currentVisiblePos = visibleOptionIndexes.indexOf(currentActiveIndex);\n    const nextVisiblePos = currentVisiblePos < 0 ? (step === 1 ? 0 : visibleOptionIndexes.length - 1) : clampVisiblePosition(currentVisiblePos + step, visibleOptionIndexes.length);\n\n    this.activateVisibleOptionByPosition(keyManager, visibleOptionIndexes, nextVisiblePos);\n  }\n\n  moveActiveVisibleOptionByPage(direction: 1 | -1): void {\n    const keyManager = this.getInternalKeyManager();\n    if (!keyManager) {\n      return;\n    }\n\n    const visibleOptionIndexes = this.getVisibleOptionIndexes();\n    if (visibleOptionIndexes.length === 0) {\n      return;\n    }\n\n    const currentActiveIndex = this.getActiveOptionIndex(keyManager);\n    const currentVisiblePos = visibleOptionIndexes.indexOf(currentActiveIndex);\n    const targetVisiblePos =\n      currentVisiblePos < 0\n        ? clampVisiblePosition(direction === 1 ? PAGE_NAVIGATION_DELTA - 1 : 0, visibleOptionIndexes.length)\n        : clampVisiblePosition(currentVisiblePos + direction * PAGE_NAVIGATION_DELTA, visibleOptionIndexes.length);\n\n    this.activateVisibleOptionByPosition(keyManager, visibleOptionIndexes, targetVisiblePos);\n  }\n\n  moveToVisibleBoundary(boundary: VisibleBoundary): void {\n    const keyManager = this.getInternalKeyManager();\n    if (!keyManager) {\n      return;\n    }\n\n    const visibleOptionIndexes = this.getVisibleOptionIndexes();\n    if (visibleOptionIndexes.length === 0) {\n      return;\n    }\n\n    this.activateVisibleOptionByPosition(keyManager, visibleOptionIndexes, boundary === 'start' ? 0 : visibleOptionIndexes.length - 1);\n  }\n\n  selectActiveOrFirstVisibleOption(onContinueFiltering: () => void): void {\n    const keyManager = this.getInternalKeyManager();\n    if (!keyManager) {\n      return;\n    }\n\n    const visibleOptionIndexes = this.getVisibleOptionIndexes();\n    if (visibleOptionIndexes.length === 0) {\n      return;\n    }\n\n    const activeIndex = this.getActiveOptionIndex(keyManager);\n    const targetIndex = visibleOptionIndexes.includes(activeIndex) ? activeIndex : visibleOptionIndexes[0];\n    keyManager.setActiveItem(targetIndex);\n    this.scrollOptionIntoView(targetIndex);\n\n    const option = (this.matSelect.options?.toArray?.() ?? [])[targetIndex];\n    if (!option) {\n      return;\n    }\n\n    const internalOption = option as unknown as MatOptionInternal;\n    if (typeof internalOption._selectViaInteraction === 'function') {\n      internalOption._selectViaInteraction();\n    } else {\n      option.select();\n    }\n\n    if (!this.matSelect.multiple) {\n      this.matSelect.close();\n      return;\n    }\n\n    onContinueFiltering();\n  }\n\n  updatePanelFilterOffset(panel: HTMLElement): void {\n    panel.style.setProperty('--lux-select-filter-offset', `${this.getFilterHeight(panel)}px`);\n  }\n\n  clearPanelFilterOffset(panel?: HTMLElement): void {\n    panel?.style.removeProperty('--lux-select-filter-offset');\n  }\n\n  private activateVisibleOptionByPosition(\n    keyManager: InternalKeyManager,\n    visibleOptionIndexes: number[],\n    targetVisiblePos: number\n  ): void {\n    const targetIndex = visibleOptionIndexes[clampVisiblePosition(targetVisiblePos, visibleOptionIndexes.length)];\n    keyManager.setActiveItem(targetIndex);\n    this.scrollOptionIntoView(targetIndex);\n  }\n\n  private getVisibleOptionIndexes(): number[] {\n    const options = this.matSelect.options?.toArray?.() ?? [];\n    return options\n      .map((option, index) => ({ option, index }))\n      .filter(({ option }) => this.isOptionVisible(option))\n      .map(({ index }) => index);\n  }\n\n  private isOptionVisible(option: MatOption): boolean {\n    const hostElement = this.getOptionHostElement(option);\n    if (!hostElement) {\n      return true;\n    }\n\n    if (hostElement.style.display === 'none' || hostElement.style.visibility === 'hidden') {\n      return false;\n    }\n\n    const style = window.getComputedStyle(hostElement);\n    return style.display !== 'none' && style.visibility !== 'hidden';\n  }\n\n  private getActiveOptionIndex(keyManager: InternalKeyManager): number {\n    if (keyManager.activeItemIndex >= 0) {\n      return keyManager.activeItemIndex;\n    }\n\n    const activeItem = keyManager.activeItem;\n    if (!activeItem) {\n      return -1;\n    }\n\n    const options = this.matSelect.options?.toArray?.() ?? [];\n    return options.indexOf(activeItem as MatOption);\n  }\n\n  private scrollOptionIntoView(index: number): void {\n    const panel = this.matSelect.panel?.nativeElement as HTMLElement | undefined;\n    const option = (this.matSelect.options?.toArray?.() ?? [])[index];\n    if (!panel || !option) {\n      return;\n    }\n\n    const scrollFn = this.internalSelect._scrollOptionIntoView;\n    if (typeof scrollFn === 'function') {\n      scrollFn.call(this.matSelect, index);\n    }\n\n    this.ensureOptionVisibleBelowFilter(panel, option);\n  }\n\n  private ensureOptionVisibleBelowFilter(panel: HTMLElement, option: MatOption): void {\n    const optionHost = this.getOptionHostElement(option);\n    if (!optionHost) {\n      return;\n    }\n\n    const filterHeight = this.getFilterHeight(panel);\n    if (filterHeight <= 0) {\n      return;\n    }\n\n    const panelRect = panel.getBoundingClientRect();\n    const optionRect = optionHost.getBoundingClientRect();\n    const visibleTop = panelRect.top + filterHeight;\n    const visibleBottom = panelRect.bottom;\n\n    if (optionRect.top < visibleTop) {\n      panel.scrollTop -= visibleTop - optionRect.top;\n      return;\n    }\n\n    if (optionRect.bottom > visibleBottom) {\n      panel.scrollTop += optionRect.bottom - visibleBottom;\n    }\n  }\n\n  private getInternalKeyManager(): InternalKeyManager | undefined {\n    return this.internalSelect._keyManager;\n  }\n\n  private getOptionHostElement(option: MatOption): HTMLElement | null {\n    const internalOption = option as unknown as MatOptionInternal;\n    if (typeof internalOption._getHostElement === 'function') {\n      return internalOption._getHostElement();\n    }\n\n    return internalOption._element?.nativeElement ?? null;\n  }\n}\n\nfunction clampVisiblePosition(position: number, visibleCount: number): number {\n  return Math.max(0, Math.min(position, visibleCount - 1));\n}\n\nexport interface InternalKeyManager {\n  activeItemIndex: number;\n  activeItem?: { focus?: () => void } | null;\n  setActiveItem(index: number): void;\n  updateActiveItem?(index: number): void;\n}\n\nexport interface MatSelectInternal {\n  _keyManager?: InternalKeyManager;\n  _scrollOptionIntoView?(index: number): void;\n  _elementRef?: ElementRef<HTMLElement>;\n}\n\ninterface MatOptionInternal {\n  _getHostElement?(): HTMLElement;\n  _element?: ElementRef<HTMLElement>;\n  _selectViaInteraction?(): void;\n}\n","/**\n * Utility-Funktionen für Filter-Operationen.\n */\nexport const LuxSelectFilterUtils = {\n  /**\n   * Normalisiert einen Wert zu lowercase String.\n   */\n  normalize(value: unknown): string {\n    return ('' + (value ?? '')).toLocaleLowerCase();\n  },\n\n  /**\n   * Fokussiert das nächste fokussierbare Element im Dokument.\n   */\n  focusNextFocusableElement(currentElement: HTMLElement): void {\n    const focusableElements = this.getFocusableElements();\n    const currentIndex = focusableElements.indexOf(currentElement);\n    if (currentIndex < 0) {\n      return;\n    }\n\n    focusableElements[currentIndex + 1]?.focus();\n  },\n\n  /**\n   * Fokussiert das vorherige fokussierbare Element im Dokument.\n   */\n  focusPreviousFocusableElement(currentElement: HTMLElement): void {\n    const focusableElements = this.getFocusableElements();\n    const currentIndex = focusableElements.indexOf(currentElement);\n    if (currentIndex <= 0) {\n      return;\n    }\n\n    focusableElements[currentIndex - 1]?.focus();\n  },\n\n  /**\n   * Liefert alle aktuell fokussierbaren Elemente in Dokument-Reihenfolge.\n   */\n  getFocusableElements(): HTMLElement[] {\n    const candidates = Array.from(\n      document.querySelectorAll(\n        'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n      )\n    ) as HTMLElement[];\n\n    return candidates.filter((element) => this.isFocusableVisible(element));\n  },\n\n  /**\n   * Prüft ob ein Fokusziel sichtbar und nutzbar ist.\n   */\n  isFocusableVisible(element: HTMLElement): boolean {\n    if (!element.isConnected) {\n      return false;\n    }\n\n    if (element.closest('[aria-hidden=\"true\"], [hidden]')) {\n      return false;\n    }\n\n    let currentElement: HTMLElement | null = element;\n    while (currentElement) {\n      const style = window.getComputedStyle(currentElement);\n      if (style.display === 'none' || style.visibility === 'hidden') {\n        return false;\n      }\n      currentElement = currentElement.parentElement;\n    }\n\n    return true;\n  }\n} as const;\n","import { LuxSelectFilterUtils } from './lux-select-filter.utils';\n\nexport class LuxSelectFilterState<T> {\n  private itemCache: T[] = [];\n  private normalizedLabelCache: string[] = [];\n\n  readonly filteredItems = new Set<T>();\n  readonly filteredIndexes = new Set<number>();\n  filterValue = '';\n\n  constructor(\n    private readonly isEnabled: () => boolean,\n    private readonly getLabelFn: () => ((item: T, index: number) => string) | undefined\n  ) {}\n\n  setItems(items: readonly T[]): void {\n    this.itemCache = [...items];\n    this.refresh();\n  }\n\n  setFilterValue(value: string): boolean {\n    const wasActive = this.isFilterActive();\n    this.filterValue = value;\n    this.applyFilter();\n    return wasActive !== this.isFilterActive();\n  }\n\n  clear(): boolean {\n    if (!this.filterValue) {\n      return false;\n    }\n\n    this.filterValue = '';\n    this.applyFilter();\n    return true;\n  }\n\n  refresh(): void {\n    this.rebuildCache();\n    this.applyFilter();\n  }\n\n  isFilterActive(): boolean {\n    return this.isEnabled() && this.filterValue.trim().length > 0;\n  }\n\n  isItemVisible(item: T): boolean {\n    return !this.isFilterActive() || this.filteredItems.has(item);\n  }\n\n  isIndexVisible(index: number): boolean {\n    return !this.isFilterActive() || this.filteredIndexes.has(index);\n  }\n\n  private rebuildCache(): void {\n    const labelFn = this.getLabelFn();\n    if (!labelFn) {\n      this.normalizedLabelCache = [];\n      return;\n    }\n\n    this.normalizedLabelCache = this.itemCache.map((item, index) => LuxSelectFilterUtils.normalize(labelFn(item, index)));\n  }\n\n  private applyFilter(): void {\n    const normalizedFilter = LuxSelectFilterUtils.normalize(this.filterValue).trim();\n    this.filteredItems.clear();\n    this.filteredIndexes.clear();\n\n    this.itemCache.forEach((item, index) => {\n      const label = this.normalizedLabelCache[index] ?? '';\n      if (!normalizedFilter || label.includes(normalizedFilter)) {\n        this.filteredItems.add(item);\n        this.filteredIndexes.add(index);\n      }\n    });\n  }\n}\n","import { DestroyRef, Directive, ElementRef, EventEmitter, inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatSelect } from '@angular/material/select';\nimport { handleSelectFilterKeyboard } from './lux-select-filter-keyboard';\nimport { LuxSelectFilterFocusController, ManualTabIntent } from './lux-select-filter-focus';\nimport { LuxSelectFilterNavigator, MatSelectInternal } from './lux-select-filter-navigator';\nimport { LuxSelectFilterState } from './lux-select-filter-state';\nimport { LuxSelectFilterUtils } from './lux-select-filter.utils';\n\n@Directive({\n  selector: 'mat-select[luxSelectFilter]',\n  exportAs: 'luxSelectFilter',\n  standalone: true\n})\nexport class LuxSelectFilterDirective<T = any> implements OnInit, OnDestroy {\n  private readonly matSelect = inject(MatSelect);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly internalSelect = this.matSelect as unknown as MatSelectInternal;\n  private readonly timers: TimeoutMap = {};\n  private readonly filterState = new LuxSelectFilterState<T>(() => this.luxSelectFilter, () => this.luxFilterLabelFn);\n  private readonly focusController = new LuxSelectFilterFocusController();\n  private readonly navigator = new LuxSelectFilterNavigator(this.matSelect, this.internalSelect, (panel) => this.getFilterHeight(panel));\n  private panelElement?: HTMLElement;\n  private lastPanelElement?: HTMLElement;\n\n  private readonly panelKeydownHandler = (event: KeyboardEvent) => this.handleOptionKeydown(event);\n  private readonly documentPointerdownHandler = (event: PointerEvent) => this.handleDocumentPointerdown(event);\n  private readonly panelClickHandler = (event: MouseEvent) => this.handlePanelClick(event);\n\n  @Input() luxSelectFilter = false;\n  @Input() luxFilterLabelFn?: (item: T, index: number) => string;\n  @Output() luxFilterActiveChange = new EventEmitter<boolean>();\n  filterInputRef?: ElementRef<HTMLInputElement>;\n\n  get filterValue(): string {\n    return this.filterState.filterValue;\n  }\n\n  set filterValue(value: string) {\n    this.filterState.filterValue = value;\n  }\n\n  get filteredItems(): Set<T> {\n    return this.filterState.filteredItems;\n  }\n\n  get filteredIndexes(): Set<number> {\n    return this.filterState.filteredIndexes;\n  }\n\n  ngOnInit(): void {\n    this.matSelect.openedChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((open) => {\n      if (open) {\n        this.onPanelOpen();\n      } else {\n        this.onPanelClose();\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.removePanelKeydownListener();\n    this.removeDocumentPointerdownListener();\n    this.clearAllTimers();\n  }\n\n  setItems(items: readonly T[]): void {\n    this.filterState.setItems(items);\n  }\n\n  onFilterInput(value: string): void {\n    if (this.filterState.setFilterValue(value)) {\n      this.luxFilterActiveChange.emit(this.filterState.isFilterActive());\n    }\n\n    this.navigator.syncActiveItemToVisibleOptions();\n  }\n\n  setFilterInputRef(ref: ElementRef<HTMLInputElement>): void {\n    this.filterInputRef = ref;\n  }\n\n  handleKeydown(event: KeyboardEvent): boolean {\n    return this.handleKeyboard(event, 'input');\n  }\n\n  handleOptionKeydown(event: KeyboardEvent): boolean {\n    return this.handleKeyboard(event, 'panel');\n  }\n\n  isItemVisible(item: T): boolean {\n    return this.filterState.isItemVisible(item);\n  }\n\n  isIndexVisible(index: number): boolean {\n    return this.filterState.isIndexVisible(index);\n  }\n\n  isFilterActive(): boolean {\n    return this.filterState.isFilterActive();\n  }\n\n  private onPanelOpen(): void {\n    if (!this.luxSelectFilter) {\n      return;\n    }\n\n    this.focusController.reset();\n    this.clearTimer('focusRestore');\n    this.clearTimer('tabNavigation');\n    this.filterState.refresh();\n    this.navigator.syncActiveItemToVisibleOptions();\n    this.registerPanelKeydownListener();\n    this.focusFilterInput();\n  }\n\n  private onPanelClose(): void {\n    if (!this.luxSelectFilter) {\n      return;\n    }\n\n    this.removePanelKeydownListener();\n    this.removeDocumentPointerdownListener();\n    this.navigator.clearPanelFilterOffset(this.matSelect.panel?.nativeElement as HTMLElement | undefined);\n    if (this.filterState.clear()) {\n      this.luxFilterActiveChange.emit(false);\n    }\n\n    const closeAction = this.focusController.consumeCloseAction();\n    if (closeAction === 'manual-tab-forward' || closeAction === 'manual-tab-backward') {\n      this.scheduleManualTabNavigation(closeAction);\n      return;\n    }\n\n    if (closeAction === 'preserve-external-focus') {\n      return;\n    }\n\n    this.restoreTriggerFocusIfNeeded();\n  }\n\n  private focusFilterInput(): void {\n    this.setTimer('focusInput', () => {\n      const input = this.filterInputRef?.nativeElement;\n      if (!this.matSelect.panelOpen || !input) {\n        return;\n      }\n\n      input.focus({ preventScroll: true });\n      input.select();\n    });\n  }\n\n  private setTimer(timerKey: TimerKey, callback: () => void): void {\n    this.clearTimer(timerKey);\n    this.timers[timerKey] = setTimeout(() => {\n      this.timers[timerKey] = undefined;\n      callback();\n    });\n  }\n\n  private clearTimer(timerKey: TimerKey): void {\n    const timer = this.timers[timerKey];\n    if (!timer) return;\n    clearTimeout(timer);\n    this.timers[timerKey] = undefined;\n  }\n\n  private clearAllTimers(): void {\n    this.clearTimer('focusInput');\n    this.clearTimer('focusRestore');\n    this.clearTimer('tabNavigation');\n    this.clearTimer('panelAttach');\n  }\n\n  private registerPanelKeydownListener(): void {\n    this.removePanelKeydownListener();\n    this.removeDocumentPointerdownListener();\n\n    this.runAfterPanelAttached((panel) => {\n      this.panelElement = panel;\n      this.lastPanelElement = panel;\n      this.navigator.updatePanelFilterOffset(panel);\n      panel.addEventListener('keydown', this.panelKeydownHandler, true);\n      panel.addEventListener('click', this.panelClickHandler, true);\n      document.addEventListener('pointerdown', this.documentPointerdownHandler, true);\n    });\n  }\n\n  private runAfterPanelAttached(callback: (panel: HTMLElement) => void): void {\n    const tryAttach = () => {\n      if (!this.matSelect.panelOpen) return;\n\n      const panel = this.matSelect.panel?.nativeElement as HTMLElement | undefined;\n      if (!panel) {\n        this.setTimer('panelAttach', tryAttach);\n        return;\n      }\n\n      callback(panel);\n    };\n\n    tryAttach();\n  }\n\n  private removePanelKeydownListener(): void {\n    this.clearTimer('panelAttach');\n    if (!this.panelElement) return;\n\n    this.panelElement.removeEventListener('keydown', this.panelKeydownHandler, true);\n    this.panelElement.removeEventListener('click', this.panelClickHandler, true);\n    this.panelElement = undefined;\n  }\n\n  private removeDocumentPointerdownListener(): void {\n    document.removeEventListener('pointerdown', this.documentPointerdownHandler, true);\n  }\n\n  private handleKeyboard(event: KeyboardEvent, source: 'input' | 'panel'): boolean {\n    const outcome = handleSelectFilterKeyboard(event, source, {\n      isPanelOpen: () => this.matSelect.panelOpen,\n      isEventFromFilterInput: (keyboardEvent) => this.isEventFromFilterInput(keyboardEvent),\n      isListNavigationModifierAllowed: (keyboardEvent) => this.isListNavigationModifierAllowed(keyboardEvent),\n      moveActiveVisibleOption: (step) => this.navigator.moveActiveVisibleOption(step),\n      moveActiveVisibleOptionByPage: (direction) => this.navigator.moveActiveVisibleOptionByPage(direction),\n      moveToVisibleBoundary: (boundary) => this.navigator.moveToVisibleBoundary(boundary),\n      selectActiveOrFirstVisibleOption: () => this.navigator.selectActiveOrFirstVisibleOption(() => this.focusFilterInput())\n    });\n\n    if (outcome === 'manual-tab-forward' || outcome === 'manual-tab-backward') {\n      this.focusController.queueManualTabNavigation(outcome === 'manual-tab-backward');\n      this.matSelect.close();\n      return true;\n    }\n\n    if (outcome === 'preserve-external-focus') {\n      this.focusController.preserveExternalFocus();\n      return false;\n    }\n\n    return outcome === 'handled';\n  }\n\n  private restoreTriggerFocusIfNeeded(): void {\n    this.setTimer('focusRestore', () => {\n      const selectHost = this.getSelectHostElement();\n      if (!this.focusController.shouldRestoreTriggerFocus(document.activeElement, selectHost, this.lastPanelElement)) {\n        return;\n      }\n\n      this.matSelect.focus();\n    });\n  }\n\n  private scheduleManualTabNavigation(intent: ManualTabIntent): void {\n    this.setTimer('tabNavigation', () => {\n      const focusAnchor = this.getTabNavigationAnchorElement();\n      if (!focusAnchor) return;\n\n      if (intent === 'manual-tab-backward') {\n        LuxSelectFilterUtils.focusPreviousFocusableElement(focusAnchor);\n      } else {\n        LuxSelectFilterUtils.focusNextFocusableElement(focusAnchor);\n      }\n    });\n  }\n\n  private getTabNavigationAnchorElement(): HTMLElement | undefined {\n    const activeElement = document.activeElement;\n    if (activeElement instanceof HTMLElement && activeElement !== document.body && activeElement !== document.documentElement) {\n      return activeElement;\n    }\n\n    const selectHost = this.getSelectHostElement();\n    if (!selectHost) return undefined;\n\n    const focusTarget = selectHost.querySelector<HTMLElement>('[tabindex], button, a[href], input, select, textarea');\n    return focusTarget ?? selectHost;\n  }\n\n  private isEventFromFilterInput(event: KeyboardEvent): boolean {\n    const target = event.target as HTMLElement | null;\n    return !!target?.closest('.lux-select-panel-filter, .lux-select-panel-filter-input');\n  }\n\n  private isListNavigationModifierAllowed(event: KeyboardEvent): boolean {\n    return !event.altKey && !event.ctrlKey && !event.metaKey;\n  }\n\n  private handleDocumentPointerdown(event: PointerEvent): void {\n    this.focusController.handleDocumentPointerdown(event.target, this.getSelectHostElement(), this.panelElement);\n  }\n\n  private handlePanelClick(event: MouseEvent): void {\n    if (!this.matSelect.multiple) {\n      return;\n    }\n\n    const target = event.target;\n    if (!(target instanceof HTMLElement) || !target.closest('.mat-mdc-option')) {\n      return;\n    }\n\n    this.focusFilterInput();\n  }\n\n  private getSelectHostElement(): HTMLElement | undefined {\n    return this.internalSelect._elementRef?.nativeElement;\n  }\n\n  private getFilterHeight(panel: HTMLElement): number {\n    const filterHost = panel.querySelector<HTMLElement>('lux-select-panel-filter');\n    if (!filterHost) return 0;\n\n    const style = window.getComputedStyle(filterHost);\n    if (style.display === 'none' || style.visibility === 'hidden') {\n      return 0;\n    }\n\n    return filterHost.getBoundingClientRect().height;\n  }\n}\n\ntype TimerKey = 'focusInput' | 'focusRestore' | 'tabNavigation' | 'panelAttach';\ntype TimeoutMap = Partial<Record<TimerKey, ReturnType<typeof setTimeout>>>;\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { LuxButtonComponent } from '../../lux-action/lux-button/lux-button.component';\nimport { LuxInputAcComponent } from '../lux-input-ac/lux-input-ac.component';\nimport { LuxInputAcSuffixComponent } from '../lux-input-ac/lux-input-ac-subcomponents/lux-input-ac-suffix.component';\nimport { LuxSelectFilterDirective } from './lux-select-filter.directive';\n\n@Component({\n  selector: 'lux-select-panel-filter',\n  templateUrl: './lux-select-panel-filter.component.html',\n  styleUrls: ['./lux-select-panel-filter.component.scss'],\n  imports: [LuxInputAcComponent, LuxInputAcSuffixComponent, LuxButtonComponent]\n})\nexport class LuxSelectPanelFilterComponent implements AfterViewInit, OnChanges {\n  @Input({ required: true }) filterDirective!: LuxSelectFilterDirective;\n\n  @Input() placeholder = 'Filter';\n  @Input() filterValue = '';\n  @Input() clearAriaLabel = 'Clear filter';\n\n  @ViewChild('filterInput') filterInputComponent?: LuxInputAcComponent<string>;\n\n  get filterInput(): ElementRef<HTMLInputElement> | undefined {\n    return this.filterInputComponent?.inputElement as ElementRef<HTMLInputElement> | undefined;\n  }\n\n  get currentFilterValue(): string {\n    return this.filterDirective?.filterValue ?? this.filterValue;\n  }\n\n  ngAfterViewInit(): void {\n    this.syncNativeInputAttributes();\n    this.syncDirectiveBindings();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['placeholder']) {\n      this.syncNativeInputAttributes();\n    }\n\n    if (changes['filterDirective']) {\n      this.syncDirectiveBindings();\n    }\n\n    if (changes['filterValue'] || changes['filterDirective']) {\n      this.syncFilterValueToDirective();\n    }\n  }\n\n  private syncDirectiveBindings(): void {\n    if (this.filterInput) {\n      this.filterDirective.setFilterInputRef(this.filterInput);\n    }\n  }\n\n  private syncFilterValueToDirective(): void {\n    const nextValue = this.filterValue ?? '';\n    if (nextValue === this.filterDirective.filterValue) {\n      return;\n    }\n\n    this.filterDirective.onFilterInput(nextValue);\n  }\n\n  private syncNativeInputAttributes(): void {\n    const nativeInput = this.filterInput?.nativeElement;\n    if (nativeInput) {\n      nativeInput.classList.add('lux-select-panel-filter-input');\n      nativeInput.setAttribute('role', 'searchbox');\n      nativeInput.setAttribute('aria-autocomplete', 'list');\n      nativeInput.setAttribute('aria-label', this.placeholder);\n    }\n  }\n\n  onInput(value: string): void {\n    this.filterDirective.onFilterInput(value ?? '');\n  }\n\n  onKeydown(event: KeyboardEvent): void {\n    const handled = this.filterDirective.handleKeydown(event);\n    if (handled || event.key !== 'Escape') {\n      event.stopPropagation();\n    }\n  }\n\n  onClearMouseDown(event: MouseEvent): void {\n    event.preventDefault();\n    event.stopPropagation();\n  }\n\n  onClear(event: Event): void {\n    event.stopPropagation();\n    this.filterDirective.onFilterInput('');\n    this.filterInput?.nativeElement.focus({ preventScroll: true });\n  }\n\n  stopPanelEvent(event: Event): void {\n    event.stopPropagation();\n  }\n}\n","<div class=\"lux-select-panel-filter\" role=\"presentation\" (click)=\"stopPanelEvent($event)\" (mousedown)=\"stopPanelEvent($event)\">\n  <lux-input-ac\n    #filterInput\n    class=\"lux-select-panel-filter-input-wrapper\"\n    [luxNoLabels]=\"true\"\n    [luxNoTopLabel]=\"true\"\n    [luxNoBottomLabel]=\"true\"\n    [luxHideCounterLabel]=\"true\"\n    [luxPlaceholder]=\"placeholder\"\n    [luxValue]=\"currentFilterValue\"\n    luxAutocomplete=\"off\"\n    (luxValueChange)=\"onInput($event)\"\n    (keydown)=\"onKeydown($event)\"\n  >\n    @if (currentFilterValue) {\n      <lux-input-ac-suffix>\n        <lux-button\n          class=\"lux-select-panel-filter-clear-btn\"\n          [luxRounded]=\"true\"\n          luxIconName=\"lux-interface-delete-circle\"\n          [luxLabel]=\"clearAriaLabel\"\n          (mousedown)=\"onClearMouseDown($event)\"\n          (luxClicked)=\"onClear($event)\"\n        ></lux-button>\n      </lux-input-ac-suffix>\n    }\n  </lux-input-ac>\n</div>\n","import { DestroyRef, Directive, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatSelect } from '@angular/material/select';\n\n@Directive({\n  selector: 'mat-select[luxSelectVisibleOptionCount]',\n  standalone: true\n})\nexport class LuxSelectVisibleOptionCountDirective implements OnInit, OnChanges, OnDestroy {\n  private static readonly DEFAULT_OPTION_HEIGHT = 48;\n\n  private readonly matSelect = inject(MatSelect);\n  private readonly destroyRef = inject(DestroyRef);\n  private panelAttachTimeout?: ReturnType<typeof setTimeout>;\n\n  @Input() luxSelectVisibleOptionCount?: number | null;\n\n  ngOnInit(): void {\n    this.matSelect.openedChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((open) => {\n      if (open) {\n        this.schedulePanelSizing();\n      } else {\n        this.clearPanelSizing();\n      }\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!changes['luxSelectVisibleOptionCount'] || !this.matSelect.panelOpen) {\n      return;\n    }\n\n    this.schedulePanelSizing();\n  }\n\n  ngOnDestroy(): void {\n    this.clearPanelSizing();\n  }\n\n  private schedulePanelSizing(): void {\n    this.clearPanelAttachTimeout();\n\n    const tryApplySizing = () => {\n      if (!this.matSelect.panelOpen) {\n        return;\n      }\n\n      const panel = this.matSelect.panel?.nativeElement as HTMLElement | undefined;\n      if (!panel) {\n        this.panelAttachTimeout = setTimeout(() => {\n          this.panelAttachTimeout = undefined;\n          tryApplySizing();\n        });\n        return;\n      }\n\n      this.applyPanelSizing(panel);\n    };\n\n    tryApplySizing();\n  }\n\n  private applyPanelSizing(panel: HTMLElement): void {\n    const visibleOptionCount = this.getVisibleOptionCount();\n    if (!visibleOptionCount) {\n      panel.style.maxHeight = '';\n      return;\n    }\n\n    const optionHeight = this.measureOptionHeight(panel);\n    const filterHeight = this.measureFilterHeight(panel);\n    panel.style.maxHeight = `${filterHeight + optionHeight * visibleOptionCount}px`;\n  }\n\n  private getVisibleOptionCount(): number | undefined {\n    const count = Math.trunc(Number(this.luxSelectVisibleOptionCount));\n    if (!Number.isFinite(count) || count <= 0) {\n      return undefined;\n    }\n\n    return count;\n  }\n\n  private measureOptionHeight(panel: HTMLElement): number {\n    const options = Array.from(panel.querySelectorAll<HTMLElement>('.mat-mdc-option'));\n    const visibleOption = options.find((option) => this.isElementVisible(option)) ?? options[0];\n    if (!visibleOption) {\n      return LuxSelectVisibleOptionCountDirective.DEFAULT_OPTION_HEIGHT;\n    }\n\n    const optionHeight = visibleOption.getBoundingClientRect().height;\n    return optionHeight > 0 ? optionHeight : LuxSelectVisibleOptionCountDirective.DEFAULT_OPTION_HEIGHT;\n  }\n\n  private measureFilterHeight(panel: HTMLElement): number {\n    const filterHost = panel.querySelector<HTMLElement>('lux-select-panel-filter');\n    if (!filterHost || !this.isElementVisible(filterHost)) {\n      return 0;\n    }\n\n    return filterHost.getBoundingClientRect().height;\n  }\n\n  private isElementVisible(element: HTMLElement): boolean {\n    const style = window.getComputedStyle(element);\n    return style.display !== 'none' && style.visibility !== 'hidden';\n  }\n\n  private clearPanelSizing(): void {\n    this.clearPanelAttachTimeout();\n    const panel = this.matSelect.panel?.nativeElement as HTMLElement | undefined;\n    if (panel) {\n      panel.style.maxHeight = '';\n    }\n  }\n\n  private clearPanelAttachTimeout(): void {\n    if (!this.panelAttachTimeout) {\n      return;\n    }\n\n    clearTimeout(this.panelAttachTimeout);\n    this.panelAttachTimeout = undefined;\n  }\n}\n","import { Directive, EventEmitter, Input, Output } from '@angular/core';\nimport { LuxFormComponentBase } from './lux-form-component-base.class';\n\nexport declare type LuxPickValueFnType<O = any, V = any> = ((option: O) => V) | undefined;\nexport declare type LuxCompareWithFnType<O = any> = ((o1: O, o2: O) => boolean) | undefined;\n\n/**\n * Basis-Klasse für FormComponents, die einen ähnlichen Grundaufbau für die Auswahl von\n * Optionen aus einem Array anbieten (Radio-Buttons und Selects z.B.).\n * @param O Optionstyp (z.B Land)\n * @param V Werttyp (z.B. Land, Land[], string, string[],...)\n * @param P PickValueFn-Typ (z.B. string, number,...)\n */\n@Directive()\nexport abstract class LuxFormSelectableBase<O = any, V = any, P = any> extends LuxFormComponentBase<V> {\n  _luxOptions: any[] = [];\n  _luxOptionsPickValue: any[] = [];\n  _luxPickValue?: LuxPickValueFnType<O, P>;\n  _luxCompareWith = (o1: O, o2: O) => o1 === o2;\n\n  @Output() luxSelectedChange = new EventEmitter<any>();\n  @Input() luxOptionLabelProp? = '';\n  @Input() luxTagId?: string;\n\n  get luxCompareWith(): LuxCompareWithFnType | undefined {\n    return this._luxCompareWith;\n  }\n\n  @Input()\n  set luxCompareWith(compareFn: LuxCompareWithFnType | undefined) {\n    this._luxCompareWith = compareFn ?? ((o1: O, o2: O) => o1 === o2);\n  }\n\n  get luxSelected(): V | null {\n    return this.getValue();\n  }\n\n  @Input() set luxSelected(selected: V | null) {\n    this.setValue(selected as V);\n  }\n\n  get luxPickValue(): LuxPickValueFnType<O, P> {\n    return this._luxPickValue;\n  }\n\n  @Input() set luxPickValue(pickValueFn: LuxPickValueFnType<O, P>) {\n    this._luxPickValue = pickValueFn;\n    this._luxOptionsPickValue = [];\n\n    if (pickValueFn && this.luxOptions) {\n      this._luxOptions.forEach((option) => this._luxOptionsPickValue.push(pickValueFn(option)));\n    }\n  }\n\n  get luxOptions(): any[] {\n    return this._luxOptions;\n  }\n\n  @Input() set luxOptions(options: any[]) {\n    this._luxOptions = options;\n    this._luxOptionsPickValue = [];\n\n    const pickValueFn = this.luxPickValue;\n    if (this._luxOptions && pickValueFn) {\n      this._luxOptions.forEach((option) => this._luxOptionsPickValue.push(pickValueFn(option)));\n    }\n  }\n\n  override notifyFormValueChanged(formValue: any) {\n    this.checkSelectedAndUpdate(formValue);\n  }\n\n  /**\n   * Versucht, wenn Options und FormControl vorhanden sind, den selected-Wert mit den Options\n   * zu vergleichen und wenn möglich als luxSelected-Wert zu sichern.\n   * @param selected\n   */\n  private checkSelectedAndUpdate(selected: any) {\n    if (this.luxOptions && this.luxOptions.length > 0 && this.formControl) {\n      if (this.luxPickValue && selected instanceof Object && !Array.isArray(selected)) {\n        // Wenn der Wert zufälligerweise noch ein Objekt sein sollte, versuchen den Key auszulesen\n        selected = this.luxPickValue(selected);\n\n        // Da der Wert neu gesetzt wurde, diesen im nächsten Zyklus erst in die Werte schreiben\n        setTimeout(() => {\n          this.checkSelectedAndUpdate(selected);\n        });\n      } else {\n        // Für den Fall, dass der eingesetzte Wert sich doch noch vom FormControl-Value unterscheidet,\n        // diesen ergänzen\n        if (this.luxSelected !== selected) {\n          this.luxSelected = selected;\n        }\n        this.luxSelectedChange.emit(selected);\n      }\n    }\n  }\n\n  /**\n   * Kapselung von der übergebenen luxCompareWith-Funktion.\n   * Fängt undefinierte Objekte ab und returned stattdessen false.\n   * @param o1\n   * @param o2\n   */\n  compareObjects = (o1: O, o2: O) => {\n    if ((!o1 && o2) || (o1 && !o2)) {\n      return false;\n    } else {\n      return this._luxCompareWith(o1, o2);\n    }\n  };\n}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, ContentChild, Input, OnChanges, OnInit, QueryList, SimpleChanges, TemplateRef, ViewChild, ViewChildren, inject } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { LuxAriaDescribedbyDirective } from '../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxAriaLabelledbyDirective } from '../../lux-directives/lux-aria/lux-aria-labelledby.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxRenderPropertyPipe } from '../../lux-pipes/lux-render-property/lux-render-property.pipe';\nimport { LuxSelectFilterDirective } from '../lux-select-filter/lux-select-filter.directive';\nimport { LuxSelectPanelFilterComponent } from '../lux-select-filter/lux-select-panel-filter.component';\nimport { LuxSelectVisibleOptionCountDirective } from '../lux-select-filter/lux-select-visible-option-count.directive';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxFormSelectableBase } from '../lux-form-model/lux-form-selectable-base.class';\n\n/**\n * @param O Optionstyp (z.B Land)\n * @param V Werttyp (z.B. Land, Land[], string, string[],...)\n * @param P PickValueFn-Typ (z.B. string, number,...)\n */\n@Component({\n  selector: 'lux-select-ac',\n  templateUrl: './lux-select-ac.component.html',\n  styleUrls: ['./lux-select-ac.component.scss'],\n  imports: [\n    LuxFormControlWrapperComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    NgClass,\n    MatSelect,\n    MatOption,\n    NgTemplateOutlet,\n    LuxAriaDescribedbyDirective,\n    LuxAriaLabelledbyDirective,\n    LuxTagIdDirective,\n    LuxRenderPropertyPipe,\n    LuxSelectPanelFilterComponent,\n    LuxSelectFilterDirective,\n    LuxSelectVisibleOptionCountDirective\n  ]\n})\nexport class LuxSelectAcComponent<O = any, V = any, P = any> extends LuxFormSelectableBase<O, V, P> implements OnInit, OnChanges {\n  private liveAnnouncer = inject(LiveAnnouncer);\n\n  // Potenziell eingebettetes Template für Darstellung der Labels\n  @ContentChild(TemplateRef) tempRef?: TemplateRef<any>;\n  @ViewChildren(MatOption) matOptions?: QueryList<MatOption>;\n  @ViewChild('select', { read: MatSelect }) matSelect?: MatSelect;\n\n  /**\n   * Platzhalter-Text, der angezeigt wird, wenn kein Wert ausgewählt ist.\n   */\n  @Input() luxPlaceholder = '';\n\n  /**\n   * Aktiviert die Mehrfachauswahl (Mehrfachselektion) im Select.\n   */\n  @Input() luxMultiple = false;\n\n  /**\n   * Aktiviert das Filterfeld im Auswahl-Panel.\n   */\n  @Input() luxEnableFilter = false;\n\n  /**\n   * Platzhalter-Text, der im Filtereingabefeld angezeigt wird.\n   */\n  @Input() luxFilterPlaceholder = 'Filter';\n\n  /**\n   * Vorbelegter Filterwert für das Filtereingabefeld.\n   */\n  @Input() luxFilterValue = '';\n\n  /**\n   * ARIA-Label für die Schaltfläche zum Löschen des Filterwertes.\n   */\n  @Input() luxFilterClearAriaLabel = 'Clear filter';\n\n  /**\n   * Begrenzt die Anzahl der gleichzeitig sichtbaren Optionen im geöffneten Panel.\n   * Werte <= 0 deaktivieren das Override und verwenden die Standardhöhe.\n   */\n  @Input() luxVisibleOptionCount?: number | null;\n\n  /**\n   * Blendet alle Standard-Labels des Formularfeldes aus.\n   */\n  @Input() luxNoLabels = false;\n\n  /**\n   * Blendet das obere Label (z. B. Feldbezeichnung) aus.\n   */\n  @Input() luxNoTopLabel = false;\n\n  /**\n   * Blendet das untere Label (z. B. Fehlermeldungen/Hinweise) aus.\n   */\n  @Input() luxNoBottomLabel = false;\n\n  displayedViewValue?: string;\n  focused = false;\n\n  /**\n   * Indizes in der Reihenfolge, wie die Optionen gerendert werden sollen.\n   * Selektierte Optionen werden nach oben sortiert.\n   */\n  renderOptionIndexes: number[] = [];\n\n  /**\n   * Label-Extractor für Filter-Directive.\n   * Wird als Arrow-Function definiert um this-Kontext zu erhalten.\n   */\n  filterLabelFn = (option: O, _index: number): string => {\n    if (option === null || option === undefined) {\n      return '';\n    }\n\n    if (\n      this.luxOptionLabelProp &&\n      Object.hasOwn(option, this.luxOptionLabelProp) &&\n      (option as any)[this.luxOptionLabelProp] !== undefined\n    ) {\n      return '' + (option as any)[this.luxOptionLabelProp];\n    }\n\n    return '' + option;\n  };\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.refreshRenderOptionIndexes();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['luxOptions'] || changes['luxPickValue']) {\n      this.refreshRenderOptionIndexes();\n    }\n  }\n\n  override notifyFormValueChanged(formValue: any) {\n    super.notifyFormValueChanged(formValue);\n\n    const matOption = this.matOptions?.find((option: MatOption) => option.value === formValue);\n    if (matOption) {\n      this.displayedViewValue = matOption.viewValue;\n      this.liveAnnouncer.announce(matOption.viewValue, 'assertive');\n    }\n  }\n\n  onFocusIn(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocusIn.emit(e);\n  }\n\n  onFocusOut(e: FocusEvent) {\n    this.focused = false;\n    this.luxFocusOut.emit(e);\n  }\n\n  /**\n   * Wird aufgerufen, wenn das Panel geöffnet/geschlossen wird.\n   * Übergibt Items an die Filter-Directive und sortiert Optionen.\n   */\n  onOpenedChange(open: boolean, filterDirective?: LuxSelectFilterDirective) {\n    if (open) {\n      // Selektierte Optionen nach oben sortieren\n      this.refreshRenderOptionIndexes();\n      // Items an Filter-Directive übergeben\n      if (filterDirective) {\n        filterDirective.setItems(this.luxOptions ?? []);\n      }\n    }\n  }\n\n  describedBy() {\n    if (this.errorMessage) {\n      return this.uid + '-error';\n    } else {\n      return (this.formHintComponent || this.luxHint) && (!this.luxHintShowOnlyOnFocus || (this.luxHintShowOnlyOnFocus && this.focused))\n        ? this.uid + '-hint'\n        : undefined;\n    }\n  }\n\n  /**\n   * Wrapper-Klick: Fokus setzen und Panel öffnen (falls erlaubt).\n   * Verwendet mousedown statt click, um Event-Bubbling nicht zu stören.\n   */\n  onWrapperClick(event: MouseEvent) {\n    if (this.luxDisabled || this.luxReadonly) {\n      return;\n    }\n\n    // Nicht auf mat-option Elemente reagieren (diese haben ihre eigene Logik)\n    const target = event.target as HTMLElement;\n    if (target.closest('mat-option')) {\n      return;\n    }\n\n    // Fokus setzen über das zugrunde liegende MatSelect\n    try {\n      this.matSelect?.focus();\n    } catch {\n      // Ignorieren, falls nicht möglich\n    }\n\n    // Panel nur öffnen, wenn noch nicht offen\n    if (this.matSelect && !this.matSelect.panelOpen) {\n      this.matSelect!.open();\n    }\n  }\n\n  /**\n   * Sortiert die Optionen: selektierte zuerst, dann rest.\n   * Wird beim Öffnen des Panels aufgerufen.\n   */\n  private refreshRenderOptionIndexes(): void {\n    const options = this.luxOptions ?? [];\n    const selectedIndexes: number[] = [];\n    const unselectedIndexes: number[] = [];\n\n    for (let i = 0; i < options.length; i++) {\n      if (this.isOptionSelected(options[i], i)) {\n        selectedIndexes.push(i);\n      } else {\n        unselectedIndexes.push(i);\n      }\n    }\n\n    this.renderOptionIndexes = [...selectedIndexes, ...unselectedIndexes];\n  }\n\n  /**\n   * Prüft, ob eine Option selektiert ist.\n   */\n  private isOptionSelected(option: O, index: number): boolean {\n    const value = this.luxPickValue ? this._luxOptionsPickValue[index] : option;\n    const selected = this.luxSelected;\n\n    if (selected === null || selected === undefined) {\n      return false;\n    }\n\n    if (Array.isArray(selected)) {\n      return selected.some((s) => this.compareObjects(value as any, s as any));\n    }\n\n    return this.compareObjects(value as any, selected as any);\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  (mousedown)=\"onWrapperClick($event)\"\n  [luxFormComponent]=\"this\"\n  [formGroup]=\"formGroup\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  [luxLabelLongFormat]=\"luxLabelLongFormat\"\n  [ngClass]=\"matSelect && matSelect.panelOpen ? 'lux-panel-opened' : ''\"\n  luxTagId=\"luxSelectWrapper\"\n>\n  <!--\n    Material-Workaround: Incorrect use of <label for=FORM_ELEMENT> (Browser-Fehler in der Debug-Console)\n    ------------------------------------------------------------------------------------------------------------------\n    Das mat-select nutzt intern kein echtes HTML-Element wie das select und darum wird der obige Fehler geworfen.\n    Die aktuelle Lösung ist ein zusätzliches Select einzufügen und zu verstecken, damit der Fehler verschwindet.\n    Wenn der Fehler in den Material Components behoben wurde, dann kann das unsichtbare Select wieder entfernt werden.\n    -->\n    <select [id]=\"uid\" style=\"display: none\"></select>\n    <mat-select\n      luxTagIdHandler\n      [luxTagId]=\"luxTagId\"\n      [luxSelectFilter]=\"luxEnableFilter\"\n      [luxFilterLabelFn]=\"filterLabelFn\"\n      [placeholder]=\"luxPlaceholder\"\n      [multiple]=\"luxMultiple\"\n      [compareWith]=\"compareObjects\"\n      [required]=\"luxRequired\"\n      [disableRipple]=\"true\"\n      [formControl]=\"formControl\"\n      [attr.aria-invalid]=\"formControl.invalid\"\n      [attr.aria-required]=\"luxRequired\"\n      [attr.aria-readonly]=\"luxReadonly\"\n      [id]=\"uid\"\n      [luxSelectVisibleOptionCount]=\"luxVisibleOptionCount\"\n      [panelClass]=\"[\n        luxMultiple ? 'lux-select-panel-ac-multiple' : 'lux-select-panel-ac',\n        luxReadonly ? 'lux-display-none' : '',\n        luxEnableFilter ? 'lux-select-panel-ac-filter' : ''\n      ]\"\n      [luxAriaLabelledby]=\"uid + '-label'\"\n      [luxAriaDescribedby]=\"describedBy()\"\n      (focusin)=\"onFocusIn($event)\"\n      (focusout)=\"onFocusOut($event)\"\n      (openedChange)=\"onOpenedChange($event, selectFilter)\"\n      #selectFilter=\"luxSelectFilter\"\n      #select\n    >\n      @if (luxEnableFilter) {\n        <lux-select-panel-filter\n          [placeholder]=\"luxFilterPlaceholder\"\n          [filterValue]=\"luxFilterValue\"\n          [clearAriaLabel]=\"luxFilterClearAriaLabel\"\n          [filterDirective]=\"selectFilter\"\n        ></lux-select-panel-filter>\n      }\n      @for (i of renderOptionIndexes; track i) {\n        <mat-option\n          [value]=\"luxPickValue ? _luxOptionsPickValue[i] : luxOptions[i]\"\n          class=\"option-height\"\n          [style.display]=\"!luxEnableFilter || selectFilter.isIndexVisible(i) ? '' : 'none'\"\n        >\n          <ng-container\n            *ngTemplateOutlet=\"tempRef && !luxOptionLabelProp ? tempRef : noTemplateRefTemplate; context: { $implicit: luxOptions[i] }\"\n          ></ng-container>\n        </mat-option>\n      }\n    </mat-select>\n  </lux-form-control-wrapper>\n}\n\n<ng-template #noTemplateRefTemplate let-option>\n  @if (option && luxOptionLabelProp && option[luxOptionLabelProp]) {\n    {{ option | luxRenderProperty: luxOptionLabelProp }}\n  } @else {\n    @if (!!option) {\n      {{ option }}\n    }\n  }\n</ng-template>\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  ContentChildren,\n  DoCheck,\n  effect,\n  ElementRef,\n  EventEmitter,\n  inject,\n  input,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  ViewChild\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MAT_PAGINATOR_DEFAULT_OPTIONS, MatPaginator, MatPaginatorDefaultOptions, MatPaginatorIntl } from '@angular/material/paginator';\nimport { MatSort, MatSortHeader, Sort } 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 { TranslocoPipe, TranslocoService } from '@jsverse/transloco';\nimport { of, Subject, Subscription } from 'rxjs';\nimport { catchError, debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxTabIndexDirective } from '../../lux-directives/lux-tabindex/lux-tab-index.directive';\nimport { LuxTooltipDirective } from '../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxCheckboxAcComponent } from '../../lux-form/lux-checkbox-ac/lux-checkbox-ac.component';\nimport { LuxInputAcPrefixComponent } from '../../lux-form/lux-input-ac/lux-input-ac-subcomponents/lux-input-ac-prefix.component';\nimport { LuxInputAcSuffixComponent } from '../../lux-form/lux-input-ac/lux-input-ac-subcomponents/lux-input-ac-suffix.component';\nimport { LuxInputAcComponent } from '../../lux-form/lux-input-ac/lux-input-ac.component';\nimport { LuxSelectAcComponent } from '../../lux-form/lux-select-ac/lux-select-ac.component';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxConsoleService } from '../../lux-util/lux-console.service';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxPaginatorIntl } from '../../lux-util/lux-paginator-intl';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxProgressComponent } from '../lux-progress/lux-progress.component';\nimport { ILuxTableColumnVisibilityStore, LuxTableLocalColumnVisibilityStore } from './lux-table-column-visibility-store';\nimport { ICustomCSSConfig } from './lux-table-custom-css-config.interface';\nimport { LuxTableDataSource } from './lux-table-data-source';\nimport { ILuxTableHttpDaoStructure } from './lux-table-http/lux-table-http-dao-structure.interface';\nimport { ILuxTableHttpDao } from './lux-table-http/lux-table-http-dao.interface';\nimport { LuxTableColumnComponent } from './lux-table-subcomponents/lux-table-column.component';\n\nexport interface LuxTableDoubleClickEventType<T> {\n  event: MouseEvent;\n  rowItem: T;\n}\n\nconst customPaginatorOptions: MatPaginatorDefaultOptions = {\n  formFieldAppearance: 'fill'\n};\n\n@Component({\n  selector: 'lux-table',\n  templateUrl: './lux-table.component.html',\n  providers: [\n    { provide: MatPaginatorIntl, useClass: LuxPaginatorIntl },\n    { provide: MAT_PAGINATOR_DEFAULT_OPTIONS, useValue: customPaginatorOptions }\n  ],\n  imports: [\n    LuxProgressComponent,\n    NgClass,\n    LuxInputAcComponent,\n    LuxInputAcPrefixComponent,\n    LuxInputAcSuffixComponent,\n    LuxSelectAcComponent,\n    NgStyle,\n    MatTable,\n    MatSort,\n    MatColumnDef,\n    MatHeaderCellDef,\n    MatHeaderCell,\n    MatSortHeader,\n    MatCellDef,\n    MatCell,\n    LuxCheckboxAcComponent,\n    LuxTabIndexDirective,\n    LuxAriaLabelDirective,\n    MatFooterCellDef,\n    MatFooterCell,\n    NgTemplateOutlet,\n    MatHeaderRowDef,\n    MatHeaderRow,\n    MatRowDef,\n    MatRow,\n    MatFooterRowDef,\n    MatFooterRow,\n    MatPaginator,\n    LuxTooltipDirective,\n    LuxIconComponent,\n    TranslocoPipe\n  ]\n})\nexport class LuxTableComponent<T = any> implements OnInit, AfterViewInit, DoCheck, OnDestroy {\n  private queryObserver = inject(LuxMediaQueryObserverService);\n  private luxConsole = inject(LuxConsoleService);\n  private liveAnnouncer = inject(LiveAnnouncer);\n  private tService = inject(TranslocoService);\n  private defaultColumnVisibilityStore = inject(LuxTableLocalColumnVisibilityStore);\n\n  static AUTO_PAGINATION_START = 100; // 100 Elemente bis automatisch die Pagination aktiviert wird\n\n  private _luxClasses: ICustomCSSConfig | ICustomCSSConfig[] = [];\n  private _luxShowPagination = false;\n  private _dataColumnDefs: string[] = [];\n  private _luxMultiSelect = false;\n  private _luxShowFilter = false;\n  private _dataSource: LuxTableDataSource<any> = new LuxTableDataSource<any>([]);\n  private _luxHttpDAO?: ILuxTableHttpDao;\n  private _luxPickValue = (o: any) => o;\n  private _luxCompareWith = (o1: any, o2: any) => o1 === o2;\n\n  private previousWidth = 0;\n  private previousHeight = 0;\n  private httpRequestConf: { page?: number; pageSize?: number; filter?: string; sort?: string; order?: string } = {};\n\n  private mediaQuerySubscription: Subscription;\n  private httpDaoSubscription?: Subscription;\n  private filterChangedSubscription?: Subscription;\n  private columnSubscriptions: Subscription[] = [];\n  private tableColumnsChangedSubscription?: Subscription;\n  private sortChangedSubscription?: Subscription;\n  private paginatorPageSubscription?: Subscription;\n  private selectedSubscription?: Subscription;\n\n  filtered$: Subject<string> = new Subject<string>();\n  currentCustomClasses: { entry: any; classes: string }[] = [];\n  isLoadingResults = false;\n  allSelected = false;\n  mediaQuery: string;\n  movedTableColumns: LuxTableColumnComponent[] = [];\n  hasMovedColumnsMap = new Map<string, boolean>();\n  tableMinWidth?: string;\n  tableHeightCSSCalc?: string;\n  init = true;\n  lastSelectedEventData = JSON.stringify([]);\n  allColumnsForVisibility: { label: string; value: string }[] = [];\n  hiddenColumns: string[] = [];\n  columnVisibilityPickValueFN = (option: { label: string; value: string }) => option.value;\n\n  luxShowColumnSelector = input<boolean>(false);\n  @Input() luxColumnStorageKey?: string;\n  @Input() luxColumnVisibilityStore: ILuxTableColumnVisibilityStore = this.defaultColumnVisibilityStore;\n  @Input() luxColWidthsPercent: number[] = [];\n  @Input() luxFilterText = 'Filter';\n  @Input() luxNoDataText = 'Keine Daten gefunden.';\n  @Input() luxPageSize = 10;\n  @Input() luxPageSizeOptions = [5, 10, 25, 50];\n  @Input() luxMinWidthPx = -1;\n  @Input() luxAutoPaginate = true;\n  @Input() luxHideBorders = false;\n  @Input() luxMultiSelectOnlyCheckboxClick = false;\n  @Input() luxMultiSelectDisabledProperty?: string;\n  @Input() luxPagerDisabled = false;\n  @Input() luxPagerTooltip = '';\n  @Input() luxPagerFirstLastButton = true;\n  @Input() luxAlignElementsTop = false;\n\n  @Output() luxSelectedChange = new EventEmitter<Set<T>>();\n  @Output() luxSelectedAsArrayChange = new EventEmitter<T[]>();\n  @Output() luxSingleClicked = new EventEmitter<{ event: Event; rowItem: T; rowIndex: number }>();\n  @Output() luxDoubleClicked = new EventEmitter<{ event: MouseEvent; rowItem: T }>();\n  @Output() luxHiddenColumnsChange = new EventEmitter<string[]>();\n\n  @ViewChild(MatPaginator, { static: true }) paginator?: MatPaginator;\n  @ViewChild(MatSort, { static: true }) sort?: MatSort;\n  @ViewChild('paginator', { read: ElementRef, static: true }) paginatorElement?: ElementRef;\n  @ViewChild('filter', { read: ElementRef, static: true }) filterElement?: ElementRef;\n  @ViewChild('filter', { static: true }) filterComponent?: LuxInputAcComponent;\n  @ViewChild('tableContainer', { read: ElementRef, static: true }) tableContainerElement!: ElementRef;\n  @ContentChildren(LuxTableColumnComponent) tableColumns!: QueryList<LuxTableColumnComponent>;\n\n  get luxHttpDAO(): ILuxTableHttpDao | undefined {\n    return this._luxHttpDAO;\n  }\n\n  @Input() set luxHttpDAO(httpDAO: ILuxTableHttpDao | undefined) {\n    this._luxHttpDAO = httpDAO;\n    if (!this.init) {\n      if (this.paginator) {\n        this.paginator.pageIndex = 0;\n      }\n      this.httpRequestConf.page = 0;\n      this.clearSelected();\n      this.emitSelectedEvent();\n      this.loadHttpDAOData();\n    }\n  }\n\n  get luxClasses(): ICustomCSSConfig | ICustomCSSConfig[] {\n    return this._luxClasses;\n  }\n\n  @Input() set luxClasses(classes: ICustomCSSConfig | ICustomCSSConfig[]) {\n    if (classes && !Array.isArray(classes)) {\n      classes = [classes];\n    }\n\n    this._luxClasses = classes;\n    this.insertCustomCSSClasses();\n  }\n\n  get luxShowPagination(): boolean {\n    return this._luxShowPagination;\n  }\n\n  @Input() set luxShowPagination(show: boolean) {\n    this._luxShowPagination = show;\n    setTimeout(() => {\n      this.handlePagination();\n    });\n  }\n\n  get luxShowFilter(): boolean {\n    return this._luxShowFilter;\n  }\n\n  @Input() set luxShowFilter(show: boolean) {\n    this._luxShowFilter = show;\n    this.handleFilter();\n  }\n\n  get dataColumnDefs(): string[] {\n    return this._dataColumnDefs;\n  }\n\n  get dataSource(): LuxTableDataSource<any> {\n    return this._dataSource;\n  }\n\n  get luxData(): any[] {\n    return this.dataSource.data;\n  }\n\n  @Input()\n  set luxData(data: any[]) {\n    data = data ? data : [];\n    this.dataSource.data = data;\n    if (this.dataSource) {\n      setTimeout(() => {\n        this.updateDataSourceAttributes(data);\n        this.handleSort();\n        this.insertCustomCSSClasses();\n        this.updateColumnsByMediaQuery();\n        this.calculateProportions();\n        this.updateSelection();\n      });\n    }\n  }\n\n  get luxMultiSelect(): boolean {\n    return this._luxMultiSelect;\n  }\n\n  @Input() set luxMultiSelect(multiSelect: boolean) {\n    this._luxMultiSelect = multiSelect;\n    if (this.luxMultiSelect) {\n      this.clearSelected();\n      this._dataColumnDefs.unshift('multiSelect');\n    } else {\n      this._dataColumnDefs = this._dataColumnDefs.filter((col: string) => col !== 'multiSelect');\n    }\n\n    setTimeout(() => {\n      this.calculateProportions();\n    });\n  }\n\n  private _luxSelected = new Set<T>();\n\n  get luxSelected(): Set<T> {\n    return this._luxSelected;\n  }\n\n  /**\n   * Die Auswahl der selektierten Elemente ist eigentlich ein Set,\n   * nimmt aber Arrays von Außen entgegen (zur Vereinfachung).\n   * @param selected\n   */\n  @Input() set luxSelected(selected: Set<T>) {\n    if (!selected && !this.luxSelected) {\n      // Nothing to do\n    } else if (selected && !this.luxSelected) {\n      this.luxSelectedIntern(selected);\n    } else if (!selected && this.luxSelected) {\n      this.luxSelectedIntern(selected);\n    } else if (selected && this.luxSelected) {\n      if (this.luxSelected.size !== selected.size || !Array.from(selected).every((value) => this.luxSelected.has(value))) {\n        this.luxSelectedIntern(selected);\n      }\n    }\n  }\n\n  private luxSelectedIntern(selected: Set<T>) {\n    const newSelected = selected ? Array.from(selected) : [];\n    this.luxSelected.clear();\n    if (newSelected) {\n      newSelected.forEach((entry) => {\n        this.addSelected(entry);\n      });\n    }\n    if (this.luxData && this.luxData.length > 0) {\n      this.updateSelection();\n    }\n  }\n\n  get luxPickValue() {\n    return this._luxPickValue;\n  }\n\n  // Funktion, um den zu vergleichenden Wert aus den einzelnen Objekten zu ziehen.\n  // Standardmäßig einfach das Objekt zurückgeben.\n  @Input() set luxPickValue(pickFn: (o: any) => any) {\n    LuxUtil.assertNonNull('luxPickValue', pickFn);\n    this._luxPickValue = pickFn;\n  }\n\n  get luxCompareWith() {\n    return this._luxCompareWith;\n  }\n\n  // Vergleichsfunktion; vergleicht standardmäßig einfach die Referenzen der beiden Objekte.\n  @Input() set luxCompareWith(compareFn: (o1: any, o2: any) => boolean) {\n    LuxUtil.assertNonNull('luxCompareWith', compareFn);\n    this._luxCompareWith = compareFn;\n  }\n\n  /**\n   * Eigene Implementierung der Filterung für diese Tabelle.\n   * Iteriert über die Values des einzelnen Objektes und prüft dann, ob der Filter-Wert irgendwo vorkommt.\n   * @param data\n   * @param filter\n   */\n  private customFilterPredicate = (data: any, filter = '') => {\n    for (const property in data) {\n      if (Object.hasOwn(data, property)) {\n        const dataEntry = data[property];\n        if (LuxUtil.isDate(dataEntry)) {\n          if (dataEntry.toLocaleString().toLowerCase().indexOf(filter) > -1) {\n            return true;\n          }\n        } else {\n          if ((dataEntry + '').toLowerCase().indexOf(filter) > -1) {\n            return true;\n          }\n        }\n      }\n    }\n    return false;\n  };\n\n  constructor() {\n    // Datasource um eigene Filter-Funktionalität ergänzen\n    this.dataSource.filterPredicate = this.customFilterPredicate;\n\n    this.mediaQuery = this.queryObserver.activeMediaQuery;\n\n    this.mediaQuerySubscription = this.queryObserver.getMediaQueryChangedAsObservable().subscribe((query: string) => {\n      if (this.mediaQuery !== query) {\n        this.mediaQuery = query;\n        this.updateColumnsByMediaQuery();\n      }\n    });\n\n    effect(() => {\n      // Die folgende Zeile ist wichtig, damit der Effekt nur ausgelöst wird,\n      // wenn sich luxShowColumnSelector ändert, andernfalls würde die Methode\n      // bei jeder Änderung innerhalb der Komponente reagieren.\n      const value = this.luxShowColumnSelector();\n\n      this.updateColumnsByMediaQuery();\n    });\n  }\n\n  ngOnInit() {\n    this.loadHiddenColumnsFromStorage();\n    setTimeout(() => {\n      if (this.luxHttpDAO) {\n        this.loadHttpDAOData();\n      } else {\n        this.updateDataSourceAttributes(this.luxData);\n        this.handleSort();\n        this.insertCustomCSSClasses();\n      }\n      this.init = false;\n    });\n  }\n\n  ngAfterViewInit() {\n    if (this.tableColumns) {\n      // Für den Fall das Spalten wegfallen/dazu kommen\n      this.tableColumnsChangedSubscription = this.tableColumns.changes.subscribe(() => {\n        this.updateColumnsByMediaQuery();\n        this.updateColumnSubscriptions();\n        this.updateColumnVisibilityOptions();\n      });\n\n      // Für den Fall das sich Änderungen innerhalb der Spalten ergeben\n      this.updateColumnSubscriptions();\n      this.updateColumnVisibilityOptions();\n\n      // Nach dem Init sollten einmal die Spalten aktualisiert werden\n      setTimeout(() => {\n        this.updateColumnsByMediaQuery();\n      });\n    }\n\n    if (this.luxShowPagination) {\n      this.handlePagination();\n    }\n  }\n\n  ngDoCheck() {\n    if (\n      this.tableContainerElement.nativeElement.offsetWidth !== this.previousWidth ||\n      this.tableContainerElement.nativeElement.offsetHeight !== this.previousHeight\n    ) {\n      this.previousWidth = this.tableContainerElement.nativeElement.offsetWidth;\n      this.previousHeight = this.tableContainerElement.nativeElement.offsetHeight;\n\n      this.calculateProportions();\n    }\n  }\n\n  ngOnDestroy() {\n    // Subscriptions auflösen\n    this.columnSubscriptions.forEach((subscription: Subscription) => {\n      subscription.unsubscribe();\n    });\n    if (this.httpDaoSubscription) {\n      this.httpDaoSubscription.unsubscribe();\n    }\n    if (this.filterChangedSubscription) {\n      this.filterChangedSubscription.unsubscribe();\n    }\n    if (this.tableColumnsChangedSubscription) {\n      this.tableColumnsChangedSubscription.unsubscribe();\n    }\n    if (this.sortChangedSubscription) {\n      this.sortChangedSubscription.unsubscribe();\n    }\n    if (this.paginatorPageSubscription) {\n      this.paginatorPageSubscription.unsubscribe();\n    }\n    if (this.selectedSubscription) {\n      this.selectedSubscription.unsubscribe();\n    }\n  }\n\n  /**\n   * Zieht sich die aktuellen CSS-Klassen aus den zugewiesenen\n   * CSS-Klassen.\n   * @param row\n   * @returns string\n   */\n  getCustomClassesForIndex(row: any): string {\n    const customClasses = this.currentCustomClasses.find((value) => value.entry === row);\n    return customClasses ? customClasses.classes : '';\n  }\n\n  /**\n   * TrackBy-Funktion um die Tabelle etwas schneller zu machen.\n   * @param index\n   * @param item\n   */\n  trackFn(index: number, item: any) {\n    return index;\n  }\n\n  onSingleClick(event: Event, rowItem: T, rowIndex: number) {\n    if (!this.luxMultiSelect) {\n      this.luxSingleClicked.emit({ event, rowItem, rowIndex });\n    }\n\n    this.changeSelectedEntry(rowItem);\n  }\n\n  onDoubleClick(event: MouseEvent, rowItem: T) {\n    if (!this.luxMultiSelect) {\n      this.luxDoubleClicked.emit({ event, rowItem });\n    }\n  }\n\n  /**\n   * Wird beim Klick auf eine Row aufgerufen und handelt das Sichern und Entfernen von\n   * selektierten Einträgen.\n   * @param entry\n   * @param checkboxEvent\n   */\n  changeSelectedEntry(entry: any, checkboxEvent = false) {\n    if ((this.luxMultiSelectDisabledProperty && entry[this.luxMultiSelectDisabledProperty] === true) || this.luxDoubleClicked.observed) {\n      return;\n    }\n\n    if ((!this.luxMultiSelectOnlyCheckboxClick && !checkboxEvent) || (this.luxMultiSelectOnlyCheckboxClick && checkboxEvent)) {\n      if (this.luxMultiSelect) {\n        if (this.luxSelected.has(entry)) {\n          this.deleteSelected(entry);\n        } else {\n          this.addSelected(entry);\n        }\n      } else {\n        if (this.luxSelected.has(entry)) {\n          // Wenn der selektierte Eintrag erneut angeklickt wird,\n          // wird die Selektion entfernt.\n          this.clearSelected();\n        } else {\n          this.clearSelected();\n          this.addSelected(entry);\n        }\n      }\n\n      this.updateSelectedIntern();\n    }\n  }\n\n  /**\n   * Selektiert/Deselektiert alle Einträge in dieser Tabelle.\n   *\n   * Voraussetzung dafür ist, das Multiselect aktiv ist und keine Http-Table vorliegt.\n   */\n  changeSelectedEntries() {\n    if (this.luxMultiSelect) {\n      // Bei HTTP-Tabellen selektieren wir nur die aktuell geladenen (gefilterten) Elemente\n      // und nicht alle Elemente serverseitig.\n      if (this.checkFilteredAllSelected()) {\n        this.dataSource.filteredData.forEach((dataEntry: any) => {\n          if (!this.isEntryDisabled(dataEntry)) {\n            this.deleteSelected(dataEntry);\n          }\n        });\n      } else {\n        this.dataSource.filteredData.forEach((dataEntry: any) => {\n          if (!this.isEntryDisabled(dataEntry)) {\n            this.addSelected(dataEntry);\n          }\n        });\n      }\n      this.updateSelectedIntern();\n    }\n  }\n\n  private updateSelectedIntern() {\n    this.emitSelectedEvent();\n    this.dataSource.selectedEntries = this.luxSelected;\n    this.allSelected = this.checkFilteredAllSelected();\n  }\n\n  /**\n   * Prüft, ob die aktuell angezeigten Einträge alle selektiert sind oder nicht.\n   */\n  checkFilteredAllSelected(): boolean {\n    let result = true;\n    if (this.luxSelected.size === 0) {\n      result = false;\n    } else {\n      // Prüfen, ob die gefilterten Daten selected sind\n      this.dataSource.filteredData.forEach((dataEntry: any) => {\n        if (!this.isEntryDisabled(dataEntry) && !this.luxSelected.has(dataEntry)) {\n          result = false;\n        }\n      });\n    }\n\n    return result;\n  }\n\n  /**\n   * Gibt zurück, ob irgendein Footer-Element für diese Tabelle aktuell sichtbar ist.\n   */\n  anyFootersAvailable() {\n    return this.luxMultiSelect || !!this.tableColumns.find((column: LuxTableColumnComponent) => !!column.footer);\n  }\n\n  /**\n   * Aktualisiert die DataSource und eventuell Subscriptions sowie die CustomCSS-Classes\n   * nach einer Änderung.\n   * @param data\n   */\n  private updateDataSourceAttributes(data: any[]) {\n    if (!this.luxHttpDAO && this.luxAutoPaginate && data && data.length > LuxTableComponent.AUTO_PAGINATION_START) {\n      this.luxShowPagination = true;\n    }\n    if (!this.luxHttpDAO) {\n      if (this.luxShowPagination) {\n        this.handlePagination();\n      }\n    }\n    if (!this.luxHttpDAO) {\n      this.dataSource.sort = this.sort ?? null;\n    }\n    if (!this.luxHttpDAO) {\n      this.dataSource.totalElements = this.dataSource.data ? this.dataSource.data.length : 0;\n    }\n  }\n\n  /**\n   * Prüft anhand der mitgegebenen Callbacks die CSS-Klassen\n   * für die einzelnen Rows.\n   */\n  private insertCustomCSSClasses() {\n    if (this.luxClasses && this.luxData) {\n      this.currentCustomClasses = [];\n      this.luxData.forEach((entry: any) => {\n        let classes = '';\n        (this.luxClasses as ICustomCSSConfig[]).forEach((cssClass: ICustomCSSConfig) => {\n          if (cssClass.check(entry)) {\n            classes += cssClass.class + ' ';\n          }\n        });\n        this.currentCustomClasses.push({ entry, classes });\n      });\n    }\n  }\n\n  /**\n   * Gibt über den liveAnnouncer eine Nachricht aus, dass sich die Sortierung einer Spalte geändert hat.\n   * @param sort\n   */\n  announceSortChange(sort: Sort) {\n    const index = this.tableColumns.toArray().findIndex((tableColumn: LuxTableColumnComponent) => sort.active === tableColumn.luxColumnDef);\n    let columnDef = index > -1 ? this.tableColumns.toArray()[index].luxColumnDef : null;\n    if (columnDef === null) {\n      columnDef = sort.active === 'multiSelect' ? 'multiSelect' : null;\n    }\n    if (columnDef !== null) {\n      let directionDescription;\n      switch (sort.direction) {\n        case 'desc':\n          directionDescription = this.tService.translate('luxc.table.sort.descending');\n          break;\n        case 'asc':\n          directionDescription = this.tService.translate('luxc.table.sort.ascending');\n          break;\n        case '':\n          directionDescription = this.tService.translate('luxc.table.sort.no_longer');\n          break;\n      }\n\n      this.liveAnnouncer.announce(\n        this.tService.translate(`luxc.table.sort.announce`, { column: columnDef, direction: directionDescription }),\n        'assertive'\n      );\n    }\n  }\n\n  /**\n   * Aktualisiert die momentan angezeigten Spalten anhand der für sie definierten\n   * Responsive-Queries und Verhaltensweisen.\n   */\n  private updateColumnsByMediaQuery() {\n    if (!this.tableColumns) {\n      return;\n    }\n\n    this._dataColumnDefs = [];\n\n    // wenn Multiselect, dann benötigen wir hier noch eine Spalte mehr\n    if (this.luxMultiSelect) {\n      this._dataColumnDefs.push('multiSelect');\n    }\n\n    this.tableColumns.forEach((column: LuxTableColumnComponent) => {\n      if (this.luxShowColumnSelector()) {\n        if (!this.hiddenColumns.includes(column.luxColumnDef)) {\n          this._dataColumnDefs.push(column.luxColumnDef);\n        }\n      } else {\n        this._dataColumnDefs.push(column.luxColumnDef);\n      }\n    });\n    this.movedTableColumns = [];\n    this.hasMovedColumnsMap.clear();\n    // Zuerst die auszublendenden Spalten durchgehen\n    this.tableColumns.forEach((tableColumn: LuxTableColumnComponent) => {\n      if (\n        (tableColumn.luxResponsiveAt && !tableColumn.luxResponsiveBehaviour) ||\n        (!tableColumn.luxResponsiveAt && tableColumn.luxResponsiveBehaviour)\n      ) {\n        this.luxConsole.error(\n          `Achtung! Die Column '${tableColumn.luxColumnDef}' hat entweder keine Media-Queries ` +\n            `oder kein Responsive-Verhalten zugewiesen bekommen.`\n        );\n      } else if (this.doesResponsiveAtApply(tableColumn.luxResponsiveAt)) {\n        // Schauen, ob eine Spalte angegeben wurde, in welche sich diese hier verschieben kann\n        if (this._dataColumnDefs.find((column: string) => column === tableColumn.luxResponsiveBehaviour)) {\n          // Wenn ja, die Spalte merken und vorerst ausblenden\n          this.movedTableColumns.push(tableColumn);\n          this.hasMovedColumnsMap.set(tableColumn.luxResponsiveBehaviour, true);\n        }\n\n        this._dataColumnDefs = this.dataColumnDefs.filter((dataColumn: string) => dataColumn !== tableColumn.luxColumnDef);\n      }\n    });\n  }\n\n  /**\n   * Prüft, ob die aktuelle MediaQuery mit der übergebenen MediaQuery/den übergebenen MediaQueries übereinstimmt.\n   * @param responsiveAt\n   */\n  private doesResponsiveAtApply(responsiveAt: string | string[] | null) {\n    const mediaQueries: string[] = [];\n\n    if (typeof responsiveAt === 'string' && responsiveAt) {\n      mediaQueries.push(responsiveAt);\n    } else if (Array.isArray(responsiveAt) && responsiveAt.length > 0) {\n      mediaQueries.push(...responsiveAt);\n    }\n\n    for (const mediaQuery of mediaQueries) {\n      if (mediaQuery === this.mediaQuery) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Durchläuft die aktuellen TableColumns und hört auf Changes in den Properties\n   * der Columns und merkt sich die Subscriptions.\n   */\n  private updateColumnSubscriptions() {\n    this.columnSubscriptions.forEach((subscription: Subscription) => {\n      subscription.unsubscribe();\n    });\n    this.columnSubscriptions = [];\n    this.tableColumns.forEach((column: LuxTableColumnComponent) => {\n      this.columnSubscriptions.push(\n        column.change$.subscribe(() => {\n          this.updateColumnsByMediaQuery();\n        })\n      );\n    });\n  }\n\n  /**\n   * Triggert über das DAO die Abfrage nach neuen Daten.\n   * Sendet dabei das Request-Conf Objekt, welches Informationen bzgl.\n   * page, pageSize, filter, sort, order mitgibt.\n   * @param filteredBy?\n   * @param filteredBy\n   */\n  loadHttpDAOData(filteredBy?: string) {\n    if (this.luxHttpDAO) {\n      this.isLoadingResults = true;\n      this.luxHttpDAO\n        .loadData(this.httpRequestConf)\n        .pipe(\n          tap((data: ILuxTableHttpDaoStructure) => {\n            this.isLoadingResults = false;\n            // Wenn ein Filter-Text gegeben ist, sich dieser aber vom Aktuellen unterscheiden, brechen wir die Datenaktualisierung ab\n            if (filteredBy && this.httpRequestConf.filter !== filteredBy) {\n              return;\n            }\n\n            if (data) {\n              this.dataSource.totalElements = data.totalCount;\n              this.luxData = data.items;\n\n              if (this.luxAutoPaginate && data.totalCount > LuxTableComponent.AUTO_PAGINATION_START) {\n                this.luxShowPagination = true;\n              }\n            } else {\n              this.dataSource.totalElements = 0;\n              this.luxData = [];\n            }\n            this.insertCustomCSSClasses();\n          }),\n          catchError((error) => {\n            this.isLoadingResults = false;\n            return of(error);\n          })\n        )\n        .subscribe();\n    }\n  }\n\n  /**\n   * Wird aufgerufen, wenn der Sort neu zur DataSource hinzugefügt werden soll (Data wurde neu gesetzt).\n   * Resettet die Pagination und aktualisiert, wenn es sich um eine asynchrone Tabelle handelt die\n   * requestConf.\n   */\n  private handleSort() {\n    if (this.sort) {\n      if (this.sortChangedSubscription) {\n        this.sortChangedSubscription.unsubscribe();\n      }\n      this.sortChangedSubscription = this.sort.sortChange.subscribe((sort: any) => {\n        if (this.paginator) {\n          this.paginator.pageIndex = 0;\n        }\n\n        if (this.luxHttpDAO) {\n          this.httpRequestConf.page = this.paginator?.pageIndex ?? 0;\n          this.httpRequestConf.sort = sort.active;\n          this.httpRequestConf.order = sort.direction;\n          this.loadHttpDAOData();\n        }\n      });\n    }\n\n    this.calculateProportions();\n  }\n\n  /**\n   * Wird nach dem set von luxShowFilter aufgerufen und fängt neue Filter-Operationen ab und\n   * aktualisiert dementsprechend die Daten.\n   */\n  private handleFilter() {\n    if (this.filterChangedSubscription) {\n      this.filterChangedSubscription.unsubscribe();\n    }\n    if (this.luxShowFilter) {\n      this.filterChangedSubscription = this.filtered$\n        .asObservable()\n        .pipe(\n          tap(() => (this.isLoadingResults = true)),\n          debounceTime(500),\n          distinctUntilChanged((x: string, y: string) => {\n            if (x === y) {\n              this.isLoadingResults = false;\n            }\n\n            return x === y;\n          })\n        )\n        .subscribe((filterValue: string) => {\n          filterValue = filterValue.trim();\n          filterValue = filterValue.toLocaleLowerCase();\n          if (this.paginator) {\n            this.paginator.pageIndex = 0;\n          }\n          this.isLoadingResults = false;\n          if (!this.luxHttpDAO) {\n            this.dataSource.filter = filterValue;\n          }\n          if (this.luxHttpDAO) {\n            this.httpRequestConf.filter = filterValue;\n            this.httpRequestConf.page = this.paginator?.pageIndex ?? 0;\n            this.loadHttpDAOData(filterValue);\n          }\n        });\n    }\n    this.calculateProportions();\n  }\n\n  /**\n   * Wird nach dem set von luxShowPagination aufgerufen und setzt, wenn es sich hier um\n   * eine asynchrone Tabelle handelt eine Subscription um Pagination-Änderungen zu erhalten.\n   */\n  private handlePagination() {\n    if (this.luxShowPagination) {\n      if (this.luxHttpDAO) {\n        if (this.paginatorPageSubscription) {\n          this.paginatorPageSubscription.unsubscribe();\n        }\n        this.paginatorPageSubscription = this.paginator!.page.subscribe(() => {\n          this.httpRequestConf.page = this.paginator!.pageIndex;\n          this.httpRequestConf.pageSize = this.paginator!.pageSize;\n          this.loadHttpDAOData();\n        });\n        this.httpRequestConf.page = this.paginator!.pageIndex;\n        this.httpRequestConf.pageSize = this.paginator!.pageSize;\n      }\n      if (!this.luxHttpDAO) {\n        this.dataSource.paginator = this.paginator!;\n      }\n    } else {\n      this.dataSource.paginator = null;\n    }\n    this.calculateProportions();\n  }\n\n  /**\n   * Erzeugt einen neuen String für die Höhenberechnung der Tabelle und setzt die Minimalbreite für die Tabelle\n   * (wenn möglich).\n   */\n  private calculateProportions() {\n    setTimeout(() => {\n      const filter = this.filterElement ? this.filterElement.nativeElement.offsetHeight : 0;\n      const pagination = this.paginatorElement ? this.paginatorElement.nativeElement.scrollHeight : 0;\n      const progress = 15;\n      const temp = 'calc(100% - ' + progress + 'px' + ' - ' + pagination + 'px' + ' - ' + filter + 'px)';\n      if (temp !== this.tableHeightCSSCalc) {\n        this.tableHeightCSSCalc = temp;\n      }\n\n      this.tableMinWidth = this.luxMinWidthPx > -1 ? this.luxMinWidthPx + 'px' : 'unset';\n    });\n  }\n\n  /**\n   * Aktualisiert die selectedEntries dieser Component anhand der aktuell gesetzten luxSelected-Elemente.\n   *\n   * Dabei werden die einzelnen Elemente zuerst mithilfe der luxCompareWith- und luxPickValue-Functions miteinander\n   * verglichen.\n   */\n  private updateSelection() {\n    // Prüfen ob selected gesetzt ist\n    if (this.luxSelected.size > 0) {\n      // Die selected-Einträge durchgehen und schauen, ob diese im data-Block enthalten sind\n      const foundEntries: any[] = [];\n      this.luxSelected.forEach((entry: any) => {\n        const newEntry = this.dataSource.data.find((dataEntry: any) =>\n          this.luxCompareWith(this.luxPickValue(entry), this.luxPickValue(dataEntry))\n        );\n\n        // Merkt sich den Entry, wenn dieser noch nicht in der Selected-Liste ist (wenn es sich um eine HTTP-Tabelle handelt)\n        if (newEntry && (!this.luxHttpDAO || (this.luxHttpDAO && !this.luxSelected.has(newEntry)))) {\n          foundEntries.push(newEntry);\n          this.deleteSelected(entry);\n        }\n      });\n      // Nur bei nicht-HTTP-Tabellen die Selektion einmal leeren\n      if (!this.luxHttpDAO) {\n        this.clearSelected();\n      }\n      foundEntries.forEach((entry: boolean) => this.addSelected(entry));\n    }\n    this.updateSelectedIntern();\n  }\n\n  private emitSelectedEvent() {\n    const newData = Array.from(this.luxSelected);\n\n    // Wenn das Array FormGroups enthält,\n    // wirft JSON.stringify einen Fehler,\n    // da FormGroups nicht serialisierbar sind.\n    let newDataString: string;\n    if (newData && newData.length > 0 && newData[0] instanceof FormGroup) {\n      newDataString = JSON.stringify(newData.map((item) => (item as FormGroup).value));\n    } else {\n      newDataString = JSON.stringify(newData);\n    }\n\n    if (this.lastSelectedEventData !== newDataString) {\n      this.lastSelectedEventData = newDataString;\n\n      this.luxSelectedChange.next(this.luxSelected);\n      this.luxSelectedAsArrayChange.next(newData);\n    }\n  }\n\n  private isEntryDisabled(dataEntry: any) {\n    return this.luxMultiSelectDisabledProperty && dataEntry[this.luxMultiSelectDisabledProperty] === true;\n  }\n\n  addSelected(entry: any) {\n    this.luxSelected.add(entry);\n  }\n\n  deleteSelected(entry: any) {\n    this.luxSelected.delete(entry);\n  }\n\n  clearSelected() {\n    this.luxSelected.clear();\n  }\n\n  // =============================================================\n  // Column Visibility Handling\n  // =============================================================\n\n  onHiddenColumnsChange(newHiddenColumns: string[]) {\n    if (this.luxColumnStorageKey) {\n      this.luxColumnVisibilityStore.save(this.luxColumnStorageKey, [...newHiddenColumns]);\n    }\n\n    this.luxHiddenColumnsChange.emit([...newHiddenColumns]);\n    this.updateColumnsByMediaQuery();\n  }\n\n  private loadHiddenColumnsFromStorage() {\n    if (this.luxColumnStorageKey) {\n      const invisibleColumns = this.luxColumnVisibilityStore.load(this.luxColumnStorageKey);\n      if (Array.isArray(invisibleColumns) && invisibleColumns.length) {\n        this.hiddenColumns = invisibleColumns.filter((v) => typeof v === 'string');\n      }\n    }\n  }\n\n  private updateColumnVisibilityOptions() {\n    this.allColumnsForVisibility = this.tableColumns\n      ? this.tableColumns.map((c) => ({\n          label: c.luxConfigLabel ? c.luxConfigLabel : c.luxColumnDef,\n          value: c.luxColumnDef\n        }))\n      : [];\n  }\n}\n","<div class=\"lux-table lux-flex lux-flex-col\">\n  <!-- Progress für das Laden/Filtern von Daten -->\n  <div class=\"lux-table-progress-container\">\n    @if (isLoadingResults) {\n    <lux-progress luxTagId=\"tableProgress\" luxColor=\"blue\" luxType=\"Progressbar\" class=\"lux-mb-3\"></lux-progress>\n    }\n  </div>\n  <!-- Input-Feld für das Filtern der Datensätze dieser Tabelle -->\n  <div class=\"lux-table-filter lux-flex lux-flex-auto lux-gap-4\" [ngClass]=\"{ 'lux-hide': !luxShowFilter && !luxShowColumnSelector() }\">\n    <lux-input-ac\n      class=\"lux-table-filter-input lux-flex-auto\"\n      [ngClass]=\"{ 'lux-hide': !luxShowFilter}\"\n      luxAutocomplete=\"off\"\n      [luxTagId]=\"luxFilterText\"\n      [luxLabel]=\"luxFilterText\"\n      (luxValueChange)=\"filtered$.next($event)\"\n      #filter\n    >\n      <lux-input-ac-prefix class=\"lux-mr-2\">\n        <lux-icon luxIconName=\"lux-interface-search\"></lux-icon>\n      </lux-input-ac-prefix>\n      <lux-input-ac-suffix>\n        <lux-icon luxIconName=\"lux-interface-delete-circle\" class=\"lux-reset-icon lux-color-blue\" (click)=\"filter.luxValue = ''\"></lux-icon>\n      </lux-input-ac-suffix>\n    </lux-input-ac>\n    @if (luxShowColumnSelector()) {\n      <lux-select-ac\n        class=\"lux-table-column-selector lux-flex-auto\"\n        [ngClass]=\"{ 'lux-hide': !luxShowColumnSelector() }\"\n        luxTagId=\"tableColumnSelector\"\n        luxLabel=\"{{ 'luxc.table.column.selector.lbl' | transloco }}\"\n        [(luxSelected)]=\"hiddenColumns\"\n        [luxPickValue]=\"columnVisibilityPickValueFN\"\n        [luxMultiple]=\"true\"\n        [luxOptions]=\"allColumnsForVisibility\"\n        (luxSelectedChange)=\"onHiddenColumnsChange($event)\"\n      >\n      <ng-template let-option>\n        {{ option.label }}\n      </ng-template>\n      </lux-select-ac>\n    }\n  </div>\n  <!-- Die eigentliche Struktur der Tabelle -->\n  <div\n    [ngStyle]=\"{ 'max-height': tableHeightCSSCalc }\"\n    class=\"lux-table\"\n    [ngClass]=\"{ 'lux-block-pointer-events': isLoadingResults }\"\n    #tableContainer\n  >\n    <!-- Overlay, welches bei der Anzeige des Ladebalkens die Interaktion mit der Tabelle unterbindet -->\n    <div class=\"lux-table-overlay\" [ngClass]=\"{ 'lux-table-overlay-active': isLoadingResults }\"></div>\n\n    <div class=\"lux-table-content\" [ngClass]=\"{ 'lux-hide-borders': luxHideBorders }\">\n      <table\n        mat-table\n        [dataSource]=\"dataSource\"\n        [ngClass]=\"{ 'lux-multiselect-table': luxMultiSelect }\"\n        [ngStyle]=\"{ 'min-width': tableMinWidth }\"\n        [trackBy]=\"trackFn\"\n        matSort\n        (matSortChange)=\"announceSortChange($event)\"\n      >\n        @if (tableColumns) {\n        <!-- Zellen, welche nur bei Multiselect-Tabellen dargestellt werden und die Checkboxen + Counter beinhalten -->\n        @if (luxMultiSelect) {\n        <ng-container matColumnDef=\"multiSelect\">\n          <th class=\"lux-multiselect-th\" mat-header-cell *matHeaderCellDef mat-sort-header=\"multiSelect\">\n            <div class=\"lux-flex lux-flex-col\">\n              <span class=\"lux-selected-count\">{{ luxSelected.size }} / {{ dataSource.totalElements }}</span>\n            </div>\n          </th>\n          <td\n            class=\"lux-multiselect-td\"\n            mat-cell\n            *matCellDef=\"let element; let i = index\"\n            [tabindex]=\"luxMultiSelectOnlyCheckboxClick ? 0 : -1\"\n            (click)=\"changeSelectedEntry(element, true)\"\n            (keydown.space)=\"changeSelectedEntry(element, true)\"\n            (keydown.enter)=\"changeSelectedEntry(element, true)\"\n            [ngClass]=\"{ 'lux-element-align-top': luxAlignElementsTop }\"\n          >\n            <lux-checkbox-ac\n              luxTagId=\"lux-table-multiselect-content-{{ i }}\"\n              class=\"lux-multiselect-toggle\"\n              [luxDisabled]=\"element[luxMultiSelectDisabledProperty!] === true\"\n              luxTabIndex=\"-1\"\n              [luxApplyToChildren]=\"true\"\n              luxAriaLabel=\"{{ 'luxc.table.multiselect.chk.arialabel' | transloco:{ i: i } }}\"\n              luxAriaLabelSelector=\"input\"\n              [luxReadonly]=\"true\"\n              [luxChecked]=\"luxSelected.has(element)\"\n              [luxNoLabels]=\"true\"\n            >\n            </lux-checkbox-ac>\n          </td>\n          <td class=\"lux-multiselect-tf\" mat-footer-cell *matFooterCellDef>\n            <div class=\"lux-multiselect-toggle-all-wrapper lux-flex lux-flex-col lux-place-content-center\">\n              <lux-checkbox-ac\n                luxTagId=\"lux-table-multiselect-header\"\n                class=\"lux-multiselect-toggle-all\"\n                luxAriaLabel=\"{{ 'luxc.table.multiselect.all.chk.arialabel' | transloco }}\"\n                luxAriaLabelSelector=\"input\"\n                luxTabIndex=\"-1\"\n                [luxApplyToChildren]=\"true\"\n                [luxReadonly]=\"true\"\n                [luxChecked]=\"allSelected\"\n                [luxNoLabels]=\"true\"\n              >\n              </lux-checkbox-ac>\n            </div>\n          </td>\n        </ng-container>\n        }\n        <!-- Diese Zelle wird nur dargestellt wenn keine Daten/die dataSource.totalElements === 0 sind -->\n        <ng-container matColumnDef=\"noData\">\n          <th mat-header-cell *matHeaderCellDef [colSpan]=\"tableColumns.length\">\n            <span class=\"lux-no-data-text\">{{ luxNoDataText }}</span>\n          </th>\n        </ng-container>\n        <!-- Hier sind die eigentlichen Inhalts-Zellen -->\n        @for (tableColumn of tableColumns.toArray(); track tableColumn; let i = $index) {\n        <ng-container\n          [matColumnDef]=\"tableColumn.luxColumnDef\"\n          [sticky]=\"i === 0 && tableColumn.luxSticky\"\n          [stickyEnd]=\"i === tableColumns.length - 1 && tableColumn.luxSticky\"\n        >\n          <th\n            mat-header-cell\n            *matHeaderCellDef\n            [mat-sort-header]=\"tableColumn.luxColumnDef\"\n            [disabled]=\"!tableColumn.luxSortable\"\n            [ngClass]=\"\n              'lux-table-column-header-' +\n              i +\n              (!tableColumn.luxSortable ? ' lux-table-header-blocked' : '') +\n              (!tableColumn.header ? ' lux-table-column-header-empty' : '')\n            \"\n            [ngStyle]=\"{\n              width: luxColWidthsPercent && luxColWidthsPercent[i] ? luxColWidthsPercent[i] + '%' : 'unset'\n            }\"\n          >\n            <ng-container *ngTemplateOutlet=\"tableColumn.header?.tempRef ?? null\"></ng-container>\n          </th>\n          <!-- Hier entstehen die Zellen mit den Inhalten -->\n          <td\n            mat-cell\n            *matCellDef=\"let element; let i = index\"\n            [ngStyle]=\"{\n              width: luxColWidthsPercent && luxColWidthsPercent[i] ? luxColWidthsPercent[i] + '%' : 'unset'\n            }\"\n            [ngClass]=\"{ 'lux-element-align-top': luxAlignElementsTop }\"\n          >\n            @if (hasMovedColumnsMap.has(tableColumn.luxColumnDef)) {\n            <div class=\"lux-header-title lux-label\">\n              <ng-container *ngTemplateOutlet=\"tableColumn.header?.tempRef ?? null\"></ng-container>\n            </div>\n            }\n            <ng-container *ngTemplateOutlet=\"tableColumn.content?.tempRef ?? null; context: { $implicit: element, index: i }\"></ng-container>\n            @if (hasMovedColumnsMap.has(tableColumn.luxColumnDef)) {\n            <div class=\"lux-mb-3\"></div>\n            }\n            <!-- Hier werden die aufgrund von Responsive-Verhalten verschobenen Spalten innerhalb dieser Spalte dargestellt -->\n            @for (movedTableColumn of movedTableColumns; track movedTableColumn) { @if (movedTableColumn.luxResponsiveBehaviour ===\n            tableColumn.luxColumnDef && (!luxShowColumnSelector() || !hiddenColumns.includes(movedTableColumn.luxColumnDef))) {\n            <div class=\"lux-moved-header-title lux-label\">\n              <ng-container *ngTemplateOutlet=\"movedTableColumn.header?.tempRef ?? null\"></ng-container>\n            </div>\n            <div>\n              <ng-container *ngTemplateOutlet=\"movedTableColumn.content?.tempRef ?? null; context: { $implicit: element, index: i }\"></ng-container>\n            </div>\n            <div class=\"lux-mb-3\"></div>\n            } }\n          </td>\n          <td mat-footer-cell *matFooterCellDef>\n            <ng-container *ngTemplateOutlet=\"tableColumn.footer?.tempRef ?? null\"></ng-container>\n          </td>\n        </ng-container>\n        }\n        <!-- Die Table-Row für die Header (standardmäßig sticky) -->\n        <tr mat-header-row *matHeaderRowDef=\"dataColumnDefs; sticky: true\"></tr>\n        <!-- Die Table-Row für die \"no-data\"-Anzeige -->\n        <tr\n          mat-header-row\n          *matHeaderRowDef=\"['noData']; sticky: true\"\n          class=\"lux-table-header-no-data\"\n          [ngClass]=\"{ 'lux-display-none': dataSource.totalElements > 0 && dataSource.filteredData.length > 0 }\"\n        ></tr>\n        <!-- Die Table-Rows für alle Inhalts-Spalten -->\n        <!--\n          Cursor-Logik (Wahrheitstabelle, verkuerzt):\n          - MS=true,  CC=false, DIS=false, DBLobs=false           => Cursor: ja\n          - MS=true,  CC=true  (oder DIS=true oder DBLobs=true)   => Cursor: nein\n          - MS=false, SELobs=true,  DIS=false, DBLobs=false       => Cursor: ja\n          - MS=false, SGLobs=true                                 => Cursor: ja\n          - MS=false, DBLobs=true                                 => Cursor: ja\n          - MS=false, keine Observer (SELobs/SGLobs/DBLobs=false) => Cursor: nein\n\n          Legende:\n          MS     = luxMultiSelect\n          CC     = luxMultiSelectOnlyCheckboxClick\n          DIS    = rowData[luxMultiSelectDisabledProperty] === true\n          DBLobs = luxDoubleClicked.observed\n          SGLobs = luxSingleClicked.observed\n          SELobs = luxSelectedChange.observed || luxSelectedAsArrayChange.observed\n        -->\n        <tr\n          mat-row\n          *matRowDef=\"let rowData; columns: dataColumnDefs; let i = index\"\n          class=\"lux-row {{ getCustomClassesForIndex(rowData) }}\"\n          [tabindex]=\"luxMultiSelectOnlyCheckboxClick ? '-1' : '0'\"\n          [ngClass]=\"{\n            'lux-row-selected': luxSelected.has(rowData) && luxMultiSelect,\n            'lux-cursor':\n              (luxMultiSelect &&\n                !luxMultiSelectOnlyCheckboxClick &&\n                !luxDoubleClicked.observed &&\n                !(luxMultiSelectDisabledProperty && rowData[luxMultiSelectDisabledProperty] === true)) ||\n              (!luxMultiSelect &&\n                !luxDoubleClicked.observed &&\n                !(luxMultiSelectDisabledProperty && rowData[luxMultiSelectDisabledProperty] === true) &&\n                (luxSelectedChange.observed || luxSelectedAsArrayChange.observed)) ||\n              (!luxMultiSelect && luxSingleClicked.observed) ||\n              (!luxMultiSelect && luxDoubleClicked.observed)\n          }\"\n          (dblclick)=\"onDoubleClick($event, rowData)\"\n          (click)=\"onSingleClick($event, rowData, i)\"\n          (keydown.space)=\"onSingleClick($event, rowData, i)\"\n          (keydown.enter)=\"onSingleClick($event, rowData, i)\"\n        ></tr>\n        <!-- Die Table-Row für den Footer dieser Tabelle -->\n        <tr\n          mat-footer-row\n          *matFooterRowDef=\"dataColumnDefs; sticky: true\"\n          class=\"lux-footer-row\"\n          [ngClass]=\"{\n            'lux-display-none': !anyFootersAvailable(),\n            'lux-cursor': luxMultiSelect && !luxHttpDAO,\n            'lux-element-align-top': luxAlignElementsTop\n          }\"\n          tabindex=\"0\"\n          (click)=\"changeSelectedEntries()\"\n          (keydown.space)=\"changeSelectedEntries()\"\n          (keydown.enter)=\"changeSelectedEntries()\"\n        ></tr>\n        }\n      </table>\n    </div>\n  </div>\n  <mat-paginator\n    #paginator\n    class=\"lux-table-paginator\"\n    [disabled]=\"luxPagerDisabled\"\n    [luxTooltip]=\"luxPagerTooltip\"\n    [length]=\"dataSource.totalElements\"\n    [pageSize]=\"luxPageSize\"\n    [pageSizeOptions]=\"luxPageSizeOptions\"\n    [showFirstLastButtons]=\"luxPagerFirstLastButton\"\n    [ngClass]=\"{ 'lux-hide': !luxShowPagination }\"\n  >\n  </mat-paginator>\n</div>\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxTextboxColor, LuxTextboxColors } from '../../lux-util/lux-colors.enum';\n\n@Component({\n  selector: 'lux-textbox',\n  templateUrl: './lux-textbox.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgClass, LuxIconComponent]\n})\nexport class LuxTextboxComponent {\n  private _luxColor?: LuxTextboxColor;\n\n  @Input() luxTitle = '';\n  @Input() luxIcon = '';\n  @Input()\n  set luxColor(value: LuxTextboxColor | undefined) {\n    this._luxColor = LuxTextboxColors.find((entry) => entry === value) ?? undefined;\n  }\n\n  get luxColor(): LuxTextboxColor | undefined {\n    return this._luxColor;\n  }\n  @Input() luxHeading = 3;\n  constructor() {}\n}\n","<div\n  class=\"lux-textbox-container\"\n  tabindex=\"0\"\n  [ngClass]=\"{\n    'lux-no-icon': !luxIcon,\n    'lux-default': luxColor !== 'red' && luxColor !== 'yellow' && luxColor !== 'green' && luxColor !== 'blue',\n    'lux-red': luxColor === 'red',\n    'lux-yellow': luxColor === 'yellow',\n    'lux-green': luxColor === 'green',\n    'lux-blue': luxColor === 'blue'\n  }\"\n>\n  @if (luxIcon) {\n  <lux-icon luxIconName=\"{{ luxIcon }}\" class=\"lux-textbox-icon\"></lux-icon>\n  } @if (luxTitle) { @switch (luxHeading) { @case (1) {\n  <h1 class=\"lux-textbox-title\" title=\"{{ luxTitle }}\">\n    {{ luxTitle }}\n  </h1>\n  } @case (2) {\n  <h2 class=\"lux-textbox-title\" title=\"{{ luxTitle }}\">\n    {{ luxTitle }}\n  </h2>\n  } @default {\n  <h3 class=\"lux-textbox-title\" title=\"{{ luxTitle }}\">\n    {{ luxTitle }}\n  </h3>\n  } @case (4) {\n  <h4 class=\"lux-textbox-title\" title=\"{{ luxTitle }}\">\n    {{ luxTitle }}\n  </h4>\n  } @case (5) {\n  <h5 class=\"lux-textbox-title\" title=\"{{ luxTitle }}\">\n    {{ luxTitle }}\n  </h5>\n  } @case (6) {\n  <h6 class=\"lux-textbox-title\" title=\"{{ luxTitle }}\">\n    {{ luxTitle }}\n  </h6>\n  } } }\n  <div class=\"lux-textbox-content\">\n    <ng-content></ng-content>\n  </div>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-card-content',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxCardContentComponent {\n  constructor() {}\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\n\n/**\n * Animation für das Aus- und Einklappen des erweiterten Karteninhalts.\n */\nexport const expansionAnim = trigger('expansionAnim', [\n  transition(\n    'void => expand',\n    [\n      style({ height: '0', opacity: 0 }),\n      animate(\n        '{{ duration }}ms',\n        style({\n          height: '*',\n          opacity: 1\n        })\n      )\n    ],\n    { params: { duration: '300ms', startHeight: '0' } }\n  ),\n\n  transition(\n    'expand => void',\n    [\n      style({ height: '*', opacity: 1 }),\n      animate(\n        '{{ duration }}ms',\n        style({\n          height: '0',\n          opacity: 0\n        })\n      )\n    ],\n    { params: { duration: '300ms', startHeight: '0' } }\n  )\n]);\n","import { NgClass } from '@angular/common';\nimport { Component, input } from '@angular/core';\n\nexport type LuxCardActionAlignType = 'left' | 'right';\n\n@Component({\n  selector: 'lux-card-actions',\n  templateUrl: './lux-card-actions.component.html',\n  imports: [NgClass],\n  host: { class: 'lux-flex lux-flex-auto'}\n})\nexport class LuxCardActionsComponent {\n\n  luxAlign = input<LuxCardActionAlignType>('right');\n\n  constructor() {}\n}\n","<div\n  class=\"lux-card-actions-container lux-flex lux-flex-auto lux-items-center lux-gap-3\"\n  [ngClass]=\"{ 'lux-justify-end': luxAlign() === 'right', 'lux-justify-start': luxAlign() === 'left' }\"\n>\n  <ng-content></ng-content>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-card-content-expanded',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxCardContentExpandedComponent {\n  constructor() {}\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-card-custom-header',\n  template: '<ng-content></ng-content>',\n  host: { class: 'lux-flex lux-flex-auto' }\n})\nexport class LuxCardCustomHeaderComponent {}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nimport { NgClass } from '@angular/common';\n@Component({\n  selector: 'lux-card-heading',\n  imports: [NgClass],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @switch (luxLevel()) { @case (1) {\n    <h1 class=\"lux-card-heading-h1\" [ngClass]=\"luxClass()\" [title]=\"luxTitle()\">{{ luxText() }}</h1>\n    } @case (2) {\n    <h2 class=\"lux-card-heading-h2\" [ngClass]=\"luxClass()\" [title]=\"luxTitle()\">{{ luxText() }}</h2>\n    } @case (3) {\n    <h3 class=\"lux-card-heading-h3\" [ngClass]=\"luxClass()\" [title]=\"luxTitle()\">{{ luxText() }}</h3>\n    } @case (4) {\n    <h4 class=\"lux-card-heading-h4\" [ngClass]=\"luxClass()\" [title]=\"luxTitle()\">{{ luxText() }}</h4>\n    } @case (5) {\n    <h5 class=\"lux-card-heading-h5\" [ngClass]=\"luxClass()\" [title]=\"luxTitle()\">{{ luxText() }}</h5>\n    } @case (6) {\n    <h6 class=\"lux-card-heading-h6\" [ngClass]=\"luxClass()\" [title]=\"luxTitle()\">{{ luxText() }}</h6>\n    } @default {\n    <h2 class=\"lux-card-heading-h2\" [ngClass]=\"luxClass()\" [title]=\"luxTitle()\">{{ luxText() }}</h2>\n    } }\n  `\n})\nexport class LuxCardHeadingComponent {\n  luxLevel = input<number>(2);\n  luxText = input<string | undefined>('');\n  luxTitle = input<string | undefined>('');\n  luxClass = input<any>(undefined);\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-card-info',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxCardInfoComponent {\n  constructor() {}\n}\n","import { NgClass } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ContentChildren,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  inject\n} from '@angular/core';\nimport { MatCard, MatCardActions, MatCardContent, MatCardHeader, MatCardSubtitle, MatCardTitle } from '@angular/material/card';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxButtonComponent } from '../../lux-action/lux-button/lux-button.component';\nimport { LuxComponentsConfigParameters } from '../../lux-components-config/lux-components-config-parameters.interface';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { expansionAnim } from './lux-card-model/lux-card-animations';\nimport { LuxCardActionsComponent } from './lux-card-subcomponents/lux-card-actions.component';\nimport { LuxCardContentExpandedComponent } from './lux-card-subcomponents/lux-card-content-expanded.component';\nimport { LuxCardContentComponent } from './lux-card-subcomponents/lux-card-content.component';\nimport { LuxCardCustomHeaderComponent } from './lux-card-subcomponents/lux-card-custom-header.component';\nimport { LuxCardHeadingComponent } from './lux-card-subcomponents/lux-card-heading.component';\nimport { LuxCardInfoComponent } from './lux-card-subcomponents/lux-card-info.component';\n\n@Component({\n  selector: 'lux-card',\n  templateUrl: './lux-card.component.html',\n  animations: [expansionAnim],\n  imports: [\n    MatCard,\n    LuxTagIdDirective,\n    NgClass,\n    MatCardContent,\n    MatCardActions,\n    LuxButtonComponent,\n    TranslocoPipe,\n    MatCardHeader,\n    MatCardTitle,\n    MatCardSubtitle,\n    LuxCardHeadingComponent\n  ],\n  host: {\n    class: 'lux-flex'\n  }\n})\nexport class LuxCardComponent implements OnInit, AfterViewInit, OnDestroy {\n  private componentsConfigService = inject(LuxComponentsConfigService);\n  private cdr = inject(ChangeDetectorRef);\n\n  private configSubscription?: Subscription;\n\n  @Input() luxTitle?: string;\n  @Input() luxTitleTooltip?: string;\n  @Input() luxSubTitle?: string;\n  @Input() luxSubTitleTooltip?: string;\n  @Input() luxIconName?: string;\n  @Input() luxDisabled?: boolean;\n  @Input() luxTagId?: string;\n  @Input() luxTitleLineBreak = true;\n  @Input() luxExpanded = false;\n  @Input() luxUseTabIndex = true;\n  @Input() luxHeading = 2;\n  @Input() luxExpandedLabelOpen = '';\n  @Input() luxExpandedLabelClose = '';\n\n  @Output() luxExpandedChange = new EventEmitter<boolean>();\n  @Output() luxAfterExpansion = new EventEmitter<void>();\n  @Output() luxClicked = new EventEmitter<Event>();\n\n  @ContentChildren(LuxIconComponent, { descendants: false }) iconComponents!: QueryList<LuxIconComponent>;\n  @ContentChild(LuxCardActionsComponent) actionsComponent?: LuxCardActionsComponent;\n  @ContentChild(LuxCardInfoComponent) infoComponent?: LuxCardInfoComponent;\n  @ContentChild(LuxCardContentExpandedComponent) contentExpandedComponent?: LuxCardContentExpandedComponent;\n  @ContentChild(LuxCardContentComponent) contentComponent?: LuxCardContentComponent;\n  @ContentChild(LuxCardCustomHeaderComponent) customHeaderComponent?: LuxCardCustomHeaderComponent;\n\n  hasCardAction?: boolean;\n  animationDisabled = true;\n\n  ngOnInit() {\n    if (!this.luxTagId) {\n      this.luxTagId = this.luxTitle;\n    }\n\n    if (this.luxClicked.observed) {\n      this.hasCardAction = true;\n    }\n  }\n\n  ngAfterViewInit() {\n    // Über die Konfiguration abfragen, ob die Animationen für Cards deaktiviert sind.\n    this.configSubscription = this.componentsConfigService.config.subscribe((config: LuxComponentsConfigParameters) => {\n      this.animationDisabled = !config.cardExpansionAnimationActive;\n      this.cdr.detectChanges();\n    });\n  }\n\n  ngOnDestroy() {\n    this.configSubscription?.unsubscribe();\n  }\n\n  get showButtons() {\n    return !!this.actionsComponent;\n  }\n\n  get showIcon() {\n    return this.iconComponents && this.iconComponents.length === 1;\n  }\n\n  get showExpandedToggle() {\n    return !!this.contentExpandedComponent;\n  }\n\n  /**\n   * Header wird nur angezeigt, wenn wenigstens eines der Header-Elemente vorhanden ist\n   * (Icon, Title, Subtitle, Info-Komponente).\n   */\n  get showHeader() {\n    return (\n      this.showIcon ||\n      !!(this.luxTitle && this.luxTitle.length > 0) ||\n      !!(this.luxSubTitle && this.luxSubTitle.length > 0) ||\n      !!this.infoComponent\n    );\n  }\n\n  changeContentExpansion(event: any) {\n    LuxUtil.stopEventPropagation(event);\n\n    this.luxExpanded = !this.luxExpanded;\n    this.luxExpandedChange.emit(this.luxExpanded);\n  }\n\n  clicked(event: Event) {\n    if (!this.luxDisabled && !this.showButtons) {\n      this.luxClicked.emit(event);\n    }\n  }\n\n  /**\n   * setzt das korrekte Alignment der Titelzeile. Ist der Titel im Zweifel mehrzeilig, so wird das Icon\n   * im Titel nach oben ausgerichtet, damit es nicht mittig neben dem Titel schwebt. Ist der Titel aber\n   * einzeilig, so wird das Icon vertikal zum Titel ausgerichtet.\n   */\n  getTitleAlignment(): string {\n    if (this.luxTitleLineBreak && this.showIcon) {\n      return 'left top';\n    }\n\n    return 'left center';\n  }\n\n  /**\n   * Gibt den Status der Animation zurück.\n   */\n  getAnimState(): string {\n    return this.luxExpanded ? 'expand' : 'void';\n  }\n\n  /**\n   * Gibt die Dauer der Animation abhängig davon, ob sie via Config deaktiviert wurden oder nicht zurück.\n   */\n  getAnimDuration() {\n    return this.animationDisabled ? 0 : 300;\n  }\n\n  /**\n   * Wird am Ende der Ausklapp-Animation aufgerufen und setzt das animationActive-Flag auf false und gibt ein Event\n   * über den luxAfterExpansion-EventEmitter ab.\n   */\n  expansionDone() {\n    this.luxAfterExpansion.emit();\n  }\n}\n","<mat-card\n  appearance=\"outlined\"\n  (click)=\"clicked($event)\"\n  (keydown.enter)=\"clicked($event)\"\n  (keydown.space)=\"clicked($event)\"\n  [attr.tabindex]=\"!showButtons && hasCardAction && !luxDisabled && luxUseTabIndex ? '0' : null\"\n  luxTagIdHandler\n  [luxTagId]=\"luxTagId\"\n  class=\"lux-card\"\n  [class.lux-cursor]=\"!showButtons && hasCardAction && !luxDisabled\"\n>\n  @if (customHeaderComponent) {\n    <mat-card-header class=\"lux-card-header\">\n      <ng-content select=\"lux-card-custom-header\"></ng-content>\n    </mat-card-header>\n  } @else {\n    <mat-card-header class=\"lux-card-header\">\n      @if (showIcon) {\n        <div class=\"lux-card-icon-container\">\n          <ng-content select=\"lux-icon\"></ng-content>\n        </div>\n      }\n      <mat-card-title class=\"lux-card-title\">\n        <lux-card-heading\n          [luxLevel]=\"luxHeading\"\n          [luxText]=\"luxTitle\"\n          [luxTitle]=\"luxTitleTooltip ? luxTitleTooltip : luxTitleLineBreak ? '' : luxTitle\"\n          [luxClass]=\"{\n            'lux-hyphenate': luxTitleLineBreak,\n            'lux-crop': !luxTitleLineBreak,\n            'lux-display-none-important': (!luxTitle || luxTitle.length === 0) && !infoComponent\n          }\"\n        ></lux-card-heading>\n      </mat-card-title>\n      <mat-card-subtitle\n        title=\"{{ luxSubTitleTooltip ? luxSubTitleTooltip : luxTitleLineBreak ? '' : luxSubTitle }}\"\n        class=\"lux-card-subtitle\"\n        [ngClass]=\"{\n          'lux-hyphenate': luxTitleLineBreak,\n          'lux-crop': !luxTitleLineBreak,\n          'lux-display-none-important': !luxSubTitle || luxSubTitle.length === 0\n        }\"\n      >\n        {{ luxSubTitle }}\n      </mat-card-subtitle>\n      @if (infoComponent) {\n        <div class=\"lux-card-info-container\" [class.lux-title]=\"luxTitle || showIcon\" [class.lux-subtitle]=\"luxSubTitle\">\n          <ng-content select=\"lux-card-info\"></ng-content>\n        </div>\n      }\n    </mat-card-header>\n  }\n\n  <mat-card-content class=\"lux-card-content\" [class.lux-card-no-actions]=\"!showButtons\">\n    <div class=\"lux-card-content-container\" [class.lux-card-with-content-and-header]=\"contentComponent && showHeader\">\n      <ng-content select=\"lux-card-content\"></ng-content>\n      @if (showExpandedToggle) {\n        <lux-button\n          luxColor=\"primary\"\n          [luxIconName]=\"luxExpanded ? 'lux-interface-arrows-button-up' : 'lux-interface-arrows-button-down'\"\n          [luxLabel]=\"\n            luxExpanded\n              ? luxExpandedLabelClose || ('luxc.card.expandedLabel.close' | transloco)\n              : luxExpandedLabelOpen || ('luxc.card.expandedLabel.open' | transloco)\n          \"\n          [luxIconShowRight]=\"false\"\n          (luxClicked)=\"changeContentExpansion($event)\"\n          [luxThrottleTime]=\"250\"\n          luxTagId=\"expandedButton\"\n          class=\"lux-expanded-button\"\n        ></lux-button>\n      }\n    </div>\n\n    @if (luxExpanded && contentExpandedComponent) {\n      <div class=\"lux-card-content-expanded lux-mt-4\" [@expansionAnim]=\"{ value: getAnimState(), params: { duration: getAnimDuration() } }\">\n        <ng-content select=\"lux-card-content-expanded\"></ng-content>\n      </div>\n    }\n  </mat-card-content>\n\n  <mat-card-actions class=\"lux-card-actions\" [ngClass]=\"{ 'lux-display-none-important': !showButtons }\" #luxActionButtons>\n    <ng-content select=\"lux-card-actions\"></ng-content>\n  </mat-card-actions>\n</mat-card>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-panel-content',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxPanelContentComponent {\n  constructor() {}\n}\n","import { AfterViewInit, Component, ElementRef, input, viewChild } from '@angular/core';\nimport { MatExpansionPanelTitle } from '@angular/material/expansion';\nimport { MatTooltip } from '@angular/material/tooltip';\n\n@Component({\n  selector: 'lux-panel-header-title',\n  template: `<mat-panel-title\n    [class.lux-crop]=\"luxTruncated()\"\n    [class.lux-hyphenate]=\"!luxTruncated()\"\n    [style.display]=\"luxTruncated() ? 'block' : null\"\n    matTooltip=\"{{ luxTruncatedTooltip() }}\"\n    [matTooltipShowDelay]=\"500\"\n    [matTooltipDisabled]=\"!luxTruncated()\"\n    ><ng-content></ng-content\n  ></mat-panel-title>`,\n  imports: [MatExpansionPanelTitle, MatTooltip]\n})\nexport class LuxPanelHeaderTitleComponent implements AfterViewInit {\n  luxTruncated = input<boolean>(false);\n  luxTruncatedTooltip = input<string>('');\n\n  matPanelTitle = viewChild(MatExpansionPanelTitle, { read: ElementRef });\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    if (this.luxTruncated() && !this.luxTruncatedTooltip()) {\n      console.warn(\n        `Für das Panel mit der ID \"${\n          this.matPanelTitle()?.nativeElement.textContent\n        }\" wurde die Property \"luxTruncated\" aktiviert, aber \"luxTruncatedTooltip\" nicht gesetzt!`\n      );\n    }\n  }\n}\n","import { NgClass } from '@angular/common';\nimport { AfterViewInit, Component, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { MatAccordion, MatAccordionDisplayMode, MatAccordionTogglePosition } from '@angular/material/expansion';\nimport { Subject } from 'rxjs';\nimport { LuxAccordionColor, LuxAccordionColors } from '../../lux-util/lux-colors.enum';\nimport { LuxUtil } from '../../lux-util/lux-util';\n\nexport declare type LuxModeType = MatAccordionDisplayMode;\nexport declare type LuxTogglePosition = MatAccordionTogglePosition | undefined;\n\n@Component({\n  selector: 'lux-accordion',\n  templateUrl: './lux-accordion.component.html',\n  imports: [NgClass, MatAccordion]\n})\nexport class LuxAccordionComponent implements AfterViewInit, OnDestroy {\n  changed$ = new Subject();\n  private _luxColor?: LuxAccordionColor = 'primary';\n\n  @Input() luxMode: LuxModeType = 'default';\n  @Input() luxMulti = false;\n  @Input()\n  set luxColor(value: LuxAccordionColor | undefined) {\n    this._luxColor = LuxAccordionColors.find((entry) => entry === value) ?? undefined;\n  }\n\n  get luxColor(): LuxAccordionColor | undefined {\n    return this._luxColor;\n  }\n\n  _luxDisabled?: boolean;\n  _luxHideToggle?: boolean;\n  _luxDynamicHeaderHeight?: boolean;\n  _luxExpandedHeaderHeight?: string;\n  _luxCollapsedHeaderHeight?: string;\n  _luxTogglePosition?: LuxTogglePosition;\n\n  @Input()\n  get luxDisabled() {\n    return this._luxDisabled;\n  }\n\n  set luxDisabled(disabled: boolean | undefined) {\n    this._luxDisabled = disabled;\n\n    this.changed$.next('luxDisabled');\n  }\n\n  @Input()\n  get luxHideToggle() {\n    return this._luxHideToggle;\n  }\n\n  set luxHideToggle(hideToggle: boolean | undefined) {\n    this._luxHideToggle = hideToggle;\n\n    this.changed$.next('luxHideToggle');\n  }\n\n  @Input()\n  get luxDynamicHeaderHeight() {\n    return this._luxDynamicHeaderHeight;\n  }\n\n  set luxDynamicHeaderHeight(dynamicHeight: boolean | undefined) {\n    this._luxDynamicHeaderHeight = dynamicHeight;\n\n    this.changed$.next('luxDynamicHeaderHeight');\n  }\n\n  @Input()\n  get luxExpandedHeaderHeight() {\n    return this._luxExpandedHeaderHeight;\n  }\n\n  set luxExpandedHeaderHeight(height: string | undefined) {\n    this._luxExpandedHeaderHeight = height;\n\n    this.changed$.next('luxExpandedHeaderHeight');\n  }\n\n  @Input()\n  get luxCollapsedHeaderHeight() {\n    return this._luxCollapsedHeaderHeight;\n  }\n\n  set luxCollapsedHeaderHeight(height: string | undefined) {\n    this._luxCollapsedHeaderHeight = height;\n\n    this.changed$.next('luxCollapsedHeaderHeight');\n  }\n\n  @Input()\n  get luxTogglePosition() {\n    return this._luxTogglePosition;\n  }\n\n  set luxTogglePosition(position: LuxTogglePosition) {\n    this._luxTogglePosition = position;\n\n    this.changed$.next('luxTogglePosition');\n  }\n\n  @ViewChild(MatAccordion, { static: true }) matAccordion!: MatAccordion;\n\n  constructor() {}\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('matAccordion', this.matAccordion);\n  }\n\n  ngOnDestroy() {\n    this.changed$.complete();\n  }\n}\n","<mat-accordion\n  [displayMode]=\"luxMode\"\n  [multi]=\"luxMulti\"\n  [togglePosition]=\"luxTogglePosition!\"\n  [ngClass]=\"{\n    'lux-primary': luxColor === 'primary',\n    'lux-accent': luxColor === 'accent',\n    'lux-warn': luxColor === 'warn',\n    'lux-neutral': luxColor === 'neutral'\n  }\"\n>\n  <ng-content></ng-content>\n</mat-accordion>\n","import { AfterViewInit, Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, inject } from '@angular/core';\nimport { MatExpansionPanel, MatExpansionPanelHeader } from '@angular/material/expansion';\nimport { Subscription } from 'rxjs';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxAccordionComponent, LuxTogglePosition } from '../lux-accordion/lux-accordion.component';\n\n@Component({\n  selector: 'lux-panel',\n  templateUrl: './lux-panel.component.html',\n  styleUrls: ['./lux-panel.component.scss'],\n  imports: [MatExpansionPanel, MatExpansionPanelHeader]\n})\nexport class LuxPanelComponent implements OnInit, AfterViewInit, OnDestroy {\n  protected parent = inject(LuxAccordionComponent, { optional: true, host: true, skipSelf: true });\n  protected mediaQuery = inject(LuxMediaQueryObserverService);\n\n  _luxDynamicHeaderHeight?: boolean;\n\n  headerHeightCacheActive = false;\n  expandedHeaderHeightCache?: string;\n  collapsedHeaderHeightCache?: string;\n\n  @Input() luxDisabled?: boolean;\n  @Input() luxExpanded = false;\n  @Input() luxHideToggle?: boolean;\n  @Input() luxTogglePosition?: LuxTogglePosition;\n\n  @Input() luxCollapsedHeaderHeight?: string;\n  @Input() luxExpandedHeaderHeight?: string;\n  @Input() set luxDynamicHeaderHeight(value: boolean | undefined) {\n    this._luxDynamicHeaderHeight = value;\n\n    if (value) {\n      this.headerHeightCacheActive = true;\n      this.expandedHeaderHeightCache = this.luxExpandedHeaderHeight;\n      this.collapsedHeaderHeightCache = this.luxCollapsedHeaderHeight;\n\n      this.luxExpandedHeaderHeight = 'unset';\n      this.luxCollapsedHeaderHeight = 'unset';\n    } else {\n      if (this.headerHeightCacheActive) {\n        this.luxExpandedHeaderHeight = this.expandedHeaderHeightCache;\n        this.luxCollapsedHeaderHeight = this.collapsedHeaderHeightCache;\n      }\n    }\n  }\n\n  get luxDynamicHeaderHeight() {\n    return this._luxDynamicHeaderHeight;\n  }\n\n  @Output() luxOpened = new EventEmitter<void>();\n  @Output() luxClosed = new EventEmitter<void>();\n  @Output() luxExpandedChange = new EventEmitter<boolean>();\n\n  @ViewChild(MatExpansionPanel, { static: true }) matExpansionPanel!: MatExpansionPanel;\n\n  subscriptions: Subscription[] = [];\n  mobile: boolean;\n\n  constructor() {\n    this.mobile = this.mediaQuery.isSmallerOrEqual('sm');\n\n    this.subscriptions.push(\n      this.mediaQuery.getMediaQueryChangedAsObservable().subscribe(() => {\n        this.mobile = this.mediaQuery.isSmallerOrEqual('sm');\n      })\n    );\n  }\n\n  ngOnInit() {\n    if (this.parent) {\n      if (this.luxHideToggle === undefined) {\n        this.luxHideToggle = this.parent.luxHideToggle;\n      }\n      if (this.luxDisabled === undefined) {\n        this.luxDisabled = this.parent.luxDisabled;\n      }\n      if (this.luxExpandedHeaderHeight === undefined) {\n        this.luxExpandedHeaderHeight = this.parent.luxExpandedHeaderHeight;\n      }\n      if (this.luxCollapsedHeaderHeight === undefined) {\n        this.luxCollapsedHeaderHeight = this.parent.luxCollapsedHeaderHeight;\n      }\n      if (this.luxDynamicHeaderHeight === undefined) {\n        this.luxDynamicHeaderHeight = this.parent.luxDynamicHeaderHeight;\n      }\n      if (this.luxTogglePosition === undefined) {\n        if (this.parent.luxTogglePosition === undefined) {\n          this.luxTogglePosition = 'after';\n        } else {\n          this.luxTogglePosition = this.parent.luxTogglePosition;\n        }\n      }\n\n      // Um eine zyklische Abhängigkeit mit dem lux-accordion zu vermeiden,\n      // wurde hier ein Event verwendet.\n      this.subscriptions.push(\n        this.parent.changed$.subscribe((propertyName) => {\n          if (this.parent) {\n            if (propertyName === 'luxHideToggle') {\n              this.luxHideToggle = this.parent.luxHideToggle;\n            } else if (propertyName === 'luxDisabled') {\n              this.luxDisabled = this.parent.luxDisabled;\n            } else if (propertyName === 'luxDynamicHeaderHeight') {\n              this.luxDynamicHeaderHeight = this.parent.luxDynamicHeaderHeight;\n            } else if (propertyName === 'luxExpandedHeaderHeight') {\n              this.luxExpandedHeaderHeight = this.parent.luxExpandedHeaderHeight;\n            } else if (propertyName === 'luxCollapsedHeaderHeight') {\n              this.luxCollapsedHeaderHeight = this.parent.luxCollapsedHeaderHeight;\n            } else if (propertyName === 'luxTogglePosition') {\n              this.luxTogglePosition = this.parent.luxTogglePosition;\n            }\n          }\n        })\n      );\n    }\n  }\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('matExpansionPanel', this.getMatExpansionPanel());\n\n    // Diese Zeile wird benötigt, damit der Multi-Mode (nur ein Abschnitt darf geöffnet sein)\n    // des Accordions funktioniert. Die Zuweisung des übergeordneten Accordions an dieses Panel\n    // muss einen Zyklus später stattfinden, um einen ExpressionChangedAfterItHasBeenCheckedError\n    // zu vermeiden.\n    setTimeout(() => {\n      if (this.parent) {\n        this.getMatExpansionPanel().accordion = this.parent.matAccordion;\n      }\n    });\n  }\n\n  protected getMatExpansionPanel() {\n    return this.matExpansionPanel;\n  }\n\n  ngOnDestroy() {\n    if (this.subscriptions) {\n      this.subscriptions.forEach((sub: Subscription) => sub.unsubscribe());\n    }\n  }\n\n  onOpened() {\n    this.luxOpened.emit();\n    this.luxExpanded = true;\n    this.luxExpandedChange.emit(this.luxExpanded);\n  }\n\n  onClosed() {\n    this.luxClosed.emit();\n    this.luxExpanded = false;\n    this.luxExpandedChange.emit(this.luxExpanded);\n  }\n}\n","<mat-expansion-panel\n  [disabled]=\"luxDisabled\"\n  [expanded]=\"luxExpanded\"\n  [hideToggle]=\"luxHideToggle\"\n  [togglePosition]=\"luxTogglePosition!\"\n  (opened)=\"onOpened()\"\n  (closed)=\"onClosed()\"\n  class=\"lux-panel\"\n  [class.lux-panel-mobile]=\"mobile\"\n>\n  <mat-expansion-panel-header\n    class=\"lux-expansion-panel-header\"\n    [class.lux-dynamic-height]=\"!!luxDynamicHeaderHeight\"\n    [expandedHeight]=\"luxExpandedHeaderHeight ?? '4em'\"\n    [collapsedHeight]=\"luxCollapsedHeaderHeight ?? '4em'\"\n  >\n    <ng-content select=\"lux-panel-header-title\"></ng-content>\n    <ng-content select=\"lux-panel-header-description\"></ng-content>\n  </mat-expansion-panel-header>\n  <ng-content select=\"lux-panel-content\"></ng-content>\n  <ng-content select=\"lux-panel-action\"></ng-content>\n</mat-expansion-panel>\n","import { Injectable } from '@angular/core';\nimport { ILuxErrorPageConfig } from '../lux-error-interfaces/lux-error-page-config.interface';\nimport { ILuxError } from '../lux-error-interfaces/lux-error.interface';\n\n/**\n * Dieser Service dient dazu, die aktuellen Fehlermeldungen und die Error-Page Konfiguration zu speichern.\n *\n * Er wird von LuxErrorService und LuxErrorPageComponent benutzt, ohne ihn gäbe es Cycle-Dependency Fehler.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxErrorStoreService {\n  /**\n   * Enthält die normale Konfiguration der Fehlerseite, kann bei Bedarf mit setConfig überschrieben werden.\n   */\n  static readonly DEFAULT_CONFIG: ILuxErrorPageConfig = {\n    iconName: 'lux-interface-delete-2',\n    iconSize: '5x',\n    errorText: 'Es ist ein Fehler aufgetreten',\n    homeRedirectText: 'Zurück zur Startseite',\n    homeRedirectUrl: '',\n    errorPageUrl: 'errorpage',\n    skipLocationChange: true\n  };\n\n  private _config: ILuxErrorPageConfig = {};\n  private _error: ILuxError | null = null;\n  private _lastErrors: ILuxError[] = [];\n\n  /**\n   * Gibt die aktuelle Konfiguration zurück.\n   * @returns ILuxErrorPageConfig\n   */\n  get config() {\n    return this._config;\n  }\n\n  /**\n   * Gibt ein Array der letzten Fehler zurück.\n   * @returns Array<ILuxError[]>\n   */\n  get lastErrors() {\n    return Array.of(this._lastErrors);\n  }\n\n  /**\n   * Gibt den aktuellen Fehler zurück.\n   * @returns ILuxError\n   */\n  get error(): ILuxError | null {\n    return this._error;\n  }\n\n  /**\n   * Sichert den Fehler in der Property und fügt ihn der \"lastErrors\"-Liste hinzu.\n   * @param newError\n   */\n  set error(newError: ILuxError | null) {\n    this._error = newError;\n\n    if (newError) {\n      this._lastErrors.push(newError);\n    }\n  }\n\n  constructor() {}\n\n  /**\n   * Initialisiert den Service.\n   */\n  init() {\n    this._lastErrors = [];\n    this._error = null;\n    this._config = {};\n    this.safeNewConfig(LuxErrorStoreService.DEFAULT_CONFIG);\n  }\n\n  /**\n   * Diese Methode sichert die übergebene Konfiguration.\n   * @param luxErrorPageConfig\n   */\n  safeNewConfig(luxErrorPageConfig: ILuxErrorPageConfig | null) {\n    const newConfig: ILuxErrorPageConfig = {};\n\n    Object.assign(newConfig, LuxErrorStoreService.DEFAULT_CONFIG);\n    Object.assign(newConfig, luxErrorPageConfig ?? {});\n\n    this._config = newConfig;\n  }\n}\n","import { Component, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../../lux-action/lux-button/lux-button.component';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxCardContentComponent } from '../../lux-layout/lux-card/lux-card-subcomponents/lux-card-content.component';\nimport { LuxCardComponent } from '../../lux-layout/lux-card/lux-card.component';\nimport { LuxPanelContentComponent } from '../../lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-content.component';\nimport { LuxPanelHeaderTitleComponent } from '../../lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-header-title.component';\nimport { LuxPanelComponent } from '../../lux-layout/lux-panel/lux-panel.component';\nimport { ILuxErrorPageConfig } from './lux-error-interfaces/lux-error-page-config.interface';\nimport { ILuxError } from './lux-error-interfaces/lux-error.interface';\nimport { LuxErrorStoreService } from './lux-error-services/lux-error-store.service';\n\n@Component({\n  selector: 'lux-error-page',\n  templateUrl: './lux-error-page.component.html',\n  imports: [\n    LuxCardComponent,\n    LuxCardContentComponent,\n    LuxButtonComponent,\n    LuxPanelComponent,\n    LuxPanelHeaderTitleComponent,\n    LuxPanelContentComponent,\n    LuxIconComponent,\n    TranslocoPipe\n  ]\n})\nexport class LuxErrorPageComponent {\n  private router = inject(Router);\n  private errorStore = inject(LuxErrorStoreService);\n\n  get error(): ILuxError | null {\n    return this.errorStore.error;\n  }\n\n  get errorConfig(): ILuxErrorPageConfig {\n    return this.errorStore.config;\n  }\n\n  /**\n   * Navigiert über den Router zum eingetragenen Home-Pfad\n   */\n  clickHomeRedirect() {\n    this.router.navigate([this.errorConfig.homeRedirectUrl]);\n  }\n}\n","<lux-card class=\"lux-error-page\" id=\"ErrorPage\" luxTagId=\"luxErrorPage\">\n  <lux-card-content class=\"lux-flex lux-flex-col lux-justify-center lux-items-center\">\n    <lux-icon [luxIconName]=\"errorConfig.iconName\" [luxIconSize]=\"errorConfig.iconSize\" class=\"lux-color-gray lux-flex-none\"></lux-icon>\n    <h2 class=\"lux-ml-3 lux-mr-3\" style=\"text-align: center\">{{ errorConfig.errorText }}</h2>\n    @if (errorConfig.homeRedirectText && errorConfig.homeRedirectUrl) {\n    <lux-button luxColor=\"primary\" [luxLabel]=\"errorConfig.homeRedirectText\" (luxClicked)=\"clickHomeRedirect()\" class=\"lux-flex-none\">\n    </lux-button>\n    } @if (error) { @if (error.errorId) {\n    <p class=\"lux-color-dark-secondary-text lux-flex-none\">{{ 'luxc.errorpage.error_number' | transloco:{ errorId: error.errorId } }}</p>\n    } @if (error.errorMessage) {\n    <lux-panel luxExpandedHeaderHeight=\"50px\" luxCollapsedHeaderHeight=\"50px\">\n      <lux-panel-header-title>{{ 'luxc.errorpage.error_title' | transloco }}</lux-panel-header-title>\n      <lux-panel-content>\n        <p>{{ error.errorMessage }}</p>\n      </lux-panel-content>\n    </lux-panel>\n    } }\n  </lux-card-content>\n</lux-card>\n","import { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { LuxUtil } from '../../../lux-util/lux-util';\nimport { ILuxErrorPageConfig } from '../lux-error-interfaces/lux-error-page-config.interface';\nimport { ILuxError } from '../lux-error-interfaces/lux-error.interface';\nimport { LuxErrorPageComponent } from '../lux-error-page.component';\nimport { LuxErrorStoreService } from './lux-error-store.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxErrorService {\n  private router = inject(Router);\n  private errorStore = inject(LuxErrorStoreService);\n\n  constructor() {\n    this.errorStore.init();\n    this.setConfig(null);\n  }\n\n  /**\n   * Überschreibt die aktuelle Konfiguration für die Fehlerseite.\n   * Übernimmt so viele Werte wie möglich aus der übergebenen Konfiguration,\n   * sonst werden die Default-Werte genutzt.\n   * @param luxErrorPageConfig\n   */\n  setConfig(luxErrorPageConfig: ILuxErrorPageConfig | null) {\n    this.errorStore.safeNewConfig(luxErrorPageConfig);\n    // potentielle alte Route zu LuxErrorPageComponent entfernen\n    this.router.config = this.router.config.filter((entry) => entry.component !== LuxErrorPageComponent);\n    // neue Route eintragen\n    this.router.config.unshift({ path: this.errorStore.config.errorPageUrl, component: LuxErrorPageComponent });\n  }\n\n  /**\n   * Navigiert zur Fehlerkomponente und versucht einen Fehler\n   * (wenn mitgegeben) zu sichern.\n   * @param error\n   * @returns Observable<any>\n   */\n  navigateToErrorPage(error?: ILuxError): Observable<any> {\n    if (error) {\n      this.errorStore.error = error;\n    }\n    const { errorPageUrl, skipLocationChange } = this.errorStore.config;\n\n    LuxUtil.assertNonNull('errorPageUrl', errorPageUrl);\n\n    return of(this.router.navigateByUrl(errorPageUrl!, { skipLocationChange }));\n  }\n}\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { LuxUtil } from '../../lux-util/lux-util';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxHttpErrorInterceptor implements HttpInterceptor {\n  static dataStream = new ReplaySubject<any>(1);\n\n  constructor() {}\n\n  static dataStream$(): Observable<any> {\n    return LuxHttpErrorInterceptor.dataStream.asObservable();\n  }\n\n  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n    return next.handle(req).pipe(\n      tap({\n        next: () => {\n          if (!LuxUtil.checkIfRequestIsAssetRequest(req)) {\n            LuxHttpErrorInterceptor.dataStream.next([]);\n          }\n        },\n        error: (errorResponse) => {\n          if (!LuxUtil.checkIfRequestIsAssetRequest(req) && errorResponse instanceof HttpErrorResponse && errorResponse.status === 400) {\n            LuxHttpErrorInterceptor.dataStream.next(LuxHttpErrorInterceptor.extractErrors(errorResponse.error));\n          }\n        }\n      })\n    );\n  }\n\n  static extractErrors(error: any | null) {\n    let errors = [];\n\n    if (error && typeof error === 'object') {\n      if (error.errors && Array.isArray(error.errors)) {\n        errors = error.errors;\n      } else if (error.violations && Array.isArray(error.violations)) {\n        errors = error.violations;\n      }\n    }\n\n    return errors;\n  }\n}\n","import { AfterViewInit, Component, EventEmitter, OnDestroy, OnInit, Output, ViewChild, inject } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { ILuxMessage } from '../../lux-common/lux-message-box/lux-message-box-model/lux-message.interface';\nimport { LuxMessageBoxComponent } from '../../lux-common/lux-message-box/lux-message-box.component';\nimport { LuxHttpErrorInterceptor } from './lux-http-error-interceptor';\n\n@Component({\n  selector: 'lux-http-error',\n  templateUrl: 'lux-http-error.component.html',\n  styleUrls: ['lux-http-error.component.scss'],\n  imports: [LuxMessageBoxComponent]\n})\nexport class LuxHttpErrorComponent implements OnInit, OnDestroy, AfterViewInit {\n  @ViewChild(LuxMessageBoxComponent) messageComponent!: LuxMessageBoxComponent;\n\n  @Output() luxMessageBoxClosed = new EventEmitter<void>();\n\n  private subs: Subscription[] = [];\n\n  errors: ILuxMessage[] = [];\n\n  constructor() {\n    // Beim Ansteuern einer neuen Route, die aktuellen Fehler resetten.\n    this.subs.push(\n      inject(Router).events.subscribe((event) => {\n        if (event instanceof NavigationStart) {\n          LuxHttpErrorInterceptor.dataStream.next([]);\n        }\n      })\n    );\n  }\n\n  ngOnInit(): void {\n    this.errors = [];\n  }\n\n  ngAfterViewInit() {\n    // Wenn neue Fehler-Objekte kommen, diese umformatieren und in der LuxMessageBoxComponent anzeigen.\n    this.subs.push(\n      LuxHttpErrorInterceptor.dataStream$().subscribe((errors: any[]) => {\n        this.updateErrors(errors);\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    // Alle bekannten Subscriptions auflösen.\n    this.subs.forEach((sub) => {\n      sub.unsubscribe();\n    });\n  }\n\n  /**\n   * Updated das aktuelle Errors-Array mit dem übergebenen Wert.\n   * Liest dabei die Message aus dem Fehler und erzeugt LuxMessage-Objekte für die LuxMessageBoxComponent.\n   * @param errors\n   */\n  private updateErrors(errors: any[]) {\n    const errorMessages: ILuxMessage[] = [];\n    if (errors && errors.length > 0) {\n      errors.forEach((error: any) => {\n        errorMessages.push({\n          text: LuxHttpErrorComponent.readErrorMessage(error),\n          color: 'red',\n          iconName: 'lux-programming-bug'\n        });\n      });\n    }\n    setTimeout(() => {\n      this.errors = errorMessages;\n    });\n  }\n\n  /**\n   * Versucht eine Fehlermeldung aus dem Fehler zu lesen.\n   * Zuerst wird geschaut, ob der Fehler selbst nur ein String ist. Wenn ja, diesen zurückgeben.\n   * Dann wird geprüft, ob der Fehler eine \"message\"-Property besitzt. Wenn ja, diese zurückgeben.\n   * Als letzter Ausweg wird das \"error\"-Objekt selbst über die toString-Methode zurückgegeben.\n   * @param error\n   */\n  private static readErrorMessage(error: any): string {\n    if (typeof error === 'string') {\n      return error;\n    } else if (Object.hasOwn(error, 'message')) {\n      return error['message'];\n    } else {\n      return error.toString();\n    }\n  }\n}\n","<lux-message-box [luxMessages]=\"errors\" (luxMessageBoxClosed)=\"luxMessageBoxClosed.emit()\"> </lux-message-box>\n","import { getLocaleFirstDayOfWeek } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { NativeDateAdapter } from '@angular/material/core';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport DateTimeFormatOptions = Intl.DateTimeFormatOptions;\n\n@Injectable()\nexport class LuxDatepickerAcAdapter extends NativeDateAdapter {\n  // dd.MM.yyyy\n  private readonly dotRegExp = new RegExp(/\\d{1,2}\\.\\d{1,2}\\.\\d{4}/);\n\n  // MM/dd/yyyy\n  private readonly backslashRegExp = new RegExp(/\\d{1,2}\\/\\d{1,2}\\/\\d{4}/);\n\n  // dd-MM-yyyy\n  private readonly hyphenRegExp = new RegExp(/\\d{1,2}-\\d{1,2}-\\d{4}/);\n\n  // yyyy-MM-dd\n  private readonly hyphenRegExp_1 = new RegExp(/\\d{4}-\\d{1,2}-\\d{1,2}/);\n\n  // ddMMyyyy\n  private readonly noSeparatorRegExp = new RegExp(/\\d{1,2}\\d{1,2}\\d{4}/);\n\n  override format(date: Date | string, displayFormat: DateTimeFormatOptions): string {\n    if (date) {\n      if (displayFormat) {\n        if (typeof date === 'string') {\n          date = new Date(date);\n        }\n        return date.toLocaleDateString(this.locale, displayFormat);\n      } else {\n        return (date as Date).toLocaleDateString(this.locale);\n      }\n    } else {\n      return '';\n    }\n  }\n\n  override parse(value: string): Date | null {\n    if (value) {\n      // Prüfen, ob der Wert ein ISO-String ist\n      if (LuxUtil.ISO_8601_FULL.test(value)) {\n        return new Date(value);\n      }\n\n      // Hat der String das Format dd.MM.YYYY ?\n      if (this.dotRegExp.test(value)) {\n        return this.getUTCNulled_ddMMYYYY(value, '.');\n      } else if (this.backslashRegExp.test(value)) {\n        return this.getUTCNulled_MMddYYY(value, '/');\n      } else if (this.hyphenRegExp.test(value)) {\n        return this.getUTCNulled_ddMMYYYY(value, '-');\n      } else if (this.hyphenRegExp_1.test(value)) {\n        return this.getUTCNulled_YYYYMMdd(value, '-');\n      } else if (this.noSeparatorRegExp.test(value)) {\n        return this.getUTCNulled_ddMMYYYYNoSeparator(value);\n      }\n      return value as any;\n    }\n    return null;\n  }\n\n  override getFirstDayOfWeek(): number {\n    let startDay;\n    try {\n      startDay = getLocaleFirstDayOfWeek(this.locale);\n    } catch (e) {\n      startDay = super.getFirstDayOfWeek();\n    }\n    return startDay;\n  }\n\n  /**\n   * UTC Date mit 0-Werten für Time aus einem ddMMYYYY-String erhalten.\n   * @param dateString\n   * @param separator\n   */\n  private getUTCNulled_ddMMYYYY(dateString: string, separator: string) {\n    const splitDate = dateString.split(separator);\n    const tempDate = new Date(0);\n    tempDate.setUTCFullYear(+splitDate[2], this.calculateMonth(+splitDate[1]), +splitDate[0]);\n    return tempDate;\n  }\n\n  /**\n   * UTC Date mit 0-Werten für Time aus einem ddMMYYYY-String erhalten.\n   * @param dateString\n   */\n  private getUTCNulled_ddMMYYYYNoSeparator(dateString: string) {\n    const tempDate = new Date(0);\n    tempDate.setUTCFullYear(+dateString.substring(4, 8), this.calculateMonth(+dateString.substring(2, 4)), +dateString.substring(0, 2));\n    return tempDate;\n  }\n\n  /**\n   * UTC Date mit 0-Werten für Time aus einem YYYYMMdd-String erhalten.\n   * @param dateString\n   * @param separator\n   */\n  private getUTCNulled_YYYYMMdd(dateString: string, separator: string) {\n    const splitDate = dateString.split(separator);\n    const tempDate = new Date(0);\n    tempDate.setUTCFullYear(+splitDate[0], this.calculateMonth(+splitDate[1]), +splitDate[2]);\n    return tempDate;\n  }\n\n  /**\n   * UTC Date mit 0-Werten für Time aus einem MMddYYYY-String erhalten.\n   * @param dateString\n   * @param separator\n   */\n  private getUTCNulled_MMddYYY(dateString: string, separator: string) {\n    const splitDate = dateString.split(separator);\n    const tempDate = new Date(0);\n    tempDate.setUTCFullYear(+splitDate[2], this.calculateMonth(+splitDate[0]), +splitDate[1]);\n    return tempDate;\n  }\n\n  override isValid(date: any) {\n    return LuxUtil.isDate(date) && this.isValidYear(date);\n  }\n\n  private calculateMonth(month: number) {\n    let newMonth: number;\n\n    if (month <= 0) {\n      newMonth = 0;\n    } else if (month >= 12) {\n      newMonth = 11;\n    } else {\n      newMonth = month - 1;\n    }\n\n    return newMonth;\n  }\n\n  private isValidYear(date: any) {\n    // Prüfen, ob das Jahr auch aus genau vier Stellen (z.B. 2020) besteht.\n    // Ohne diesen Check würden auch 5- oder 6-stellige Jahreszahlen akzeptiert.\n    return date.getFullYear() && date.getFullYear().toString().length === 4;\n  }\n\n  // Damit werden zwei Buchstaben für den Wochentag angezeigt (Mo, Di, Mi, ...)\n  override getDayOfWeekNames() {\n    return super.getDayOfWeekNames('short');\n  }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, inject } from '@angular/core';\nimport { DateAdapter, MAT_DATE_FORMATS, MatDateFormats } from '@angular/material/core';\nimport { MatCalendar } from '@angular/material/datepicker';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { LuxButtonComponent } from '../../../lux-action/lux-button/lux-button.component';\nimport { LuxAriaLabelDirective } from '../../../lux-directives/lux-aria/lux-aria-label.directive';\n\n@Component({\n  selector: 'lux-datepicker-ac-custom-header',\n  templateUrl: './lux-datepicker-ac-custom-header.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [LuxButtonComponent, LuxAriaLabelDirective, TranslocoPipe]\n})\nexport class LuxDatepickerAcCustomHeaderComponent<D> implements OnDestroy {\n  private _calendar = inject<MatCalendar<D>>(MatCalendar);\n  private _dateAdapter = inject<DateAdapter<D>>(DateAdapter);\n  private _dateFormats = inject<MatDateFormats>(MAT_DATE_FORMATS);\n\n  private _destroyed = new Subject<void>();\n\n  constructor() {\n    const _calendar = this._calendar;\n    const cdr = inject(ChangeDetectorRef);\n\n    _calendar.stateChanges.pipe(takeUntil(this._destroyed)).subscribe(() => cdr.markForCheck());\n  }\n\n  ngOnDestroy() {\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  get periodLabel() {\n    return this._dateAdapter.format(this._calendar.activeDate, this._dateFormats.display.monthYearLabel);\n  }\n  previousClicked(mode: 'month' | 'year') {\n    this._calendar.activeDate =\n      mode === 'month'\n        ? this._dateAdapter.addCalendarMonths(this._calendar.activeDate, -1)\n        : this._dateAdapter.addCalendarYears(this._calendar.activeDate, -1);\n  }\n\n  nextClicked(mode: 'month' | 'year') {\n    this._calendar.activeDate =\n      mode === 'month'\n        ? this._dateAdapter.addCalendarMonths(this._calendar.activeDate, 1)\n        : this._dateAdapter.addCalendarYears(this._calendar.activeDate, 1);\n  }\n\n  currentPeriodClicked() {\n    this._calendar.currentView = 'multi-year';\n  }\n}\n","<div class=\"lux-datepicker-custom-header-component\">\n  <lux-button\n    luxLabel=\"&lt;\"\n    [luxThrottleTime]=\"1\"\n    class=\"lux-datepicker-button lux-datepicker-prev-month\"\n    (luxClicked)=\"previousClicked('month')\"\n    luxAriaLabel=\"{{ 'luxc.datepicker.prev.month.arialabel' | transloco }}\"\n  ></lux-button>\n  <lux-button luxLabel=\"{{ periodLabel }}\" class=\"lux-datepicker-button lux-datepicker-year\" (luxClicked)=\"currentPeriodClicked()\"> </lux-button>\n  <lux-button\n    luxLabel=\"&gt;\"\n    [luxThrottleTime]=\"1\"\n    class=\"lux-datepicker-button lux-datepicker-next-month\"\n    (luxClicked)=\"nextClicked('month')\"\n    luxAriaLabel=\"{{ 'luxc.datepicker.next.month.arialabel' | transloco }}\"\n  ></lux-button>\n</div>\n","import { Platform } from '@angular/cdk/platform';\nimport { Component, ElementRef, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewChild, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MatDatepicker, MatDatepickerInput, MatDatepickerToggle, MatDatepickerToggleIcon } from '@angular/material/datepicker';\nimport { MatInput } from '@angular/material/input';\nimport { Subscription } from 'rxjs';\nimport { LuxAriaDescribedbyDirective } from '../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxThemeService } from '../../lux-theme/lux-theme.service';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxValidationErrors } from '../lux-form-model/lux-form-component-base.class';\nimport { LuxFormInputBaseClass } from '../lux-form-model/lux-form-input-base.class';\nimport { LuxDatepickerAcAdapter } from './lux-datepicker-ac-adapter';\nimport { LuxDatepickerAcCustomHeaderComponent } from './lux-datepicker-ac-custom-header/lux-datepicker-ac-custom-header.component';\n\nexport const APP_DATE_FORMATS_AC = {\n  parse: {\n    dateInput: { month: '2-digit', year: 'numeric', day: '2-digit' }\n  },\n  display: {\n    dateInput: { month: '2-digit', year: 'numeric', day: '2-digit' },\n    monthYearLabel: { year: 'numeric', month: 'long' },\n    dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\n    monthYearA11yLabel: { year: 'numeric', month: 'long' }\n  }\n};\n\nexport declare type LuxDateFilterAcFn = (date: Date | null) => boolean;\nexport declare type LuxStartAcView = 'month' | 'year' | 'multi-year';\n\n@Component({\n  selector: 'lux-datepicker-ac',\n  templateUrl: './lux-datepicker-ac.component.html',\n  providers: [\n    { provide: DateAdapter, useClass: LuxDatepickerAcAdapter, deps: [MAT_DATE_LOCALE, Platform] },\n    { provide: MAT_DATE_FORMATS, useValue: APP_DATE_FORMATS_AC }\n  ],\n  imports: [\n    LuxIconComponent,\n    LuxFormControlWrapperComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatInput,\n    MatDatepickerInput,\n    MatDatepickerToggle,\n    MatDatepickerToggleIcon,\n    MatDatepicker,\n    LuxAriaDescribedbyDirective,\n    LuxTagIdDirective\n  ]\n})\nexport class LuxDatepickerAcComponent<T = any> extends LuxFormInputBaseClass<T> implements OnInit, OnChanges, OnDestroy {\n  private dateAdapter = inject<DateAdapter<Date>>(DateAdapter);\n  private mediaObserver = inject(LuxMediaQueryObserverService);\n  private elementRef = inject(ElementRef);\n  private themeService = inject(LuxThemeService);\n\n  private originalTouchUi = false;\n  private mediaSubscription?: Subscription;\n  private previousISO?: string;\n  min: Date | null = null;\n  max: Date | null = null;\n  start: Date | null = null;\n  focused = false;\n  _luxCustomFilter: LuxDateFilterAcFn = () => true;\n\n  @Input() luxStartView: LuxStartAcView = 'month';\n  @Input() luxTouchUi = false;\n  @Input() luxOpened = false;\n  @Input() luxStartDate: string | null = null;\n  @Input() luxShowToggle = true;\n  @Input() luxMaxDate: string | null = null;\n  @Input() luxMinDate: string | null = null;\n  @Input() luxNoLabels = false;\n  @Input() luxNoTopLabel = false;\n  @Input() luxNoBottomLabel = false;\n\n  @ViewChild(MatDatepicker) matDatepicker?: MatDatepicker<any>;\n  @ViewChild('datepickerInput', { read: ElementRef }) datepickerInput?: ElementRef;\n\n  luxLocale = signal<string>('de-DE');\n\n  get luxCustomFilter() {\n    return this._luxCustomFilter;\n  }\n\n  @Input()\n  set luxCustomFilter(customFilterFn: LuxDateFilterAcFn | undefined) {\n    this._luxCustomFilter = customFilterFn ?? (() => true);\n  }\n\n  override get luxValue(): T {\n    return this.getValue();\n  }\n\n  @Input() override set luxValue(value: T) {\n    this.setValue(value);\n  }\n\n  get dateInputValue() {\n    return this.datepickerInput?.nativeElement.value;\n  }\n\n  set dateInputValue(newValue: string) {\n    this.datepickerInput!.nativeElement.value = newValue;\n  }\n\n  constructor() {\n    super();\n    // den Standard-Wert für Autocomplete für Datepicker ausschalten\n    this.luxAutocomplete = 'off';\n\n    this.tService.langChanges$.pipe(takeUntilDestroyed()).subscribe((lang) => {\n      switch (lang) {\n        case 'de':\n          this.luxLocale.set('de-DE');\n          break;\n        case 'en':\n          this.luxLocale.set('en-US');\n          break;\n        case 'fr':\n          this.luxLocale.set('fr-FR');\n          break;\n        default:\n          this.luxLocale.set(lang);\n      }\n      this.dateAdapter.setLocale(this.luxLocale());\n\n      // Input-Feld neu formatieren\n      if (this.formControl && this.datepickerInput) {\n        this.dateInputValue = this.formatDateTime(this.formControl.value);\n      }\n    });\n  }\n\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    if (simpleChanges['luxOpened']) {\n      // Eventuell gibt es ohne das Timeout sonst Fehler, weil der matDatepicker noch nicht gesetzt ist\n      setTimeout(() => {\n        this.triggerOpenClose();\n      });\n    }\n    if (simpleChanges['luxLocale'] && simpleChanges['luxLocale'].currentValue) {\n      this.dateAdapter.setLocale(simpleChanges['luxLocale'].currentValue);\n    }\n    if (simpleChanges['luxMaxDate'] && typeof simpleChanges['luxMaxDate'].currentValue === 'string') {\n      this.max = this.dateAdapter.parse(simpleChanges['luxMaxDate'].currentValue, {});\n    }\n    if (simpleChanges['luxMinDate'] && typeof simpleChanges['luxMinDate'].currentValue === 'string') {\n      this.min = this.dateAdapter.parse(simpleChanges['luxMinDate'].currentValue, {});\n    }\n    if (simpleChanges['luxStartDate'] && typeof simpleChanges['luxStartDate'].currentValue === 'string') {\n      this.start = this.dateAdapter.parse(simpleChanges['luxStartDate'].currentValue, {});\n    }\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.originalTouchUi = this.luxTouchUi;\n    this.mediaSubscription = this.mediaObserver.getMediaQueryChangedAsObservable().subscribe(() => {\n      this.checkMediaObserver();\n    });\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n\n    if (this.mediaSubscription) {\n      this.mediaSubscription.unsubscribe();\n    }\n  }\n\n  /**\n   * Erzeugt für die Unter- bzw. Überschreitung\n   * @param value\n   * @param errors\n   */\n  override errorMessageModifier(value: any, errors: LuxValidationErrors): string | undefined {\n    if (errors['matDatepickerMin']) {\n      return this.tService.translate('luxc.datepicker.error_message.min');\n    } else if (errors['matDatepickerMax']) {\n      return this.tService.translate('luxc.datepicker.error_message.max');\n    } else if (errors['matDatepickerParse']) {\n      return this.tService.translate('luxc.datepicker.error_message.invalid');\n    } else if (errors['required']) {\n      if (this.datepickerInput && this.datepickerInput.nativeElement.value) {\n        return this.tService.translate('luxc.datepicker.error_message.invalid');\n      } else {\n        return this.tService.translate('luxc.datepicker.error_message.empty');\n      }\n    }\n\n    return undefined;\n  }\n\n  onFocus(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocus.emit(e);\n  }\n\n  onFocusIn(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocusIn.emit(e);\n  }\n\n  onFocusOut(e: FocusEvent) {\n    this.focused = false;\n    this.luxFocusOut.emit(e);\n  }\n\n  descripedBy() {\n    if (this.errorMessage) {\n      return this.uid + '-error';\n    } else {\n      return (this.formHintComponent || this.luxHint) && (!this.luxHintShowOnlyOnFocus || (this.luxHintShowOnlyOnFocus && this.focused))\n        ? this.uid + '-hint'\n        : undefined;\n    }\n  }\n\n  /**\n   * Checkt, ob eine mobile Media-Query vorliegt.\n   * Wenn ja, wird automatisch die TouchUI aktiviert.\n   * Wenn nein, wird der vom Aufrufer/originale luxTouchUI-Wert genutzt.\n   */\n  private checkMediaObserver() {\n    if (this.mediaObserver.isXS() || this.mediaObserver.isSM()) {\n      this.luxTouchUi = true;\n    } else {\n      this.luxTouchUi = this.originalTouchUi;\n    }\n  }\n\n  /**\n   * Führt .open() bzw. .close() vom MatDatepicker aus, abhängig vom Wert für luxOpened.\n   */\n  private triggerOpenClose() {\n    if (this.luxOpened) {\n      this.matDatepicker?.open();\n    } else {\n      this.matDatepicker?.close();\n    }\n  }\n\n  /**\n   * Aktualisiert den FormControl-Value und den Wert im Parent über valueChange mithilfe des übergebenen ISO-Strings.\n   * @param isoValue\n   */\n  private setISOValue(isoValue: string) {\n    setTimeout(() => {\n      this.previousISO = isoValue;\n\n      let minOk = true;\n      if (this.min && isoValue && this.dateAdapter.compareDate(new Date(isoValue), this.min) < 0) {\n        minOk = false;\n      }\n\n      let maxOk = true;\n      if (this.max && isoValue && this.dateAdapter.compareDate(new Date(isoValue), this.max) > 0) {\n        maxOk = false;\n      }\n\n      // Der valueChange-Emitter wird nur anstoßen, wenn das Datum innerhalb der Grenzen (min und max) liegt.\n      if (minOk && maxOk) {\n        this.notifyFormValueChanged(isoValue);\n      }\n\n      // \"silently\" den FormControl auf den (potenziell) geänderten Wert aktualisieren\n      this.formControl.setValue(isoValue as any, {\n        emitEvent: false,\n        emitModelToViewChange: false,\n        emitViewToModelChange: false\n      });\n\n      // Per Hand dem Input-Element einen formatierten String übergeben\n      if (this.datepickerInput && !this.datepickerInput.nativeElement.value && isoValue) {\n        this.datepickerInput.nativeElement.value = this.dateAdapter.format(isoValue as any, APP_DATE_FORMATS_AC.display.dateInput);\n      }\n    });\n  }\n\n  protected override setValue(value: any) {\n    if (value !== this.luxValue) {\n      if (!this.formControl) {\n        this._initialValue = value;\n        return;\n      }\n      this.formControl.setValue(value);\n    }\n  }\n\n  protected override initFormValueSubscription() {\n    // Aktualisierungen an dem FormControl-Value sollen auch via EventEmitter bekannt gemacht werden\n    this._formValueChangeSub = this.formControl.valueChanges.subscribe((value: any) => {\n      this.updateDateValue(value);\n    });\n\n    if (this.formControl.value) {\n      // Es kann vorkommen, dass der initiale Wert nicht im ISO-Format angegeben ist.\n      // Dann muss der Wert noch umgewandelt werden.\n      this.updateDateValue(this.formControl.value);\n    } else if (this._initialValue !== null && this._initialValue !== undefined) {\n      // Vorhandenen Initialwert setzen\n      this.formControl.setValue(this._initialValue);\n    }\n  }\n\n  private updateDateValue(value: any) {\n    if (!value) {\n      this.setISOValue(value);\n      return;\n    }\n\n    // Nachfolgend erstellen\n    if (typeof value === 'string') {\n      value = this.dateAdapter.parse(value, {});\n    }\n\n    const eventDate: Date = value;\n    const tempDate = new Date(0);\n    tempDate.setUTCFullYear(eventDate.getFullYear(), eventDate.getMonth(), eventDate.getDate());\n    tempDate.setUTCHours(0, 0, 0, 0);\n\n    // Sicherheitshalber noch einmal prüfen, kann vorkommen das ein unsinniger Wert eingetragen wird\n    // z.B. 'asdf', das führt zu InvalidDate's\n    if (LuxUtil.isDate(tempDate) && this.previousISO !== tempDate.toISOString()) {\n      this.setISOValue(tempDate.toISOString());\n    }\n  }\n\n  // für dem Customheader für das \"Green\"-Theme\n  getHeaderByTheme(): any {\n    const customHeader = LuxDatepickerAcCustomHeaderComponent;\n    return this.themeService.getTheme().name === 'green' ? customHeader : null;\n  }\n\n  private formatDateTime(date: any) {\n    return this.dateAdapter.format(date, APP_DATE_FORMATS_AC.display.dateInput);\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  (click)=\"!luxDisabled && !luxReadonly ? datepickerInput.focus() : null\"\n  [luxFormComponent]=\"this\"\n  [formGroup]=\"formGroup\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  [luxLabelLongFormat]=\"luxLabelLongFormat\"\n  luxTagId=\"luxDatepickerWrapper\"\n  #datepickerFormControl\n>\n  <div class=\"lux-input-row-authentic\">\n    <input\n      matInput\n      luxTagIdHandler\n      [luxTagId]=\"luxTagId\"\n      [matDatepicker]=\"datepicker\"\n      [min]=\"min\"\n      [max]=\"max\"\n      [matDatepickerFilter]=\"_luxCustomFilter\"\n      [placeholder]=\"luxPlaceholder\"\n      [required]=\"luxRequired\"\n      [readonly]=\"luxReadonly\"\n      [formControl]=\"formControl\"\n      [autocomplete]=\"luxAutocomplete\"\n      (blur)=\"luxBlur.emit($event)\"\n      (focus)=\"onFocus($event)\"\n      (focusin)=\"onFocusIn($event)\"\n      (focusout)=\"onFocusOut($event)\"\n      [id]=\"uid\"\n      [luxAriaDescribedby]=\"descripedBy()\"\n      #datepickerInput\n    />\n    @if (luxShowToggle) {\n    <mat-datepicker-toggle [disabled]=\"luxDisabled || luxReadonly\" [for]=\"datepicker\" [disableRipple]=\"true\">\n      <lux-icon matDatepickerToggleIcon luxIconName=\"lux-interface-calendar\" class=\"lux-datepicker-toggle-icon\"></lux-icon>\n    </mat-datepicker-toggle>\n    }\n    <mat-datepicker\n      [startView]=\"luxStartView\"\n      [startAt]=\"start\"\n      [touchUi]=\"luxTouchUi\"\n      [disabled]=\"luxDisabled || luxReadonly\"\n      [panelClass]=\"'lux-datepicker-panel'\"\n      [calendarHeaderComponent]=\"getHeaderByTheme()\"\n      #datepicker\n    >\n    </mat-datepicker>\n  </div>\n</lux-form-control-wrapper>\n}\n","import { ComponentType } from '@angular/cdk/portal';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, OnInit, ViewChild, inject } from '@angular/core';\nimport { MatCalendar } from '@angular/material/datepicker';\nimport { MatError } from '@angular/material/form-field';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../../../lux-action/lux-button/lux-button.component';\nimport { LuxAriaLabelDirective } from '../../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxIconComponent } from '../../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxCardActionsComponent } from '../../../lux-layout/lux-card/lux-card-subcomponents/lux-card-actions.component';\nimport { LuxCardContentComponent } from '../../../lux-layout/lux-card/lux-card-subcomponents/lux-card-content.component';\nimport { LuxCardComponent } from '../../../lux-layout/lux-card/lux-card.component';\nimport { LuxDividerComponent } from '../../../lux-layout/lux-divider/lux-divider.component';\nimport { LuxThemeService } from '../../../lux-theme/lux-theme.service';\nimport { LuxDatepickerAcCustomHeaderComponent } from '../../lux-datepicker-ac/lux-datepicker-ac-custom-header/lux-datepicker-ac-custom-header.component';\nimport { LuxInputAcComponent } from '../../lux-input-ac/lux-input-ac.component';\nimport { LuxDatetimeOverlayAcComponent } from './lux-datetime-overlay-ac.component';\n\n@Component({\n  selector: 'lux-datetime-overlay-content-ac',\n  templateUrl: './lux-datetime-overlay-content-ac.component.html',\n  styleUrls: ['./lux-datetime-overlay-content-ac.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    MatCalendar,\n    LuxInputAcComponent,\n    MatError,\n    LuxCardComponent,\n    LuxCardContentComponent,\n    LuxDividerComponent,\n    LuxCardActionsComponent,\n    LuxButtonComponent,\n    LuxIconComponent,\n    LuxAriaLabelDirective,\n    TranslocoPipe\n  ]\n})\nexport class LuxDatetimeOverlayContentAcComponent implements OnInit, AfterViewInit {\n  private elementRef = inject(ElementRef);\n  private themeService = inject(LuxThemeService);\n\n  @ViewChild('hoursInput') hoursInputComponent!: LuxInputAcComponent;\n  @ViewChild('minutesInput') minutesInputComponent!: LuxInputAcComponent;\n\n  dateTimePicker!: LuxDatetimeOverlayAcComponent;\n  selected: Date | null = null;\n  startDate: Date | null = null;\n  minCalendarDate: Date | null = null;\n  maxCalendarDate: Date | null = null;\n  _hours = '00';\n  _minutes = '00';\n  touched = false;\n  customHeader?: ComponentType<any>;\n\n  get hours() {\n    return this._hours;\n  }\n\n  set hours(hours) {\n    let newHours = hours;\n\n    if (+newHours > 24) {\n      newHours = '24';\n    }\n\n    if (+newHours < 0) {\n      newHours = '00';\n    }\n\n    this._hours = newHours;\n  }\n\n  get minutes() {\n    return this._minutes;\n  }\n\n  set minutes(minutes) {\n    let newMinutes = minutes;\n\n    if (+newMinutes > 59) {\n      newMinutes = '59';\n    }\n\n    if (+newMinutes < 0) {\n      newMinutes = '00';\n    }\n\n    this._minutes = newMinutes;\n  }\n\n  initDate(value?: string) {\n    if (value) {\n      this.selected = new Date(value);\n      this.hours = this.selected.getUTCHours() < 10 ? '0' + this.selected.getUTCHours() : '' + this.selected.getUTCHours();\n      this.minutes = this.selected.getUTCMinutes() < 10 ? '0' + this.selected.getUTCMinutes() : '' + this.selected.getUTCMinutes();\n      this.selected.setUTCHours(0, 0, 0, 0);\n      this.startDate = new Date(this.selected.getTime());\n    } else {\n      if (this.dateTimePicker.luxStartDate) {\n        this.startDate = this.dateTimePicker.luxStartDate;\n        this.selected = this.startDate;\n      }\n\n      if (Array.isArray(this.dateTimePicker.luxStartTime) && this.dateTimePicker.luxStartTime.length === 2) {\n        this.hours =\n          this.dateTimePicker.luxStartTime[0] < 10 ? '0' + this.dateTimePicker.luxStartTime[0] : '' + this.dateTimePicker.luxStartTime[0];\n        this.minutes =\n          this.dateTimePicker.luxStartTime[1] < 10 ? '0' + this.dateTimePicker.luxStartTime[1] : '' + this.dateTimePicker.luxStartTime[1];\n      } else {\n        this.hours = '';\n        this.minutes = '';\n      }\n    }\n\n    if (this.dateTimePicker.luxMinDate) {\n      this.minCalendarDate = new Date(0);\n      this.minCalendarDate.setUTCFullYear(\n        this.dateTimePicker.luxMinDate.getUTCFullYear(),\n        this.dateTimePicker.luxMinDate.getUTCMonth(),\n        this.dateTimePicker.luxMinDate.getUTCDate()\n      );\n    }\n\n    if (this.dateTimePicker.luxMaxDate) {\n      this.maxCalendarDate = new Date(0);\n      this.maxCalendarDate.setUTCFullYear(\n        this.dateTimePicker.luxMaxDate.getUTCFullYear(),\n        this.dateTimePicker.luxMaxDate.getUTCMonth(),\n        this.dateTimePicker.luxMaxDate.getUTCDate()\n      );\n    }\n  }\n\n  constructor() {\n    if (this.themeService.getTheme().name === 'green') {\n      this.customHeader = LuxDatepickerAcCustomHeaderComponent;\n    }\n  }\n\n  ngOnInit(): void {\n    this.initDate(this.dateTimePicker.selectedDate);\n  }\n\n  ngAfterViewInit() {\n    const activeCell = this.elementRef.nativeElement.querySelector('.mat-calendar-body-active');\n    if (activeCell) {\n      activeCell.focus();\n    }\n  }\n\n  incrementHour() {\n    let hoursAsNumber = +this.hours + 1;\n\n    if (hoursAsNumber > 24) {\n      hoursAsNumber = 0;\n    }\n\n    this.hours = hoursAsNumber < 10 ? '0' + hoursAsNumber : '' + hoursAsNumber;\n    this.selectHours();\n  }\n\n  decrementHour() {\n    let hoursAsNumber = +this.hours - 1;\n\n    if (hoursAsNumber < 0) {\n      hoursAsNumber = 24;\n    }\n\n    this.hours = hoursAsNumber < 10 ? '0' + hoursAsNumber : '' + hoursAsNumber;\n    this.selectHours();\n  }\n\n  incrementMinutes() {\n    let minutesAsNumber = +this.minutes + 1;\n\n    if (minutesAsNumber > 59) {\n      minutesAsNumber = 0;\n    }\n\n    this.minutes = minutesAsNumber < 10 ? '0' + minutesAsNumber : '' + minutesAsNumber;\n    this.selectMinutes();\n  }\n\n  decrementMinutes() {\n    let minutesAsNumber = +this.minutes - 1;\n\n    if (minutesAsNumber < 0) {\n      minutesAsNumber = 59;\n    }\n\n    this.minutes = minutesAsNumber < 10 ? '0' + minutesAsNumber : '' + minutesAsNumber;\n    this.selectMinutes();\n  }\n\n  fillHours() {\n    const hoursAsNumber = +this.hours;\n    this.hours = hoursAsNumber < 10 ? '0' + hoursAsNumber : '' + hoursAsNumber;\n  }\n\n  fillMinutes() {\n    const minutesAsNumber = +this.minutes;\n    this.minutes = minutesAsNumber < 10 ? '0' + minutesAsNumber : '' + minutesAsNumber;\n  }\n\n  onOk() {\n    this.touched = true;\n\n    if (this.selected && this.hours && this.minutes) {\n      const resultDate = new Date(0);\n      resultDate.setUTCFullYear(this.selected.getFullYear(), this.selected.getMonth(), this.selected.getDate());\n      resultDate.setUTCHours(+this.hours, +this.minutes);\n\n      this.dateTimePicker.onOk(resultDate);\n    }\n  }\n\n  selectHours() {\n    setTimeout(() => {\n      this.hoursInputComponent.inputElement.nativeElement.select();\n    });\n  }\n\n  selectMinutes() {\n    setTimeout(() => {\n      this.minutesInputComponent.inputElement.nativeElement.select();\n    });\n  }\n\n  // für dem Customheader für das \"Green\"-Theme\n  getHeaderByTheme() {\n    const customHeader = LuxDatepickerAcCustomHeaderComponent;\n    return this.themeService.getTheme().name === 'green' ? customHeader : (null as any);\n  }\n}\n","<div class=\"lux-datetime-overlay-content\">\n  <lux-card luxTagId=\"lux-datetimepicker-overlay-card-content\">\n    <lux-card-content class=\"lux-flex lux-flex-col\">\n      <mat-calendar\n        class=\"lux-datetime-overlay-calendar\"\n        [dateFilter]=\"dateTimePicker._luxCustomFilter\"\n        [startView]=\"dateTimePicker.luxStartView\"\n        [(selected)]=\"selected\"\n        [startAt]=\"startDate\"\n        [minDate]=\"minCalendarDate\"\n        [maxDate]=\"maxCalendarDate\"\n        [headerComponent]=\"getHeaderByTheme()\"\n      ></mat-calendar>\n      <lux-divider [luxInset]=\"true\"></lux-divider>\n      <div class=\"lux-datetime-time-container lux-mt-3\">\n        <lux-icon luxIconName=\"lux-interface-time-clock-circle\" luxIconSize=\"2x\" class=\"lux-datetime-icon lux-color-blue\"></lux-icon>\n        <div class=\"lux-flex lux-place-content-center lux-items-center\">\n          <lux-input-ac\n            luxLabel=\"\"\n            class=\"lux-datetime-hour lux-max-width-12\"\n            [luxDense]=\"true\"\n            luxAriaLabel=\"{{ 'luxc.datetimepicker.panel.hours.arialabel' | transloco }}\"\n            luxAriaLabelSelector=\"input\"\n            luxAutocomplete=\"off\"\n            [(luxValue)]=\"hours\"\n            (luxFocusIn)=\"selectHours()\"\n            (luxFocusOut)=\"fillHours()\"\n            (keydown.arrowUp)=\"incrementHour()\"\n            (keydown.arrowDown)=\"decrementHour()\"\n            [luxMaxLength]=\"2\"\n            [luxHideCounterLabel]=\"true\"\n            [luxNoLabels]=\"true\"\n            luxTagId=\"lux-datetimepicker-hours\"\n            #hoursInput\n          ></lux-input-ac>\n          <div style=\"text-align: center; flex: 1 1 15px; box-sizing: border-box; max-width: 15px; min-width: 15px\">:</div>\n          <lux-input-ac\n            luxLabel=\"\"\n            luxAriaLabel=\"{{ 'luxc.datetimepicker.panel.minutes.arialabel' | transloco }}\"\n            luxAriaLabelSelector=\"input\"\n            class=\"lux-datetime-minute lux-max-width-12\"\n            [luxDense]=\"true\"\n            luxAutocomplete=\"off\"\n            [(luxValue)]=\"minutes\"\n            (luxFocusIn)=\"selectMinutes()\"\n            (luxFocusOut)=\"fillMinutes()\"\n            (keydown.arrowUp)=\"incrementMinutes()\"\n            (keydown.arrowDown)=\"decrementMinutes()\"\n            [luxMaxLength]=\"2\"\n            [luxHideCounterLabel]=\"true\"\n            [luxNoLabels]=\"true\"\n            luxTagId=\"lux-datetimepicker-minutes\"\n            #minutesInput\n          ></lux-input-ac>\n        </div>\n      </div>\n      <div class=\"lux-datetime-error-message-container lux-pt-2\">\n        @if (!selected && touched) {\n        <mat-error>{{ 'luxc.datetimepicker.invalid.date' | transloco }}</mat-error>\n        } @if ((!this.hours || !this.minutes) && selected && touched) {\n        <mat-error>{{ 'luxc.datetimepicker.invalid.time' | transloco }}</mat-error>\n        }\n      </div>\n    </lux-card-content>\n    <lux-card-actions>\n      <lux-button luxLabel=\"OK\" luxColor=\"primary\" [luxFlat]=\"true\" (luxClicked)=\"onOk()\" class=\"lux-mb-3\"></lux-button>\n    </lux-card-actions>\n  </lux-card>\n</div>\n","import { Directionality } from '@angular/cdk/bidi';\nimport { ESCAPE } from '@angular/cdk/keycodes';\nimport { Overlay, OverlayConfig, OverlayRef, PositionStrategy, ScrollStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\n\nimport { Component, ComponentRef, ElementRef, EventEmitter, inject, Input, NgZone, Output, ViewContainerRef, DOCUMENT } from '@angular/core';\nimport { MAT_DATEPICKER_SCROLL_STRATEGY, MatDateSelectionModel } from '@angular/material/datepicker';\nimport { MatFormField } from '@angular/material/form-field';\nimport { merge, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { LuxThemePalette } from '../../../lux-util/lux-colors.enum';\nimport { LuxDateFilterAcFn } from '../../lux-datepicker-ac/lux-datepicker-ac.component';\nimport { LuxDatetimeOverlayContentAcComponent } from './lux-datetime-overlay-content-ac.component';\n\n@Component({\n  selector: 'lux-datetime-overlay-ac',\n  template: ''\n})\nexport class LuxDatetimeOverlayAcComponent {\n  private elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n  private ngZone = inject(NgZone);\n  private overlay = inject(Overlay);\n  private viewContainerRef = inject(ViewContainerRef);\n  private document = inject(DOCUMENT, { optional: true });\n  private _dir = inject(Directionality, { optional: true });\n  private _formField = inject(MatFormField, { optional: true });\n\n  @Input() luxPickerInput!: HTMLInputElement;\n  @Input() luxStartView: 'month' | 'year' | 'multi-year' = 'month';\n  @Input() luxStartDate: Date | null = null;\n  @Input() luxStartTime: number[] = [];\n  @Input() luxMinDate: Date | null = null;\n  @Input() luxMaxDate: Date | null = null;\n\n  @Output() luxSelected = new EventEmitter<Date>();\n  @Output() openedStream = new EventEmitter<void>();\n  @Output() closedStream = new EventEmitter<void>();\n\n  stateChanges = new Subject<void>();\n  hasBackdrop = true;\n  opened = false;\n  scrollStrategy: () => ScrollStrategy;\n  _selectedDate?: string;\n  _luxCustomFilter: LuxDateFilterAcFn = () => true;\n\n  // Code des Interfaces \"MatDatepickerPanel<MatDatepickerControl<any>, any, any>\" - Start\n  id = '';\n  disabled = false;\n  color: LuxThemePalette = 'primary';\n  registerInput(input: any): MatDateSelectionModel<any> {\n    return null as any;\n  }\n  // Code des Interfaces \"MatDatepickerPanel<MatDatepickerControl<any>, any, any>\" - Ende\n\n  get luxCustomFilter() {\n    return this._luxCustomFilter;\n  }\n\n  @Input()\n  set luxCustomFilter(customFilterFn: LuxDateFilterAcFn | undefined) {\n    this._luxCustomFilter = customFilterFn ?? (() => true);\n  }\n\n  get selectedDate() {\n    return this._selectedDate;\n  }\n\n  @Input()\n  set selectedDate(date: string | undefined) {\n    this._selectedDate = date;\n  }\n\n  dateTimePortal?: ComponentPortal<LuxDatetimeOverlayContentAcComponent>;\n  lastFocusedElement: Element | null = null;\n  overlayRef?: OverlayRef;\n  overlayComponentRef?: ComponentRef<LuxDatetimeOverlayContentAcComponent> | null;\n  datepickerInput: any;\n\n  constructor() {\n    const scrollStrategy = inject(MAT_DATEPICKER_SCROLL_STRATEGY);\n\n    this.scrollStrategy = scrollStrategy;\n  }\n\n  onOk(date: Date) {\n    this.luxSelected.emit(date);\n    this.close();\n  }\n\n  open(): void {\n    if (this.opened) {\n      return;\n    }\n\n    if (this.document) {\n      this.lastFocusedElement = this.document.activeElement;\n    }\n\n    this.openOverlay();\n    this.opened = true;\n  }\n\n  private openOverlay(): void {\n    if (!this.dateTimePortal) {\n      this.dateTimePortal = new ComponentPortal<LuxDatetimeOverlayContentAcComponent>(\n        LuxDatetimeOverlayContentAcComponent,\n        this.viewContainerRef\n      );\n    }\n\n    if (!this.overlayRef) {\n      this.createOverlay();\n    }\n\n    if (this.overlayRef && !this.overlayRef.hasAttached()) {\n      this.overlayComponentRef = this.overlayRef.attach(this.dateTimePortal);\n      this.overlayComponentRef.instance.dateTimePicker = this;\n    }\n  }\n\n  private createOverlay(): void {\n    const overlayConfig = new OverlayConfig({\n      positionStrategy: this._createOverlayPositionStrategy(),\n      hasBackdrop: this.hasBackdrop,\n      backdropClass: 'mat-overlay-transparent-backdrop',\n      direction: this._dir as any,\n      scrollStrategy: this.scrollStrategy(),\n      panelClass: 'lux-datetimepicker-overlay'\n    });\n\n    this.overlayRef = this.overlay.create(overlayConfig);\n    this.overlayRef.overlayElement.setAttribute('role', 'dialog');\n\n    merge(\n      this.overlayRef.backdropClick(),\n      this.overlayRef.detachments(),\n      this.overlayRef.keydownEvents().pipe(\n        filter((event) => {\n          return event.keyCode === ESCAPE;\n        })\n      )\n    ).subscribe((event) => {\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (this.hasBackdrop && event) {\n        this.cancel();\n      } else {\n        this.close();\n      }\n    });\n  }\n\n  public cancel(): void {\n    this.close();\n  }\n\n  close(): void {\n    if (!this.opened) {\n      return;\n    }\n    if (this.overlayRef && this.overlayRef.hasAttached()) {\n      this.overlayRef.detach();\n    }\n\n    if (this.dateTimePortal && this.dateTimePortal.isAttached) {\n      this.dateTimePortal.detach();\n    }\n\n    if (this.lastFocusedElement instanceof HTMLElement) {\n      this.lastFocusedElement.focus();\n    }\n\n    setTimeout(() => {\n      if (this.opened) {\n        this.opened = false;\n        this.lastFocusedElement = null;\n      }\n    });\n  }\n\n  private _createOverlayPositionStrategy(): PositionStrategy {\n    return this.overlay\n      .position()\n      .flexibleConnectedTo(this.luxPickerInput)\n      .withTransformOriginOn('.lux-datetime-overlay-content')\n      .withFlexibleDimensions(true)\n      .withViewportMargin(8)\n      .withLockedPosition()\n      .withPositions([\n        {\n          originX: 'start',\n          originY: 'bottom',\n          overlayX: 'start',\n          overlayY: 'top'\n        },\n        {\n          originX: 'start',\n          originY: 'top',\n          overlayX: 'start',\n          overlayY: 'bottom'\n        },\n        {\n          originX: 'end',\n          originY: 'bottom',\n          overlayX: 'end',\n          overlayY: 'top'\n        },\n        {\n          originX: 'end',\n          originY: 'top',\n          overlayX: 'end',\n          overlayY: 'bottom'\n        }\n      ]);\n  }\n}\n","import { getLocaleFirstDayOfWeek } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { NativeDateAdapter } from '@angular/material/core';\nimport { LuxUtil } from '../../lux-util/lux-util';\n\n@Injectable()\nexport class LuxDateTimePickerAcAdapter extends NativeDateAdapter {\n  // dd.MM.yyyy\n  private readonly dotRegExp = new RegExp(/\\d{1,2}\\.\\d{1,2}\\.\\d{4},\\W*\\d{1,2}:\\d{1,2}/);\n  // MM/dd/yyyy\n  private readonly backslashRegExp = new RegExp(/\\d{1,2}\\/\\d{1,2}\\/\\d{4},\\W*\\d{1,2}:\\d{1,2}/);\n  // dd-MM-yyyy\n  private readonly hyphenRegExp = new RegExp(/\\d{1,2}-\\d{1,2}-\\d{4},\\W*\\d{1,2}:\\d{1,2}/);\n  // yyyy-MM-dd\n  private readonly hyphenRegExp_1 = new RegExp(/\\d{4}-\\d{1,2}-\\d{1,2},\\W*\\d{1,2}:\\d{1,2}/);\n  // ddMMyyyy\n  private readonly noSeparatorRegExp = new RegExp(/\\d{1,2}\\d{1,2}\\d{4},\\W*\\d{1,2}:\\d{1,2}/);\n\n  override format(date: Date | string, displayFormat: object): string {\n    let dateAsString = '';\n\n    if (date) {\n      const newDate = typeof date === 'string' ? new Date(date) : new Date(date.getTime());\n      newDate.setMinutes(newDate.getMinutes() + newDate.getTimezoneOffset());\n\n      if (displayFormat) {\n        dateAsString = newDate.toLocaleDateString(this.locale, displayFormat);\n      } else {\n        dateAsString = newDate.toLocaleDateString(this.locale);\n      }\n    }\n\n    return dateAsString;\n  }\n\n  override parse(dateAsString: string): Date | null {\n    let result = null;\n\n    if (dateAsString) {\n      if (LuxUtil.ISO_8601_FULL.test(dateAsString)) {\n        const newDate = new Date(dateAsString);\n        newDate.setSeconds(0);\n        newDate.setMilliseconds(0);\n        result = newDate;\n      } else {\n        const dateTimeArr = dateAsString.split(',');\n\n        if (dateTimeArr.length === 1) {\n          dateTimeArr.push('00:00');\n        }\n\n        for (let i = 0; i < dateTimeArr.length; i++) {\n          dateTimeArr[i] = dateTimeArr[i].trim();\n        }\n\n        const dateValue = dateTimeArr[0];\n        const timeValue = dateTimeArr[1];\n\n        // Hat der String das Format dd.MM.YYYY ?\n        if (this.dotRegExp.test(dateAsString)) {\n          result = this.getUTCNulled_ddMMYYYY(dateValue, timeValue, '.');\n        } else if (this.backslashRegExp.test(dateAsString)) {\n          result = this.getUTCNulled_MMddYYY(dateValue, timeValue, '/');\n        } else if (this.hyphenRegExp.test(dateAsString)) {\n          result = this.getUTCNulled_ddMMYYYY(dateValue, timeValue, '-');\n        } else if (this.hyphenRegExp_1.test(dateAsString)) {\n          result = this.getUTCNulled_YYYYMMdd(dateValue, timeValue, '-');\n        } else if (this.noSeparatorRegExp.test(dateAsString)) {\n          return this.getUTCNulled_ddMMYYYYNoSeparator(dateValue, timeValue);\n        }\n      }\n    }\n\n    return result;\n  }\n\n  override getFirstDayOfWeek(): number {\n    let startDay;\n    try {\n      startDay = getLocaleFirstDayOfWeek(this.locale);\n    } catch (e) {\n      startDay = super.getFirstDayOfWeek();\n    }\n    return startDay;\n  }\n\n  override getDayOfWeekNames() {\n    // Zeige zwei Buchstaben für den Wochentag an (Mo, Di, Mi, ...)\n    return super.getDayOfWeekNames('short');\n  }\n\n  /**\n   * UTC Date mit 0-Werten für Time aus einem ddMMYYYY-String erhalten.\n   * @param dateString\n   * @param timeString\n   * @param separator\n   */\n  private getUTCNulled_ddMMYYYY(dateString: string, timeString: string, separator: string) {\n    const splitDate = dateString.split(separator);\n    const splitTime = timeString.split(':');\n\n    const date = new Date(0);\n    date.setUTCFullYear(+splitDate[2], this.calculateMonth(+splitDate[1]), +splitDate[0]);\n    date.setUTCHours(+splitTime[0], +splitTime[1], 0, 0);\n\n    return date;\n  }\n\n  /**\n   * UTC Date mit 0-Werten für Time aus einem YYYYMMdd-String erhalten.\n   * @param dateString\n   * @param timeString\n   * @param separator\n   */\n  private getUTCNulled_YYYYMMdd(dateString: string, timeString: string, separator: string) {\n    const splitDate = dateString.split(separator);\n    const splitTime = timeString.split(':');\n\n    const date = new Date(0);\n    date.setUTCFullYear(+splitDate[0], this.calculateMonth(+splitDate[1]), +splitDate[2]);\n    date.setUTCHours(+splitTime[0], +splitTime[1], 0, 0);\n\n    return date;\n  }\n\n  /**\n   * UTC Date mit 0-Werten für Time aus einem MMddYYYY-String erhalten.\n   * @param dateString\n   * @param timeString\n   * @param separator\n   */\n  private getUTCNulled_MMddYYY(dateString: string, timeString: string, separator: string) {\n    const splitDate = dateString.split(separator);\n    const splitTime = timeString.split(':');\n\n    const date = new Date(0);\n    date.setUTCFullYear(+splitDate[2], this.calculateMonth(+splitDate[0]), +splitDate[1]);\n    date.setUTCHours(+splitTime[0], +splitTime[1], 0, 0);\n\n    return date;\n  }\n\n  /**\n   * UTC Date mit 0-Werten für Time aus einem ddMMYYYY-String erhalten.\n   * @param dateString\n   * @param timeString\n   */\n  private getUTCNulled_ddMMYYYYNoSeparator(dateString: string, timeString: string) {\n    const splitTime = timeString.split(':');\n\n    const tempDate = new Date(0);\n    tempDate.setUTCFullYear(+dateString.substring(4, 8), this.calculateMonth(+dateString.substring(2, 4)), +dateString.substring(0, 2));\n    tempDate.setUTCHours(+splitTime[0], +splitTime[1], 0, 0);\n    return tempDate;\n  }\n\n  override isValid(date: any) {\n    return LuxUtil.isDate(date) && this.isValidYear(date);\n  }\n\n  private calculateMonth(month: number) {\n    let newMonth: number;\n\n    if (month <= 0) {\n      newMonth = 0;\n    } else if (month >= 12) {\n      newMonth = 11;\n    } else {\n      newMonth = month - 1;\n    }\n\n    return newMonth;\n  }\n\n  private isValidYear(date: any) {\n    // Prüfen, ob das Jahr auch aus genau vier Stellen (z.B. 2020) besteht.\n    // Ohne diesen Check würden auch 5- oder 6-stellige Jahreszahlen akzeptiert.\n    return date.getFullYear() && date.getFullYear().toString().length === 4;\n  }\n}\n","import { Platform } from '@angular/cdk/platform';\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  ViewChild,\n  inject,\n  signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule, ReactiveFormsModule, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { DateFilterFn, MatDatepickerToggle, MatDatepickerToggleIcon } from '@angular/material/datepicker';\nimport { MatInput } from '@angular/material/input';\nimport { Observable } from 'rxjs';\nimport { LuxAriaDescribedbyDirective } from '../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxThemePalette } from '../../lux-util/lux-colors.enum';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxDateFilterAcFn, LuxStartAcView } from '../lux-datepicker-ac/lux-datepicker-ac.component';\nimport { LuxDatetimeOverlayAcComponent } from '../lux-datetimepicker-ac/lux-datetime-overlay-ac/lux-datetime-overlay-ac.component';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxValidationErrors, ValidatorFnType } from '../lux-form-model/lux-form-component-base.class';\nimport { LuxFormInputBaseClass } from '../lux-form-model/lux-form-input-base.class';\nimport { LuxDatetimeOverlayAcComponent as LuxDatetimeOverlayAcComponent_1 } from './lux-datetime-overlay-ac/lux-datetime-overlay-ac.component';\nimport { LuxDateTimePickerAcAdapter } from './lux-datetimepicker-ac-adapter';\n\nexport const APP_DATE_TIME_FORMATS_AC = {\n  parse: {\n    dateInput: { month: '2-digit', year: 'numeric', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false }\n  },\n  display: {\n    dateInput: { month: '2-digit', year: 'numeric', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false },\n    monthYearLabel: { year: 'numeric', month: 'long' },\n    dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\n    monthYearA11yLabel: { year: 'numeric', month: 'long' }\n  }\n};\n@Component({\n  selector: 'lux-datetimepicker-ac',\n  templateUrl: './lux-datetimepicker-ac.component.html',\n  providers: [\n    { provide: DateAdapter, useClass: LuxDateTimePickerAcAdapter, deps: [MAT_DATE_LOCALE, Platform] },\n    { provide: MAT_DATE_FORMATS, useValue: APP_DATE_TIME_FORMATS_AC }\n  ],\n  imports: [\n    LuxIconComponent,\n    LuxFormControlWrapperComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatInput,\n    MatDatepickerToggle,\n    MatDatepickerToggleIcon,\n    LuxDatetimeOverlayAcComponent_1,\n    LuxAriaDescribedbyDirective,\n    LuxTagIdDirective\n  ]\n})\nexport class LuxDatetimepickerAcComponent<T = any> extends LuxFormInputBaseClass<T> implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n  private dateTimeAdapter = inject<DateAdapter<Date>>(DateAdapter);\n\n  @ViewChild(LuxDatetimeOverlayAcComponent) dateTimeOverlayComponent?: LuxDatetimeOverlayAcComponent;\n  @ViewChild('dateTimePickerInput', { read: ElementRef }) dateTimePickerInputEl!: ElementRef;\n\n  @Input() luxStartView: LuxStartAcView = 'month';\n  @Input() luxOpened = false;\n  @Input() luxStartDate?: string;\n  @Input() luxStartTime: number[] = [];\n  @Input() luxShowToggle = true;\n  @Input() luxCustomFilter?: LuxDateFilterAcFn;\n  @Input() luxMaxDate?: string;\n  @Input() luxMinDate?: string;\n  @Input() luxNoLabels = false;\n  @Input() luxNoTopLabel = false;\n  @Input() luxNoBottomLabel = false;\n  \n  luxLocale = signal<string>('de-DE');\n\n  dateTimeValidator: ValidatorFn = (): ValidationErrors | null => {\n    let result = null;\n\n    if (this.dateTimeInputValue) {\n      const date = this.parseDateTime(this.dateTimeInputValue);\n\n      if (date === null) {\n        result = { matDatepickerParse: { text: this.dateTimeInputValue } };\n      } else if (this.min && this.compareDateWithTime(this.min, date) > 0) {\n        result = { matDatepickerMin: { min: this.min, actual: this.dateTimeInputValue } };\n      } else if (this.max && this.compareDateWithTime(date, this.max) > 0) {\n        result = { matDatepickerMax: { max: this.max, actual: this.dateTimeInputValue } };\n      }\n    } else {\n      if (!this.inForm) {\n        if (this.luxRequired) {\n          result = { required: true };\n        }\n      }\n    }\n\n    return result;\n  };\n\n  min: Date | null = null;\n  max: Date | null = null;\n  start: Date | null = null;\n  focused = false;\n\n  get selectedDate(): string | undefined {\n    return typeof this.formControl.value === 'string' ? this.formControl.value : undefined;\n  }\n\n  get dateTimeInputValue() {\n    return this.dateTimePickerInputEl?.nativeElement.value;\n  }\n\n  set dateTimeInputValue(newValue: string) {\n    this.dateTimePickerInputEl.nativeElement.value = newValue;\n  }\n\n  constructor() {\n    super();\n\n    this.luxAutocomplete = 'off';\n\n    this.tService.langChanges$.pipe(takeUntilDestroyed()).subscribe((lang) => {\n      switch (lang) {\n        case 'de':\n          this.luxLocale.set('de-DE');\n          break;\n        case 'en':\n          this.luxLocale.set('en-US');\n          break;\n        case 'fr':\n          this.luxLocale.set('fr-FR');\n          break;\n        default:\n          this.luxLocale.set(lang);\n      }\n      this.dateTimeAdapter.setLocale(this.luxLocale());\n      \n      // Input-Feld neu formatieren\n      if (this.formControl && this.dateTimePickerInputEl) {\n        this.dateTimeInputValue = this.formatDateTime(this.formControl.value);\n      }\n    });\n  }\n\n  // Code des Interfaces \"MatDatepickerControl\" - Start\n  getStartValue() {\n    return this.luxStartDate;\n  }\n  getThemePalette(): LuxThemePalette {\n    return undefined;\n  }\n  disabled = false;\n  dateFilter?: DateFilterFn<any>;\n  getConnectedOverlayOrigin(): ElementRef {\n    return this.dateTimePickerInputEl;\n  }\n\n  getOverlayLabelId() {\n    return null;\n  }\n  stateChanges?: Observable<void>;\n  // Code des Interfaces \"MatDatepickerControl\" - Ende\n\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    if (simpleChanges['luxOpened']) {\n      // Eventuell gibt es ohne das Timeout sonst Fehler, weil die OverlayComponent noch nicht gesetzt ist\n      setTimeout(() => {\n        this.triggerOpenClose();\n      });\n    }\n\n    if (simpleChanges['luxMaxDate'] && typeof simpleChanges['luxMaxDate'].currentValue === 'string') {\n      this.max = this.parseDateTime(simpleChanges['luxMaxDate'].currentValue);\n    }\n\n    if (simpleChanges['luxMinDate'] && typeof simpleChanges['luxMinDate'].currentValue === 'string') {\n      this.min = this.parseDateTime(simpleChanges['luxMinDate'].currentValue);\n    }\n\n    if (simpleChanges['luxStartDate'] && typeof simpleChanges['luxStartDate'].currentValue === 'string') {\n      const startDateArr = simpleChanges['luxStartDate'].currentValue.trim().split('.');\n      if (startDateArr.length === 3) {\n        this.start = new Date(0);\n        this.start.setUTCFullYear(+startDateArr[2], +startDateArr[1] - 1, +startDateArr[0]);\n      } else {\n        this.start = null;\n      }\n    }\n  }\n\n  ngAfterViewInit() {\n    this.dateTimeInputValue = this.formatDateTime(this.formControl.value);\n    this.formControl.addValidators(this.dateTimeValidator);\n  }\n\n  onOk(date: Date) {\n    const selected = new Date(date.getTime());\n\n    if (LuxUtil.isDate(selected)) {\n      this.setISOValue(selected.toISOString());\n    }\n\n    this.dateTimeInputValue = this.formatDateTime(selected);\n  }\n\n  onFocus(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocus.emit(e);\n  }\n\n  onFocusIn(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocusIn.emit(e);\n  }\n\n  onFocusOut(event: FocusEvent) {\n    if (this.formControl.value) {\n      const formattedDate = this.formatDateTime(this.parseDateTime(this.formControl.value as any));\n\n      if (this.dateTimeInputValue !== formattedDate) {\n        this.dateTimeInputValue = formattedDate;\n      }\n    }\n    this.focused = false;\n    this.luxFocusOut.emit(event);\n  }\n\n  descripedBy() {\n    if (this.errorMessage) {\n      return this.uid + '-error';\n    } else {\n      return (this.formHintComponent || this.luxHint) && (!this.luxHintShowOnlyOnFocus || (this.luxHintShowOnlyOnFocus && this.focused))\n        ? this.uid + '-hint'\n        : undefined;\n    }\n  }\n\n  override errorMessageModifier(_value: any, errors: LuxValidationErrors): string | undefined {\n    if (errors['matDatepickerMin']) {\n      return this.tService.translate('luxc.datetimepicker.error_message.min');\n    } else if (errors['matDatepickerMax']) {\n      return this.tService.translate('luxc.datetimepicker.error_message.max');\n    } else if (errors['matDatepickerParse']) {\n      return this.tService.translate('luxc.datetimepicker.error_message.invalid');\n    } else if (errors['required']) {\n      if (this.dateTimePickerInputEl && this.dateTimeInputValue) {\n        return this.tService.translate('luxc.datetimepicker.error_message.invalid');\n      } else {\n        return this.tService.translate('luxc.datetimepicker.error_message.empty');\n      }\n    }\n\n    return undefined;\n  }\n\n  protected override setValue(value: any) {\n    if (value !== this.luxValue) {\n      if (!this.formControl) {\n        this._initialValue = value;\n        return;\n      }\n      this.formControl.setValue(value);\n    }\n  }\n\n  protected override initFormValueSubscription() {\n    this._formValueChangeSub = this.formControl.valueChanges.subscribe((value: any) => {\n      this.updateDateValue(value);\n\n      if (LuxUtil.ISO_8601_FULL.test(value)) {\n        this.dateTimeInputValue = this.formatDateTime(this.formControl.value);\n      }\n    });\n\n    if (this.formControl.value !== null && this.formControl.value !== undefined) {\n      // Es kann vorkommen, dass der initiale Wert nicht im ISO-Format angegeben ist.\n      // Dann muss der Wert noch umgewandelt werden.\n      this.updateDateValue(this.formControl.value);\n    } else if (this._initialValue !== null && this._initialValue !== undefined) {\n      // Vorhandenen Initialwert setzen\n      this.formControl.setValue(this._initialValue);\n    }\n  }\n\n  protected override updateValidators(validators: ValidatorFnType, checkRequiredValidator: boolean) {\n    if ((!Array.isArray(validators) && validators) || (Array.isArray(validators) && validators.length > 0)) {\n      if (!this.inForm) {\n        setTimeout(() => {\n          if (checkRequiredValidator) {\n            this._luxControlValidators = this.checkValidatorsContainRequired(validators);\n          }\n\n          this.formControl.setValidators(validators ?? null);\n          this.formControl.addValidators(this.dateTimeValidator);\n          this.formControl.updateValueAndValidity();\n        });\n      }\n    } else {\n      if (!this.inForm) {\n        setTimeout(() => {\n          if (checkRequiredValidator) {\n            this._luxControlValidators = this.checkValidatorsContainRequired(validators);\n          }\n          this.formControl.setValidators([this.dateTimeValidator]);\n          this.formControl.updateValueAndValidity();\n        });\n      }\n    }\n  }\n\n  private compareDateWithTime(first: Date, second: Date): number {\n    return (\n      this.dateTimeAdapter.compareDate(first, second) || first.getHours() - second.getHours() || first.getMinutes() - second.getMinutes()\n    );\n  }\n\n  private setISOValue(isoValue: string) {\n    setTimeout(() => {\n      let minOk = true;\n      if (this.min && isoValue && this.dateTimeAdapter.compareDate(new Date(isoValue), this.min) < 0) {\n        minOk = false;\n      }\n\n      let maxOk = true;\n      if (this.max && isoValue && this.dateTimeAdapter.compareDate(new Date(isoValue), this.max) > 0) {\n        maxOk = false;\n      }\n\n      if (minOk && maxOk) {\n        this.notifyFormValueChanged(isoValue);\n      }\n\n      // \"silently\" den FormControl auf den (potenziell) geänderten Wert aktualisieren\n      this.formControl.setValue(isoValue as any, {\n        emitEvent: false,\n        emitModelToViewChange: false,\n        emitViewToModelChange: false\n      });\n\n      if (!this.dateTimeInputValue && isoValue) {\n        // Per Hand dem Input-Element einen formatierten String übergeben\n        this.dateTimeInputValue = this.formatDateTime(isoValue);\n      }\n    });\n  }\n\n  private triggerOpenClose() {\n    if (this.luxOpened) {\n      this.dateTimeOverlayComponent?.open();\n    } else {\n      this.dateTimeOverlayComponent?.close();\n    }\n  }\n\n  private formatDateTime(date: any) {\n    return this.dateTimeAdapter.format(date, APP_DATE_TIME_FORMATS_AC.display.dateInput);\n  }\n\n  private parseDateTime(date: string) {\n    return this.dateTimeAdapter.parse(date, APP_DATE_TIME_FORMATS_AC.parse.dateInput);\n  }\n\n  private updateDateValue(value: any) {\n    if (typeof value === 'string') {\n      value = this.parseDateTime(value);\n    }\n\n    if (!value) {\n      this.setISOValue(value);\n      return;\n    }\n\n    // Sicherheitshalber noch einmal prüfen, kann vorkommen das ein unsinniger Wert eingetragen wird\n    // z.B. 'asdf', das führt zu InvalidDate's\n    if (LuxUtil.isDate(value)) {\n      this.setISOValue(value.toISOString());\n    }\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  (click)=\"!luxDisabled && !luxReadonly ? dateTimePickerInput.focus() : null\"\n  [luxFormComponent]=\"this\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  [formGroup]=\"formGroup\"\n  [luxLabelLongFormat]=\"luxLabelLongFormat\"\n  luxTagId=\"luxDateTimeWrapper\"\n  #datepickerFormControl\n>\n  <div class=\"lux-input-row-authentic\">\n    <input\n      matInput\n      luxTagIdHandler\n      [luxTagId]=\"luxTagId\"\n      [placeholder]=\"luxPlaceholder\"\n      [required]=\"luxRequired\"\n      [readonly]=\"luxReadonly\"\n      [formControl]=\"formControl\"\n      [autocomplete]=\"luxAutocomplete\"\n      (blur)=\"luxBlur.emit($event)\"\n      (focus)=\"onFocus($event)\"\n      (focusin)=\"onFocusIn($event)\"\n      (focusout)=\"onFocusOut($event)\"\n      [id]=\"uid\"\n      [luxAriaDescribedby]=\"descripedBy()\"\n      #dateTimePickerInput\n    />\n    @if (luxShowToggle) {\n    <mat-datepicker-toggle [disabled]=\"luxDisabled || luxReadonly\" [for]=\"datepicker\" [disableRipple]=\"true\">\n      <lux-icon\n        matDatepickerToggleIcon\n        luxIconName=\"lux-interface-calendar\"\n        luxPadding=\"0px\"\n        class=\"lux-datetimepicker-toggle-icon\"\n      ></lux-icon>\n    </mat-datepicker-toggle>\n    }\n    <lux-datetime-overlay-ac\n      [luxPickerInput]=\"dateTimePickerInput\"\n      [luxStartView]=\"luxStartView\"\n      [luxCustomFilter]=\"luxCustomFilter\"\n      [luxStartDate]=\"start\"\n      [luxStartTime]=\"luxStartTime\"\n      [luxMinDate]=\"min\"\n      [luxMaxDate]=\"max\"\n      (luxSelected)=\"onOk($event)\"\n      [selectedDate]=\"selectedDate\"\n      #datepicker\n    ></lux-datetime-overlay-ac>\n  </div>\n</lux-form-control-wrapper>\n}\n","export enum LuxFileErrorCause {\n  MaxSizeError = 'luxMaximumSize',\n  MaxFileCount = 'luxMaxFileCount',\n  ReadingFileError = 'luxReadingFile',\n  UploadFileError = 'luxUploadFile',\n  FileNotAccepted = 'luxUnacceptedFile',\n  MultipleForbidden = 'luxMultipleForbidden'\n}\n\nexport interface ILuxFileError {\n  cause: LuxFileErrorCause;\n  exception: any;\n  file?: File;\n}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { HttpClient, HttpEventType } from '@angular/common/http';\nimport { Directive, ElementRef, EventEmitter, HostBinding, HostListener, inject, Input, Output, ViewChild } from '@angular/core';\nimport { Validators } from '@angular/forms';\nimport { isObservable, Observable, throwError } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { LuxProgressModeType } from '../../lux-common/lux-progress/lux-progress.component';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { ILuxFileActionConfig } from '../lux-file/lux-file-model/lux-file-action-config.interface';\nimport { ILuxFileError, LuxFileErrorCause } from '../lux-file/lux-file-model/lux-file-error.interface';\nimport { ILuxFileObject } from '../lux-file/lux-file-model/lux-file-object.interface';\nimport { LuxFormComponentBase, LuxValidationErrors, ValidatorFnType } from './lux-form-component-base.class';\n\n@Directive()\nexport abstract class LuxFormFileBase<T = any> extends LuxFormComponentBase<T> {\n  protected http = inject(HttpClient);\n  protected liveAnnouncer = inject(LiveAnnouncer);\n\n  defaultReadFileDelay = 1000;\n\n  private _luxAccept = '';\n  protected _luxCustomActionConfigs: ILuxFileActionConfig[] = [];\n\n  progress = -1;\n  forceProgressIndeterminate = false;\n  displayClearErrorButton = false;\n\n  @ViewChild('downloadLink', { read: ElementRef, static: true }) downloadLink!: ElementRef;\n  @ViewChild('fileUpload', { read: ElementRef, static: true }) fileUploadInput!: ElementRef;\n\n  @Output() luxSelectedChange = new EventEmitter<T>();\n\n  @Input() luxUploadReportProgress = false;\n  @Input() luxContentsAsBlob = false;\n  @Input() luxTagId?: string;\n  @Input() luxMaxSizeMB = 10;\n  @Input() luxMaxFileCount = 100;\n  @Input() luxCapture = '';\n  @Input() luxUploadUrl = '';\n  @Input() luxDnDActive = true;\n  @Input() luxMaximumExtended = 6;\n\n  @HostBinding('class.lux-file-highlight') isDragActive = false;\n\n  @HostListener('dragover', ['$event']) onDragOver(dragEvent: DragEvent) {\n    if (this.isDnDAllowed()) {\n      this.handleDragOver(dragEvent);\n    }\n  }\n\n  @HostListener('dragleave', ['$event']) onDragLeave(dragEvent: DragEvent) {\n    if (this.isDnDAllowed()) {\n      this.handleDragLeave(dragEvent);\n    }\n  }\n\n  @HostListener('drop', ['$event']) onDrop(dragEvent: DragEvent) {\n    if (this.isDnDAllowed()) {\n      this.handleDrop(dragEvent);\n    }\n  }\n\n  get luxCustomActionConfigs(): ILuxFileActionConfig[] {\n    return this._luxCustomActionConfigs;\n  }\n\n  @Input() set luxCustomActionConfigs(config: ILuxFileActionConfig[]) {\n    if (config) {\n      this._luxCustomActionConfigs = config;\n    }\n  }\n\n  get luxSelected(): T {\n    return this.getValue();\n  }\n\n  @Input() set luxSelected(selectedFiles: T) {\n    this.setValue(selectedFiles);\n  }\n\n  get luxAccept(): any {\n    return this._luxAccept;\n  }\n\n  @Input() set luxAccept(accepts: any) {\n    if (!accepts) {\n      accepts = '';\n    }\n    this._luxAccept = Array.isArray(accepts) ? accepts.join(',') : accepts;\n  }\n\n  get progressMode(): LuxProgressModeType {\n    return (this.progress === 0 && !this.luxUploadReportProgress) || this.forceProgressIndeterminate ? 'indeterminate' : 'determinate';\n  }\n\n  get isProgressVisible(): boolean {\n    return this.progress >= 0 || this.forceProgressIndeterminate;\n  }\n\n  /**\n   * Wird beim Fokussieren des Elements aufgerufen und markiert das FormControl als \"touched\".\n   * @param focusEvent\n   */\n  onFocusIn(focusEvent: FocusEvent) {\n    this.formControl.markAsTouched();\n    this.luxFocusIn.emit(focusEvent);\n  }\n\n  /**\n   * Löst den Download der übergebenen Datei aus.\n   * @param file\n   */\n  downloadFile(file: ILuxFileObject | ILuxFileObject[]) {\n    this.formControl.markAsTouched();\n    const myFile: ILuxFileObject = Array.isArray(file) ? file[0] : file;\n    const downloadLink = this.downloadLink.nativeElement as HTMLAnchorElement;\n\n    // Workaround: Issue 505\n    // Damit Pdf-Dateien runtergeladen werden, wird der Mime-Type\n    // absichtlich auf 'application/pdf-download' gesetzt.\n    const downloadType = myFile.type === 'application/pdf' ? 'application/pdf-download' : myFile.type;\n\n    let dataAsBlob: Blob | null = null;\n    if (myFile.content instanceof Blob) {\n      dataAsBlob = new Blob([myFile.content], { type: downloadType });\n    } else {\n      let dataAsBase64 = myFile.content as string;\n      const index = dataAsBase64.indexOf(',');\n      if (index > 0) {\n        dataAsBase64 = dataAsBase64.substring(index + 1);\n      }\n\n      dataAsBlob = new Blob([LuxUtil.base64ToArrayBuffer(dataAsBase64)], { type: downloadType });\n    }\n\n    const url = window.URL.createObjectURL(dataAsBlob);\n    downloadLink.href = url;\n    downloadLink.download = myFile.name;\n    downloadLink.click();\n    window.URL.revokeObjectURL(url);\n\n    this.handleDownloadClick(myFile);\n  }\n\n  /**\n   * Löst den base64Callback der übergebenen Datei aus.\n   * Schreibt dann anschließend den Base64-String in die Datei.\n   * @param file\n   */\n  viewFile(file: ILuxFileObject) {\n    this.formControl.markAsTouched();\n    // Wenn die Datei bereits einen Base64-Wert besitzt, den onClick-Callback ausführen\n    if (file.content) {\n      this.handleViewFileClick(file);\n      return;\n    }\n    const callbackResult = file.contentCallback();\n    // Wenn der Callback ein Observable ist, dieses auflösen und dem File-Base64 zuweisen\n    if (isObservable(callbackResult)) {\n      (callbackResult as Observable<string>).pipe(take(1)).subscribe((content: any) => {\n        file.content = content;\n        this.handleViewFileClick(file);\n      });\n    } else {\n      // Wenn der Callback ein normaler String oder Promise ist, diesen auflösen und den File-Base64 aktualisieren\n      Promise.resolve(callbackResult as any).then((content: any) => {\n        file.content = content;\n        this.handleViewFileClick(file);\n      });\n    }\n  }\n\n  /**\n   * Wandelt File-Objekt zu LuxFileObjects um und versucht diese hochzuladen.\n   * Gibt ein Promise mit den neuen FileObjects zurück bzw. einen Fehler aus den internen Promises.\n   * @param files\n   */\n  async updateSelectedFiles(files: FileList | File[]) {\n    try {\n      let newFiles: ILuxFileObject[] = [];\n      await this.mapFilesToFileObjects(files).then((fileObjects: ILuxFileObject[]) => (newFiles = fileObjects));\n      await this.uploadFiles(newFiles);\n      this.handleUploadClick(newFiles);\n      this.formControl.markAsTouched();\n      this.formControl.markAsDirty();\n      return Promise.resolve(newFiles);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n  }\n\n  /**\n   * Stößt das Hochladen der Dateien zu einer bestimmten URL an.\n   * @param files\n   */\n  async uploadFiles(files: ILuxFileObject[] | ILuxFileObject | null) {\n    if (!this.luxUploadUrl) {\n      this.forceProgressIndeterminate = false;\n      return Promise.resolve();\n    }\n\n    if (this.luxUploadReportProgress) {\n      this.forceProgressIndeterminate = false;\n    }\n\n    this.progress = 0;\n    // Ansonsten die Dateien in einem FormData-Objekt sammeln und über den httpClient hochladen\n    const formData = new FormData();\n    let selectedFiles = [];\n    if (!files) {\n      selectedFiles = [];\n    } else if (!Array.isArray(files)) {\n      selectedFiles.push(files);\n    } else {\n      selectedFiles.push(...files);\n    }\n    selectedFiles.forEach((fileObject: ILuxFileObject) => {\n      formData.append(fileObject.name, fileObject.content!);\n    });\n\n    await new Promise<void>((resolve, reject) => {\n      const options: any = { responseType: 'blob' };\n\n      if (this.luxUploadReportProgress) {\n        options.reportProgress = true;\n        options.observe = 'events';\n      }\n\n      this.http.post(this.luxUploadUrl, formData, options).subscribe(\n        (event: any) => {\n          // wenn wir eine determinierte Fortschrittsanzeige haben, dann muss der Fortschritt auch korrekt abgefangen werden\n          if (this.luxUploadReportProgress) {\n            if (event.type === HttpEventType.UploadProgress) {\n              this.progress = Math.round((event.loaded / event.total) * 100);\n            } else if (event.type === HttpEventType.Response) {\n              resolve();\n            }\n          } else {\n            resolve();\n          }\n        },\n        (error) => {\n          this.logError(error);\n          // Für den Fall das der Upload fehlschlägt, melden wir einen Fehler am Component\n          reject(error);\n          return throwError(error);\n        }\n      );\n    }).then(\n      () => {\n        this.progress = -1;\n        this.forceProgressIndeterminate = false;\n        return Promise.resolve();\n      },\n      (error) => {\n        this.progress = -1;\n        this.forceProgressIndeterminate = false;\n        return Promise.reject({\n          cause: LuxFileErrorCause.UploadFileError,\n          exception: error,\n          file: files\n        });\n      }\n    );\n  }\n\n  /**\n   * Liest die übergebenen Dateien aus und erzeugt daraus ein Promise, welches abgefragt werden kann.\n   * Fängt potenzielle Fehler ab und gibt diese als abgelehnte Promises zurück.\n   * @param files\n   */\n  async mapFilesToFileObjects(files: FileList | File[]) {\n    const filesArray: File[] = Array.from(files);\n    const newFiles: ILuxFileObject[] = [];\n    for (const file of filesArray) {\n      if (!file) {\n        continue;\n      }\n\n      // Prüfen ob Dateigröße überschritten worden ist\n      if (this.getFileSizeInMB(file) > this.luxMaxSizeMB) {\n        return Promise.reject({\n          cause: LuxFileErrorCause.MaxSizeError,\n          exception: this.getMaxSizeErrorMessage(file),\n          file\n        });\n      }\n\n      // Prüfen ob der Dateityp \"accepted\" ist\n      const splitAccepted = this.luxAccept ? this.luxAccept.split(',') : [];\n      const splitFileEnding = file.name.split('.');\n      const fileEnding = `.${splitFileEnding[splitFileEnding.length - 1]}`;\n      let isAccepted: boolean = splitAccepted.length === 0;\n      splitAccepted.forEach((accepted: string) => {\n        if (accepted) {\n          accepted = accepted.toLocaleLowerCase();\n\n          if (accepted === '.txt') {\n            accepted = 'text/plain';\n          }\n        }\n\n        if (!isAccepted) {\n          // Für spezielle Wildcards nutzen wir diese Umwandlung\n          switch (accepted) {\n            case 'image/*':\n              accepted = 'image';\n              break;\n            case 'video/*':\n              accepted = 'video';\n              break;\n            case 'audio/*':\n              accepted = 'audio';\n              break;\n          }\n\n          if (accepted === fileEnding.toLocaleLowerCase() || file.type.toLocaleLowerCase().indexOf(accepted) > -1) {\n            isAccepted = true;\n          }\n        }\n      });\n\n      if (!isAccepted) {\n        return Promise.reject({\n          cause: LuxFileErrorCause.FileNotAccepted,\n          exception: this.getFileNotAcceptedMessage(file),\n          file\n        });\n      }\n\n      if (this.luxContentsAsBlob) {\n        // Wenn direkt die Blobs genutzt werden sollen, einfach die Datei als content merken\n        newFiles.push({ name: file.name, content: file as Blob, type: file.type, size: file.size });\n      } else {\n        // Das Auslesen der Datei anstoßen, wenn erfolgreich, wird die Datei zu selectedFiles hinzugefügt.\n        // Bei einem Fehler wird das Promise rejected und gibt einen Fehler zurück.\n        await this.readFile(file)\n          .then((content: any) => {\n            newFiles.push({ name: file.name, content, type: file.type, size: file.size });\n          })\n          .catch((error) =>\n            Promise.reject({\n              cause: LuxFileErrorCause.ReadingFileError,\n              exception: error,\n              file\n            })\n          );\n      }\n    }\n\n    // Das Array mit den neuen Dateien zurückgeben\n    return Promise.resolve(newFiles);\n  }\n\n  /**\n   * Liest (asynchron) den Base64-String aus der übergebenen Datei heraus bzw. gibt den Fehler zurück, wenn einer\n   * aufgetreten ist.\n   * @param file\n   */\n  readFile(file: File) {\n    return new Promise((resolve, reject) => {\n      const reader = new FileReader();\n\n      reader.onload = (fileData) => resolve(fileData.target!.result);\n      reader.onerror = (error) => reject(error);\n      reader.readAsDataURL(file);\n    });\n  }\n\n  /**\n   * Wird beim Drag-Over über dem LuxFormControl aufgerufen.\n   * @param dragEvent\n   */\n  handleDragOver(dragEvent: DragEvent) {\n    this.isDragActive = true;\n    dragEvent.stopPropagation();\n    dragEvent.preventDefault();\n\n    // Der Drop Effect wird nur gesetzt, wenn die Property auch\n    // vorhanden ist. In den Tests gibt es keinen Drop Effect.\n    if (dragEvent.dataTransfer && dragEvent.dataTransfer.dropEffect) {\n      dragEvent.dataTransfer.dropEffect = 'copy';\n    }\n  }\n\n  /**\n   * Wird beim Drag-Leave über dem LuxFormControl aufgerufen.\n   * @param dragEvent\n   */\n  handleDragLeave(dragEvent: DragEvent) {\n    this.isDragActive = false;\n\n    dragEvent.stopPropagation();\n    dragEvent.preventDefault();\n  }\n\n  /**\n   * Wird beim Drop eines/mehrerer gezogener Elemente über dem LuxFormControl aufgerufen und löst\n   * die Auswahl-Methoden für die entsprechenden Dateien aus.\n   * @param dragEvent\n   */\n  handleDrop(dragEvent: DragEvent) {\n    this.forceProgressIndeterminate = true;\n    this.isDragActive = false;\n    dragEvent.stopPropagation();\n    dragEvent.preventDefault();\n\n    if (dragEvent.dataTransfer) {\n      this.selectFiles(dragEvent.dataTransfer.files);\n    }\n  }\n\n  logError(error: any) {\n    console.error(error);\n  }\n\n  abstract selectFiles(files: FileList | File[]): void;\n\n  abstract resetSelected(): void;\n\n  abstract handleUploadClick(files: ILuxFileObject[]): void;\n\n  abstract handleDownloadClick(file: ILuxFileObject): void;\n\n  abstract handleViewFileClick(file: ILuxFileObject): void;\n\n  /**\n   * Entfernt die in dieser Component gesetzten Fehlermeldungen.\n   */\n  protected clearFormControlErrors() {\n    // Das aktuelle Fehlerobjekt auslesen\n    let errors = this.formControl.errors;\n\n    if (errors) {\n      // Die komponentenspezifischen Fehler aus dem Objekt entfernen\n      for (const cause of Object.values(LuxFileErrorCause)) {\n        delete errors[cause];\n      }\n      // Falls errors ein leeres Objekt ist, nehmen wir stattdessen null\n      errors = Object.keys(errors).length === 0 ? null : errors;\n      // Das neue Fehlerobjekt in das FormControl schreiben\n      this.formControl.setErrors(errors);\n    }\n  }\n\n  /**\n   * Aktualisiert das Fehlerobjekt am FormControl, damit eine entsprechende Fehlermeldung angezeigt werden kann.\n   * Leert die Anzeige und gibt Events mit leerem Array aus.\n   * @param error\n   */\n  protected setFormControlErrors(error: ILuxFileError) {\n    this.forceProgressIndeterminate = false;\n    // Vorherige definierte Fehler entfernen\n    this.clearFormControlErrors();\n    // Hier aktualisieren wir das Fehlerobjekt an dem zugrunde liegenden FormControl dieser Component\n    const errors: any = {};\n    errors[error.cause] = { file: error.file };\n\n    this.formControl.setErrors(errors);\n  }\n\n  /**\n   * Berechnet die Größe der übergebenen Datei in MB.\n   * @param file\n   */\n  protected getFileSizeInMB(file: File) {\n    return file.size / 1_048_576;\n  }\n\n  /**\n   * Gibt die Message für Überschreitung der maximalen Dateigröße zurück.\n   * @param file\n   */\n  protected getMaxSizeErrorMessage(file: File): string {\n    return this.tService.translate('luxc.form-file-base.error_message.max_file_size', {\n      fileName: file.name,\n      fileSizeInMB: (+this.getFileSizeInMB(file).toFixed(2)).toString(),\n      maxSizeMB: (+this.luxMaxSizeMB.toFixed(2)).toString()\n    });\n  }\n\n  /**\n   * Gibt die Message für Überschreitung der maximalen Dateianzahl zurück.\n   * @param file\n   */\n  protected getMaxFileCountMessage(): string {\n    return this.tService.translate('luxc.form-file-base.error_message.max_file_count', { maxFileCount: this.luxMaxFileCount.toString() });\n  }\n\n  /**\n   * Gibt die Message für Fehler beim Auslesen einer Datei zurück.\n   * @param file\n   */\n  protected getReadingFileErrorMessage(file: File): string {\n    return this.tService.translate('luxc.form-file-base.error_message.read_error', { fileName: file.name });\n  }\n\n  /**\n   * Gibt die Message für Fehler beim Upload einer Datei zurück.\n   * @param files\n   */\n  protected getUploadFileErrorMessage(files: File[]): string {\n    if (!files) {\n      return this.tService.translate('luxc.form-file-base.error_message.upload.no_files');\n    } else if (files.length === 1) {\n      return this.tService.translate('luxc.form-file-base.error_message.upload.with_file');\n    } else {\n      return this.tService.translate('luxc.form-file-base.error_message.upload.with_files');\n    }\n  }\n\n  /**\n   * Gibt die Message für falsche Dateitypen zurück.\n   * @param file\n   */\n  protected getFileNotAcceptedMessage(file: File): string {\n    return this.tService.translate('luxc.form-file-base.error_message.not_accepted', { fileName: file.name });\n  }\n\n  /**\n   * Gibt die Message für falsche Dateitypen zurück.\n   */\n  protected getMultipleForbiddenMessage(): string {\n    return this.tService.translate('luxc.form-file-base.error_message.only_one_file');\n  }\n\n  /**\n   * Meldet dem ScreenReader, dass gerade eine/mehrere Dateien bearbeitet werden (Ladeanzeige).\n   * @param multiple\n   */\n  protected announceFileProcess(multiple: boolean) {\n    if (multiple) {\n      this.liveAnnouncer.announce(\n        this.tService.translate('luxc.form-file-base.upload.files.announce'),\n        'assertive'\n      );\n    } else {\n      this.liveAnnouncer.announce(\n        this.tService.translate('luxc.form-file-base.upload.file.announce'),\n        'assertive'\n      );\n    }\n  }\n\n  /**\n   * Meldet dem ScreenReader, dass alle Dateien entfernt werden sollen.\n   */\n  protected announceAllFilesRemove() {\n    this.liveAnnouncer.announce(this.tService.translate('luxc.form-file-base.delete.all_files.announce'), 'assertive');\n  }\n\n  /**\n   * Meldet dem ScreenReader, dass eine bestimmte Datei entfernt werden soll.\n   * @param fileName\n   */\n  protected announceFileRemove(fileName: string) {\n    this.liveAnnouncer.announce(\n      this.tService.translate('luxc.form-file-base.delete.one_file.announce', { fileName }),\n      'assertive'\n    );\n  }\n\n  /**\n   * Gibt wieder, ob Drag-and-Drop gerade aktiv und möglich ist.\n   */\n  private isDnDAllowed(): boolean {\n    return this.luxDnDActive && !this.luxDisabled && !this.luxReadonly;\n  }\n\n  noop() {}\n\n  protected override errorMessageModifier(value: any, errors: LuxValidationErrors): string | undefined {\n    if (errors[LuxFileErrorCause.MaxSizeError]) {\n      return this.getMaxSizeErrorMessage(errors[LuxFileErrorCause.MaxSizeError].file);\n    } else if (errors[LuxFileErrorCause.MaxFileCount]) {\n      return this.getMaxFileCountMessage();\n    } else if (errors[LuxFileErrorCause.ReadingFileError]) {\n      return this.getReadingFileErrorMessage(errors[LuxFileErrorCause.ReadingFileError].file);\n    }else if (errors[LuxFileErrorCause.UploadFileError]) {\n      return this.getUploadFileErrorMessage(errors[LuxFileErrorCause.UploadFileError].file);\n    } else if (errors[LuxFileErrorCause.FileNotAccepted]) {\n      return this.getFileNotAcceptedMessage(errors[LuxFileErrorCause.FileNotAccepted].file);\n    } else if (errors[LuxFileErrorCause.MultipleForbidden]) {\n      return this.getMultipleForbiddenMessage();\n    }\n\n    return undefined;\n  }\n\n  protected override notifyFormValueChanged() {\n    this.luxSelectedChange.emit(this.luxSelected);\n\n    // Wir leeren nach jedem Value-Change das Input, da wir das FormControl bereits als SSoT besitzen\n    // und das Input durch den Browser gelegentlich sonst geblockt werden (wenn eine Datei ausgewählt worden ist)\n    this.fileUploadInput.nativeElement.value = null;\n  }\n\n  protected override updateValidators(validators: ValidatorFnType, checkRequiredValidator: boolean) {\n    if (!validators && this.luxRequired) {\n      validators = Validators.required;\n    }\n\n    super.updateValidators(validators, checkRequiredValidator);\n  }\n\n  protected override initFormValueSubscription() {\n    this._formValueChangeSub = this.formControl.valueChanges.subscribe(() => {\n      // Wenn die Dateien erfolgreich gelesen werden konnten, die (spezifischen) Fehler entfernen\n      this.clearFormControlErrors();\n    });\n\n    if (this._initialValue !== null && this._initialValue !== undefined) {\n      this.setValue(this._initialValue);\n    }\n  }\n\n  protected override fetchErrorMessage(): string | undefined {\n    const result = super.fetchErrorMessage();\n\n    this.updateClearErrorButton();\n\n    return result;\n  }\n\n  private updateClearErrorButton() {\n    if (this.formControl.errors) {\n      const errorKeys: string[] = Object.keys(this.formControl.errors);\n      const controlKeys: string[] = Object.values(LuxFileErrorCause);\n\n      this.displayClearErrorButton = errorKeys.filter((value) => controlKeys.includes(value)).length > 0;\n      if (this.displayClearErrorButton) {\n        this.fileUploadInput.nativeElement.value = null;\n      }\n    }\n  }\n\n  onCloseErrorMessage() {\n    this.errorMessage = undefined;\n    this.formControl.updateValueAndValidity();\n  }\n}\n","import { Directive, ElementRef, Input, Renderer2, inject } from '@angular/core';\n\n@Directive({ selector: '[luxFileCapture]' })\nexport class LuxFileCaptureDirective {\n  protected elementRef = inject(ElementRef);\n  protected renderer = inject(Renderer2);\n\n  _luxFileCapture = '';\n\n  @Input()\n  get luxFileCapture() {\n    return this._luxFileCapture;\n  }\n\n  set luxFileCapture(label: string) {\n    this._luxFileCapture = label;\n\n    if (this._luxFileCapture) {\n      this.renderer.setAttribute(this.elementRef.nativeElement, 'capture', this._luxFileCapture);\n    } else {\n      this.renderer.removeAttribute(this.elementRef.nativeElement, 'capture');\n    }\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { LuxProgressComponent, LuxProgressModeType } from '../../../../lux-common/lux-progress/lux-progress.component';\n\n/**\n * Diese Component ist nur eine leichte Ergänzung zu LuxProgress und wird nicht vom Modul exportiert.\n */\n@Component({\n  selector: 'lux-file-progress',\n  templateUrl: './lux-file-progress.component.html',\n  styleUrls: ['./lux-file-progress.component.scss'],\n  imports: [LuxProgressComponent]\n})\nexport class LuxFileProgressComponent {\n  @Input() luxProgress = 0;\n  @Input() luxMode: LuxProgressModeType = 'indeterminate';\n\n  constructor() {}\n}\n","<div class=\"lux-file-overlay lux-flex lux-flex-direction-col lux-place-content-center lux-items-center\">\n  <lux-progress luxType=\"Spinner\" [luxValue]=\"luxProgress\" [luxMode]=\"luxMode\"></lux-progress>\n</div>\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatInput } from '@angular/material/input';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxMenuItemComponent } from '../../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxMenuComponent } from '../../../lux-action/lux-menu/lux-menu.component';\nimport { LuxAriaDescribedbyDirective } from '../../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxTagIdDirective } from '../../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxUtil } from '../../../lux-util/lux-util';\nimport { LuxFormControlWrapperComponent } from '../../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxValidationErrors } from '../../lux-form-model/lux-form-component-base.class';\nimport { LuxFormFileBase } from '../../lux-form-model/lux-form-file-base.class';\nimport { ILuxFileActionConfig } from '../lux-file-model/lux-file-action-config.interface';\nimport { LuxFileCaptureDirective } from '../lux-file-model/lux-file-capture.directive';\nimport { ILuxFileError } from '../lux-file-model/lux-file-error.interface';\nimport { ILuxFileObject } from '../lux-file-model/lux-file-object.interface';\nimport { LuxFileProgressComponent } from '../lux-file-subcomponents/lux-file-progress/lux-file-progress.component';\n\n@Component({\n  selector: 'lux-file-input-ac',\n  templateUrl: './lux-file-input-ac.component.html',\n  styleUrls: ['./lux-file-input-ac.component.scss'],\n  imports: [\n    LuxFormControlWrapperComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatInput,\n    LuxFileCaptureDirective,\n    LuxFileProgressComponent,\n    LuxTagIdDirective,\n    LuxAriaDescribedbyDirective,\n    LuxMenuItemComponent,\n    LuxMenuComponent,\n    TranslocoPipe\n  ]\n})\nexport class LuxFileInputAcComponent extends LuxFormFileBase<ILuxFileObject | null> implements AfterViewInit {\n  @ViewChild('visibleInput', { read: ElementRef }) visibleInput!: ElementRef;\n\n  @Output() luxBlur = new EventEmitter<FocusEvent>();\n  @Output() luxFocus = new EventEmitter<FocusEvent>();\n\n  @Input() luxPlaceholder = '';\n  @Input() luxClearOnError = true;\n  @Input() luxNoLabels = false;\n  @Input() luxNoTopLabel = false;\n  @Input() luxNoBottomLabel = false;\n\n  focused = false;\n\n  _luxUploadActionConfig: ILuxFileActionConfig = {\n    disabled: false,\n    hidden: false,\n    iconName: 'lux-programming-cloud-upload',\n    label: ''\n  };\n  _luxDeleteActionConfig: ILuxFileActionConfig = {\n    disabled: false,\n    hidden: false,\n    iconName: 'lux-interface-delete-bin-2',\n    label: ''\n  };\n  _luxViewActionConfig: ILuxFileActionConfig = {\n    disabled: false,\n    hidden: true,\n    iconName: 'lux-interface-edit-view',\n    label: ''\n  };\n  _luxDownloadActionConfig: ILuxFileActionConfig = {\n    disabled: false,\n    hidden: true,\n    iconName: 'lux-interface-download-button-2',\n    label: ''\n  };\n\n  get luxUploadActionConfig(): ILuxFileActionConfig {\n    return this._luxUploadActionConfig;\n  }\n\n  @Input() set luxUploadActionConfig(config: ILuxFileActionConfig) {\n    if (config) {\n      this._luxUploadActionConfig = config;\n    }\n  }\n\n  get luxDeleteActionConfig(): ILuxFileActionConfig {\n    return this._luxDeleteActionConfig;\n  }\n\n  @Input() set luxDeleteActionConfig(config: ILuxFileActionConfig) {\n    if (config) {\n      this._luxDeleteActionConfig = config;\n    }\n  }\n\n  get luxViewActionConfig(): ILuxFileActionConfig {\n    return this._luxViewActionConfig;\n  }\n\n  @Input() set luxViewActionConfig(config: ILuxFileActionConfig) {\n    if (config) {\n      this._luxViewActionConfig = config;\n    }\n  }\n\n  get luxDownloadActionConfig(): ILuxFileActionConfig {\n    return this._luxDownloadActionConfig;\n  }\n\n  @Input() set luxDownloadActionConfig(config: ILuxFileActionConfig) {\n    if (config) {\n      this._luxDownloadActionConfig = config;\n    }\n  }\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('visibleInput', this.visibleInput);\n  }\n\n  onSelectFiles(target: EventTarget | null) {\n    const fileList = target ? (target as HTMLInputElement).files : null;\n    this.selectFiles(fileList ? Array.from(fileList) : []);\n  }\n\n  clearFile() {\n    this.formControl.markAsTouched();\n    this.formControl.markAsDirty();\n\n    const deletedFile = this.luxSelected;\n\n    this.resetSelected();\n    this.notifyFormValueChanged();\n    this.clearFormControlErrors();\n    if (deletedFile && this.luxDeleteActionConfig.onClick) {\n      this.luxDeleteActionConfig.onClick(deletedFile);\n      this.announceFileRemove(deletedFile.name);\n    }\n  }\n\n  resetSelected() {\n    this.luxSelected = null;\n  }\n\n  handleViewFileClick(file: ILuxFileObject) {\n    if (file.content && this.luxViewActionConfig.onClick) {\n      this.luxViewActionConfig.onClick(file);\n    }\n  }\n\n  handleDownloadClick(file: ILuxFileObject) {\n    if (this.luxDownloadActionConfig.onClick) {\n      this.luxDownloadActionConfig.onClick(file);\n    }\n  }\n\n  handleUploadClick(files: ILuxFileObject[]) {\n    if (this.luxUploadActionConfig.onClick) {\n      this.luxUploadActionConfig.onClick(files[0]);\n    }\n  }\n\n  /**\n   * Wird bei der Auswahl von Dateien (Dialog oder DnD) aufgerufen.\n   * Aktualisiert die aktuell selektierten Dateien, stößt einen Upload an, handelt Fehlermeldungen und\n   * emittet die entsprechenden Events.\n   * @param files\n   */\n  selectFiles(files: FileList | File[]) {\n    this.formControl.markAsTouched();\n    this.formControl.markAsDirty();\n    this.forceProgressIndeterminate = true;\n    this.announceFileProcess(files && files.length > 1);\n\n    if (!files || files.length === 0) {\n      this.forceProgressIndeterminate = false;\n      return;\n    }\n\n    // Timeout, um Flackern durch Progress zu vermeiden\n    setTimeout(() => {\n      this.updateSelectedFiles(files).then(\n        (newFiles: ILuxFileObject[]) => {\n          this.luxSelected = newFiles[0];\n          this.notifyFormValueChanged();\n        },\n        (error) => this.setFormControlErrors(error)\n      );\n    }, this.defaultReadFileDelay);\n  }\n\n  onFocus(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocus.emit(e);\n  }\n\n  override onFocusIn(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocusIn.emit(e);\n  }\n\n  onFocusOut(e: FocusEvent) {\n    this.focused = false;\n    this.luxFocusOut.emit(e);\n  }\n\n  descripedBy() {\n    if (this.errorMessage) {\n      return this.uid + '-error';\n    } else {\n      return (this.formHintComponent || this.luxHint) && (!this.luxHintShowOnlyOnFocus || (this.luxHintShowOnlyOnFocus && this.focused))\n        ? this.uid + '-hint'\n        : undefined;\n    }\n  }\n\n  protected override errorMessageModifier(value: any, errors: LuxValidationErrors): string | undefined {\n    if (errors['required']) {\n      return this.tService.translate('luxc.file-input.error_message.required');\n    }\n    return super.errorMessageModifier(value, errors);\n  }\n\n  protected override setFormControlErrors(error: ILuxFileError) {\n    if (this.luxClearOnError) {\n      this.luxSelected = null;\n    }\n\n    super.setFormControlErrors(error);\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  (click)=\"!luxDisabled && !luxReadonly ? visibleInput.focus() : null\"\n  [luxFormComponent]=\"this\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  [formGroup]=\"formGroup\"\n  [luxLabelLongFormat]=\"luxLabelLongFormat\"\n  [luxDisplayClearErrorButton]=\"displayClearErrorButton\"\n  luxTagId=\"luxFileInputWrapper\"\n>\n  <div class=\"lux-file-container lux-input-row-authentic\">\n    <!-- Das Input ist nur für die visuelle Darstellung der ausgewählten Dateien zuständig -->\n    <input\n      class=\"lux-file-visible-input lux-crop\"\n      matInput\n      luxTagIdHandler\n      type=\"text\"\n      autocomplete=\"off\"\n      [luxTagId]=\"luxTagId\"\n      [placeholder]=\"luxPlaceholder\"\n      [required]=\"luxRequired\"\n      [readonly]=\"true\"\n      [id]=\"uid\"\n      [value]=\"(luxSelected?.namePrefix ?? '') + (luxSelected?.name ?? '') + (luxSelected?.nameSuffix ?? '')\"\n      (blur)=\"luxBlur.emit($event)\"\n      (focus)=\"onFocus($event)\"\n      (focusin)=\"onFocusIn($event)\"\n      (focusout)=\"onFocusOut($event)\"\n      [luxAriaDescribedby]=\"descripedBy()\"\n      [attr.aria-disabled]=\"luxDisabled ? 'true' : null\"\n      #visibleInput\n    />\n    <div class=\"lux-file-menu-container\">\n      <lux-menu\n        luxMenuIconName=\"lux-interface-setting-menu-vertical\"\n        luxTagId=\"{{ 'lux-file-input-actions' }}\"\n        [luxMenuItemFixWidth]=\"32\"\n        [luxMaximumExtended]=\"luxMaximumExtended\"\n        [luxToggleDisabled]=\"luxDisabled || luxReadonly\"\n        [luxDisplayExtended]=\"true\"\n      >\n        <lux-menu-item\n          luxTagId=\"lux-file-view\"\n          [luxIconName]=\"luxViewActionConfig.iconName\"\n          [luxDisabled]=\"luxViewActionConfig.disabled || luxDisabled || !luxSelected || luxReadonly\"\n          luxLabel=\"{{ luxViewActionConfig.label || ('luxc.form-file-base.view.action.lbl' | transloco) }}\"\n          [luxHideLabelIfExtended]=\"true\"\n          [luxAlwaysVisible]=\"true\"\n          [luxPrio]=\"luxViewActionConfig.prio ? luxViewActionConfig.prio : 10\"\n          luxColor=\"primary\"\n          (luxClicked)=\"viewFile(luxSelected!)\"\n          [luxHidden]=\"!!luxViewActionConfig.hidden\"\n        >\n        </lux-menu-item>\n        <lux-menu-item\n          luxTagId=\"lux-file-download\"\n          [luxIconName]=\"luxDownloadActionConfig.iconName\"\n          [luxDisabled]=\"luxDownloadActionConfig.disabled || luxDisabled || !luxSelected || luxReadonly\"\n          luxLabel=\"{{ luxDownloadActionConfig.label || ('luxc.form-file-base.download.action.lbl' | transloco) }}\"\n          [luxHideLabelIfExtended]=\"true\"\n          [luxAlwaysVisible]=\"true\"\n          [luxPrio]=\"luxDownloadActionConfig.prio ? luxDownloadActionConfig.prio : 20\"\n          luxColor=\"primary\"\n          (luxClicked)=\"downloadFile(luxSelected!)\"\n          [luxHidden]=\"!!luxDownloadActionConfig.hidden\"\n        >\n        </lux-menu-item>\n        <lux-menu-item\n          luxTagId=\"lux-file-remove\"\n          [luxIconName]=\"luxDeleteActionConfig.iconName\"\n          [luxDisabled]=\"!luxSelected || luxDisabled || luxDeleteActionConfig.disabled || luxReadonly\"\n          luxLabel=\"{{ luxDeleteActionConfig.label || ('luxc.form-file-base.delete.action.lbl' | transloco) }}\"\n          [luxHideLabelIfExtended]=\"true\"\n          [luxAlwaysVisible]=\"true\"\n          [luxPrio]=\"luxDeleteActionConfig.prio ? luxDeleteActionConfig.prio : 30\"\n          luxColor=\"primary\"\n          (luxClicked)=\"clearFile()\"\n          [luxHidden]=\"!!luxDeleteActionConfig.hidden\"\n        >\n        </lux-menu-item>\n        <lux-menu-item\n          luxTagId=\"lux-file-upload\"\n          [luxIconName]=\"luxUploadActionConfig.iconName\"\n          [luxDisabled]=\"luxUploadActionConfig.disabled || luxDisabled || luxReadonly\"\n          luxLabel=\"{{ luxUploadActionConfig.label || ('luxc.form-file-base.upload.action.lbl' | transloco) }}\"\n          [luxHideLabelIfExtended]=\"true\"\n          [luxAlwaysVisible]=\"true\"\n          [luxPrio]=\"luxUploadActionConfig.prio ? luxUploadActionConfig.prio : 40\"\n          luxColor=\"primary\"\n          (luxClicked)=\"fileUpload.click()\"\n          [luxHidden]=\"!!luxUploadActionConfig.hidden\"\n        >\n        </lux-menu-item>\n        @for (customConfig of luxCustomActionConfigs; track customConfig; let i = $index) {\n        <lux-menu-item\n          luxTagId=\"lux-file-list-entry-custom{{ i }}\"\n          [luxIconName]=\"customConfig.iconName\"\n          [luxDisabled]=\"customConfig.disabled || luxDisabled || luxReadonly || !luxSelected\"\n          [luxLabel]=\"customConfig.label\"\n          [luxHideLabelIfExtended]=\"true\"\n          [luxPrio]=\"customConfig.prio ? customConfig.prio : 50 + i\"\n          [luxAlwaysVisible]=\"true\"\n          luxColor=\"primary\"\n          (luxClicked)=\"customConfig.onClick ? customConfig.onClick(luxSelected!) : noop()\"\n          [luxHidden]=\"!!customConfig.hidden\"\n        >\n        </lux-menu-item>\n        }\n      </lux-menu>\n    </div>\n  </div>\n</lux-form-control-wrapper>\n}\n\n<!-- Das tatsächliche Input-Element für die File-Auswahl -->\n<input\n  class=\"lux-file-input\"\n  type=\"file\"\n  [multiple]=\"false\"\n  [accept]=\"luxAccept\"\n  [luxFileCapture]=\"luxCapture\"\n  [required]=\"luxRequired\"\n  (change)=\"onSelectFiles($event.target)\"\n  #fileUpload\n/>\n\n<!-- Download-Node -->\n<a class=\"lux-file-download-anchor\" aria-hidden=\"true\" download=\"\" #downloadLink></a>\n\n<!-- Ladeanzeige für den File-Upload -->\n@if (isProgressVisible) {\n<lux-file-progress [luxMode]=\"progressMode\" [luxProgress]=\"progress\"> </lux-file-progress>\n}\n","import { Component, inject } from '@angular/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../../../../lux-action/lux-button/lux-button.component';\nimport { LuxTextboxComponent } from \"../../../../lux-common/lux-textbox/lux-textbox.component\";\nimport { LuxDialogRef } from '../../../../lux-popups/lux-dialog/lux-dialog-model/lux-dialog-ref.class';\nimport { LuxDialogActionsComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-actions.component';\nimport { LuxDialogContentComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-content.component';\nimport { LuxDialogTitleComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-title.component';\nimport { LuxDialogStructureComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure.component';\n\n@Component({\n  selector: 'lux-lux-file-replace-dialog',\n  templateUrl: './lux-file-replace-dialog.component.html',\n  styleUrls: ['./lux-file-replace-dialog.component.scss'],\n  imports: [LuxDialogStructureComponent, LuxDialogTitleComponent, LuxDialogContentComponent, LuxDialogActionsComponent, LuxButtonComponent, LuxTextboxComponent, TranslocoPipe]\n})\nexport class LuxFileReplaceDialogComponent {\n  luxDialogRef = inject<LuxDialogRef<{ multiple: boolean, deleteProtection: boolean }>>(LuxDialogRef);\n}\n","<lux-dialog-structure>\n  <lux-dialog-title class=\"file-upload-dialog-title-container file-replace-dialog-title-container\">\n    @if (luxDialogRef.data.multiple) {\n    <div class=\"file-upload-dialog-title file-replace-dialog-title\">\n      {{ 'luxc.file.replace.dialog.title.multiple' | transloco }}\n    </div>\n    } @if (!luxDialogRef.data.multiple) {\n    <div class=\"file-upload-dialog-title file-replace-dialog-title\">\n      {{ 'luxc.file.replace.dialog.title' | transloco }}\n    </div>\n    }\n  </lux-dialog-title>\n  <lux-dialog-content class=\"file-upload-dialog-content-container file-replace-dialog-content-container\">\n    @if (luxDialogRef.data.multiple && !luxDialogRef.data.deleteProtection) {\n    <p class=\"file-upload-dialog-content-text file-replace-dialog-content-text\">\n      {{ 'luxc.file.replace.dialog.content.multiple' | transloco }}\n    </p>\n    } @if (!luxDialogRef.data.multiple && !luxDialogRef.data.deleteProtection) {\n    <p class=\"file-upload-dialog-content-text file-replace-dialog-content-text\">\n      {{ 'luxc.file.replace.dialog.content' | transloco }}\n    </p>\n    } @if (luxDialogRef.data.deleteProtection) {\n    <lux-textbox class=\"file-upload-dialog-content-delete-protection file-replace-dialog-content-delete-protection\" luxColor=\"red\"\n      >{{ 'luxc.file.replace.dialog.deleteprotection' | transloco }}</lux-textbox\n    >\n    }\n  </lux-dialog-content>\n  <lux-dialog-actions class=\"lux-flex lux-flex-wrap\">\n    <lux-button\n      luxLabel=\"{{ 'luxc.file.replace.dialog.cancel.lbl' | transloco }}\"\n      luxColor=\"primary\"\n      [luxStroked]=\"true\"\n      (luxClicked)=\"luxDialogRef.closeDialog(false)\"\n      class=\"lux-mr-4\"\n    ></lux-button>\n    <lux-button\n      luxLabel=\"{{ 'luxc.file.replace.dialog.replace.lbl' | transloco }}\"\n      [luxDisabled]=\"luxDialogRef.data.deleteProtection\"\n      luxColor=\"primary\"\n      [luxFlat]=\"true\"\n      (luxClicked)=\"luxDialogRef.closeDialog(true)\"\n    ></lux-button>\n  </lux-dialog-actions>\n</lux-dialog-structure>\n","import { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewChecked,\n  AfterViewInit,\n  Component,\n  ElementRef,\n  Input,\n  OnDestroy,\n  QueryList,\n  ViewChild,\n  ViewChildren,\n  inject\n} from '@angular/core';\nimport { MatError, MatHint } from '@angular/material/form-field';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxButtonComponent } from '../../../lux-action/lux-button/lux-button.component';\nimport { LuxMenuItemComponent } from '../../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxMenuComponent } from '../../../lux-action/lux-menu/lux-menu.component';\nimport { LuxAriaInvalidDirective } from '../../../lux-directives/lux-aria/lux-aria-invalid.directive';\nimport { LuxAriaLabelDirective } from '../../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxIconComponent } from '../../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxCardActionsComponent } from '../../../lux-layout/lux-card/lux-card-subcomponents/lux-card-actions.component';\nimport { LuxCardContentComponent } from '../../../lux-layout/lux-card/lux-card-subcomponents/lux-card-content.component';\nimport { LuxCardInfoComponent } from '../../../lux-layout/lux-card/lux-card-subcomponents/lux-card-info.component';\nimport { LuxCardComponent } from '../../../lux-layout/lux-card/lux-card.component';\nimport { LuxDividerComponent } from '../../../lux-layout/lux-divider/lux-divider.component';\nimport { ILuxDialogConfig } from '../../../lux-popups/lux-dialog/lux-dialog-model/lux-dialog-config.interface';\nimport { LuxDialogService } from '../../../lux-popups/lux-dialog/lux-dialog.service';\nimport { LuxValidationErrors } from '../../lux-form-model/lux-form-component-base.class';\nimport { LuxFormFileBase } from '../../lux-form-model/lux-form-file-base.class';\nimport { ILuxFileActionConfig } from '../lux-file-model/lux-file-action-config.interface';\nimport { LuxFileCaptureDirective } from '../lux-file-model/lux-file-capture.directive';\nimport { LuxFileErrorCause } from '../lux-file-model/lux-file-error.interface';\nimport { ILuxFileListDeleteActionConfig, ILuxFilesListActionConfig } from '../lux-file-model/lux-file-list-action-config.interface';\nimport { ILuxFileObject } from '../lux-file-model/lux-file-object.interface';\nimport { LuxFileProgressComponent } from '../lux-file-subcomponents/lux-file-progress/lux-file-progress.component';\nimport { LuxFileReplaceDialogComponent } from '../lux-file-subcomponents/lux-file-replace-dialog/lux-file-replace-dialog.component';\n\n/**\n * @deprecated Diese Klasse ist veraltet und sollte nicht mehr verwendet werden.\n * Verwende stattdessen `LuxFileUploadComponent`.\n */\n@Component({\n  selector: 'lux-file-list',\n  templateUrl: './lux-file-list.component.html',\n  styleUrls: ['./lux-file-list.component.scss'],\n  imports: [\n    NgClass,\n    MatHint,\n    NgTemplateOutlet,\n    MatError,\n    NgStyle,\n    LuxFileCaptureDirective,\n    LuxFileProgressComponent,\n    LuxAriaLabelDirective,\n    LuxAriaInvalidDirective,\n    LuxCardInfoComponent,\n    LuxCardComponent,\n    LuxCardContentComponent,\n    LuxDividerComponent,\n    LuxCardActionsComponent,\n    LuxMenuItemComponent,\n    LuxMenuComponent,\n    LuxButtonComponent,\n    LuxIconComponent,\n    TranslocoPipe\n  ]\n})\nexport class LuxFileListComponent extends LuxFormFileBase<ILuxFileObject[] | null> implements AfterViewInit, AfterViewChecked, OnDestroy {\n  private dialogService = inject(LuxDialogService);\n\n  fileIcons: string[] = [];\n\n  rowWidth = 0;\n  iconActionBarWidth = 50;\n  subscriptions: Subscription[] = [];\n\n  @ViewChildren('fileEntry', { read: ElementRef }) fileEntries!: QueryList<ElementRef>;\n  @ViewChild('fileUploadSingle', { read: ElementRef, static: true }) fileUploadSingleInput!: ElementRef;\n  @ViewChild(LuxCardComponent, { read: ElementRef, static: true }) fileCard!: ElementRef;\n\n  @Input() luxShowPreview = true;\n  @Input() luxMultiple = true;\n  @Input() luxHeading = 2;\n\n  dialogReplaceConfig: ILuxDialogConfig = {\n    disableClose: false,\n    width: 'auto',\n    height: 'auto',\n    panelClass: ['file-dialog', 'file-replace-dialog']\n  };\n\n  _luxUploadActionConfig: ILuxFilesListActionConfig = {\n    disabled: false,\n    disabledHeader: false,\n    hidden: false,\n    hiddenHeader: false,\n    iconName: 'lux-programming-cloud-upload',\n    iconNameHeader: 'lux-programming-cloud-upload',\n    label: '',\n    labelHeader: ''\n  };\n  _luxDeleteActionConfig: ILuxFileListDeleteActionConfig = {\n    disabled: false,\n    disabledHeader: false,\n    hidden: false,\n    hiddenHeader: false,\n    iconName: 'lux-interface-delete-bin-5',\n    iconNameHeader: 'lux-interface-delete-bin-5',\n    label: '',\n    labelHeader: '',\n    isDeletable: (_file: ILuxFileObject) => {\n      return true;\n    }\n  };\n  _luxViewActionConfig: ILuxFileActionConfig = {\n    disabled: false,\n    hidden: true,\n    iconName: 'lux-interface-edit-view',\n    label: ''\n  };\n  _luxDownloadActionConfig: ILuxFileActionConfig = {\n    disabled: false,\n    hidden: true,\n    iconName: 'lux-interface-download-button-2',\n    label: ''\n  };\n\n  get luxUploadActionConfig(): ILuxFilesListActionConfig {\n    return this._luxUploadActionConfig;\n  }\n\n  @Input() set luxUploadActionConfig(config: ILuxFilesListActionConfig) {\n    if (config) {\n      this._luxUploadActionConfig = config;\n    }\n  }\n\n  get luxDeleteActionConfig(): ILuxFileListDeleteActionConfig {\n    return this._luxDeleteActionConfig;\n  }\n\n  @Input() set luxDeleteActionConfig(config: ILuxFileListDeleteActionConfig) {\n    if (config) {\n      this._luxDeleteActionConfig = config;\n    }\n  }\n\n  get luxViewActionConfig(): ILuxFileActionConfig {\n    return this._luxViewActionConfig;\n  }\n\n  @Input() set luxViewActionConfig(config: ILuxFileActionConfig) {\n    if (config) {\n      this._luxViewActionConfig = config;\n    }\n  }\n\n  get luxDownloadActionConfig(): ILuxFileActionConfig {\n    return this._luxDownloadActionConfig;\n  }\n\n  @Input() set luxDownloadActionConfig(config: ILuxFileActionConfig) {\n    if (config) {\n      this._luxDownloadActionConfig = config;\n    }\n  }\n\n  ngAfterViewInit() {\n    this.subscriptions.push(\n      this.fileEntries.changes.subscribe(() => {\n        this.updateIconAndImage();\n      })\n    );\n\n    this.updateIconAndImage();\n  }\n\n  private updateIconAndImage() {\n    this.setFileIcons();\n\n    if (this.luxShowPreview) {\n      this.setImgSrc();\n    }\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n\n    this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n  }\n\n  shouldDisplayPreviewImg(index: number): boolean {\n    return this.luxShowPreview && this.fileIcons && !!this.fileIcons[index] && this.fileIcons[index] === 'lux-file-image';\n  }\n\n  /**\n   * Entfernt eine Datei aus den selektierten Dateien.\n   * @param index\n   */\n  removeFile(index: number) {\n    this.formControl.markAsTouched();\n    this.formControl.markAsDirty();\n\n    // Wenn mehrere Dateien selektiert sind, diese nach der entfernten Datei filtern ansonsten \"null\" nutzen\n    const newFiles = Array.isArray(this.luxSelected) ? this.luxSelected.filter((file, searchIndex) => searchIndex !== index) : null;\n\n    // Via LiveAnnouncer mitteilen welche Datei entfernt wird\n    const deletedFile = this.luxSelected![index];\n    this.announceFileRemove(deletedFile.name);\n\n    // Wir entfernen hier nur eine Datei, deshalb ist das neue Auslesen der Base64-Strings nicht nötig\n    this.uploadFiles(newFiles).then(\n      () => {\n        this.luxSelected = newFiles;\n        this.notifyFormValueChanged();\n      },\n      (error) => this.setFormControlErrors(error)\n    );\n    if (this.luxDeleteActionConfig.onClick) {\n      this.luxDeleteActionConfig.onClick(deletedFile);\n    }\n  }\n\n  onSelectFiles(target: EventTarget | null) {\n    const fileList = target ? (target as HTMLInputElement).files : null;\n    this.selectFiles(fileList ? Array.from(fileList) : []);\n  }\n\n  resetSelected() {\n    this.luxSelected = [];\n  }\n\n  handleViewFileClick(file: ILuxFileObject) {\n    if (file.content && this.luxViewActionConfig.onClick) {\n      this.luxViewActionConfig.onClick(file);\n      this.updateIconAndImage();\n    }\n  }\n\n  handleDownloadClick(file: ILuxFileObject) {\n    if (this.luxDownloadActionConfig.onClick) {\n      this.luxDownloadActionConfig.onClick(file);\n    }\n  }\n\n  handleUploadClick(files: ILuxFileObject[]) {\n    if (this.luxUploadActionConfig.onClick) {\n      this.luxUploadActionConfig.onClick(files);\n    }\n  }\n\n  /**\n   * Entfernt die aktuell selektierten Dateien und entfernt etwaige (spezifische) Fehler aus dem FormControl.\n   * @param event\n   */\n  clearFiles(event?: Event) {\n    this.formControl.markAsTouched();\n    this.formControl.markAsDirty();\n\n    if (!this.luxSelected) {\n      this.luxSelected = [];\n    }\n\n    const deletedFiles = this.luxSelected\n      ? [\n          ...this.luxSelected.filter((file) =>\n            this.luxDeleteActionConfig.isDeletable ? this.luxDeleteActionConfig.isDeletable!(file) : true\n          )\n        ]\n      : [];\n    this.luxSelected = this.luxSelected\n      ? [\n          ...this.luxSelected.filter((file) =>\n            this.luxDeleteActionConfig.isDeletable ? !this.luxDeleteActionConfig.isDeletable!(file) : false\n          )\n        ]\n      : [];\n\n    this.notifyFormValueChanged();\n    this.clearFormControlErrors();\n\n    if (deletedFiles) {\n      deletedFiles.forEach((file) => {\n        if (this.luxDeleteActionConfig.onClick) {\n          this.luxDeleteActionConfig.onClick(file);\n        }\n      });\n    }\n\n    this.announceAllFilesRemove();\n  }\n\n  /**\n   * Fügt weitere Dateien zu den bereits vorhandenen hinzu bzw. ersetzt diese.\n   * @param files\n   */\n  selectFiles(files: FileList | File[]) {\n    this.formControl.markAsTouched();\n    this.formControl.markAsDirty();\n    this.forceProgressIndeterminate = true;\n    this.announceFileProcess(files && files.length > 1);\n\n    if (!files || files.length === 0) {\n      this.forceProgressIndeterminate = false;\n      return;\n    }\n\n    // Timeout, um Flackern durch Progress zu vermeiden\n    setTimeout(() => {\n      // Prüfen, ob die Dateien bereits vorhanden sind\n      let selectedFilesArray: ILuxFileObject[] = [];\n      const replaceableFilesMap = new Map<number, File>();\n      let replaceFileDeleteProtection = false;\n      if (this.luxSelected) {\n        files = Array.from(files);\n        selectedFilesArray = Array.isArray(this.luxSelected) ? this.luxSelected : [this.luxSelected];\n        // zu ersetzende Indizes herausfinden\n        files.forEach((file: File) => {\n          const index = selectedFilesArray.findIndex((compareFile: ILuxFileObject) => compareFile.name === file.name);\n          if (index > -1) {\n            replaceableFilesMap.set(index, file);\n            replaceFileDeleteProtection =\n              replaceFileDeleteProtection ||\n              (this.luxDeleteActionConfig.isDeletable ? !this.luxDeleteActionConfig.isDeletable(files[0]) : false);\n          }\n        });\n      }\n\n      if (this.luxMultiple) {\n        if (replaceableFilesMap.size > 0) {\n          const dialogRef = this.dialogService.openComponent(LuxFileReplaceDialogComponent, this.dialogReplaceConfig, {\n            multiple: this.luxMultiple,\n            deleteProtection: replaceFileDeleteProtection\n          });\n          this.forceProgressIndeterminate = false;\n\n          dialogRef.dialogConfirmed.subscribe(() => {\n            this.updateFilesIntern(files, selectedFilesArray, replaceableFilesMap);\n          });\n\n          dialogRef.dialogDeclined.subscribe(() => {\n            this.fileUploadInput.nativeElement.value = '';\n          });\n\n          dialogRef.dialogClosed.subscribe(() => {\n            this.fileUploadInput.nativeElement.value = '';\n          });\n        } else {\n          this.updateFilesIntern(files, selectedFilesArray, replaceableFilesMap);\n        }\n      } else {\n        if (files.length > 1) {\n          this.setFormControlErrors({\n            cause: LuxFileErrorCause.MultipleForbidden,\n            exception: this.getMultipleForbiddenMessage(),\n            file: undefined\n          });\n\n          return;\n        } else if (files.length === 1 && (!this.luxSelected || this.luxSelected.length === 0)) {\n          this.updateSelectedFiles(files).then(\n            (newFiles: ILuxFileObject[]) => {\n              this.luxSelected = newFiles;\n              this.notifyFormValueChanged();\n              this.fileUploadInput.nativeElement.value = '';\n            },\n            (error) => this.setFormControlErrors(error)\n          );\n        } else if (files.length === 1 && this.luxSelected && this.luxSelected.length > 0) {\n          const dialogRef = this.dialogService.openComponent(LuxFileReplaceDialogComponent, this.dialogReplaceConfig, {\n            multiple: this.luxMultiple,\n            deleteProtection: this.luxDeleteActionConfig.isDeletable ? !this.luxDeleteActionConfig.isDeletable(files[0]) : false\n          });\n          this.forceProgressIndeterminate = false;\n\n          dialogRef.dialogConfirmed.subscribe(() => {\n            this.updateSelectedFiles(files).then(\n              (newFiles: ILuxFileObject[]) => {\n                this.luxSelected = newFiles;\n                this.notifyFormValueChanged();\n                this.fileUploadInput.nativeElement.value = '';\n              },\n              (error) => this.setFormControlErrors(error)\n            );\n          });\n\n          dialogRef.dialogDeclined.subscribe(() => {\n            this.fileUploadInput.nativeElement.value = '';\n          });\n\n          dialogRef.dialogClosed.subscribe(() => {\n            this.fileUploadInput.nativeElement.value = '';\n          });\n        }\n      }\n    }, this.defaultReadFileDelay);\n  }\n\n  private updateFilesIntern(files: FileList | File[], selectedFilesArray: any[], replaceableFilesMap: Map<number, File>) {\n    // Begrenzung der maximalen Anzahl an Dateien\n    const currentCount = Array.isArray(this.luxSelected) ? this.luxSelected.length : this.luxSelected ? 1 : 0;\n    if (\n      this.luxMaxFileCount !== undefined &&\n      this.luxMaxFileCount !== null &&\n      currentCount + files.length - replaceableFilesMap.size > this.luxMaxFileCount\n    ) {\n      this.setFormControlErrors({\n        cause: LuxFileErrorCause.MaxFileCount,\n        exception: this.getMaxFileCountMessage(),\n        file: undefined\n      });\n      this.forceProgressIndeterminate = false;\n      return;\n    }\n\n    this.updateSelectedFiles(files).then(\n      (newFiles: ILuxFileObject[]) => {\n        const tempSelectedFiles = selectedFilesArray;\n\n        // die zu ersetzenden Dateien durchgehen und aktualisieren\n        replaceableFilesMap.forEach((file: File, index: number) => {\n          const replaceableFileObject = newFiles.find((newFile: ILuxFileObject) => newFile.name === file.name);\n          // das gefundene Objekt aus den newFiles entfernen\n          newFiles = newFiles.filter((newFile) => newFile !== replaceableFileObject);\n          // die selectedFiles aktualisieren\n          tempSelectedFiles[index] = replaceableFileObject;\n        });\n        // die übrigen neuen Dateien anfügen\n        tempSelectedFiles.push(...newFiles);\n\n        this.luxSelected =\n          tempSelectedFiles && tempSelectedFiles.length === 1 && !this.useArray() ? tempSelectedFiles[0] : tempSelectedFiles;\n        this.notifyFormValueChanged();\n        this.fileUploadInput.nativeElement.value = '';\n      },\n      (error) => this.setFormControlErrors(error)\n    );\n  }\n\n  useArray(): boolean {\n    return true;\n  }\n\n  /**\n   * Aktualisiert die Preview-Bilder für die (Image-)Dateien.\n   *\n   * Aktualisierung absichtlich via Funktion und nicht Property-Binding, da potenziell Stack-Size Fehler auftreten,\n   * wenn (große) Base64-Strings gegen die src gebunden werden.\n   */\n  private setImgSrc() {\n    this.fileEntries.forEach((item: ElementRef, index: number) => {\n      const imgElement: HTMLImageElement | null = (item.nativeElement as HTMLElement).querySelector('img');\n      if (imgElement && this.luxSelected) {\n        const targetFileContent = this.luxSelected[index].content;\n        if (targetFileContent instanceof Blob) {\n          this.readFile(targetFileContent as File).then((content: any) => {\n            imgElement.src = content;\n          });\n        } else {\n          imgElement.src = targetFileContent as string;\n        }\n      }\n    });\n  }\n\n  /**\n   * Setzt die Icons für die Elemente in der Auflistung\n   */\n  private setFileIcons() {\n    if (!this.luxSelected) {\n      return;\n    }\n\n    this.fileIcons = [];\n    const selectedFiles = [];\n\n    if (!Array.isArray(this.luxSelected)) {\n      selectedFiles.push(this.luxSelected);\n    } else {\n      selectedFiles.push(...this.luxSelected);\n    }\n    selectedFiles.forEach((selectedFile: ILuxFileObject) => {\n      let newFileIcon = 'lux-interface-content-file';\n      if (selectedFile.type) {\n        if (selectedFile.type.indexOf('image') > -1) {\n          newFileIcon = 'lux-file-image';\n        } else if (selectedFile.type.indexOf('pdf') > -1) {\n          newFileIcon = 'lux-file-pdf';\n        } else if (selectedFile.type.indexOf('spreadsheet') > -1) {\n          newFileIcon = 'lux-interface-file-delete';\n        } else if (selectedFile.type.indexOf('officedocument') > -1) {\n          newFileIcon = 'lux-file-signature';\n        } else if (selectedFile.type.indexOf('json') > -1) {\n          newFileIcon = 'lux-programming-script-file-code-1';\n        }\n      }\n      this.fileIcons.push(newFileIcon);\n    });\n    this.cdr.detectChanges();\n  }\n\n  ngAfterViewChecked(): void {\n    this.resizeIconActionBar();\n  }\n\n  isArray(object: any): boolean {\n    return object && Array.isArray(object);\n  }\n\n  hasOnlyDeleteProtectedFiles(): boolean {\n    return (\n      !!this.luxSelected &&\n      this.luxSelected.length > 0 &&\n      this.luxSelected.every((file) => (this.luxDeleteActionConfig.isDeletable ? !this.luxDeleteActionConfig.isDeletable(file) : false))\n    );\n  }\n\n  private resizeIconActionBar() {\n    if (this.fileEntries && this.fileEntries.first && this.cdr) {\n      const newRowWidth = this.fileEntries.first.nativeElement.offsetWidth;\n      if (this.rowWidth !== newRowWidth) {\n        let buttonCount = 0;\n        if (this._luxViewActionConfig && !this._luxViewActionConfig.hidden) {\n          buttonCount++;\n        }\n        if (this._luxDownloadActionConfig && !this._luxDownloadActionConfig.hidden) {\n          buttonCount++;\n        }\n        if (this._luxUploadActionConfig && !this._luxUploadActionConfig.hidden) {\n          buttonCount++;\n        }\n        if (this._luxDeleteActionConfig && !this._luxDeleteActionConfig.hidden) {\n          buttonCount++;\n        }\n        if (this._luxCustomActionConfigs) {\n          buttonCount += this._luxCustomActionConfigs.length;\n        }\n\n        this.rowWidth = newRowWidth;\n        if (this.rowWidth >= 900) {\n          this.iconActionBarWidth = Math.min(400, buttonCount * 50);\n        } else if (this.rowWidth >= 800) {\n          this.iconActionBarWidth = Math.min(350, buttonCount * 50);\n        } else if (this.rowWidth >= 700) {\n          this.iconActionBarWidth = Math.min(300, buttonCount * 50);\n        } else if (this.rowWidth >= 600) {\n          this.iconActionBarWidth = Math.min(250, buttonCount * 50);\n        } else if (this.rowWidth >= 500) {\n          this.iconActionBarWidth = Math.min(200, buttonCount * 50);\n        } else if (this.rowWidth >= 400) {\n          this.iconActionBarWidth = Math.min(150, buttonCount * 50);\n        } else {\n          this.iconActionBarWidth = 50;\n        }\n\n        this.cdr.detectChanges();\n      }\n    }\n  }\n\n  protected override errorMessageModifier(value: any, errors: LuxValidationErrors): string | undefined {\n    if (errors['required']) {\n      return this.tService.translate('luxc.file-list.error_message.required');\n    }\n    return super.errorMessageModifier(value, errors);\n  }\n\n  protected override notifyFormValueChanged() {\n    super.notifyFormValueChanged();\n    this.formControl.updateValueAndValidity();\n\n    this.fileUploadSingleInput.nativeElement.value = null;\n  }\n}\n","<lux-card\n  class=\"lux-file-list\"\n  [ngClass]=\"{ 'lux-file-list-disabled': luxDisabled, 'lux-file-list-error': errorMessage && formControl && formControl.touched }\"\n  [luxTitle]=\"(luxLabel ? luxLabel : '') + (luxRequired ? '&nbsp;*' : '')\"\n  [luxAriaInvalid]=\"formControl ? '' + formControl.invalid : ''\"\n  tabindex=\"0\"\n  [luxHeading]=\"luxHeading\"\n>\n  @if (luxMultiple || !luxSelected) {\n  <lux-card-info>\n    @if (!luxDeleteActionConfig.hiddenHeader) {\n    <lux-button\n      class=\"lux-file-list-header-clear\"\n      [luxIconName]=\"luxDeleteActionConfig.iconNameHeader\"\n      luxTagId=\"lux-file-clear\"\n      luxColor=\"primary\"\n      [luxDisabled]=\"!luxSelected || luxSelected.length === 0 || luxDeleteActionConfig.disabledHeader || luxDisabled || luxReadonly || hasOnlyDeleteProtectedFiles()\"\n      (luxClicked)=\"clearFiles($event)\"\n      luxAriaLabel=\"{{ luxDeleteActionConfig.labelHeader || ('luxc.file-list.delete_title.lbl' | transloco) }}\"\n      luxAriaLabelSelector=\"button\"\n    >\n    </lux-button>\n    } @if (!luxUploadActionConfig.hiddenHeader) {\n    <lux-button\n      class=\"lux-file-list-header-add\"\n      [luxIconName]=\"luxUploadActionConfig.iconNameHeader\"\n      luxTagId=\"lux-file-add\"\n      (luxClicked)=\"fileUpload.click()\"\n      [luxDisabled]=\"luxUploadActionConfig.disabledHeader || luxDisabled || luxReadonly\"\n      luxColor=\"primary\"\n      luxAriaLabel=\"{{ luxUploadActionConfig.labelHeader || ('luxc.file-list.upload_title.lbl' | transloco) }}\"\n      luxAriaLabelSelector=\"button\"\n    >\n    </lux-button>\n    }\n  </lux-card-info>\n  }\n  <lux-card-content>\n    <div\n      class=\"lux-file-list-content\"\n      [ngClass]=\"\n        !luxSelected || luxSelected.length === 0 ? 'lux-place-content-center lux-items-center' : 'lux-place-content-start lux-items-start'\n      \"\n    >\n      @if (!luxSelected || luxSelected.length === 0) {\n      <div class=\"lux-file-icon-hint lux-place-content-center lux-items-center\">\n        <lux-divider></lux-divider>\n        @if (luxUploadActionConfig.iconName) {\n        <lux-icon\n          class=\"lux-file-icon lux-color-blue\"\n          [luxIconSize]=\"'3x'\"\n          [luxIconName]=\"luxUploadActionConfig.iconName\"\n          [luxPadding]=\"'8px 0 0 0'\"\n          [luxMargin]=\"'0'\"\n        >\n        </lux-icon>\n        } @if (formHintComponent || luxHint) {\n        <mat-hint [id]=\"uid + '-misc'\" class=\"lux-file-hint lux-flex lux-mt-3\">\n          @if (luxHint) {\n          {{ luxHint }}\n          } @else {\n          <ng-container *ngTemplateOutlet=\"formHintComponent?.templateRef ?? null\"></ng-container>\n          }\n        </mat-hint>\n        }\n      </div>\n      } @else { @if (luxSelected) {\n      <div class=\"lux-file-list-entries\" [attr.aria-disabled]=\"luxDisabled ? 'true' : null\">\n        <!-- Mehrere Dateien ausgewählt -->\n        @if (isArray(luxSelected)) {\n        <lux-divider></lux-divider>\n        @for (selectedFile of luxSelected; track selectedFile; let i = $index) {\n        <ng-container *ngTemplateOutlet=\"fileListEntryTemplate; context: { selectedFile: selectedFile, index: i }\"> </ng-container>\n        } }\n        <!-- Nur eine Datei ausgewählt -->\n        @if (!isArray(luxSelected)) {\n        <lux-divider></lux-divider>\n        <ng-container *ngTemplateOutlet=\"fileListEntryTemplate; context: { selectedFile: luxSelected, index: 0 }\"> </ng-container>\n        }\n      </div>\n      } }\n    </div>\n  </lux-card-content>\n  @if (errorMessage && formControl?.touched && !forceProgressIndeterminate) {\n  <lux-card-actions class=\"lux-file-actions lux-error\">\n    <lux-icon class=\"lux-alert-icon\" luxIconName=\"lux-interface-alert-warning-triangle\" luxIconSize=\"0.75rem\"></lux-icon>\n    <mat-error [id]=\"uid + '-misc'\" class=\"lux-file-list-error-message\">\n      {{ errorMessage }}\n    </mat-error>\n    @if (displayClearErrorButton) {\n    <lux-icon\n      luxIconName=\"lux-interface-delete-1\"\n      luxIconSize=\"1.125rem\"\n      luxMargin=\"0 0 0 8px\"\n      luxAriaLabel=\"{{ 'luxc.form.delete.error.button' | transloco }}\"\n      class=\"lux-error-icon\"\n      [tabIndex]=\"0\"\n      (keydown.enter)=\"onCloseErrorMessage()\"\n      (click)=\"onCloseErrorMessage()\"\n    ></lux-icon>\n    }\n  </lux-card-actions>\n  }\n</lux-card>\n<!-- Template für eine File-Entry -->\n<ng-template let-selectedFile=\"selectedFile\" let-index=\"index\" #fileListEntryTemplate>\n  <div class=\"lux-file-list-entry lux-mt-2 lux-mb-2\" tabindex=\"0\" [attr.aria-label]=\"'Datei ' + selectedFile.name\" #fileEntry>\n    <div class=\"lux-file-list-entry-content\">\n      <!-- Icon bzw. Img der Datei -->\n      @switch (shouldDisplayPreviewImg(index)) { @case (false) {\n      <lux-icon\n        class=\"lux-file-list-entry-icon\"\n        luxPadding=\"0\"\n        luxMargin=\"0\"\n        [luxIconName]=\"fileIcons[index]\"\n        luxIconSize=\"2x\"\n        aria-hidden=\"true\"\n      >\n      </lux-icon>\n      } @case (true) {\n      <img class=\"lux-file-list-entry-img\" alt=\"Icon\" aria-hidden=\"true\" />\n      } }\n      <!-- Der Name der Datei -->\n      <span class=\"lux-file-list-entry-label lux-mr-3 lux-ml-3\" [ngClass]=\"{ 'lux-file-list-entry-label-disabled': luxDisabled }\">\n        @if (selectedFile.namePrefix) {\n        <span [ngStyle]=\"{ color: !luxDisabled ? selectedFile.namePrefixColor : '', fontSize: '0.8em', fontStyle: 'italic' }\">{{\n          selectedFile.namePrefix\n        }}</span>\n        }{{ selectedFile.name }}@if (selectedFile.nameSuffix) {\n        <span [ngStyle]=\"{ color: !luxDisabled ? selectedFile.nameSuffixColor : '', fontSize: '0.8em', fontStyle: 'italic' }\">{{\n          selectedFile.nameSuffix\n        }}</span>\n        }\n      </span>\n    </div>\n    <div\n      class=\"lux-file-list-entry-menu\"\n      [ngClass]=\"{\n        'bar-width-100': iconActionBarWidth === 100,\n        'bar-width-150': iconActionBarWidth === 150,\n        'bar-width-200': iconActionBarWidth === 200,\n        'bar-width-250': iconActionBarWidth === 250,\n        'bar-width-300': iconActionBarWidth === 300,\n        'bar-width-350': iconActionBarWidth === 350,\n        'bar-width-400': iconActionBarWidth === 400\n      }\"\n    >\n      <!-- Buttons zum erneuten Hochladen bzw. Löschen der Datei -->\n      <lux-menu\n        luxMenuIconName=\"lux-interface-setting-menu-vertical\"\n        luxTagId=\"{{ 'lux-file-list-entry-' + index + '-actions' }}\"\n        [luxMenuItemFixWidth]=\"45\"\n        (luxMenuClosed)=\"fileEntry.focus()\"\n        [luxToggleDisabled]=\"luxDisabled || luxReadonly\"\n        [luxDisplayExtended]=\"true\"\n        [luxMaximumExtended]=\"luxMaximumExtended\"\n      >\n        <lux-menu-item\n          luxTagId=\"lux-file-list-entry-view\"\n          [luxIconName]=\"luxViewActionConfig.iconName\"\n          [luxDisabled]=\"luxViewActionConfig.disabled || luxDisabled || luxReadonly\"\n          luxLabel=\"{{ luxViewActionConfig.label || ('luxc.form-file-base.view.action.lbl' | transloco) }}\"\n          [luxHideLabelIfExtended]=\"true\"\n          [luxAlwaysVisible]=\"true\"\n          [luxPrio]=\"luxViewActionConfig.prio ? luxViewActionConfig.prio : 10\"\n          luxColor=\"primary\"\n          (luxClicked)=\"viewFile(selectedFile)\"\n          [luxHidden]=\"!!luxViewActionConfig.hidden\"\n        >\n        </lux-menu-item>\n        <lux-menu-item\n          luxTagId=\"lux-file-list-entry-download\"\n          [luxIconName]=\"luxDownloadActionConfig.iconName\"\n          [luxDisabled]=\"luxDownloadActionConfig.disabled || luxDisabled || luxReadonly\"\n          luxLabel=\"{{ luxDownloadActionConfig.label || ('luxc.form-file-base.download.action.lbl' | transloco) }}\"\n          [luxHideLabelIfExtended]=\"true\"\n          [luxAlwaysVisible]=\"true\"\n          [luxPrio]=\"luxDownloadActionConfig.prio ? luxDownloadActionConfig.prio : 20\"\n          luxColor=\"primary\"\n          (luxClicked)=\"downloadFile(selectedFile)\"\n          [luxHidden]=\"!!luxDownloadActionConfig.hidden\"\n        >\n        </lux-menu-item>\n        <lux-menu-item\n          luxTagId=\"lux-file-list-entry-remove\"\n          [luxIconName]=\"luxDeleteActionConfig.iconName\"\n          [luxDisabled]=\"luxDeleteActionConfig.disabled || luxDisabled || luxReadonly || (luxDeleteActionConfig.isDeletable ? !luxDeleteActionConfig.isDeletable(selectedFile) : false)\"\n          luxLabel=\"{{ luxDeleteActionConfig.label || ('luxc.file-list.delete.lbl' | transloco) }}\"\n          [luxHideLabelIfExtended]=\"true\"\n          [luxAlwaysVisible]=\"true\"\n          [luxPrio]=\"luxDeleteActionConfig.prio ? luxDeleteActionConfig.prio : 30\"\n          luxColor=\"primary\"\n          (luxClicked)=\"removeFile(index)\"\n          [luxHidden]=\"!!luxDeleteActionConfig.hidden\"\n        >\n        </lux-menu-item>\n        <lux-menu-item\n          luxTagId=\"lux-file-list-entry-upload\"\n          [luxIconName]=\"luxUploadActionConfig.iconName\"\n          [luxDisabled]=\"luxUploadActionConfig.disabled || luxDisabled || luxReadonly\"\n          luxLabel=\"{{ luxUploadActionConfig.label || ('luxc.file-list.upload.lbl' | transloco) }}\"\n          [luxHideLabelIfExtended]=\"true\"\n          [luxAlwaysVisible]=\"true\"\n          [luxPrio]=\"luxUploadActionConfig.prio ? luxUploadActionConfig.prio : 40\"\n          luxColor=\"primary\"\n          (luxClicked)=\"fileUploadSingle.click()\"\n          [luxHidden]=\"!!luxUploadActionConfig.hidden\"\n        >\n        </lux-menu-item>\n        @for (customConfig of luxCustomActionConfigs; track customConfig; let i = $index) {\n        <lux-menu-item\n          luxTagId=\"lux-file-list-entry-custom{{ i }}\"\n          [luxIconName]=\"customConfig.iconName\"\n          [luxDisabled]=\"customConfig.disabled || luxDisabled || luxReadonly\"\n          [luxLabel]=\"customConfig.label\"\n          [luxHideLabelIfExtended]=\"true\"\n          [luxAlwaysVisible]=\"true\"\n          [luxPrio]=\"customConfig.prio ? customConfig.prio : 50 + i\"\n          luxColor=\"primary\"\n          (luxClicked)=\"customConfig.onClick ? customConfig.onClick(selectedFile) : noop()\"\n          [luxHidden]=\"!!customConfig.hidden\"\n        >\n        </lux-menu-item>\n        }\n      </lux-menu>\n    </div>\n  </div>\n  @if (luxSelected?.length) { @if (index !== (this.luxSelected?.length ?? 0) - 1) {\n  <lux-divider></lux-divider>\n  } }\n</ng-template>\n\n<!-- File-Upload Input -->\n<input\n  class=\"lux-file-input lux-file-input-multiple\"\n  type=\"file\"\n  [multiple]=\"luxMultiple\"\n  [accept]=\"luxAccept\"\n  [luxFileCapture]=\"luxCapture\"\n  (change)=\"onSelectFiles($event.target)\"\n  #fileUpload\n/>\n<!-- File-Upload Single Input -->\n<input\n  class=\"lux-file-input lux-file-input-single\"\n  type=\"file\"\n  [multiple]=\"false\"\n  [accept]=\"luxAccept\"\n  [luxFileCapture]=\"luxCapture\"\n  (change)=\"onSelectFiles($event.target)\"\n  #fileUploadSingle\n/>\n\n<!-- Download-Node -->\n<a class=\"lux-file-download\" aria-hidden=\"true\" download=\"\" #downloadLink></a>\n\n<!-- Ladeanzeige für den File-Upload -->\n@if (isProgressVisible) {\n<lux-file-progress [luxMode]=\"progressMode\" [luxProgress]=\"progress\"> </lux-file-progress>\n}\n","import { Component, inject } from '@angular/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../../../../lux-action/lux-button/lux-button.component';\nimport { LuxDialogRef } from '../../../../lux-popups/lux-dialog/lux-dialog-model/lux-dialog-ref.class';\nimport { LuxDialogActionsComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-actions.component';\nimport { LuxDialogContentComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-content.component';\nimport { LuxDialogTitleComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-title.component';\nimport { LuxDialogStructureComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure.component';\n\n@Component({\n  selector: 'lux-lux-file-delete-dialog',\n  templateUrl: './lux-file-delete-dialog.component.html',\n  styleUrls: ['./lux-file-delete-dialog.component.scss'],\n  imports: [LuxDialogStructureComponent, LuxDialogTitleComponent, LuxDialogContentComponent, LuxDialogActionsComponent, LuxButtonComponent, TranslocoPipe]\n})\nexport class LuxFileDeleteDialogComponent {\n  luxDialogRef = inject<LuxDialogRef<void>>(LuxDialogRef);\n}\n","<lux-dialog-structure>\n  <lux-dialog-title class=\"file-upload-dialog-title-container file-delete-dialog-title-container\">\n    <div class=\"file-upload-dialog-title file-delete-dialog-title\">\n      {{ 'luxc.file.delete.dialog.title' | transloco }}\n    </div>\n  </lux-dialog-title>\n  <lux-dialog-content class=\"file-upload-dialog-content-container file-delete-dialog-content-container\">\n    <p class=\"file-upload-dialog-content-text file-delete-dialog-content-text\">\n      {{ 'luxc.file.delete.dialog.content' | transloco }}<br />\n    </p>\n  </lux-dialog-content>\n  <lux-dialog-actions class=\"lux-flex lux-flex-wrap\">\n    <lux-button\n      luxLabel=\"{{ 'luxc.file.delete.dialog.cancel.lbl' | transloco }}\"\n      luxColor=\"primary\"\n      [luxStroked]=\"true\"\n      (luxClicked)=\"luxDialogRef.closeDialog(false)\"\n      class=\"lux-mr-4\"\n    ></lux-button>\n    <lux-button\n      luxLabel=\"{{ 'luxc.file.delete.dialog.delete.lbl' | transloco }}\"\n      luxColor=\"primary\"\n      [luxFlat]=\"true\"\n      (luxClicked)=\"luxDialogRef.closeDialog(true)\"\n    ></lux-button>\n  </lux-dialog-actions>\n</lux-dialog-structure>\n","import { AfterViewInit, Component, inject, ViewChild } from '@angular/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../../../../lux-action/lux-button/lux-button.component';\nimport { LuxAutofocusDirective } from '../../../../lux-directives/lux-autofocus/lux-autofocus.directive';\nimport { LuxDialogRef } from '../../../../lux-popups/lux-dialog/lux-dialog-model/lux-dialog-ref.class';\nimport { LuxDialogActionsComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-actions.component';\nimport { LuxDialogContentComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-content.component';\nimport { LuxDialogTitleComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-title.component';\nimport { LuxDialogStructureComponent } from '../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure.component';\nimport { LuxInputAcComponent } from '../../../lux-input-ac/lux-input-ac.component';\nimport { ILuxFileObject } from '../../lux-file-model/lux-file-object.interface';\n\n@Component({\n  selector: 'lux-lux-file-rename-dialog',\n  imports: [\n    LuxInputAcComponent,\n    LuxDialogStructureComponent,\n    LuxDialogTitleComponent,\n    LuxDialogContentComponent,\n    LuxDialogActionsComponent,\n    LuxButtonComponent,\n    LuxAutofocusDirective,\n    TranslocoPipe\n  ],\n  templateUrl: './lux-file-rename-dialog.component.html',\n  styleUrl: './lux-file-rename-dialog.component.scss'\n})\nexport class LuxFileRenameDialogComponent implements AfterViewInit {\n  luxDialogRef = inject<LuxDialogRef<ILuxFileObject>>(LuxDialogRef);\n\n  @ViewChild(LuxInputAcComponent, { read: LuxInputAcComponent, static: true }) input!: LuxInputAcComponent;\n\n  ngAfterViewInit(): void {\n    this.input.inputElement.nativeElement.select();\n  }\n}\n","<lux-dialog-structure>\n  <lux-dialog-title class=\"file-upload-dialog-title-container file-rename-dialog-title-container\"\n    ><div class=\"file-upload-dialog-title file-rename-dialog-title\">\n      {{ 'luxc.file.rename.dialog.title' | transloco }}\n    </div></lux-dialog-title\n  >\n  <lux-dialog-content class=\"lux-flex lux-flex-col lux-m-2\">\n    <lux-input-ac\n      luxLabel=\"{{ 'luxc.file.rename.input.lbl' | transloco }}\"\n      [luxValue]=\"luxDialogRef.data.name\"\n      [luxRequired]=\"true\"\n      (keydown.enter)=\"luxDialogRef.closeDialog(filename.luxValue)\"\n      luxAutofocus\n      #filename\n    ></lux-input-ac>\n  </lux-dialog-content>\n\n  <lux-dialog-actions class=\"lux-flex lux-flex-wrap\">\n    <lux-button\n      luxLabel=\"{{ 'luxc.file.rename.dialog.cancel.lbl' | transloco }}\"\n      luxColor=\"primary\"\n      [luxStroked]=\"true\"\n      (luxClicked)=\"luxDialogRef.closeDialog()\"\n      class=\"lux-mr-4\"\n    ></lux-button>\n    <lux-button\n      luxLabel=\"{{ 'luxc.file.rename.dialog.rename.lbl' | transloco }}\"\n      luxColor=\"primary\"\n      [luxFlat]=\"true\"\n      (luxClicked)=\"luxDialogRef.closeDialog(filename.luxValue)\"\n    ></lux-button>\n  </lux-dialog-actions>\n</lux-dialog-structure>\n","import { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, Input, OnDestroy, OnInit, QueryList, ViewChildren, inject } from '@angular/core';\nimport { MatError, MatHint } from '@angular/material/form-field';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxButtonComponent } from '../../../lux-action/lux-button/lux-button.component';\nimport { LuxLinkPlainComponent } from '../../../lux-action/lux-link-plain/lux-link-plain.component';\nimport { LuxAriaLabelDirective } from '../../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxIconComponent } from '../../../lux-icon/lux-icon/lux-icon.component';\nimport { ILuxDialogConfig } from '../../../lux-popups/lux-dialog/lux-dialog-model/lux-dialog-config.interface';\nimport { LuxDialogService } from '../../../lux-popups/lux-dialog/lux-dialog.service';\nimport { LuxTheme } from '../../../lux-theme/lux-theme';\nimport { LuxThemeService } from '../../../lux-theme/lux-theme.service';\nimport { LuxMediaQueryObserverService } from '../../../lux-util/lux-media-query-observer.service';\nimport { LuxUtil } from '../../../lux-util/lux-util';\nimport { LuxFormFileBase } from '../../lux-form-model/lux-form-file-base.class';\nimport { ILuxFileActionConfig, ILuxFilesActionConfig } from '../lux-file-model/lux-file-action-config.interface';\nimport { LuxFileCaptureDirective } from '../lux-file-model/lux-file-capture.directive';\nimport { LuxFileErrorCause } from '../lux-file-model/lux-file-error.interface';\nimport { ILuxFileObject } from '../lux-file-model/lux-file-object.interface';\nimport { ILuxFileUploadDeleteActionConfig } from '../lux-file-model/lux-file-upload-action-config.interface';\nimport { LuxFileDeleteDialogComponent } from '../lux-file-subcomponents/lux-file-delete-dialog/lux-file-delete-dialog.component';\nimport { LuxFileReplaceDialogComponent } from '../lux-file-subcomponents/lux-file-replace-dialog/lux-file-replace-dialog.component';\n\n@Component({\n  selector: 'lux-file-upload',\n  templateUrl: './lux-file-upload.component.html',\n  styleUrls: ['./lux-file-upload.component.scss'],\n  imports: [\n    NgClass,\n    NgTemplateOutlet,\n    MatProgressBar,\n    MatHint,\n    MatError,\n    NgStyle,\n    LuxFileCaptureDirective,\n    LuxAriaLabelDirective,\n    LuxButtonComponent,\n    LuxIconComponent,\n    LuxLinkPlainComponent,\n    TranslocoPipe\n  ]\n})\nexport class LuxFileUploadComponent extends LuxFormFileBase<ILuxFileObject[] | null> implements OnInit, AfterViewInit, OnDestroy {\n  private dialogService = inject(LuxDialogService);\n  private queryService = inject(LuxMediaQueryObserverService);\n  private themeService = inject(LuxThemeService);\n\n  @ViewChildren('fileEntry', { read: ElementRef }) fileEntries!: QueryList<ElementRef>;\n\n  @Input() override luxLabel = '';\n  @Input() luxLabelLink = '';\n  @Input() luxLabelLinkShort = '';\n  @Input() luxMultiple = true;\n  @Input() luxUploadIcon = 'lux-programming-cloud-upload';\n  @Input() luxDeleteIcon = '';\n  @Input() luxListOnly = false;\n\n  ariaLabelProgress = '';\n  theme = this.themeService.getTheme().name;\n\n  get luxUploadActionConfig(): ILuxFilesActionConfig {\n    return this._luxUploadActionConfig;\n  }\n\n  @Input() set luxUploadActionConfig(config: ILuxFilesActionConfig) {\n    if (config) {\n      this._luxUploadActionConfig = config;\n    }\n  }\n\n  get luxDeleteActionConfig(): ILuxFileUploadDeleteActionConfig {\n    return this._luxDeleteActionConfig;\n  }\n\n  @Input() set luxDeleteActionConfig(config: ILuxFileUploadDeleteActionConfig) {\n    if (config) {\n      this._luxDeleteActionConfig = config;\n    }\n  }\n\n  get luxViewActionConfig(): ILuxFileActionConfig {\n    return this._luxViewActionConfig;\n  }\n\n  @Input() set luxViewActionConfig(config: ILuxFileActionConfig) {\n    if (config) {\n      this._luxViewActionConfig = config;\n    }\n  }\n\n  get luxDownloadActionConfig(): ILuxFileActionConfig {\n    return this._luxDownloadActionConfig;\n  }\n\n  @Input() set luxDownloadActionConfig(config: ILuxFileActionConfig) {\n    if (config) {\n      this._luxDownloadActionConfig = config;\n    }\n  }\n\n  _luxUploadActionConfig: ILuxFilesActionConfig = {\n    disabled: false,\n    hidden: false,\n    iconName: 'lux-programming-cloud-upload',\n    label: ''\n  };\n\n  _luxDeleteActionConfig: ILuxFileUploadDeleteActionConfig = {\n    disabled: false,\n    hidden: false,\n    iconName: 'lux-interface-delete-bin-2',\n    label: '',\n    isDeletable: (_file: ILuxFileObject) => {\n      return true;\n    }\n  };\n  _luxViewActionConfig: ILuxFileActionConfig = {\n    disabled: false,\n    hidden: true,\n    iconName: 'lux-interface-edit-view',\n    label: ''\n  };\n  _luxDownloadActionConfig: ILuxFileActionConfig = {\n    disabled: false,\n    hidden: true,\n    iconName: 'lux-interface-download-button-2',\n    label: ''\n  };\n\n  subscriptions: Subscription[] = [];\n  fileIcons: string[] = [];\n  Math = Math;\n  isMobile = false;\n\n  dialogDeleteConfig: ILuxDialogConfig = {\n    disableClose: false,\n    width: 'auto',\n    height: 'auto',\n    panelClass: ['file-dialog', 'file-delete-dialog']\n  };\n\n  dialogReplaceConfig: ILuxDialogConfig = {\n    disableClose: false,\n    width: 'auto',\n    height: 'auto',\n    panelClass: ['file-dialog', 'file-replace-dialog']\n  };\n\n  override ngOnInit(): void {\n    if (!this.luxDeleteIcon) {\n      if (this.theme === 'authentic') {\n        this.luxDeleteIcon = 'lux-interface-delete-1';\n      } else {\n        this.luxDeleteIcon = 'lux-interface-delete-bin-5';\n      }\n    }\n\n    this.subscriptions.push(\n      this.queryService.getMediaQueryChangedAsObservable().subscribe((query) => {\n        this.isMobile = query === 'xs' || query === 'sm';\n      })\n    );\n\n    this.subscriptions.push(\n      this.themeService.getThemeAsObservable().subscribe((theme: LuxTheme) => {\n        this.theme = theme.name;\n      })\n    );\n\n    super.ngOnInit();\n  }\n\n  ngAfterViewInit() {\n    this.setFileIcons(this.formControl.value);\n    this.subscriptions.push(\n      this.fileEntries.changes.subscribe(() => {\n        this.setFileIcons(this.formControl.value);\n      })\n    );\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n\n    this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n  }\n\n  useArray(): boolean {\n    return true;\n  }\n\n  protected override notifyFormValueChanged() {\n    super.notifyFormValueChanged();\n    this.formControl.updateValueAndValidity();\n  }\n\n  resetSelected() {\n    this.luxSelected = [];\n  }\n\n  handleViewFileClick(file: ILuxFileObject) {\n    if (file.content && this.luxViewActionConfig.onClick) {\n      this.luxViewActionConfig.onClick(file);\n    }\n  }\n\n  handleDownloadClick(file: ILuxFileObject) {\n    if (this.luxDownloadActionConfig.onClick) {\n      this.luxDownloadActionConfig.onClick(file);\n    }\n  }\n\n  handleUploadClick(files: ILuxFileObject[]) {\n    if (this.luxUploadActionConfig.onClick) {\n      this.luxUploadActionConfig.onClick(files);\n    }\n  }\n\n  selectFiles(files: FileList | File[]) {\n    this.formControl.markAsTouched();\n    this.formControl.markAsDirty();\n    this.forceProgressIndeterminate = true;\n    this.announceFileProcess(files && files.length > 1);\n\n    if (!files || files.length === 0) {\n      this.forceProgressIndeterminate = false;\n      return;\n    }\n\n    // Timeout, um Flackern durch Progress zu vermeiden\n    setTimeout(() => {\n      // Prüfen, ob die Dateien bereits vorhanden sind\n      let selectedFilesArray: ILuxFileObject[] = [];\n      const replaceableFilesMap = new Map<number, File>();\n      let replaceFileDeleteProtection = false;\n      if (this.luxSelected) {\n        files = Array.from(files);\n        selectedFilesArray = Array.isArray(this.luxSelected) ? this.luxSelected : [this.luxSelected];\n        // zu ersetzende Indizes herausfinden\n        files.forEach((file: File) => {\n          const index = selectedFilesArray.findIndex((compareFile: ILuxFileObject) => compareFile.name === file.name);\n          if (index > -1) {\n            replaceableFilesMap.set(index, file);\n            replaceFileDeleteProtection = replaceFileDeleteProtection || (this.luxDeleteActionConfig.isDeletable ? !this.luxDeleteActionConfig.isDeletable(files[0]) : false);\n          }\n        });\n      }\n\n      if (this.luxMultiple) {\n        if (replaceableFilesMap.size > 0) {\n          const dialogRef = this.dialogService.openComponent(LuxFileReplaceDialogComponent, this.dialogReplaceConfig, {\n            multiple: this.luxMultiple,\n            deleteProtection: replaceFileDeleteProtection\n          });\n          this.forceProgressIndeterminate = false;\n\n          dialogRef.dialogConfirmed.subscribe(() => {\n            this.updateFilesIntern(files, selectedFilesArray, replaceableFilesMap);\n          });\n\n          dialogRef.dialogDeclined.subscribe(() => {\n            this.fileUploadInput.nativeElement.value = '';\n          });\n\n          dialogRef.dialogClosed.subscribe(() => {\n            this.fileUploadInput.nativeElement.value = '';\n          });\n        } else {\n          this.updateFilesIntern(files, selectedFilesArray, replaceableFilesMap);\n        }\n      } else {\n        if (files.length > 1) {\n          this.setFormControlErrors({\n            cause: LuxFileErrorCause.MultipleForbidden,\n            exception: this.getMultipleForbiddenMessage(),\n            file: undefined\n          });\n\n          return;\n        } else if (files.length === 1 && (!this.luxSelected || this.luxSelected.length === 0)) {\n          this.updateSelectedFiles(files).then(\n            (newFiles: ILuxFileObject[]) => {\n              this.luxSelected = newFiles;\n              this.notifyFormValueChanged();\n              this.fileUploadInput.nativeElement.value = '';\n            },\n            (error) => this.setFormControlErrors(error)\n          );\n        } else if (files.length === 1 && this.luxSelected && this.luxSelected.length > 0) {\n          const dialogRef = this.dialogService.openComponent(LuxFileReplaceDialogComponent, this.dialogReplaceConfig, {\n            multiple: this.luxMultiple,\n            deleteProtection: this.luxDeleteActionConfig.isDeletable ? !this.luxDeleteActionConfig.isDeletable(files[0]) : false\n          });\n          this.forceProgressIndeterminate = false;\n\n          dialogRef.dialogConfirmed.subscribe(() => {\n            this.updateSelectedFiles(files).then(\n              (newFiles: ILuxFileObject[]) => {\n                this.luxSelected = newFiles;\n                this.notifyFormValueChanged();\n                this.fileUploadInput.nativeElement.value = '';\n              },\n              (error) => this.setFormControlErrors(error)\n            );\n          });\n\n          dialogRef.dialogDeclined.subscribe(() => {\n            this.fileUploadInput.nativeElement.value = '';\n          });\n\n          dialogRef.dialogClosed.subscribe(() => {\n            this.fileUploadInput.nativeElement.value = '';\n          });\n        }\n      }\n    }, this.defaultReadFileDelay);\n  }\n\n  private updateFilesIntern(files: FileList | File[], selectedFilesArray: any[], replaceableFilesMap: Map<number, File>) {\n    // Begrenzung der maximalen Anzahl an Dateien\n    const currentCount = Array.isArray(this.luxSelected) ? this.luxSelected.length : this.luxSelected ? 1 : 0;\n    if (\n      this.luxMaxFileCount !== undefined &&\n      this.luxMaxFileCount !== null &&\n      currentCount + files.length - replaceableFilesMap.size > this.luxMaxFileCount\n    ) {\n      this.setFormControlErrors({\n        cause: LuxFileErrorCause.MaxFileCount,\n        exception: this.getMaxFileCountMessage(),\n        file: undefined\n      });\n      this.forceProgressIndeterminate = false;\n      return;\n    }\n\n    this.updateSelectedFiles(files).then(\n      (newFiles: ILuxFileObject[]) => {\n        const tempSelectedFiles = selectedFilesArray;\n\n        // die zu ersetzenden Dateien durchgehen und aktualisieren\n        replaceableFilesMap.forEach((file: File, index: number) => {\n          const replaceableFileObject = newFiles.find((newFile: ILuxFileObject) => newFile.name === file.name);\n          // das gefundene Objekt aus den newFiles entfernen\n          newFiles = newFiles.filter((newFile) => newFile !== replaceableFileObject);\n          // die selectedFiles aktualisieren\n          tempSelectedFiles[index] = replaceableFileObject;\n        });\n        // die übrigen neuen Dateien anfügen\n        tempSelectedFiles.push(...newFiles);\n\n        this.luxSelected =\n          tempSelectedFiles && tempSelectedFiles.length === 1 && !this.useArray() ? tempSelectedFiles[0] : tempSelectedFiles;\n        this.notifyFormValueChanged();\n        this.fileUploadInput.nativeElement.value = '';\n      },\n      (error) => this.setFormControlErrors(error)\n    );\n  }\n\n  onSelectFiles(target: EventTarget | null) {\n    const fileList = target ? (target as HTMLInputElement).files : null;\n    this.selectFiles(fileList ? Array.from(fileList) : []);\n  }\n\n  onUpload() {\n    if (!this.luxDisabled && !this.luxReadonly) {\n      this.fileUploadInput.nativeElement.click();\n    }\n  }\n\n  onRemoveFile(index: number) {\n    this.formControl.markAsTouched();\n    this.formControl.markAsDirty();\n\n    // Wenn mehrere Dateien selektiert sind, diese nach der entfernten Datei filtern ansonsten \"undefined\" nutzen\n    const newFiles = Array.isArray(this.luxSelected) ? this.luxSelected.filter((file, searchIndex) => searchIndex !== index) : null;\n\n    // Via LiveAnnouncer mitteilen welche Datei entfernt wird\n    const deletedFile = this.luxSelected![index];\n    this.announceFileRemove(deletedFile.name);\n\n    // Wir entfernen hier nur eine Datei, deshalb ist das neue Auslesen der Base64-Strings nicht nötig\n    this.uploadFiles(newFiles).then(\n      () => {\n        this.luxSelected = newFiles;\n        this.notifyFormValueChanged();\n      },\n      (error) => this.setFormControlErrors(error)\n    );\n    if (this.luxDeleteActionConfig.onClick) {\n      this.luxDeleteActionConfig.onClick(deletedFile);\n    }\n  }\n\n  openDeleteDialog(index: number) {\n    const dialogRef = this.dialogService.openComponent(LuxFileDeleteDialogComponent, this.dialogDeleteConfig);\n\n    this.subscriptions.push(\n      dialogRef.dialogConfirmed.subscribe(() => {\n        this.onRemoveFile(index);\n      })\n    );\n  }\n\n  /**\n   * Setzt die Icons für die Elemente in der Auflistung\n   * @param files\n   */\n  private setFileIcons(files: ILuxFileObject | ILuxFileObject[] | null) {\n    this.fileIcons = [];\n\n    if (!files) {\n      return;\n    }\n\n    const selectedFiles = [];\n    if (!Array.isArray(files)) {\n      selectedFiles.push(files);\n    } else {\n      selectedFiles.push(...files);\n    }\n\n    selectedFiles.forEach((selectedFile: ILuxFileObject) => {\n      let newFileIcon = 'lux-interface-content-file';\n      if (selectedFile.type) {\n        if (selectedFile.type.indexOf('image') > -1) {\n          newFileIcon = 'lux-file-image';\n        } else if (selectedFile.type.indexOf('pdf') > -1) {\n          newFileIcon = 'lux-file-pdf';\n        } else if (selectedFile.type.indexOf('spreadsheet') > -1) {\n          newFileIcon = 'lux-interface-file-delete';\n        } else if (selectedFile.type.indexOf('officedocument') > -1) {\n          newFileIcon = 'lux-file-signature';\n        } else if (selectedFile.type.indexOf('json') > -1) {\n          newFileIcon = 'lux-programming-script-file-code-1';\n        }\n      }\n      this.fileIcons.push(newFileIcon);\n    });\n    this.cdr.detectChanges();\n  }\n\n  protected override getMaxSizeErrorMessage(file: File): string {\n    return this.tService.translate(`luxc.file.upload.error_message.max_file_size`, {\n      fileName: file.name,\n      maxSizeMB: this.luxMaxSizeMB\n    });\n  }\n\n  protected override getFileNotAcceptedMessage(file: File): string {\n    return this.tService.translate(`luxc.file.upload.error_message.not_accepted`, {\n      fileName: file.name,\n      acceptTypes: LuxUtil.getAcceptTypesAsMessagePart(this.tService, this.luxAccept)\n    });\n  }\n\n  protected override getMultipleForbiddenMessage(): string {\n    return this.tService.translate(`luxc.file.upload.error_message.only_one_file`);\n  }\n\n  protected override getReadingFileErrorMessage(file: File): string {\n    return this.tService.translate(`luxc.file.upload.error_message.read_error`);\n  }\n\n  protected override getUploadFileErrorMessage(files: File[]): string {\n    return this.tService.translate(`luxc.file.upload.error_message.upload_error`);\n  }\n}\n","<div class=\"lux-file-upload-container\" [ngClass]=\"{'lux-file-upload-container-disabled': luxDisabled}\">\n  @if(!luxListOnly) {\n  <div\n    class=\"lux-file-upload-drop-container\"\n    [tabindex]=\"luxDisabled || luxReadonly ? '-1' : '0'\"\n    (click)=\"onUpload()\"\n    (keydown.enter)=\"onUpload()\"\n    [ngClass]=\"{\n      'lux-file-upload-drag-active': isDragActive,\n      'lux-file-upload-drop-container-readonly': luxReadonly,\n      'lux-file-upload-drop-container-disabled': luxDisabled,\n      'lux-file-upload-loading': forceProgressIndeterminate\n    }\"\n  >\n    <div class=\"lux-file-upload-drop-label-container\" [attr.aria-disabled]=\"luxDisabled ? 'true' : null\">\n      <lux-icon class=\"lux-file-upload-icon\" [luxIconName]=\"luxUploadIcon\" luxIconSize=\"2x\" luxPadding=\"0\" luxMargin=\"0\"></lux-icon>\n      <div class=\"lux-file-upload-label-container\">\n        <div class=\"lux-file-upload-label\" [attr.data-label]=\"isMobile ? (luxLabelLink + '&nbsp;&nbsp;') : (luxLabel + ' ' + luxLabelLink + '&nbsp;&nbsp;')\">\n          <ng-container *ngTemplateOutlet=\"isMobile ? mobileLabelTemplate : desktopLabelTemplate\"></ng-container>\n        </div>\n      </div>\n    </div>\n    @if (forceProgressIndeterminate) {\n    <mat-progress-bar\n      class=\"lux-file-upload-drop-container-progress\"\n      color=\"primary\"\n      mode=\"indeterminate\"\n      luxAriaLabel=\"{{ ariaLabelProgress || ('luxc.progress.arialabel' | transloco) }}\"\n    >\n    </mat-progress-bar>\n    } @if (!forceProgressIndeterminate) {\n    <div class=\"lux-file-upload-drop-container-no-progress\"></div>\n    }\n  </div>\n  } @if ((formHintComponent || luxHint) && !(formControl?.getError('required') && formControl?.touched) && !luxListOnly) {\n  <mat-hint class=\"lux-hint lux-file-upload-hint-container\" [id]=\"uid + '-misc'\">\n    @if (luxHint) {\n    {{ luxHint }}\n    } @else {\n    <ng-container *ngTemplateOutlet=\"formHintComponent?.templateRef ?? null\"></ng-container>\n    }\n  </mat-hint>\n  } @else if (!errorMessage) {\n  <div class=\"lux-hint lux-file-upload-no-hint-container\"></div>\n  } @if (!displayClearErrorButton && errorMessage && !forceProgressIndeterminate && formControl?.touched && !luxListOnly) {\n  <div class=\"lux-file-upload-error-container-no-button\">\n    <lux-icon\n      class=\"lux-color-red lux-alert-icon\"\n      luxIconName=\"lux-interface-alert-warning-triangle\"\n      luxIconSize=\"0.75rem\"\n      luxPadding=\"1px\"\n    ></lux-icon>\n    <mat-error [id]=\"uid + '-misc'\">\n      {{ errorMessage }}\n    </mat-error>\n  </div>\n  } @if (displayClearErrorButton && errorMessage && !forceProgressIndeterminate && formControl?.touched && !luxListOnly) {\n  <div class=\"lux-file-upload-error-container\">\n    <lux-icon\n      class=\"lux-file-upload-error-icon\"\n      luxIconName=\"lux-interface-alert-warning-triangle\"\n      luxIconSize=\"2x\"\n      luxPadding=\"0\"\n      luxMargin=\"0\"\n    ></lux-icon>\n    <mat-error [id]=\"uid + '-misc'\" class=\"lux-file-upload-error-message\">\n      {{ errorMessage }}\n    </mat-error>\n    <lux-button\n      [luxTagId]=\"uid + '-delete-error-message-button'\"\n      [luxAriaLabel]=\"errorMessage\"\n      class=\"lux-file-upload-error-button\"\n      luxIconName=\"lux-interface-delete-1\"\n      (luxClicked)=\"onCloseErrorMessage()\"\n    ></lux-button>\n  </div>\n  }\n\n  <div class=\"lux-flex lux-flex-col lux-file-upload-view-container\" [attr.aria-disabled]=\"luxDisabled ? 'true' : null\" [ngClass]=\"{ 'lux-empty': !luxSelected || luxSelected.length === 0 }\">\n    @for (file of luxSelected; track file; let i = $index) {\n    <div class=\"lux-file-upload-view-item-container\" [ngClass]=\"{ 'lux-file-upload-view-item-disabled': luxDisabled }\" #fileEntry>\n      <div class=\"lux-file-upload-view-item\">\n        <lux-icon\n          class=\"lux-file-upload-view-item-icon\"\n          luxPadding=\"0\"\n          luxMargin=\"0\"\n          [luxIconName]=\"fileIcons[i]\"\n          [luxIconSize]=\"theme === 'green' ? '2x' : '1.125rem'\"\n          aria-hidden=\"true\"\n        >\n        </lux-icon>\n        <div class=\"lux-file-upload-view-item-label-container\">\n          <div class=\"lux-file-upload-view-label\">\n            @if (file.namePrefix) {\n            <span [ngStyle]=\"{ color: !luxDisabled ? file.namePrefixColor : '', fontSize: '0.8em', fontStyle: 'italic' }\">{{\n              file.namePrefix\n            }}</span>\n            }<span class=\"lux-file-upload-label-text\">\n              @if (!luxViewActionConfig.hidden && ! luxDisabled) {\n              <lux-link-plain [luxLabel]=\"file.name\" (luxClicked)=\"viewFile(file)\"></lux-link-plain>\n              } @else {\n              {{ file.name }}\n              }</span\n            >\n            @if (file.nameSuffix) {\n            <span [ngStyle]=\"{ color: !luxDisabled ? file.nameSuffixColor : '', fontSize: '0.8em', fontStyle: 'italic' }\">{{\n              file.nameSuffix\n            }}</span>\n            }\n          </div>\n        </div>\n        @if (file.size) {\n        <span class=\"lux-file-upload-label-file-size\">{{\n          file.size > 1000 * 1024 ? (file.size / (1000 * 1024)).toFixed(1) + '&nbsp;MB' : Math.ceil(file.size / 1024) + '&nbsp;KB'\n        }}</span>\n        } @for (customConfig of luxCustomActionConfigs; track customConfig; let j = $index) { @if(!luxReadonly && !luxDisabled &&\n        !customConfig.hidden) {\n        <lux-button\n          class=\"lux-file-upload-view-item-button lux-file-upload-view-item-custom-button\"\n          [luxAriaLabel]=\"customConfig.label\"\n          luxTagId=\"lux-file-upload-entry-custom{{ j }}\"\n          [luxIconName]=\"customConfig.iconName\"\n          [luxDisabled]=\"customConfig.disabled || luxDisabled\"\n          (luxClicked)=\"customConfig.onClick ? customConfig.onClick(file) : noop()\"\n        ></lux-button>\n        } } @if (!luxReadonly && !luxDisabled && !luxDeleteActionConfig.hidden) {\n        <lux-button\n          luxAriaLabel=\"{{ 'luxc.file.upload.delete.btn.arialabel' | transloco: { fileName: file.name } }}\"\n          [luxTagId]=\"uid + '-delete-button_' + i\"\n          [luxIconName]=\"luxDeleteIcon\"\n          class=\"lux-file-upload-view-item-button lux-file-upload-view-item-delete-button\"\n          [luxDisabled]=\"luxDeleteActionConfig.disabled || luxDisabled || (luxDeleteActionConfig.isDeletable ? !luxDeleteActionConfig.isDeletable(file) : false)\"\n          (luxClicked)=\"openDeleteDialog(i)\"\n        ></lux-button>\n        }\n      </div>\n    </div>\n    }\n  </div>\n\n  <!-- File-Upload Input -->\n  <input\n    class=\"lux-file-upload-input\"\n    type=\"file\"\n    [multiple]=\"luxMultiple\"\n    [accept]=\"luxAccept\"\n    [luxFileCapture]=\"luxCapture\"\n    (change)=\"onSelectFiles($event.target)\"\n    #fileUpload\n  />\n</div>\n\n<!-- Download-Node -->\n<a class=\"lux-file-download\" aria-hidden=\"true\" download=\"\" #downloadLink></a>\n\n<ng-template #desktopLabelTemplate>\n  @if(theme === 'green') {\n  <span class=\"lux-file-upload-label-text\">{{ luxLabel || ('luxc.file.upload.label' | transloco) }}</span\n  ><a class=\"lux-file-upload-link\">{{ luxLabelLink || ('luxc.file.upload.label.link' | transloco) }}</a\n  >@if (luxRequired) {\n  <span>&nbsp;*</span>\n  } } @else {\n  <span class=\"lux-file-upload-label-text\">{{ luxLabel || ('luxc.file.upload.label' | transloco) }}</span\n  ><lux-link-plain class=\"lux-file-upload-link\" [luxLabel]=\"(luxLabelLink || ('luxc.file.upload.label.link' | transloco)) + (luxRequired ? '&nbsp;*' : '')\" [luxDisabled]=\"luxDisabled\"></lux-link-plain>\n  }\n</ng-template>\n\n<ng-template #mobileLabelTemplate>\n  @if(theme === 'green') {\n  <a class=\"lux-file-upload-link\">{{ luxLabelLinkShort || ('luxc.file.upload.label.link.short' | transloco) }}</a\n  >@if (luxRequired) {\n  <span>&nbsp;*</span>\n  } } @else {\n  <lux-link-plain class=\"lux-file-upload-link\" [luxLabel]=\"(luxLabelLink || ('luxc.file.upload.label.link' | transloco)) + (luxRequired ? '&nbsp;*' : '')\" [luxDisabled]=\"luxDisabled\"></lux-link-plain>\n  }\n</ng-template>\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component, ContentChild, HostBinding, Input, OnDestroy, TemplateRef, inject } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatRadioButton, MatRadioGroup } from '@angular/material/radio';\nimport { Subscription } from 'rxjs';\nimport { LuxAriaDescribedbyDirective } from '../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxAriaInvalidDirective } from '../../lux-directives/lux-aria/lux-aria-invalid.directive';\nimport { LuxAriaLabelledbyDirective } from '../../lux-directives/lux-aria/lux-aria-labelledby.directive';\nimport { LuxAriaRequiredDirective } from '../../lux-directives/lux-aria/lux-aria-required.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxRenderPropertyPipe } from '../../lux-pipes/lux-render-property/lux-render-property.pipe';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxFormSelectableBase } from '../lux-form-model/lux-form-selectable-base.class';\n\n@Component({\n  selector: 'lux-radio-ac',\n  templateUrl: './lux-radio-ac.component.html',\n  styleUrls: ['./lux-radio-ac.component.scss'],\n  imports: [\n    LuxFormControlWrapperComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatRadioGroup,\n    NgClass,\n    MatRadioButton,\n    NgTemplateOutlet,\n    LuxAriaInvalidDirective,\n    LuxAriaRequiredDirective,\n    LuxAriaDescribedbyDirective,\n    LuxAriaLabelledbyDirective,\n    LuxTagIdDirective,\n    LuxRenderPropertyPipe\n  ]\n})\nexport class LuxRadioAcComponent<O = any, V = any> extends LuxFormSelectableBase<O, V> implements OnDestroy {\n  private mediaObserver = inject(LuxMediaQueryObserverService);\n\n  forceVertical = false;\n\n  // Potenziell eingebettetes Template für Darstellung der Labels\n  @ContentChild(TemplateRef) tempRef?: TemplateRef<any>;\n\n  @HostBinding('class.lux-pb-3') pb3 = true;\n  @Input() luxGroupName = '';\n  @Input() luxOrientationVertical = true;\n  @Input() luxNoLabels = false;\n  @Input() luxNoTopLabel = false;\n  @Input() luxNoBottomLabel = false;\n\n  focused = false;\n\n  private mediaSubscription$: Subscription;\n\n  constructor() {\n    super();\n\n    this.mediaSubscription$ = this.mediaObserver.getMediaQueryChangedAsObservable().subscribe(() => {\n      this.forceVertical = this.mediaObserver.isXS();\n    });\n    this.forceVertical = this.mediaObserver.isXS();\n  }\n\n  get isVertical(): boolean {\n    return this.luxOrientationVertical || this.forceVertical;\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n    this.mediaSubscription$.unsubscribe();\n  }\n\n  onFocusIn(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocusIn.emit(e);\n  }\n\n  onFocusOut(e: FocusEvent) {\n    this.focused = false;\n    this.luxFocusOut.emit(e);\n  }\n\n  descripedBy() {\n    if (this.errorMessage) {\n      return this.uid + '-error';\n    } else {\n      return (this.formHintComponent || this.luxHint) && (!this.luxHintShowOnlyOnFocus || (this.luxHintShowOnlyOnFocus && this.focused))\n        ? this.uid + '-hint'\n        : undefined;\n    }\n  }\n\n  isDisabled(option: any): boolean {\n    return option ? Object.hasOwn(option, 'disabled') && option.disabled === true : false;\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  [luxFormComponent]=\"this\"\n  [luxNoInputRow]=\"true\"\n  [luxLabelLongFormat]=\"luxLabelLongFormat\"\n  [formGroup]=\"formGroup\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  luxTagId=\"luxRadioWrapper\"\n>\n  <mat-radio-group\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [name]=\"luxGroupName\"\n    [formControl]=\"formControl\"\n    class=\"lux-radio\"\n    [ngClass]=\"{ 'lux-vertical': isVertical, 'lux-horizontal': !isVertical }\"\n    [required]=\"luxRequired\"\n    (focusin)=\"onFocusIn($event)\"\n    (focusout)=\"onFocusOut($event)\"\n    [luxAriaLabelledby]=\"uid + '-label'\"\n    [attr.aria-disabled]=\"luxDisabled ? 'true' : null\"\n    [id]=\"uid\"\n  >\n    @for (option of luxOptions; track option; let i = $index) {\n    <mat-radio-button\n      [value]=\"luxPickValue ? _luxOptionsPickValue[i] : option\"\n      [disableRipple]=\"true\"\n      color=\"primary\"\n      [luxAriaDescribedby]=\"descripedBy()\"\n      luxAriaDescribedbySelector=\".mat-radio-input\"\n      [luxAriaRequired]=\"luxRequired\"\n      [disabled]=\"isDisabled(option)\"\n      luxAriaRequiredSelector=\".mat-radio-input\"\n      [luxAriaInvalid]=\"'' + formControl.invalid\"\n      luxAriaInvalidSelector=\".mat-radio-input\"\n    >\n      <ng-container\n        *ngTemplateOutlet=\"tempRef && !luxOptionLabelProp ? tempRef : noTemplateRefTemplate; context: { $implicit: option }\"\n      ></ng-container>\n    </mat-radio-button>\n    }\n  </mat-radio-group>\n  <ng-content select=\"lux-form-hint\"></ng-content>\n</lux-form-control-wrapper>\n}\n\n<ng-template #noTemplateRefTemplate let-option>\n  @if (option && luxOptionLabelProp && option[luxOptionLabelProp]) {\n  {{ option | luxRenderProperty : luxOptionLabelProp }}\n  } @else { @if (!!option) {\n  {{ option }}\n  } }\n</ng-template>\n","import { NgClass } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatSlider, MatSliderThumb } from '@angular/material/slider';\nimport { Subscription } from 'rxjs';\nimport { LuxAriaDescribedbyDirective } from '../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxAriaInvalidDirective } from '../../lux-directives/lux-aria/lux-aria-invalid.directive';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxAriaRequiredDirective } from '../../lux-directives/lux-aria/lux-aria-required.directive';\nimport { LuxTabIndexDirective } from '../../lux-directives/lux-tabindex/lux-tab-index.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxFormComponentBase } from '../lux-form-model/lux-form-component-base.class';\n\nexport declare type LuxDisplayWithAcFnType = (value: number) => string;\nexport declare type LuxSliderAcTickInterval = 'auto' | number;\nexport declare type LuxSliderAcColor = 'primary' | 'accent' | 'warn';\n\n@Component({\n  selector: 'lux-slider-ac',\n  templateUrl: './lux-slider-ac.component.html',\n  styleUrls: ['./lux-slider-ac.component.scss'],\n  imports: [\n    LuxFormControlWrapperComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatSlider,\n    MatSliderThumb,\n    NgClass,\n    LuxAriaLabelDirective,\n    LuxAriaRequiredDirective,\n    LuxAriaInvalidDirective,\n    LuxAriaDescribedbyDirective,\n    LuxTagIdDirective,\n    LuxTabIndexDirective\n  ]\n})\nexport class LuxSliderAcComponent extends LuxFormComponentBase<number> implements OnInit, OnChanges, OnDestroy {\n  @ViewChild(MatSlider) matSlider?: MatSlider;\n\n  @Output() luxChange = new EventEmitter<number>();\n  @Output() luxInput = new EventEmitter<number>();\n  @Output() luxValueChange = new EventEmitter<number>();\n  @Output() luxValuePercent = new EventEmitter<number>();\n\n  @Input() luxColor: LuxSliderAcColor = 'primary';\n  @Input() luxShowThumbLabel = true;\n  @Input() luxTagId?: string;\n  @Input() luxNoLabels = false;\n  @Input() luxNoTopLabel = false;\n  @Input() luxNoBottomLabel = false;\n\n  get luxValue(): number {\n    const value = this.getValue();\n    return value ?? 0;\n  }\n\n  @Input() set luxValue(value: number) {\n    if (!this.luxReadonly && !this.luxDisabled) {\n      this.setValue(value);\n    }\n  }\n\n  _luxMax = 100;\n  override _luxRequired = false;\n  _luxMin = 0;\n  _luxStep = 1;\n  _luxDisplayWith: LuxDisplayWithAcFnType = (value: number) => (value ? '' + value : '0');\n\n  subscription?: Subscription;\n\n  get luxDisplayWith() {\n    return this._luxDisplayWith;\n  }\n\n  @Input()\n  set luxDisplayWith(displayFn: LuxDisplayWithAcFnType | undefined) {\n    this._luxDisplayWith = displayFn ?? ((value) => (value ? '' + value : '0'));\n  }\n\n  get luxMax() {\n    return this._luxMax;\n  }\n\n  @Input() set luxMax(value: number) {\n    this._luxMax = value;\n\n    if (value > 0 && value > this.luxMin) {\n      this._luxMax = value;\n    }\n  }\n\n  get luxMin() {\n    return this._luxMin;\n  }\n\n  @Input() set luxMin(value: number) {\n    this._luxMin = value;\n\n    if (value >= 0 && value < this.luxMax) {\n      this._luxMin = value;\n    }\n  }\n\n  get luxStep() {\n    return this._luxStep;\n  }\n\n  @Input() set luxStep(value: number) {\n    this._luxStep = value;\n\n    if (value <= this.luxMax - this.luxMin) {\n      this._luxStep = value;\n    }\n  }\n\n  override get luxRequired() {\n    return this._luxRequired;\n  }\n\n  @Input() override set luxRequired(value: boolean) {\n    this._luxRequired = value;\n\n    if (value) {\n      this.logger.error('The LuxSlider cannot be marked as required.');\n    }\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n\n    this.subscription = this.formControl.statusChanges.subscribe((status: string) => {\n      if (status === 'DISABLED') {\n        this.redrawSliderWorkaround();\n      }\n    });\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    if (simpleChanges['luxDisabled']) {\n      this.redrawSliderWorkaround();\n    }\n  }\n\n  /**\n   * Wird beim Ändern des Slider-Wertes aufgerufen.\n   * @param value\n   */\n  onChange(value: number) {\n    this.luxValue = value;\n    this.luxChange.emit(value);\n  }\n\n  /**\n   * Wird beim Bewegen des Sliders aufgerufen.\n   * @param value\n   */\n  onInput(value: number) {\n    this.luxValue = value;\n    this.luxInput.emit(value);\n    if (!this.formControl.touched) {\n      this.formControl.markAsTouched();\n    }\n  }\n\n  descripedBy() {\n    if (this.errorMessage) {\n      return this.uid + '-error';\n    } else {\n      return this.formHintComponent || this.luxHint ? this.uid + '-hint' : undefined;\n    }\n  }\n\n  override notifyFormValueChanged(formValue: any) {\n    if (this.luxValue < this.luxMin) {\n      setTimeout(() => {\n        this.luxValue = this.luxMin;\n      });\n    } else if (this.luxValue > this.luxMax) {\n      setTimeout(() => {\n        this.luxValue = this.luxMax;\n      });\n    } else {\n      this.luxValueChange.emit(formValue);\n      this.luxValuePercent.emit(((formValue - this.luxMin) * 100) / (this.luxMax - this.luxMin));\n    }\n  }\n\n  /**\n   * Workaround, ohne den der Slider leider nicht beim Wechsel zum disabled-State den Gab\n   * um den Thumb herum zeichnet.\n   */\n  private redrawSliderWorkaround() {\n    if (this.matSlider) {\n      this.matSlider.step = this.luxStep - 1;\n      setTimeout(() => {\n        if (this.matSlider) {\n          this.matSlider.step = this.luxStep;\n        }\n      });\n    }\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  [luxNoInputRow]=\"true\"\n  [luxFormComponent]=\"this\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  [formGroup]=\"formGroup\"\n  [luxLabelLongFormat]=\"luxLabelLongFormat\"\n  luxTagId=\"luxSliderWrapper\"\n>\n  <mat-slider\n    [luxTabIndex]=\"luxReadonly ? '-1' : '0'\"\n    [luxPotentialChildren]=\"['input']\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [color]=\"luxColor\"\n    [max]=\"luxMax\"\n    [min]=\"luxMin\"\n    [step]=\"luxStep\"\n    [discrete]=\"luxShowThumbLabel\"\n    [displayWith]=\"_luxDisplayWith\"\n    class=\"lux-slider-ac\"\n    [luxAriaDescribedby]=\"descripedBy()\"\n    [luxAriaInvalid]=\"'' + formControl.invalid\"\n    [luxAriaRequired]=\"luxRequired\"\n    [luxAriaLabel]=\"luxLabel\"\n    tabIndex=\"-1\"\n    #ngSlider\n    ><input\n      [id]=\"uid\"\n      matSliderThumb\n      [ngClass]=\"{ 'lux-readonly': luxReadonly }\"\n      [formControl]=\"formControl\"\n      [value]=\"luxValue\"\n      (valueChange)=\"onChange($event)\"\n      #ngSliderThumb=\"matSliderThumb\"\n      (input)=\"onInput(ngSliderThumb.value)\"\n      [readOnly]=\"luxReadonly\"\n    />\n  </mat-slider>\n</lux-form-control-wrapper>\n}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { Component, inject, Input, OnInit } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatInput } from '@angular/material/input';\nimport { LuxAriaDescribedbyDirective } from '../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxMaxLengthDirective } from '../lux-form-control/lux-form-directives/lux-maxlength/lux-max-length.directive';\nimport { LuxNameDirectiveDirective } from '../lux-form-control/lux-form-directives/lux-name/lux-name-directive.directive';\nimport { LuxFormInputBaseClass } from '../lux-form-model/lux-form-input-base.class';\n\n@Component({\n  selector: 'lux-textarea-ac',\n  templateUrl: './lux-textarea-ac.component.html',\n  styleUrls: [],\n  imports: [\n    LuxFormControlWrapperComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatInput,\n    CdkTextareaAutosize,\n    LuxNameDirectiveDirective,\n    LuxMaxLengthDirective,\n    LuxTagIdDirective,\n    LuxAriaDescribedbyDirective\n  ]\n})\nexport class LuxTextareaAcComponent<T = string> extends LuxFormInputBaseClass<T> implements OnInit {\n\n  private liveAnnouncer = inject(LiveAnnouncer);\n\n  @Input() luxMaxRows = -1;\n  @Input() luxMinRows = 0;\n  @Input() luxNoLabels = false;\n  @Input() luxNoTopLabel = false;\n  @Input() luxNoBottomLabel = false;\n  @Input() luxHideCounterLabel = false;\n  @Input() set luxMaxLength(maxLength: number) {\n    this._luxMaxLength = maxLength;\n    if (this.formControl) {\n      // Erst nach ngOnInit() vorhanden\n      this.updateCounterLabel();\n    }\n  }\n  get luxMaxLength() {\n    return this._luxMaxLength;\n  }\n\n  focused = false;\n  counterLabel = '';\n  _luxMaxLength = 0;\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.updateCounterLabel();\n  }\n\n  override notifyFormValueChanged(formValue: any) {\n    this.updateCounterLabel();\n    super.notifyFormValueChanged(formValue);\n  }\n\n  onFocus(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocus.emit(e);\n  }\n  onFocusIn(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocusIn.emit(e);\n  }\n  onFocusOut(e: FocusEvent) {\n    this.focused = false;\n    this.luxFocusOut.emit(e);\n  }\n  descripedBy() {\n    if (this.errorMessage) {\n      return this.uid + '-error';\n    } else {\n      return (this.formHintComponent || this.luxHint) && (!this.luxHintShowOnlyOnFocus || (this.luxHintShowOnlyOnFocus && this.focused))\n        ? this.uid + '-hint'\n        : undefined;\n    }\n  }\n\n  private updateCounterLabel() {\n    if (this.luxMaxLength > 0) {\n      if (typeof this.formControl.value === 'string') {\n        this.counterLabel = this.formControl.value.length + '/' + this.luxMaxLength;\n      } else {\n        this.counterLabel = '0/' + this.luxMaxLength;\n      }\n      this.liveAnnouncer.announce(this.counterLabel);\n    } else {\n      this.counterLabel = '';\n    }\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  (click)=\"!luxDisabled && !luxReadonly ? textareaElement.focus() : null\"\n  [luxFormComponent]=\"this\"\n  [luxCounterLabel]=\"counterLabel\"\n  [luxHideCounterLabel]=\"luxHideCounterLabel\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  [formGroup]=\"formGroup\"\n  [luxLabelLongFormat]=\"luxLabelLongFormat\"\n  luxTagId=\"luxTextareaWrapper\"\n>\n  <textarea\n    matInput\n    luxTagIdHandler\n    [luxNameAttr]=\"luxName\"\n    [luxTagId]=\"luxTagId\"\n    [placeholder]=\"luxPlaceholder\"\n    [formControl]=\"formControl\"\n    [luxMaxLengthAttr]=\"luxMaxLength\"\n    [cdkTextareaAutosize]=\"true\"\n    [cdkAutosizeMinRows]=\"luxMinRows\"\n    [cdkAutosizeMaxRows]=\"luxMaxRows\"\n    [required]=\"luxRequired\"\n    [readonly]=\"luxReadonly\"\n    [autocomplete]=\"luxAutocomplete\"\n    (blur)=\"luxBlur.emit($event)\"\n    (focus)=\"luxFocus.emit($event)\"\n    (focusin)=\"luxFocusIn.emit($event)\"\n    (focusout)=\"luxFocusOut.emit($event)\"\n    [id]=\"uid\"\n    [luxAriaDescribedby]=\"descripedBy()\"\n    #textareaElement\n  ></textarea>\n</lux-form-control-wrapper>\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { LuxAriaDescribedbyDirective } from '../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxAriaInvalidDirective } from '../../lux-directives/lux-aria/lux-aria-invalid.directive';\nimport { LuxAriaRequiredDirective } from '../../lux-directives/lux-aria/lux-aria-required.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxFormControlWrapperComponent } from '../lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxFormCheckableBaseClass } from '../lux-form-model/lux-form-checkable-base.class';\n\n@Component({\n  selector: 'lux-toggle-ac',\n  templateUrl: './lux-toggle-ac.component.html',\n  styleUrls: ['./lux-toggle-ac.component.scss'],\n  imports: [\n    LuxFormControlWrapperComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    MatSlideToggle,\n    NgTemplateOutlet,\n    LuxAriaDescribedbyDirective,\n    LuxAriaRequiredDirective,\n    LuxAriaInvalidDirective,\n    LuxTagIdDirective\n  ]\n})\nexport class LuxToggleAcComponent<T = boolean> extends LuxFormCheckableBaseClass<T> implements OnInit {\n  @Input() luxNoLabels = false;\n  @Input() luxNoTopLabel = false;\n  @Input() luxNoBottomLabel = false;\n\n  focused = false;\n\n  onFocusIn(e: FocusEvent) {\n    this.focused = true;\n    this.luxFocusIn.emit(e);\n  }\n\n  onFocusOut(e: FocusEvent) {\n    this.focused = false;\n    this.luxFocusOut.emit(e);\n  }\n\n  descripedBy() {\n    if (this.errorMessage) {\n      return this.uid + '-error';\n    } else {\n      return (this.formHintComponent || this.luxHint) && (!this.luxHintShowOnlyOnFocus || (this.luxHintShowOnlyOnFocus && this.focused))\n        ? this.uid + '-hint'\n        : undefined;\n    }\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  [luxFormComponent]=\"this\"\n  [luxNoInputRow]=\"true\"\n  [formGroup]=\"formGroup\"\n  [luxIgnoreDefaultLabel]=\"true\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  (click)=\"formControl.markAsTouched()\"\n  luxTagId=\"luxToggleWrapper\"\n>\n  <mat-slide-toggle\n    luxTagIdHandler\n    class=\"lux-toggle\"\n    [luxTagId]=\"luxTagId\"\n    [disableRipple]=\"true\"\n    [required]=\"luxRequired\"\n    [formControl]=\"formControl\"\n    color=\"primary\"\n    (focusin)=\"onFocusIn($event)\"\n    (focusout)=\"onFocusOut($event)\"\n    [id]=\"uid\"\n    [luxAriaDescribedby]=\"descripedBy()\"\n    luxAriaDescribedbySelector=\".mat-slide-toggle-input\"\n    [luxAriaRequired]=\"luxRequired\"\n    luxAriaRequiredSelector=\".mat-slide-toggle-input\"\n    [luxAriaInvalid]=\"'' + formControl.invalid\"\n    luxAriaInvalidSelector=\".mat-slide-toggle-input\"\n    tabIndex=\"{{ luxReadonly ? -1 : 0 }}\"\n    #slidetoggle\n  >\n    @if (formLabelComponent || luxLabel) {\n    <span class=\"lux-form-label\">\n      @if (luxLabel) {&nbsp;{{ luxLabel }}&nbsp;} @else {<!-- Nicht in die nächste Zeile verschieben, sonst bricht das Label an dem Leerzeichen um. -->\n      <ng-container *ngTemplateOutlet=\"formLabelComponent?.templateRef ?? null\"></ng-container>\n      }{{ luxRequired ? '&nbsp;*' : '' }}<!-- Nicht in die nächste Zeile verschieben, sonst bricht das Label an dem Leerzeichen um. -->\n    </span>\n    }\n  </mat-slide-toggle>\n</lux-form-control-wrapper>\n}\n","export class LuxFilter {\n  id?: string;\n  name = '';\n  data: any = {};\n}\n","import { LuxFormComponentBase } from '../../lux-form/lux-form-model/lux-form-component-base.class';\nimport { LuxThemePalette } from '../../lux-util/lux-colors.enum';\n\nexport class LuxFilterItem<T = any> {\n  public static DEFAULT_VALUES = [undefined, null, false, ''];\n\n  label: string;\n  binding: string;\n  component: LuxFormComponentBase<T>;\n  defaultValues: any[] = [...LuxFilterItem.DEFAULT_VALUES];\n  value: T = this.defaultValues[0];\n  color: LuxThemePalette = 'primary';\n  disabled = false;\n  hidden = false;\n  multiValueIndex = -1;\n  renderFn: (filter: LuxFilterItem<T>, value: T) => string = (filterItem: LuxFilterItem<T>, value: any) => value;\n\n  constructor(label: string, binding: string, component: LuxFormComponentBase<T>) {\n    this.label = label;\n    this.binding = binding;\n    this.component = component;\n  }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { AfterViewInit, Component, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect, MatSelectChange } from '@angular/material/select';\nimport { Subscription } from 'rxjs';\nimport { LuxAriaDescribedbyDirective } from '../../lux-directives/lux-aria/lux-aria-describedby.directive';\nimport { LuxAriaLabelledbyDirective } from '../../lux-directives/lux-aria/lux-aria-labelledby.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxFormControlWrapperComponent } from '../../lux-form/lux-form-control-wrapper/lux-form-control-wrapper.component';\nimport { LuxSelectFilterDirective } from '../../lux-form/lux-select-filter/lux-select-filter.directive';\nimport { LuxSelectPanelFilterComponent } from '../../lux-form/lux-select-filter/lux-select-panel-filter.component';\nimport { LuxSelectVisibleOptionCountDirective } from '../../lux-form/lux-select-filter/lux-select-visible-option-count.directive';\nimport { LuxLookupComponent } from '../lux-lookup-model/lux-lookup-component';\nimport { LuxLookupErrorStateMatcher } from '../lux-lookup-model/lux-lookup-error-state-matcher';\nimport { LuxLookupTableEntry } from '../lux-lookup-model/lux-lookup-table-entry';\n\n@Component({\n  selector: 'lux-lookup-combobox-ac',\n  templateUrl: './lux-lookup-combobox-ac.component.html',\n  styleUrls: ['./lux-lookup-combobox-ac.component.scss'],\n  imports: [\n    LuxFormControlWrapperComponent,\n    ReactiveFormsModule,\n    NgClass,\n    MatSelect,\n    LuxTagIdDirective,\n    LuxAriaDescribedbyDirective,\n    LuxAriaLabelledbyDirective,\n    MatOption,\n    NgStyle,\n    LuxSelectPanelFilterComponent,\n    LuxSelectFilterDirective,\n    LuxSelectVisibleOptionCountDirective\n  ]\n})\nexport class LuxLookupComboboxAcComponent<T = LuxLookupTableEntry> extends LuxLookupComponent<T> implements AfterViewInit, OnDestroy {\n  /**\n   * Wenn es weniger oder gleich viele selektierte Einträge sind, wird der höchste Index ermittelt und alle Optionen bis dahin geladen.\n   * Wenn es mehr sind, werden alle Optionen nachgeladen, um Performance-Probleme beim Ermitteln des höchsten Index zu vermeiden.\n   */\n  private static readonly SELECTED_ENTRIES_THRESHOLD = 5;\n\n  /**\n   * Aktiviert die Mehrfachauswahl (Mehrfachselektion) in der Combobox.\n   */\n  @Input() luxMultiple = false;\n\n  /**\n   * Größe des Nachlade-Blocks für die angezeigten Einträge.\n   *\n   * Beim Öffnen werden initial nur so viele Einträge gerendert. Sobald der User im Panel scrollt,\n   * werden weitere Einträge in Blöcken dieser Größe nachgeladen.\n   */\n  @Input() luxEntryBlockSize = 25;\n\n  /**\n   * Begrenzt die Anzahl der gleichzeitig sichtbaren Optionen im geöffneten Panel.\n   * Werte <= 0 deaktivieren das Override und verwenden die Standardhöhe.\n   */\n  @Input() luxVisibleOptionCount?: number | null;\n\n  /**\n   * Steuert, ob ein zusätzlicher Leereintrag (\"keine Auswahl\") angeboten wird.\n   *\n   * Der Leereintrag wird nur im Single-Select angezeigt (also wenn {@link luxMultiple} = false).\n   */\n  @Input() luxWithEmptyEntry = true;\n\n  /**\n   * Blendet ein Filterfeld im Auswahl-Panel ein und aktiviert die clientseitige Filterung\n   * in den aktuell geladenen Einträgen.\n   */\n  @Input() luxEnableFilter = false;\n\n  /**\n   * Platzhalter-Text des Filtereingabefeldes im Panel.\n   *\n   * Wird zusätzlich als ARIA-Label am nativen Input gesetzt.\n   */\n  @Input() luxFilterPlaceholder = 'Filter';\n  /**\n   * Aktueller Textwert des Filterfeldes.\n   */\n  @Input() luxFilterValue = '';\n  /**\n   * ARIA-Label für die Schaltfläche zum Löschen des Filterwertes.\n   */\n  @Input() luxFilterClearAriaLabel = 'Clear filter';\n\n  /**\n   * Blendet alle Standard-Labels des Formularfeldes aus.\n   */\n  @Input() luxNoLabels = false;\n\n  /**\n   * Blendet das obere Label (z.B. Feldbezeichnung) aus.\n   */\n  @Input() luxNoTopLabel = false;\n\n  /**\n   * Blendet das untere Label (z.B. Fehlermeldungen/Hinweise) aus.\n   */\n  @Input() luxNoBottomLabel = false;\n\n  @ViewChild(MatSelect) matSelect!: MatSelect;\n  @ViewChild(LuxSelectFilterDirective) filterDirective?: LuxSelectFilterDirective;\n\n  stateMatcher: LuxLookupErrorStateMatcher;\n  displayedEntries: LuxLookupTableEntry[] = [];\n  invisibleEntries: LuxLookupTableEntry[] = [];\n  /**\n   * Einträge in der Render-Reihenfolge: selektierte zuerst, dann rest.\n   */\n  renderedEntries: LuxLookupTableEntry[] = [];\n  subscription?: Subscription;\n  private panelScrollHandler?: EventListener;\n  private panelElement?: Element;\n\n  /**\n   * Label-Extractor für Filter-Directive.\n   * Wird als Arrow-Function definiert um this-Kontext zu erhalten.\n   */\n  filterLabelFn = (entry: LuxLookupTableEntry, _index: number): string => {\n    const key = entry?.key ?? '';\n    const label = this.getLabel(entry);\n    return `${key} ${label}`;\n  };\n\n  constructor() {\n    super();\n    this.stateMatcher = new LuxLookupErrorStateMatcher(this);\n  }\n\n  override notifyFormValueChanged(formValue: any): void {\n    super.notifyFormValueChanged(formValue);\n    this.ensureSelectedEntriesLoaded();\n  }\n\n  ngAfterViewInit() {\n    this.ensureInitialFilterEntriesLoaded();\n\n    this.subscription = this.matSelect.openedChange.subscribe((open: boolean) => {\n      if (open) {\n        // Selektierte Einträge nach oben sortieren\n        this.refreshRenderedEntries();\n\n        // Panel ist beim ersten Öffnen eventuell noch nicht initialisiert\n        setTimeout(() => {\n          if (this.matSelect.panel) {\n            this.registerPanelScrollEvent(this.matSelect.panel.nativeElement);\n          }\n        });\n\n        // Items an Directive übergeben\n        if (this.filterDirective) {\n          this.filterDirective.setItems(this.renderedEntries);\n        }\n      } else {\n        this.removePanelScrollEvent();\n      }\n    });\n  }\n\n  override ngOnDestroy() {\n    super.ngOnDestroy();\n    this.subscription?.unsubscribe();\n    this.removePanelScrollEvent();\n  }\n\n  /**\n   * Vergleicht die Optionen anhand der Key-Werte\n   * @param value1\n   * @param value2\n   * @returns boolean\n   */\n  compareByKey(value1: LuxLookupTableEntry, value2: LuxLookupTableEntry) {\n    const key1 = value1 ? value1.key : -1;\n    const key2 = value2 ? value2.key : -2;\n    return key1 === key2;\n  }\n\n  override setLookupData(entries: LuxLookupTableEntry[]) {\n    super.setLookupData(entries);\n\n    this.displayedEntries = [];\n    this.invisibleEntries = [...entries];\n    this.updateDisplayedEntries(this.shouldLoadAllEntriesForActiveFilter() ? this.invisibleEntries.length : this.luxEntryBlockSize);\n    this.ensureSelectedEntriesLoaded();\n    this.refreshRenderedEntries();\n  }\n\n  /**\n   * Setzt den aktuellen Value-Wert auf den ausgewählten Wert.\n   * @param selectChange\n   */\n  selected(selectChange: MatSelectChange) {\n    this.luxValue = selectChange.value;\n  }\n\n  /**\n   * Wird aufgerufen, wenn sich der Filter-Aktiv-Status ändert.\n   * Lädt bei aktivem Filter alle invisibleEntries nach.\n   */\n  onFilterActiveChange(isActive: boolean): void {\n    if (isActive && this.invisibleEntries.length > 0) {\n      this.updateDisplayedEntries(this.invisibleEntries.length);\n      this.filterDirective?.setItems(this.renderedEntries);\n    }\n  }\n\n  /**\n   * Fügt beim öffnen des Selects einen Scroll-Listener hinzu.\n   * @param panelElement\n   */\n  private registerPanelScrollEvent(panelElement: Element) {\n    if (this.panelElement !== panelElement) {\n      this.removePanelScrollEvent();\n      this.panelElement = panelElement;\n      this.panelScrollHandler = (event: Event) => this.loadOnScroll(event);\n      this.panelElement.addEventListener('scroll', this.panelScrollHandler);\n    }\n  }\n\n  private removePanelScrollEvent() {\n    if (this.panelElement && this.panelScrollHandler) {\n      this.panelElement.removeEventListener('scroll', this.panelScrollHandler);\n      this.panelElement = undefined;\n      this.panelScrollHandler = undefined;\n    }\n  }\n\n  private loadOnScroll(event: Event) {\n    // Nicht scrollen wenn Filter aktiv\n    if (this.filterDirective?.isFilterActive()) {\n      return;\n    }\n\n    const position = event.target as any;\n    if (position && (position.scrollTop + position.clientHeight) / position.scrollHeight > 85 / 100) {\n      this.updateDisplayedEntries();\n    }\n  }\n\n  /**\n   * Lädt den nächsten Block Daten aus den Entries nach.\n   */\n  updateDisplayedEntries(blockSize = this.luxEntryBlockSize) {\n    if (this.invisibleEntries.length > 0) {\n      const start = 0;\n      const end = Math.min(blockSize, this.invisibleEntries.length);\n      this.displayedEntries.push(...this.invisibleEntries.splice(start, end));\n    }\n\n    // Sortierung aktualisieren\n    this.refreshRenderedEntries();\n\n    // Items an Directive übergeben\n    if (this.filterDirective) {\n      this.filterDirective.setItems(this.renderedEntries);\n    }\n  }\n\n  /**\n   * Stellt sicher, dass die selektierten Eintr�ge in displayedEntries geladen sind.\n   * Wenn nicht, werden sie nachgeladen.\n   */\n  ensureSelectedEntriesLoaded() {\n    if (Array.isArray(this.luxValue)) {\n      this.ensureMultipleSelectedEntriesLoaded();\n    } else {\n      this.ensureSingleSelectedEntryLoaded();\n    }\n  }\n\n  /**\n   * Wrapper-Klick: Fokus setzen und Panel öffnen (falls erlaubt).\n   * Verwendet mousedown statt click, um Event-Bubbling nicht zu stören.\n   */\n  onWrapperClick(event: MouseEvent) {\n    if (this.luxDisabled || this.luxReadonly) {\n      return;\n    }\n\n    // Nicht auf mat-option Elemente reagieren (diese haben ihre eigene Logik)\n    const target = event.target as HTMLElement;\n    if (target.closest('mat-option')) {\n      return;\n    }\n\n    // Fokus setzen über das zugrunde liegende MatSelect\n    try {\n      this.matSelect?.focus();\n    } catch {\n      // Ignorieren falls nicht möglich\n    }\n\n    // Panel nur öffnen, wenn noch nicht offen\n    if (this.matSelect && !this.matSelect.panelOpen) {\n      this.matSelect!.open();\n    }\n  }\n\n  private ensureSingleSelectedEntryLoaded() {\n    if (this.luxValue && this.invisibleEntries.length > 0) {\n      // Prüfen, ob der selektierte Wert bereits in displayedEntries ist.\n      const selectedFound = this.displayedEntries.some((entry) => this.compareByKey(entry, this.luxValue as LuxLookupTableEntry));\n\n      if (!selectedFound) {\n        // Finde den Index des selektierten Eintrags\n        const newIndex = this.invisibleEntries.findIndex((entry) => this.compareByKey(entry, this.luxValue as LuxLookupTableEntry));\n        if (newIndex >= 0) {\n          this.updateDisplayedEntries(newIndex + 1);\n        }\n      }\n    }\n  }\n\n  private ensureMultipleSelectedEntriesLoaded() {\n    const luxValueArray = this.luxValue as LuxLookupTableEntry[];\n    if (luxValueArray.length > 0 && this.invisibleEntries.length > 0) {\n      if (luxValueArray.length <= LuxLookupComboboxAcComponent.SELECTED_ENTRIES_THRESHOLD) {\n        // Prüfen, ob alle selektierten Werte bereits in displayedEntries sind.\n        const allSelectedFound = luxValueArray.every((selectedEntry: LuxLookupTableEntry) =>\n          this.displayedEntries.some((entry) => this.compareByKey(entry, selectedEntry))\n        );\n\n        if (!allSelectedFound) {\n          // Finde die Indizes der selektierten Einträge.\n          const newIndices = luxValueArray\n            .map((selectedEntry: LuxLookupTableEntry) =>\n              this.invisibleEntries.findIndex((entry) => this.compareByKey(entry, selectedEntry))\n            )\n            .filter((index) => index >= 0);\n\n          // Lade die neuen Einträge basierend auf den Indizes.\n          if (newIndices.length > 0) {\n            const maxIndex = Math.max(...newIndices);\n            this.updateDisplayedEntries(maxIndex + 1);\n          }\n        }\n      } else {\n        // Bei zu vielen selektierten Einträgen alle auf einmal laden.\n        this.updateDisplayedEntries(this.invisibleEntries.length);\n      }\n    }\n  }\n\n  /**\n   * Sortiert die Einträge: selektierte zuerst, dann rest.\n   * Wird beim Öffnen des Panels aufgerufen.\n   */\n  private refreshRenderedEntries(): void {\n    const selected: LuxLookupTableEntry[] = [];\n    const unselected: LuxLookupTableEntry[] = [];\n\n    for (const entry of this.displayedEntries) {\n      if (this.isEntrySelected(entry)) {\n        selected.push(entry);\n      } else {\n        unselected.push(entry);\n      }\n    }\n\n    this.renderedEntries = [...selected, ...unselected];\n  }\n\n  /**\n   * Prüft, ob ein Eintrag selektiert ist.\n   */\n  private isEntrySelected(entry: LuxLookupTableEntry): boolean {\n    const currentValue = this.luxValue;\n\n    if (currentValue === null || currentValue === undefined) {\n      return false;\n    }\n\n    if (Array.isArray(currentValue)) {\n      return currentValue.some((v) => this.compareByKey(entry, v as unknown as LuxLookupTableEntry));\n    }\n\n    return this.compareByKey(entry, currentValue as unknown as LuxLookupTableEntry);\n  }\n\n  private shouldLoadAllEntriesForActiveFilter(): boolean {\n    if (!this.luxEnableFilter) {\n      return false;\n    }\n\n    if (this.filterDirective?.isFilterActive()) {\n      return true;\n    }\n\n    return (this.luxFilterValue ?? '').trim().length > 0;\n  }\n\n  private ensureInitialFilterEntriesLoaded(): void {\n    if (!this.luxEnableFilter) {\n      return;\n    }\n\n    if ((this.luxFilterValue ?? '').trim().length === 0) {\n      return;\n    }\n\n    if (this.invisibleEntries.length === 0) {\n      return;\n    }\n\n    this.updateDisplayedEntries(this.invisibleEntries.length);\n  }\n}\n","@if (formGroup) {\n<lux-form-control-wrapper\n  (mousedown)=\"onWrapperClick($event)\"\n  [luxFormComponent]=\"this\"\n  [luxNoLabels]=\"luxNoLabels\"\n  [luxNoBottomLabel]=\"luxNoBottomLabel\"\n  [luxNoTopLabel]=\"luxNoTopLabel\"\n  [formGroup]=\"formGroup\"\n  [luxLabelLongFormat]=\"luxLabelLongFormat\"\n  [ngClass]=\"matSelect && matSelect.panelOpen ? 'lux-panel-opened' : ''\"\n  luxTagId=\"luxLookupComboboxWrapper\"\n>\n  <mat-select\n    luxSelectOptionHeight\n    [luxSelectFilter]=\"luxEnableFilter\"\n    [luxFilterLabelFn]=\"filterLabelFn\"\n    (luxFilterActiveChange)=\"onFilterActiveChange($event)\"\n    [placeholder]=\"luxPlaceholder\"\n    [multiple]=\"luxMultiple\"\n    [required]=\"luxRequired\"\n    [formControl]=\"formControl\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [luxSelectVisibleOptionCount]=\"luxVisibleOptionCount\"\n    [panelClass]=\"[luxMultiple ? 'lux-select-panel-ac-multiple' : 'lux-select-panel-ac', luxReadonly ? 'lux-display-none' : '', luxEnableFilter ? 'lux-select-panel-ac-filter' : '']\"\n    [disableRipple]=\"true\"\n    [errorStateMatcher]=\"stateMatcher\"\n    [compareWith]=\"compareByKey\"\n    (focusin)=\"luxFocusIn.emit($event)\"\n    (focusout)=\"luxFocusOut.emit($event)\"\n    [id]=\"uid\"\n    [luxAriaLabelledby]=\"uid + '-label'\"\n    [luxAriaDescribedby]=\"uid + '-error ' + uid + '-hint'\"\n    [attr.aria-invalid]=\"formControl.invalid\"\n    [attr.aria-required]=\"luxRequired\"\n    [attr.aria-readonly]=\"luxReadonly\"\n    #selectFilter=\"luxSelectFilter\"\n  >\n    @if (luxEnableFilter) {\n    <lux-select-panel-filter\n      [placeholder]=\"luxFilterPlaceholder\"\n      [filterValue]=\"luxFilterValue\"\n      [clearAriaLabel]=\"luxFilterClearAriaLabel\"\n      [filterDirective]=\"selectFilter\"\n    ></lux-select-panel-filter>\n    }\n    @if (luxWithEmptyEntry && !luxMultiple) {\n    <mat-option [value]=\"undefined\" class=\"option-height\"></mat-option>\n    }\n    @for (entry of renderedEntries; track entry) {\n      @if (!entry.isUngueltig || (entry.isUngueltig && showUngueltige())) {\n        <mat-option\n          class=\"option-height\"\n          [value]=\"entry\"\n          [ngClass]=\"{ invalid: entry.isUngueltig }\"\n          [ngStyle]=\"getStyles(entry.isUngueltig)\"\n          [disabled]=\"entry.isUngueltig && disableUngueltige()\"\n          [style.display]=\"!luxEnableFilter || selectFilter.isItemVisible(entry) ? '' : 'none'\"\n        >\n          <span>{{ getLabel(entry) }}</span>\n        </mat-option>\n      }\n    }\n  </mat-select>\n</lux-form-control-wrapper>\n}\n","import { Directive, ElementRef, Input, OnChanges, OnInit, Renderer2, SimpleChanges, inject } from '@angular/core';\nimport { LuxAutocompleteAcComponent } from '../../lux-form/lux-autocomplete-ac/lux-autocomplete-ac.component';\nimport { LuxCheckboxAcComponent } from '../../lux-form/lux-checkbox-ac/lux-checkbox-ac.component';\nimport { LuxDatepickerAcComponent } from '../../lux-form/lux-datepicker-ac/lux-datepicker-ac.component';\nimport { LuxDatetimepickerAcComponent } from '../../lux-form/lux-datetimepicker-ac/lux-datetimepicker-ac.component';\nimport { LuxFormComponentBase } from '../../lux-form/lux-form-model/lux-form-component-base.class';\nimport { LuxFormSelectableBase } from '../../lux-form/lux-form-model/lux-form-selectable-base.class';\nimport { LuxInputAcComponent } from '../../lux-form/lux-input-ac/lux-input-ac.component';\nimport { LuxRadioAcComponent } from '../../lux-form/lux-radio-ac/lux-radio-ac.component';\nimport { LuxSelectAcComponent } from '../../lux-form/lux-select-ac/lux-select-ac.component';\nimport { LuxToggleAcComponent } from '../../lux-form/lux-toggle-ac/lux-toggle-ac.component';\nimport { LuxLookupAutocompleteAcComponent } from '../../lux-lookup/lux-lookup-autocomplete-ac/lux-lookup-autocomplete-ac.component';\nimport { LuxLookupComboboxAcComponent } from '../../lux-lookup/lux-lookup-combobox-ac/lux-lookup-combobox-ac.component';\nimport { LuxLookupComponent } from '../../lux-lookup/lux-lookup-model/lux-lookup-component';\nimport { LuxThemePalette } from '../../lux-util/lux-colors.enum';\nimport { LuxFilterItem } from './lux-filter-item';\n\nexport declare type LuxFilterRenderFnType<T = any> = (filter: LuxFilterItem<T>, value: T) => string;\n\n@Directive({ selector: '[luxFilterItem]' })\nexport class LuxFilterItemDirective implements OnInit, OnChanges {\n  inputAuthentic = inject(LuxInputAcComponent, { optional: true });\n  autoCompleteAuthentic = inject(LuxAutocompleteAcComponent, { optional: true });\n  autoCompleteLookupAuthentic = inject(LuxLookupAutocompleteAcComponent, { optional: true });\n  datepickerAuthentic = inject(LuxDatepickerAcComponent, { optional: true });\n  datetimepickerAuthentic = inject(LuxDatetimepickerAcComponent, { optional: true });\n  toggleAuthentic = inject(LuxToggleAcComponent, { optional: true });\n  checkboxAuthentic = inject(LuxCheckboxAcComponent, { optional: true });\n  selectAuthentic = inject(LuxSelectAcComponent, { optional: true });\n  selectLookupAuthentic = inject(LuxLookupComboboxAcComponent, { optional: true });\n  radioAuthentic = inject(LuxRadioAcComponent, { optional: true });\n  private elRef = inject(ElementRef);\n  private renderer = inject(Renderer2);\n\n  formComponent!: LuxFormComponentBase;\n  filterItem!: LuxFilterItem<any>;\n\n  @Input() luxFilterLabel = '';\n  @Input() luxFilterColor: LuxThemePalette = 'primary';\n  @Input() luxFilterDefaultValues = [...LuxFilterItem.DEFAULT_VALUES];\n  @Input() luxFilterRenderFn?: LuxFilterRenderFnType;\n  @Input() luxFilterHidden = false;\n  @Input() luxFilterDisabled = false;\n\n  constructor() {\n    if (this.inputAuthentic) {\n      this.formComponent = this.inputAuthentic;\n    } else if (this.datepickerAuthentic) {\n      this.formComponent = this.datepickerAuthentic;\n    } else if (this.datetimepickerAuthentic) {\n      this.formComponent = this.datetimepickerAuthentic;\n    } else if (this.toggleAuthentic) {\n      this.formComponent = this.toggleAuthentic;\n    } else if (this.checkboxAuthentic) {\n      this.formComponent = this.checkboxAuthentic;\n    } else if (this.selectAuthentic) {\n      this.formComponent = this.selectAuthentic;\n    } else if (this.autoCompleteAuthentic) {\n      this.formComponent = this.autoCompleteAuthentic;\n    } else if (this.autoCompleteLookupAuthentic) {\n      this.formComponent = this.autoCompleteLookupAuthentic;\n    } else if (this.selectLookupAuthentic) {\n      this.formComponent = this.selectLookupAuthentic;\n    } else if (this.radioAuthentic) {\n      this.formComponent = this.radioAuthentic;\n    } else {\n      throw Error(`Die Formularkomponente ist unbekannt!`);\n    }\n  }\n\n  ngOnInit(): void {\n    if (!this.formComponent.luxControlBinding) {\n      throw Error(`Die Formularkomponente \"${this.formComponent.luxLabel}\" hat kein Binding!`);\n    }\n\n    this.filterItem = new LuxFilterItem<any>(\n      this.luxFilterLabel ? this.luxFilterLabel : this.formComponent.luxLabel,\n      this.formComponent.luxControlBinding,\n      this.formComponent\n    );\n    this.filterItem.color = this.luxFilterColor;\n    this.filterItem.defaultValues = this.luxFilterDefaultValues;\n    this.filterItem.value = this.luxFilterDefaultValues[0];\n    this.filterItem.component.formControl.setValue(this.filterItem.value);\n    this.filterItem.hidden = this.luxFilterHidden;\n    this.filterItem.disabled = this.luxFilterDisabled;\n\n    if (this.luxFilterRenderFn) {\n      this.filterItem.renderFn = this.luxFilterRenderFn;\n    } else {\n      if (this.filterItem.component instanceof LuxToggleAcComponent || this.filterItem.component instanceof LuxCheckboxAcComponent) {\n        this.filterItem.renderFn = this.renderToggleFn;\n      } else if (this.filterItem.component instanceof LuxDatepickerAcComponent) {\n        this.filterItem.renderFn = this.renderDateAcFn;\n      } else if (this.filterItem.component instanceof LuxDatetimepickerAcComponent) {\n        this.filterItem.renderFn = this.renderDateTimeAcFn;\n      } else if (\n        this.filterItem.component instanceof LuxSelectAcComponent ||\n        this.filterItem.component instanceof LuxAutocompleteAcComponent ||\n        this.filterItem.component instanceof LuxLookupComboboxAcComponent ||\n        this.filterItem.component instanceof LuxLookupAutocompleteAcComponent ||\n        this.filterItem.component instanceof LuxRadioAcComponent\n      ) {\n        this.filterItem.renderFn = this.renderLabelFn;\n      } else {\n        this.filterItem.renderFn = this.renderIdentityFn;\n      }\n    }\n\n    this.updateHiddenState(this.luxFilterHidden);\n    this.updateDisabledState(this.luxFilterDisabled);\n  }\n\n  private updateHiddenState(hidden: boolean) {\n    if (this.filterItem) {\n      // Wenn ein Filterelement ausgeblendet wird, wird es zusätzlich deaktiviert,\n      // um es in der Filterkomponente leichter behandeln zu können. An die CSS-Klasse 'lux-display-none'\n      // kommt man dynamisch nicht so einfach heran.\n      if (hidden) {\n        this.renderer.addClass(this.elRef.nativeElement, 'lux-display-none-important');\n        this.filterItem.component.formControl.disable();\n      } else {\n        this.renderer.removeClass(this.elRef.nativeElement, 'lux-display-none-important');\n        this.filterItem.component.formControl.enable();\n      }\n    }\n  }\n\n  private updateDisabledState(disabled: boolean) {\n    if (this.filterItem) {\n      if (disabled) {\n        this.filterItem.component.formControl.disable();\n      } else {\n        this.filterItem.component.formControl.enable();\n      }\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.filterItem) {\n      if (this.filterItem.component && changes && changes['luxFilterHidden']) {\n        this.updateHiddenState(changes['luxFilterHidden'].currentValue);\n      } else if (this.filterItem.component && changes && changes['luxFilterDisabled']) {\n        this.updateDisabledState(changes['luxFilterDisabled'].currentValue);\n      }\n    }\n  }\n\n  renderLabelFn<T>(filterItem: LuxFilterItem<T>, value: T) {\n    if (typeof value === 'string') {\n      return value;\n    } else if (\n      typeof value === 'object' &&\n      (filterItem.component instanceof LuxFormSelectableBase ||\n        filterItem.component instanceof LuxAutocompleteAcComponent ||\n        filterItem.component instanceof LuxRadioAcComponent)\n    ) {\n      return (value as any)[filterItem.component.luxOptionLabelProp!];\n    } else if (filterItem.component instanceof LuxLookupComponent) {\n      return filterItem.component.getLabel(value);\n    } else {\n      return value;\n    }\n  }\n\n  renderDateFn<T>(filterItem: LuxFilterItem<T>) {\n    return (filterItem.component as any).datepickerInput.nativeElement.value;\n  }\n  renderDateAcFn(filterItem: LuxFilterItem, value: any) {\n    return (filterItem.component as any).datepickerInput.nativeElement.value;\n  }\n\n  renderDateTimeFn<T>(filterItem: LuxFilterItem<T>) {\n    return (filterItem.component as any).dateTimePickerInputEl.nativeElement.value;\n  }\n  renderDateTimeAcFn(filterItem: LuxFilterItem, value: any) {\n    return (filterItem.component as LuxDatetimepickerAcComponent).dateTimePickerInputEl.nativeElement.value;\n  }\n\n  renderToggleFn<T>(filterItem: LuxFilterItem<T>, value: any) {\n    return value ? 'an' : 'aus';\n  }\n\n  renderIdentityFn<T>(filterItem: LuxFilterItem<T>, value: any) {\n    return value;\n  }\n}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../../../lux-action/lux-button/lux-button.component';\nimport { LuxCardActionsComponent } from '../../../lux-layout/lux-card/lux-card-subcomponents/lux-card-actions.component';\nimport { LuxCardContentComponent } from '../../../lux-layout/lux-card/lux-card-subcomponents/lux-card-content.component';\nimport { LuxCardComponent } from '../../../lux-layout/lux-card/lux-card.component';\nimport { LuxDialogRef } from '../../../lux-popups/lux-dialog/lux-dialog-model/lux-dialog-ref.class';\nimport { LuxDialogActionsComponent } from '../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-actions.component';\nimport { LuxDialogContentComponent } from '../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-content.component';\nimport { LuxDialogTitleComponent } from '../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-title.component';\nimport { LuxDialogStructureComponent } from '../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure.component';\nimport { LuxFilter } from '../../lux-filter-base/lux-filter';\nimport { LuxFilterFormComponent } from '../../lux-filter-form/lux-filter-form.component';\n\n@Component({\n  selector: 'lux-filter-load-dialog',\n  templateUrl: './lux-filter-load-dialog.component.html',\n  imports: [\n    LuxDialogStructureComponent,\n    LuxDialogTitleComponent,\n    LuxDialogContentComponent,\n    LuxDialogActionsComponent,\n    LuxCardComponent,\n    LuxCardContentComponent,\n    LuxCardActionsComponent,\n    LuxButtonComponent,\n    TranslocoPipe\n  ]\n})\nexport class LuxFilterLoadDialogComponent implements OnInit {\n  luxDialogRef = inject<LuxDialogRef<LuxFilterFormComponent>>(LuxDialogRef);\n\n  filterArr: LuxFilter[] = [];\n  component!: LuxFilterFormComponent;\n\n  ngOnInit() {\n    this.component = this.luxDialogRef.data;\n    this.filterArr = this.component.luxStoredFilters ?? [];\n  }\n\n  onDelete(index: number) {\n    const deletedFilter = this.filterArr.splice(index, 1)[0];\n    this.component.onDelete(deletedFilter);\n  }\n}\n","<lux-dialog-structure>\n  <lux-dialog-title>{{ 'luxc.file-preview.filter-load-dialog.title' | transloco }}</lux-dialog-title>\n  <lux-dialog-content class=\"filter-content lux-flex lux-flex-col\">\n    @for (filter of filterArr; track filter; let i = $index) {\n    <lux-card>\n      <lux-card-content>\n        {{ filter.name }}\n      </lux-card-content>\n      <lux-card-actions>\n        <lux-button\n          luxLabel=\"{{ 'luxc.file-preview.filter-load-dialog.load.lbl' | transloco }}\"\n          [luxFlat]=\"true\"\n          [luxColor]=\"luxDialogRef.data.luxButtonDialogLoad\"\n          (luxClicked)=\"luxDialogRef.closeDialog(filter.name)\"\n        ></lux-button>\n        <lux-button\n          luxLabel=\"{{ 'luxc.file-preview.filter-load-dialog.delete.lbl' | transloco }}\"\n          [luxStroked]=\"true\"\n          [luxColor]=\"luxDialogRef.data.luxButtonDialogDelete\"\n          (luxClicked)=\"onDelete(i)\"\n        ></lux-button>\n      </lux-card-actions>\n    </lux-card>\n    } @if (filterArr.length === 0) {\n    <div>Keine Filter vorhanden.</div>\n    }\n  </lux-dialog-content>\n  <lux-dialog-actions class=\"lux-filter-dialog-action\">\n    <lux-button\n      luxLabel=\"{{ 'luxc.file-preview.filter-load-dialog.close.lbl' | transloco }}\"\n      [luxColor]=\"luxDialogRef.data.luxButtonDialogClose\"\n      [luxStroked]=\"true\"\n      (luxClicked)=\"luxDialogRef.closeDialog(false)\"\n    ></lux-button>\n  </lux-dialog-actions>\n</lux-dialog-structure>\n","import { AfterViewInit, Component, OnInit, ViewChild, inject } from '@angular/core';\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../../../lux-action/lux-button/lux-button.component';\nimport { LuxValidationErrors } from '../../../lux-form/lux-form-model/lux-form-component-base.class';\nimport { LuxInputAcComponent } from '../../../lux-form/lux-input-ac/lux-input-ac.component';\nimport { LuxDialogRef } from '../../../lux-popups/lux-dialog/lux-dialog-model/lux-dialog-ref.class';\nimport { LuxDialogActionsComponent } from '../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-actions.component';\nimport { LuxDialogContentComponent } from '../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-content.component';\nimport { LuxDialogTitleComponent } from '../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-title.component';\nimport { LuxDialogStructureComponent } from '../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure.component';\nimport { LuxFilter } from '../../lux-filter-base/lux-filter';\nimport { LuxFilterFormComponent } from '../../lux-filter-form/lux-filter-form.component';\n\n@Component({\n  selector: 'lux-filter-save-dialog',\n  templateUrl: './lux-filter-save-dialog.component.html',\n  imports: [\n    LuxDialogStructureComponent,\n    LuxDialogTitleComponent,\n    LuxDialogContentComponent,\n    LuxDialogActionsComponent,\n    LuxInputAcComponent,\n    LuxButtonComponent,\n    TranslocoPipe\n  ]\n})\nexport class LuxFilterSaveDialogComponent implements OnInit, AfterViewInit {\n  luxDialogRef = inject<LuxDialogRef<LuxFilterFormComponent>>(LuxDialogRef);\n\n  @ViewChild(LuxInputAcComponent) filterNameComponent!: LuxInputAcComponent;\n\n  currentFilters: LuxFilter[] = [];\n\n  filterName = '';\n\n  ngOnInit() {\n    this.currentFilters = this.luxDialogRef.data.luxStoredFilters ?? [];\n  }\n\n  ngAfterViewInit(): void {\n    setTimeout(() => {\n      if (this.filterNameComponent) {\n        this.filterNameComponent.inputElement.nativeElement.focus();\n      }\n    });\n  }\n\n  onSave() {\n    // Damit die Fehler direkt angezeigt werden und nicht erst, wenn man das Feld verlässt.\n    this.filterNameComponent.formControl.markAsTouched();\n\n    if (!this.checkIfFilterNameExists()) {\n      this.luxDialogRef.closeDialog(this.filterName);\n    }\n  }\n\n  validateForbiddenName(): ValidatorFn {\n    return (control: AbstractControl): Record<string, any> | null => {\n      return this.checkIfFilterNameExists() ? { forbiddenName: { value: control.value } } : null;\n    };\n  }\n\n  filterErrorCallback = (value: any, errors: LuxValidationErrors) => {\n    if (errors['forbiddenName']) {\n      return 'Der Name existiert bereits.';\n    } else if (errors['required']) {\n      return 'Pflichtfeld';\n    }\n    return 'Es ist ein Fehler aufgetreten.';\n  };\n\n  private checkIfFilterNameExists() {\n    const filters = this.luxDialogRef.data.luxStoredFilters;\n    return filters && filters.find((filter) => filter.name.toLowerCase().trim() === this.filterName.toLowerCase().trim());\n  }\n}\n","<lux-dialog-structure>\n  <lux-dialog-title>{{ 'luxc.file-preview.filter-save-dialog.title' | transloco }}</lux-dialog-title>\n  <lux-dialog-content>\n    <div class=\"lux-filter-save-dialog-form-container lux-flex lux-flex-col lux-gap-2\">\n      <lux-input-ac\n        luxLabel=\"{{ 'luxc.file-preview.filter-save-dialog.name.lbl' | transloco }}\"\n        [(luxValue)]=\"filterName\"\n        [luxRequired]=\"true\"\n        [luxControlValidators]=\"validateForbiddenName()\"\n        [luxErrorCallback]=\"filterErrorCallback\"\n        luxAutocomplete=\"off\"\n        (keydown.enter)=\"onSave()\"\n      ></lux-input-ac>\n    </div>\n  </lux-dialog-content>\n  <lux-dialog-actions class=\"lux-filter-dialog-action\">\n    <lux-button\n      luxLabel=\"{{ 'luxc.file-preview.filter-save-dialog.save.lbl' | transloco }}\"\n      [luxColor]=\"luxDialogRef.data.luxButtonDialogSave\"\n      [luxDisabled]=\"!filterName\"\n      [luxFlat]=\"true\"\n      (luxClicked)=\"onSave()\"\n    ></lux-button>\n    <lux-button\n      luxLabel=\"{{ 'luxc.file-preview.filter-save-dialog.cancel.lbl' | transloco }}\"\n      [luxColor]=\"luxDialogRef.data.luxButtonDialogCancel\"\n      [luxStroked]=\"true\"\n      (luxClicked)=\"luxDialogRef.closeDialog(false)\"\n    ></lux-button>\n  </lux-dialog-actions>\n</lux-dialog-structure>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-filter-form-extended',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxFilterFormExtendedComponent {\n  constructor() {}\n}\n","import { Component } from '@angular/core';\nimport { MatExpansionPanelActionRow } from '@angular/material/expansion';\n\n@Component({\n  selector: 'lux-panel-action',\n  template: '<mat-action-row><ng-content></ng-content></mat-action-row>',\n  imports: [MatExpansionPanelActionRow]\n})\nexport class LuxPanelActionComponent {\n  constructor() {}\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ContentChildren,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  inject\n} from '@angular/core';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxButtonComponent } from '../../lux-action/lux-button/lux-button.component';\nimport { LuxMenuItemComponent } from '../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxMenuTriggerComponent } from '../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-trigger.component';\nimport { LuxMenuComponent } from '../../lux-action/lux-menu/lux-menu.component';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxTooltipDirective } from '../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxChipsAcComponent } from '../../lux-form/lux-chips-ac/lux-chips-ac.component';\nimport { LuxChipAcComponent } from '../../lux-form/lux-chips-ac/lux-chips-subcomponents/lux-chip-ac.component';\nimport { LuxSelectAcComponent } from '../../lux-form/lux-select-ac/lux-select-ac.component';\nimport { LuxAccordionComponent } from '../../lux-layout/lux-accordion/lux-accordion.component';\nimport { LuxCardActionsComponent } from '../../lux-layout/lux-card/lux-card-subcomponents/lux-card-actions.component';\nimport { LuxCardContentExpandedComponent } from '../../lux-layout/lux-card/lux-card-subcomponents/lux-card-content-expanded.component';\nimport { LuxCardContentComponent } from '../../lux-layout/lux-card/lux-card-subcomponents/lux-card-content.component';\nimport { LuxCardInfoComponent } from '../../lux-layout/lux-card/lux-card-subcomponents/lux-card-info.component';\nimport { LuxCardComponent } from '../../lux-layout/lux-card/lux-card.component';\nimport { LuxPanelActionComponent } from '../../lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-action.component';\nimport { LuxPanelContentComponent } from '../../lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-content.component';\nimport { LuxPanelHeaderTitleComponent } from '../../lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-header-title.component';\nimport { LuxPanelComponent } from '../../lux-layout/lux-panel/lux-panel.component';\nimport { LuxLookupComboboxAcComponent } from '../../lux-lookup/lux-lookup-combobox-ac/lux-lookup-combobox-ac.component';\nimport { ILuxDialogConfig } from '../../lux-popups/lux-dialog/lux-dialog-model/lux-dialog-config.interface';\nimport { LuxDialogService } from '../../lux-popups/lux-dialog/lux-dialog.service';\nimport { LuxThemePalette } from '../../lux-util/lux-colors.enum';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxFilter } from '../lux-filter-base/lux-filter';\nimport { LuxFilterItem } from '../lux-filter-base/lux-filter-item';\nimport { LuxFilterItemDirective } from '../lux-filter-base/lux-filter-item.directive';\nimport { LuxFilterLoadDialogComponent } from '../lux-filter-dialog/lux-filter-load-dialog/lux-filter-load-dialog.component';\nimport { LuxFilterSaveDialogComponent } from '../lux-filter-dialog/lux-filter-save-dialog/lux-filter-save-dialog.component';\nimport { LuxFilterFormExtendedComponent } from './lux-filter-form-extended/lux-filter-form-extended.component';\n\n@Component({\n  selector: 'lux-filter-form',\n  templateUrl: './lux-filter-form.component.html',\n  imports: [\n    LuxAccordionComponent,\n    LuxPanelComponent,\n    LuxPanelHeaderTitleComponent,\n    NgTemplateOutlet,\n    LuxPanelContentComponent,\n    LuxPanelActionComponent,\n    LuxCardComponent,\n    LuxCardInfoComponent,\n    LuxCardContentComponent,\n    LuxCardContentExpandedComponent,\n    LuxCardActionsComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    LuxButtonComponent,\n    LuxTooltipDirective,\n    LuxMenuComponent,\n    LuxMenuItemComponent,\n    LuxMenuTriggerComponent,\n    NgClass,\n    LuxChipsAcComponent,\n    LuxAriaLabelDirective,\n    LuxChipAcComponent,\n    TranslocoPipe\n  ]\n})\nexport class LuxFilterFormComponent implements OnInit, AfterViewInit, OnDestroy {\n  private dialogService = inject(LuxDialogService);\n  private cdr = inject(ChangeDetectorRef);\n  private mediaQuery = inject(LuxMediaQueryObserverService);\n\n  dialogConfig: ILuxDialogConfig = {\n    width: Math.min(600, window.innerWidth - 50) + 'px',\n    height: 'auto',\n    panelClass: []\n  };\n\n  formElementes: LuxFilterItemDirective[] = [];\n  @ContentChildren(LuxFilterItemDirective, { descendants: true }) formElementesQL!: QueryList<LuxFilterItemDirective>;\n  @ContentChild(LuxFilterFormExtendedComponent) extendedOptions?: LuxFilterFormExtendedComponent;\n\n  _luxFilterValues = {};\n  _luxFilterExpanded = false;\n\n  @Input() luxTitle = '';\n  @Input() luxButtonRaised = false;\n  @Input() luxButtonFlat = false;\n  @Input() luxButtonFilterLabel = '';\n  @Input() luxButtonFilterColor: LuxThemePalette = 'primary';\n  @Input() luxButtonResetLabel = '';\n  @Input() luxButtonResetColor?: LuxThemePalette;\n  @Input() luxButtonSaveLabel = '';\n  @Input() luxButtonSaveColor?: LuxThemePalette;\n  @Input() luxButtonLoadLabel = '';\n  @Input() luxButtonLoadColor?: LuxThemePalette;\n  @Input() luxButtonDialogSave: LuxThemePalette = 'primary';\n  @Input() luxButtonDialogLoad: LuxThemePalette = 'primary';\n  @Input() luxButtonDialogDelete: LuxThemePalette = 'warn';\n  @Input() luxButtonDialogCancel?: LuxThemePalette;\n  @Input() luxButtonDialogClose?: LuxThemePalette;\n  @Input() luxDefaultFilterMessage = '';\n  @Input() luxShowChips = true;\n  @Input() luxHideChipsBorder = false;\n  @Input() luxHideMenu = false;\n  @Input() luxStoredFilters: LuxFilter[] = [];\n  @Input() luxDisableShortcut = false;\n  @Input() luxShowAsCard = false;\n  @Input() set luxExpandedLabelOpen(label: string) {\n    if (label) {\n      this._luxExpandedLabelOpen = label;\n    }\n  }\n  get luxExpandedLabelOpen() {\n    return this._luxExpandedLabelOpen;\n  }\n  _luxExpandedLabelOpen = '';\n  @Input() set luxExpandedLabelClose(label: string) {\n    if (label) {\n      this._luxExpandedLabelClose = label;\n    }\n  }\n  get luxExpandedLabelClose() {\n    return this._luxExpandedLabelClose;\n  }\n  _luxExpandedLabelClose = '';\n\n  @Input()\n  get luxFilterExpanded() {\n    return this._luxFilterExpanded;\n  }\n\n  set luxFilterExpanded(expanded: boolean) {\n    this._luxFilterExpanded = expanded;\n\n    this.luxFilterExpandedChange.emit(expanded);\n  }\n\n  @Input()\n  get luxFilterValues() {\n    return this._luxFilterValues;\n  }\n\n  set luxFilterValues(filter: any) {\n    this._luxFilterValues = JSON.parse(JSON.stringify(filter));\n\n    if (this.initComplete) {\n      const newFilter = this.createFilterObject();\n\n      this.filterForm.patchValue(newFilter);\n\n      this.onFilter();\n    }\n  }\n\n  @Output() luxOnFilter = new EventEmitter<string>();\n  @Output() luxOnSave = new EventEmitter<LuxFilter>();\n  @Output() luxOnLoad = new EventEmitter<string>();\n  @Output() luxOnDelete = new EventEmitter<LuxFilter>();\n  @Output() luxOnReset = new EventEmitter<void>();\n  @Output() luxFilterExpandedChange = new EventEmitter<boolean>();\n\n  filterForm: FormGroup;\n  subscriptions: Subscription[] = [];\n  filterItems: LuxFilterItem<any>[] = [];\n  hasSaveAction = false;\n  hasLoadAction = false;\n  initComplete = false;\n  initFilterValue = null;\n\n  isMobile = false;\n\n  constructor() {\n    this.filterForm = new FormGroup({});\n  }\n\n  ngOnInit(): void {\n    this.initFilterValue = this.luxFilterValues;\n\n    if (this.luxOnSave.observed) {\n      this.hasSaveAction = true;\n    }\n\n    if (this.luxOnLoad.observed) {\n      this.hasLoadAction = true;\n    }\n\n    this.subscriptions.push(\n      this.mediaQuery.getMediaQueryChangedAsObservable().subscribe((query) => {\n        this.isMobile = query === 'xs' || query === 'sm';\n      })\n    );\n  }\n\n  private updateFilterChips() {\n    if (this.initComplete) {\n      this.filterItems = [];\n\n      this.formElementes.forEach((formItem) => {\n        if (formItem.filterItem && formItem.filterItem.binding && this.filterForm.get(formItem.filterItem.binding)) {\n          const value = this.filterForm.get(formItem.filterItem.binding)!.value;\n\n          if (\n            !formItem.filterItem.component.formControl.disabled &&\n            formItem.filterItem.defaultValues.findIndex((defaultValue) => defaultValue === value) === -1\n          ) {\n            if (Array.isArray(value)) {\n              let i = 0;\n              value.forEach((selected) => {\n                const newFilterItem = new LuxFilterItem(\n                  formItem.filterItem.label,\n                  formItem.filterItem.binding,\n                  formItem.filterItem.component\n                );\n                Object.assign(newFilterItem, formItem.filterItem);\n                newFilterItem.value = newFilterItem.renderFn(newFilterItem, selected);\n                newFilterItem.multiValueIndex = i++;\n                this.filterItems.push(newFilterItem);\n              });\n            } else {\n              formItem.filterItem.value = formItem.filterItem.renderFn(formItem.filterItem, value);\n              this.filterItems.push(formItem.filterItem);\n            }\n          }\n        }\n      });\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.registerFilterItems(this.formElementesQL.toArray());\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.forEach((subscription) => {\n      subscription.unsubscribe();\n    });\n  }\n\n  openSaveDialog() {\n    const dialogRef = this.dialogService.openComponent(LuxFilterSaveDialogComponent, this.dialogConfig, this);\n\n    this.subscriptions.push(\n      dialogRef.dialogClosed.subscribe((result: any) => {\n        if (typeof result === 'string') {\n          this.onSave(result);\n        }\n      })\n    );\n  }\n\n  openLoadDialog() {\n    const dialogRef = this.dialogService.openComponent(LuxFilterLoadDialogComponent, this.dialogConfig, this);\n\n    this.subscriptions.push(\n      dialogRef.dialogClosed.subscribe((result: any) => {\n        if (typeof result === 'string') {\n          this.onLoad(result);\n        }\n      })\n    );\n  }\n\n  onDelete(filter: LuxFilter) {\n    this.luxOnDelete.emit(filter);\n  }\n\n  onSave(filterName: string) {\n    const newFilter = new LuxFilter();\n    newFilter.name = filterName;\n    newFilter.data = JSON.parse(JSON.stringify(this.filterForm.value));\n\n    this.onFilter();\n\n    this.luxOnSave.emit(newFilter);\n  }\n\n  onLoad(filtername: string) {\n    // Hier werden sicherheitshalber alle Filter zurückgesetzt, für den Fall,\n    // dass der Aufrufer nicht alle Filterwerte überschreibt. Vielleicht sind auch neue\n    // Filterwerte hinzugekommen, etc.\n    this.formElementes.forEach((item) => {\n      this.filterForm.get(item.filterItem.binding)!.setValue(item.filterItem.defaultValues[0]);\n    });\n\n    // Filter zuklappen.\n    this.luxFilterExpanded = false;\n\n    // Hier wird nur ein Event mit dem zu ladenden Filternamen verschickt.\n    // Der Empfänger hat jetzt die Aufgabe, die entsprechenden Filterdaten zu laden und\n    // über luxFilterValues setzen.\n    this.luxOnLoad.emit(filtername);\n  }\n\n  onReset() {\n    // Hier werden alle Filter zurückgesetzt.\n    this.formElementes.forEach((item) => {\n      this.filterForm.get(item.filterItem.binding)!.setValue(item.filterItem.defaultValues[0]);\n    });\n\n    // Filtern...\n    this.onFilter();\n\n    // Chips aktualisieren\n    this.updateFilterChips();\n\n    // Die Interessenten darüber informieren, dass ein Filterreset durchgeführt wurde.\n    this.luxOnReset.emit();\n  }\n\n  filterChipRemoved(indexRemoved: number) {\n    // Ermittle den Filterchip, der entfernt werden soll.\n    const removedFilterItem: LuxFilterItem<any> = this.filterItems.splice(indexRemoved, 1)[0];\n\n    if (\n      (removedFilterItem.component instanceof LuxSelectAcComponent ||\n        removedFilterItem.component instanceof LuxLookupComboboxAcComponent) &&\n      removedFilterItem.component.luxMultiple\n    ) {\n      // Fall: Multiselect\n      // Kopie erstellen und nicht nur das bestehende Array manipulieren.\n      const newSelected = [...this.filterForm.get(removedFilterItem.binding)!.value];\n      // Gelöschten Wert entfernen.\n      newSelected.splice(removedFilterItem.multiValueIndex, 1);\n      // Das neue Array in das Formularcontrol setzen.\n      this.filterForm.get(removedFilterItem.binding)!.setValue(newSelected);\n    } else {\n      // Fall: Wert (einfach)\n      this.filterForm.get(removedFilterItem.binding)!.setValue(removedFilterItem.defaultValues[0]);\n    }\n\n    // Filtern...\n    this.onFilter();\n  }\n\n  @HostListener('document:keydown.shift.enter')\n  onShiftEnter() {\n    // Alle eventuell noch offenen Popups/Panels der Formularelemente schließen.\n    //\n    // Beispielszenario:\n    // Man navigiert im Filterformular über die Tabulator-Taste in ein\n    // Autocomplete-Feld. Automatisch würde sich das Panel mit den vorhandenen\n    // Optionen öffnen. Als Nächstes könnte man beim geöffneten Optionspanel\n    // über die Tastenkombination \"Shift + Enter\" das Filtern auslösen. Das\n    // Filterpanel würde sich nach dem Filtern schließen, aber das Optionspanel\n    // des Autocomplete-Feld-Feldes würde stehen bleiben. Dasselbe Problem\n    // besteht natürlich auch beim Datepicker, Select und den\n    // Lookup-Komponenten. Aus diesem Grund werden hier zuerst alle geöffneten\n    // Popups/Panels geschlossen. Im Anschluss wird wie gewohnt gefiltert.\n    if (!this.luxDisableShortcut) {\n      this.formElementes.forEach((formComponent) => {\n        if (formComponent) {\n          if (formComponent.datepickerAuthentic && formComponent.datepickerAuthentic.matDatepicker) {\n            formComponent.datepickerAuthentic.matDatepicker.close();\n          } else if (formComponent.datetimepickerAuthentic && formComponent.datetimepickerAuthentic.dateTimeOverlayComponent) {\n            formComponent.datetimepickerAuthentic.dateTimeOverlayComponent.close();\n          } else if (formComponent.selectAuthentic && formComponent.selectAuthentic.matSelect) {\n            formComponent.selectAuthentic.matSelect.close();\n          } else if (formComponent.autoCompleteAuthentic) {\n            formComponent.autoCompleteAuthentic.matAutoComplete.closePanel();\n          } else if (formComponent.autoCompleteLookupAuthentic && formComponent.autoCompleteLookupAuthentic.matAutocompleteTrigger) {\n            formComponent.autoCompleteLookupAuthentic.matAutocompleteTrigger.closePanel();\n          } else if (formComponent.selectLookupAuthentic) {\n            formComponent.selectLookupAuthentic.matSelect.close();\n          }\n        }\n      });\n\n      this.onFilter();\n      this.cdr.detectChanges();\n    }\n  }\n\n  onFilter() {\n    this.onFilterIntern(true);\n  }\n\n  onFilterIntern(changeExpandState: boolean) {\n    if (this.filterForm.valid) {\n      if (changeExpandState) {\n        // Filter zuklappen.\n        this.luxFilterExpanded = false;\n      }\n\n      // Filterchips aktualisieren.\n      this.updateFilterChips();\n\n      // Die Interessenten darüber informieren, dass gefiltert werden soll.\n      this.luxOnFilter.emit(JSON.parse(JSON.stringify(this.filterForm.value)));\n    } else {\n      LuxUtil.showValidationErrors(this.filterForm);\n    }\n  }\n\n  registerFilterItems(filterItemDirectives: LuxFilterItemDirective[]) {\n    // An dieser Codestelle ist setTimeout nötig, wenn die Inhalte über eine LUX-Layout-Form-Row gesetzt werden.\n    // D.h. initial gibt es keine Filteritems, aber dann werden die Filteritems über ngAfterContentInit hinzugefügt.\n    setTimeout(() => {\n      filterItemDirectives.forEach((item) => {\n        this.filterForm.addControl(item.filterItem.binding, item.filterItem.component.formControl);\n        this.formElementes.push(item);\n      });\n\n      this.filterForm.patchValue(this.luxFilterValues);\n\n      // Der Filter ist jetzt vollständig. D.h. alle Formularelemente sind bekannt,\n      // die zugehörigen Controls wurden erzeugt und die Werte gesetzt.\n      // Jetzt ist die Initialisierung abgeschlossen und die Filterchips können\n      // aktualisiert werden.\n      this.initComplete = true;\n\n      // Da die Initialisierung der Komponente verzögert stattfindet,\n      // muss noch einmal geprüft werden, ob sich der initiale Filterwert\n      // in der Zwischenzeit geändert hat.\n      // Wenn sich der Filterwert geändert hat, muss das Filtern ausgelöst werden.\n      // Wenn der Filterwert gleichgeblieben ist, müssen nur die Filterchips aktualisiert werden.\n      if (this.luxFilterValues !== this.initFilterValue) {\n        this.onFilterIntern(false);\n      } else {\n        this.updateFilterChips();\n      }\n    });\n  }\n\n  private createFilterObject() {\n    const newFilter: any = {};\n\n    if (this.formElementes && this._luxFilterValues) {\n      // Alle Filterfelder werden auf ihre Defaultwerte zurückgesetzt.\n      //\n      // Erklärung:\n      // Dies ist nötig, da nicht zwangsweise alle Filterwerte übergeben\n      // werden müssen. D.h. obwohl es 5 Filterelemente gibt,\n      // werden vielleicht nur die Werte von 3 Filterfeldern\n      // übergeben und somit blieben die Filterwerte der zwei\n      // übrigen Filterfelder erhalten.\n      this.formElementes.forEach((item) => {\n        if (\n          item &&\n          item.filterItem &&\n          item.filterItem.binding &&\n          item.filterItem.defaultValues &&\n          item.filterItem.defaultValues.length > 0\n        ) {\n          newFilter[item.filterItem.binding] = item.filterItem.defaultValues[0];\n        }\n      });\n\n      // Überschreiben der Defaultwerte mit den aktuellen Filterwerten.\n      Object.assign(newFilter, this._luxFilterValues);\n    }\n\n    return newFilter;\n  }\n}\n","<!-- Standardmäßig wird das Lux-Filter-Form in einem Accordion dargestellt -->\n@if (!luxShowAsCard) {\n<lux-accordion luxMode=\"flat\">\n  <lux-panel\n    [(luxExpanded)]=\"luxFilterExpanded\"\n    class=\"filterPanel\"\n    luxCollapsedHeaderHeight=\"40px\"\n    luxExpandedHeaderHeight=\"48px\"\n  >\n    <lux-panel-header-title class=\"lux-filter-panel-header\">\n      {{ luxTitle }}\n    </lux-panel-header-title>\n    <lux-panel-content class=\"lux-filter-panel-content\">\n      <ng-container *ngTemplateOutlet=\"filterFormTemplate\"></ng-container>\n    </lux-panel-content>\n    <lux-panel-action class=\"lux-filter-panel-action\">\n      <div class=\"lux-filter-action-wrapper lux-flex lux-items-center\">\n        @if (!luxHideMenu) {\n          <ng-container *ngTemplateOutlet=\"filterActionTemplate\"></ng-container>\n        }\n        <ng-container *ngTemplateOutlet=\"filterButtonTemplate\"></ng-container>\n      </div>\n    </lux-panel-action>\n  </lux-panel>\n</lux-accordion>\n}\n\n<!-- Template für die Darstellung des Lux-Filter-Forms in einer Lux-Card -->\n@if (luxShowAsCard) {\n<lux-card\n  luxTitle=\"{{ luxTitle || ('luxc.filter.title' | transloco) }}\"\n  [(luxExpanded)]=\"luxFilterExpanded\"\n  luxExpandedLabelOpen=\"{{ luxExpandedLabelOpen || ('luxc.filter.expandedLabel.open' | transloco) }}\"\n  luxExpandedLabelClose=\"{{ luxExpandedLabelClose || ('luxc.filter.expandedLabel.close' | transloco) }}\"\n  class=\"lux-filter-card\"\n  luxTagId=\"luxFilterCard\"\n>\n  <lux-card-content>\n    <ng-container *ngTemplateOutlet=\"filterFormTemplate\"></ng-container>\n  </lux-card-content>\n  <!-- Optional können bei der Darstellung in einer Card erweiterte Optionen als Expanded-Content der Card angezeigt werden -->\n  @if (extendedOptions) {\n  <lux-card-content-expanded luxTagId=\"luxFilterFormExtendedContent\">\n    @if(luxFilterExpanded) {\n    <ng-content select=\"lux-filter-form-extended\"></ng-content>\n    }\n  </lux-card-content-expanded>\n  }\n  <lux-card-actions>\n    <div class=\"lux-flex lux-items-center lux-filter-action-wrapper\">\n      @if (!luxHideMenu) {\n        <ng-container *ngTemplateOutlet=\"filterActionTemplate\"></ng-container>\n      }\n      <ng-container *ngTemplateOutlet=\"filterButtonTemplate\"></ng-container>\n    </div>\n  </lux-card-actions>\n</lux-card>\n}\n\n<!-- der eigentliche Inhalt des Filterformulars, wird via Content-Projection eingefügt -->\n<ng-template #filterFormTemplate>\n  <form [formGroup]=\"filterForm\" class=\"lux-filter-form\">\n    <ng-content></ng-content>\n  </form>\n</ng-template>\n\n<!-- Filter-Button ist jetzt vom Menü getrennt -->\n<ng-template #filterButtonTemplate>\n  <lux-button\n    luxLabel=\"{{ luxButtonFilterLabel || ('luxc.filter.filter.btn' | transloco) }}\"\n    [luxColor]=\"luxButtonFilterColor\"\n    [luxStroked]=\"!luxButtonFlat\"\n    [luxFlat]=\"luxButtonFlat\"\n    luxIconName=\"lux-interface-text-formatting-filter-1\"\n    luxTooltip=\"{{ luxDisableShortcut ? '' : '(Shift + Enter)' }}\"\n    (luxClicked)=\"onFilter()\"\n    luxTagId=\"filterFormButton\"\n    class=\"lux-filter-form-button\"\n  ></lux-button>\n</ng-template>\n<!-- die Menü-Leiste mit den Filterfunktionen ist in beiden Darstellungen gleich -->\n<ng-template #filterActionTemplate>\n  <lux-menu luxAriaMenuTriggerLabel=\"{{ 'luxc.menu.trigger.btn' | transloco }}\" [luxDisplayExtended]=\"false\" class=\"filter-menu\">\n    <lux-menu-item\n      luxLabel=\"{{ luxButtonResetLabel || ('luxc.filter.reset.btn' | transloco) }}\"\n      [luxAlwaysVisible]=\"false\"\n      [luxColor]=\"luxButtonResetColor\"\n      (luxClicked)=\"onReset()\"\n    ></lux-menu-item>\n    @if (hasSaveAction) {\n    <lux-menu-item\n      luxLabel=\"{{ luxButtonSaveLabel || ('luxc.filter.save.btn' | transloco) }}\"\n      [luxAlwaysVisible]=\"false\"\n      [luxColor]=\"luxButtonSaveColor\"\n      (luxClicked)=\"openSaveDialog()\"\n    ></lux-menu-item>\n    } @if (hasLoadAction) {\n    <lux-menu-item\n      luxLabel=\"{{ luxButtonLoadLabel || ('luxc.filter.load.btn' | transloco) }}\"\n      [luxAlwaysVisible]=\"false\"\n      [luxColor]=\"luxButtonLoadColor\"\n      (luxClicked)=\"openLoadDialog()\"\n    ></lux-menu-item>\n    }\n\n    <lux-menu-trigger>\n      <lux-button\n        luxLabel=\"{{ 'luxc.menu.trigger.btn' | transloco }}\"\n        [luxRounded]=\"true\"\n        [luxStroked]=\"true\"\n        luxColor=\"primary\"\n        luxIconName=\"lux-interface-setting-cog\"\n        class=\"lux-filter-menu-trigger\"\n        luxTagId=\"filter-menu-trigger\"\n      >\n      </lux-button>\n    </lux-menu-trigger>\n  </lux-menu>\n</ng-template>\n\n<!-- Chips mit den Filterfunktionen unterhalb des Filter-Formulars (optional) -->\n@if (this.filterItems.length === 0 && !luxFilterExpanded && luxShowChips && initComplete) {\n<div class=\"lux-label\" [ngClass]=\"{ 'no-filter-active': !isMobile, 'no-filter-active-sm': isMobile }\">\n  {{ luxDefaultFilterMessage || ('luxc.filter.defaultFilterMessage' | transloco) }}\n</div>\n} @if (this.filterItems.length > 0 && !luxFilterExpanded && luxShowChips && initComplete) {\n<lux-chips-ac luxAriaLabel=\"Filterchips\" luxAriaLabelSelector=\"mat-chip-grid\" [luxHideBorder]=\"luxHideChipsBorder\" class=\"filter-item\">\n  @for (item of filterItems; track item) {\n  <lux-chip-ac [luxColor]=\"item.color\" (luxChipRemoved)=\"filterChipRemoved($event)\">{{ item.label }}: {{ item.value }}</lux-chip-ac>\n  }\n</lux-chips-ac>\n}\n","import { LuxConsentPurpose, LuxCookieCategory } from './lux-consent.model';\n\nexport const LUX_CONSENT_CATEGORIES: LuxCookieCategory[] = [\n  {\n    purpose: LuxConsentPurpose.Essential,\n    name: 'luxc.consent.essential.name',\n    enabled: true,\n    disabled: true,\n    hint: 'luxc.consent.essential.hint'\n  },\n  {\n    purpose: LuxConsentPurpose.Preferences,\n    name: 'luxc.consent.preferences.name',\n    enabled: false,\n    disabled: false,\n    hint: 'luxc.consent.preferences.hint'\n  },\n  {\n    purpose: LuxConsentPurpose.Statistics,\n    name: 'luxc.consent.statistics.name',\n    enabled: false,\n    disabled: false,\n    hint: 'luxc.consent.statistics.hint'\n  },\n  {\n    purpose: LuxConsentPurpose.Marketing,\n    name: 'luxc.consent.marketing.name',\n    enabled: false,\n    disabled: false,\n    hint: 'luxc.consent.marketing.hint'\n  },\n  {\n    purpose: LuxConsentPurpose.Other,\n    name: 'luxc.consent.other.name',\n    enabled: false,\n    disabled: false,\n    hint: 'luxc.consent.other.hint'\n  }\n];\n\nexport default LUX_CONSENT_CATEGORIES;\n","import { NgComponentOutlet } from '@angular/common';\nimport { Component, DestroyRef, inject, OnInit, Type } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../lux-action/lux-button/lux-button.component';\nimport { LuxLinkPlainComponent } from '../lux-action/lux-link-plain/lux-link-plain.component';\nimport { LuxTableColumnContentComponent } from '../lux-common/lux-table/lux-table-subcomponents/lux-table-column-content.component';\nimport { LuxTableColumnHeaderComponent } from '../lux-common/lux-table/lux-table-subcomponents/lux-table-column-header.component';\nimport { LuxTableColumnComponent } from '../lux-common/lux-table/lux-table-subcomponents/lux-table-column.component';\nimport { LuxTableComponent } from '../lux-common/lux-table/lux-table.component';\nimport { LuxToggleAcComponent } from '../lux-form/lux-toggle-ac/lux-toggle-ac.component';\nimport { LuxDividerComponent } from '../lux-layout/lux-divider/lux-divider.component';\nimport { LuxDialogRef } from '../lux-popups/lux-dialog/lux-dialog-model/lux-dialog-ref.class';\nimport { LuxDialogActionsComponent } from '../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-actions.component';\nimport { LuxDialogContentComponent } from '../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-content.component';\nimport { LuxDialogTitleComponent } from '../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-title.component';\nimport { LuxDialogStructureComponent } from '../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure.component';\nimport { LuxMediaQueryObserverService } from '../lux-util/lux-media-query-observer.service';\nimport LUX_CONSENT_CATEGORIES from './lux-consent-categories';\nimport { ILuxConsentConfig } from './lux-consent-config.interface';\nimport LUX_CONSENT_ENTRIES from './lux-consent-entries';\nimport { LuxConsentEntry, LuxConsentPurpose, LuxConsentStorageType, LuxCookieCategory } from './lux-consent.model';\nimport { LuxConsentService } from './lux-consent.service';\n\n@Component({\n  selector: 'lux-consent-dialog',\n  standalone: true,\n  templateUrl: './lux-consent-dialog.component.html',\n  styleUrls: ['./lux-consent-dialog.component.scss'],\n  host: {\n    '[class.mobile-view]': 'mobileView'\n  },\n  imports: [\n    LuxDialogStructureComponent,\n    LuxDialogTitleComponent,\n    LuxDialogContentComponent,\n    LuxDialogActionsComponent,\n    LuxButtonComponent,\n    LuxLinkPlainComponent,\n    LuxToggleAcComponent,\n    LuxTableComponent,\n    LuxTableColumnComponent,\n    LuxTableColumnHeaderComponent,\n    LuxTableColumnContentComponent,\n    NgComponentOutlet,\n    LuxDividerComponent,\n    TranslocoPipe\n]\n})\nexport class LuxConsentDialogComponent implements OnInit {\n  isExpanded = false;\n  activeSection: 'consent' | 'datenschutz' | 'impressum' = 'consent';\n  impressumComponentResolved?: Type<unknown>;\n  datenschutzComponentResolved?: Type<unknown>;\n\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly dialogRef = inject(LuxDialogRef);\n  private readonly consentService = inject(LuxConsentService);\n  private readonly mediaQueryService = inject(LuxMediaQueryObserverService);\n  consentConfig!: ILuxConsentConfig;\n\n  mobileView = this.mediaQueryService.isSmallerOrEqual('sm');\n  LuxConsentPurpose = LuxConsentPurpose;\n  LuxConsentStorageType = LuxConsentStorageType;\n  storageTypes: LuxConsentStorageType[] = Object.values(LuxConsentStorageType) as LuxConsentStorageType[];\n  tableDataByPurposeAndType: Record<string, LuxConsentEntry[]> = {};\n  combinedEntries: LuxConsentEntry[] = [];\n  hasNonEssentialEntries = false;\n  cookieCategories: LuxCookieCategory[] = LUX_CONSENT_CATEGORIES.map((category) => ({ ...category }));\n\n  ngOnInit() {\n    this.mediaQueryService\n      .getMediaQueryChangedAsObservable()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        this.mobileView = this.mediaQueryService.isSmallerOrEqual('sm');\n      });\n\n    this.consentConfig = this.consentService.getCurrentConfig();\n\n    this.impressumComponentResolved = this.consentConfig.impressumComponent;\n    this.datenschutzComponentResolved = this.consentConfig.datenschutzComponent;\n\n    this.consentService\n      .getConsentState()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((state) => {\n        if (state) {\n          this.updateCategoriesFromState(state.purposes);\n        }\n      });\n\n    // merge default entries with any entries provided via DI config\n    this.combinedEntries = [...LUX_CONSENT_ENTRIES, ...(this.consentConfig?.entries ?? [])];\n    this.hasNonEssentialEntries = this.combinedEntries.some((entry) => entry.purpose !== LuxConsentPurpose.Essential);\n\n    this.buildTableDataByPurposeAndType();\n  }\n\n  private buildTableDataByPurposeAndType() {\n    this.tableDataByPurposeAndType = {};\n    for (const category of this.cookieCategories) {\n      for (const type of this.storageTypes) {\n        const key = `${category.purpose}_${type}`;\n        this.tableDataByPurposeAndType[key] = this.combinedEntries.filter(\n          (cookie) => cookie.purpose === category.purpose && cookie.type === type\n        );\n      }\n    }\n  }\n\n  getEntriesForPurposeAndType(purpose: LuxConsentPurpose, type: LuxConsentStorageType): LuxConsentEntry[] {\n    return this.tableDataByPurposeAndType[`${purpose}_${type}`] || [];\n  }\n\n  protected hasConfiguredEntriesForCategory(purpose: LuxConsentPurpose): boolean {\n    return this.storageTypes.some((type) => this.getEntriesForPurposeAndType(purpose, type).length > 0);\n  }\n\n  toggleDetails() {\n    this.isExpanded = !this.isExpanded;\n  }\n\n  acceptAll() {\n    this.consentService.acceptAll();\n    this.dialogRef.closeDialog();\n  }\n\n  declineAll() {\n    this.consentService.declineNonFunctional();\n    this.dialogRef.closeDialog();\n  }\n\n  acceptSelected() {\n    const selectedPurposes = this.cookieCategories.filter((cat) => cat.enabled).map((cat) => cat.purpose);\n\n    this.consentService.saveCustomConsent(selectedPurposes);\n    this.dialogRef.closeDialog();\n  }\n\n  closeDialog() {\n    this.consentService.onCloseDialog();\n    this.dialogRef.closeDialog();\n  }\n\n  private updateCategoriesFromState(purposes: LuxConsentPurpose[]) {\n    this.cookieCategories.forEach((category) => {\n      if (!category.disabled) {\n        category.enabled = purposes.includes(category.purpose);\n      }\n    });\n  }\n\n  protected findCategoryByPurpose(purpose: LuxConsentPurpose) {\n    return this.cookieCategories.find((cat) => cat.purpose === purpose);\n  }\n\n  protected toggleCategoryEnabled(purpose: LuxConsentPurpose, isEnabled: boolean) {\n    const category = this.findCategoryByPurpose(purpose);\n    if (category && !category.disabled) {\n      category.enabled = isEnabled;\n    }\n  }\n\n  async showSection(section: 'consent' | 'impressum' | 'datenschutz') {\n    if (section === 'consent') {\n      this.activeSection = 'consent';\n      return;\n    }\n\n    if (section === 'impressum') {\n      if (this.impressumComponentResolved) {\n        this.activeSection = 'impressum';\n        return;\n      }\n      if (this.consentConfig.impressumComponentLoader) {\n        try {\n          this.impressumComponentResolved = await this.consentConfig.impressumComponentLoader();\n          this.activeSection = 'impressum';\n        } catch (error) {\n          console.error('Konnte Impressum-Komponente nicht laden.', error);\n          if (this.consentConfig.impressumUrl) {\n            window.open(this.consentConfig.impressumUrl, '_blank', 'noopener,noreferrer');\n          } else {\n            this.activeSection = 'consent';\n          }\n        }\n        return;\n      }\n      if (this.consentConfig.impressumUrl) {\n        window.open(this.consentConfig.impressumUrl, '_blank', 'noopener,noreferrer');\n      }\n      return;\n    }\n\n    if (this.datenschutzComponentResolved) {\n      this.activeSection = 'datenschutz';\n      return;\n    }\n    if (this.consentConfig.datenschutzComponentLoader) {\n      try {\n        this.datenschutzComponentResolved = await this.consentConfig.datenschutzComponentLoader();\n        this.activeSection = 'datenschutz';\n      } catch (error) {\n        console.error('Konnte Datenschutz-Komponente nicht laden.', error);\n        if (this.consentConfig.datenschutzUrl) {\n          window.open(this.consentConfig.datenschutzUrl, '_blank', 'noopener,noreferrer');\n        } else {\n          this.activeSection = 'consent';\n        }\n      }\n      return;\n    }\n    if (this.consentConfig.datenschutzUrl) {\n      window.open(this.consentConfig.datenschutzUrl, '_blank', 'noopener,noreferrer');\n    }\n  }\n}\n","<lux-dialog-structure>\n  <lux-dialog-title>{{ 'luxc.consent.title' | transloco }}</lux-dialog-title>\n  <lux-dialog-content>\n    <div class=\"lux-consent-card\">\n      <p class=\"lux-consent-description\">\n        {{ 'luxc.consent.description' | transloco }}\n      </p>\n\n      <lux-divider></lux-divider>\n\n      @if (activeSection === 'datenschutz' && datenschutzComponentResolved) {\n        <ng-container *ngComponentOutlet=\"datenschutzComponentResolved; inputs: consentConfig.datenschutzComponentInputs\"></ng-container>\n      }\n\n      @if (activeSection === 'impressum' && impressumComponentResolved) {\n        <ng-container *ngComponentOutlet=\"impressumComponentResolved; inputs: consentConfig.impressumComponentInputs\"></ng-container>\n      }\n\n      @if (activeSection === 'consent' && !isExpanded) {\n        <div class=\"lux-flex lux-flex-col lux-gap-4 lux-pb-4\">\n          @for (category of cookieCategories; track $index) {\n            @if (hasConfiguredEntriesForCategory(category.purpose) || category.purpose === LuxConsentPurpose.Essential) {\n              @if (category.purpose === LuxConsentPurpose.Essential) {\n                <p>\n                  <span class=\"essential-always-active\">{{ 'luxc.consent.always_active' | transloco }}</span\n                  >: <span>{{ category.name | transloco }}</span>\n                  <span class=\"essential-hint\">{{ category.hint | transloco }}</span>\n                </p>\n              } @else {\n                <lux-toggle-ac\n                  [luxNoTopLabel]=\"true\"\n                  [luxDense]=\"true\"\n                  [luxLabel]=\"category.name | transloco\"\n                  [luxDisabled]=\"category.disabled\"\n                  [luxHint]=\"category.hint | transloco\"\n                  [luxChecked]=\"category.enabled\"\n                  (luxCheckedChange)=\"toggleCategoryEnabled(category.purpose, $event)\"\n                ></lux-toggle-ac>\n              }\n            }\n          }\n        </div>\n      }\n\n      @if (activeSection === 'consent' && isExpanded) {\n        <div class=\"cookie-details\">\n          <div class=\"details-container lux-mb-3\">\n            <div class=\"purposes-sidebar\">\n              <h3 class=\"sidebar-title\">{{ 'luxc.consent.purposes_title' | transloco }}</h3>\n              <div class=\"purpose-checkboxes\">\n                @for (category of cookieCategories; track $index) {\n                  @if (hasConfiguredEntriesForCategory(category.purpose) || category.purpose === LuxConsentPurpose.Essential) {\n                    @if (category.purpose === LuxConsentPurpose.Essential) {\n                      <p>\n                        <span class=\"essential-always-active\">{{ 'luxc.consent.always_active' | transloco }}</span\n                        >: <span>{{ category.name | transloco }}</span>\n                      </p>\n                    } @else {\n                      <lux-toggle-ac\n                        [luxNoLabels]=\"true\"\n                        [luxLabel]=\"category.name | transloco\"\n                        [(luxChecked)]=\"category.enabled\"\n                        [luxDisabled]=\"category.disabled\"\n                        [luxTagId]=\"'cookie-' + category.purpose\"\n                      >\n                      </lux-toggle-ac>\n                    }\n                  }\n                }\n              </div>\n            </div>\n\n            <div class=\"cookies-content lux-p-4\">\n              <h3>{{ 'luxc.consent.cookies_used_title' | transloco }}</h3>\n              @for (category of cookieCategories; track $index) {\n                @if (hasConfiguredEntriesForCategory(category.purpose)) {\n                  @if ($index !== 0) {\n                    <lux-divider class=\"lux-pt-4\"></lux-divider>\n                  }\n                  <div class=\"purpose-section\">\n                    <h4 class=\"purpose-title\">{{ category.name | transloco }}</h4>\n                    <p>\n                      {{ category.hint | transloco }}\n                    </p>\n\n                    @for (type of storageTypes; track $index) {\n                      @if (getEntriesForPurposeAndType(category.purpose, type).length > 0) {\n                        <div class=\"storage-type-section\">\n                          <h5 class=\"storage-type-title\">{{ type }}</h5>\n                          <lux-table [luxData]=\"getEntriesForPurposeAndType(category.purpose, type)\">\n                            <lux-table-column luxColumnDef=\"name\">\n                              <lux-table-column-header>\n                                <ng-template>{{ 'luxc.consent.table_header_name' | transloco }}</ng-template>\n                              </lux-table-column-header>\n                              <lux-table-column-content>\n                                <ng-template let-element>\n                                  <span class=\"storage-name\">{{ element.name }}</span>\n                                </ng-template>\n                              </lux-table-column-content>\n                            </lux-table-column>\n                            <lux-table-column luxColumnDef=\"duration\" luxResponsiveBehaviour=\"name\" [luxResponsiveAt]=\"['xs', 'sm']\">\n                              <lux-table-column-header>\n                                <ng-template>{{ 'luxc.consent.table_header_duration' | transloco }}</ng-template>\n                              </lux-table-column-header>\n                              <lux-table-column-content>\n                                <ng-template let-element>\n                                  {{ element.duration }}\n                                </ng-template>\n                              </lux-table-column-content>\n                            </lux-table-column>\n                            <lux-table-column luxColumnDef=\"description\" luxResponsiveBehaviour=\"name\" [luxResponsiveAt]=\"['xs', 'sm']\">\n                              <lux-table-column-header>\n                                <ng-template>{{ 'luxc.consent.table_header_description' | transloco }}</ng-template>\n                              </lux-table-column-header>\n                              <lux-table-column-content>\n                                <ng-template let-element>\n                                  <span\n                                    >{{ element.description }}\n                                    @if (element.nameIsPrefix) {\n                                      <span class=\"essential-hint\">{{ 'luxc.consent.multiple_entries_note' | transloco }}</span>\n                                    }\n                                  </span>\n                                </ng-template>\n                              </lux-table-column-content>\n                            </lux-table-column>\n                          </lux-table>\n                        </div>\n                      }\n                    }\n                  </div>\n                }\n              }\n            </div>\n          </div>\n        </div>\n      }\n    </div>\n\n    <lux-divider></lux-divider>\n\n    <div class=\"lux-flex lux-gap-5 lux-mt-3 lux-justify-start lt-sm:lux-flex-col lt-sm:lux-mt-1\">\n      @if (activeSection !== 'consent') {\n        <lux-link-plain [luxLabel]=\"'luxc.consent.link_back' | transloco\" (luxClicked)=\"showSection('consent')\"></lux-link-plain>\n      }\n      @if (activeSection === 'consent' && isExpanded) {\n        <lux-link-plain\n          [luxLabel]=\"'luxc.consent.hide_details' | transloco\"\n          [luxIconShowRight]=\"false\"\n          (luxClicked)=\"toggleDetails()\"\n        ></lux-link-plain>\n      }\n      @if (activeSection === 'consent' && !isExpanded) {\n        <lux-link-plain\n          [luxLabel]=\"'luxc.consent.show_details' | transloco\"\n          [luxIconShowRight]=\"false\"\n          (luxClicked)=\"toggleDetails()\"\n        ></lux-link-plain>\n      }\n      <lux-link-plain [luxLabel]=\"'luxc.consent.link_datenschutz' | transloco\" (luxClicked)=\"showSection('datenschutz')\"></lux-link-plain>\n      <lux-link-plain [luxLabel]=\"'luxc.consent.link_impressum' | transloco\" (luxClicked)=\"showSection('impressum')\"></lux-link-plain>\n    </div>\n  </lux-dialog-content>\n  <lux-dialog-actions class=\"lux-consent-dialog-actions\">\n    @if (hasNonEssentialEntries) {\n      <lux-button\n        [luxLabel]=\"'luxc.consent.button_decline_optional' | transloco\"\n        luxTagId=\"decline-optional\"\n        [luxFlat]=\"true\"\n        luxColor=\"primary\"\n        (luxClicked)=\"declineAll()\"\n      >\n      </lux-button>\n      <lux-button\n        [luxLabel]=\"'luxc.consent.button_accept_selected' | transloco\"\n        luxTagId=\"accept-selected\"\n        [luxFlat]=\"true\"\n        luxColor=\"primary\"\n        (luxClicked)=\"acceptSelected()\"\n      >\n      </lux-button>\n      <lux-button\n        [luxLabel]=\"'luxc.consent.button_accept_all' | transloco\"\n        luxTagId=\"accept-all\"\n        [luxFlat]=\"true\"\n        luxColor=\"primary\"\n        (luxClicked)=\"acceptAll()\"\n      >\n      </lux-button>\n    } @else {\n      <lux-button\n        [luxLabel]=\"'luxc.consent.button_close' | transloco\"\n        luxTagId=\"close\"\n        [luxFlat]=\"true\"\n        luxColor=\"primary\"\n        (luxClicked)=\"closeDialog()\"\n      >\n      </lux-button>\n    }\n  </lux-dialog-actions>\n</lux-dialog-structure>\n","import { NgStyle } from '@angular/common';\nimport { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n  selector: 'lux-image',\n  templateUrl: './lux-image.component.html',\n  styleUrls: ['./lux-image.component.scss'],\n  imports: [NgStyle]\n})\nexport class LuxImageComponent implements OnChanges, OnInit {\n  @Input() luxImageSrc = '';\n  @Input() luxImageWidth = 'auto';\n  @Input() luxImageHeight = 'auto';\n  @Input() luxRawSrc = false;\n  @Input() luxAlt = '';\n\n  @Output() luxClicked = new EventEmitter<Event>();\n\n  isObserved = false;\n\n  constructor() {}\n\n  ngOnInit() {\n    if (this.luxClicked.observed) {\n      this.isObserved = true;\n    }\n  }\n\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    if (simpleChanges['luxImageSrc']) {\n      if (!this.luxRawSrc) {\n        this.updateImageSrc();\n      }\n    } else if (simpleChanges['luxRawSrc']) {\n      if (!this.luxRawSrc) {\n        this.updateImageSrc();\n      }\n    }\n  }\n\n  clicked(event: Event) {\n    this.luxClicked.emit(event);\n  }\n\n  private updateImageSrc() {\n    if (this.luxImageSrc) {\n      // Prüfen, ob es sich um ein externes Bild handelt\n      if (this.luxImageSrc.startsWith('http')) {\n        // Externe Links werden nicht verändert.\n      } else {\n        // Wenn nicht, auf den Assets-Ordner verweisen\n        if (this.luxImageSrc.indexOf('asset') === -1) {\n          this.luxImageSrc = 'assets/' + this.luxImageSrc;\n        }\n        this.sanitizeImageSrc();\n      }\n    }\n  }\n\n  private sanitizeImageSrc() {\n    // Doppelte Slashes entfernen\n    this.luxImageSrc = this.luxImageSrc.replace(/\\/\\/+/g, '/');\n    // Führende Slashes entfernen\n    if (this.luxImageSrc.startsWith('/')) {\n      this.luxImageSrc = this.luxImageSrc.slice(1, this.luxImageSrc.length);\n    }\n  }\n}\n","<div>\n  @if (!isObserved) {\n  <img [src]=\"luxImageSrc\" class=\"lux-image\" [alt]=\"luxAlt\" [ngStyle]=\"{ width: luxImageWidth, height: luxImageHeight }\" />\n  } @else {\n  <img\n    [src]=\"luxImageSrc\"\n    (click)=\"clicked($event)\"\n    (keydown.enter)=\"clicked($event)\"\n    (keydown.space)=\"clicked($event)\"\n    [attr.tabindex]=\"0\"\n    class=\"lux-image lux-clickable\"\n    [alt]=\"luxAlt\"\n    [ngStyle]=\"{ width: luxImageWidth, height: luxImageHeight }\"\n  />\n  }\n</div>\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LuxComponentsConfigParameters } from '../lux-components-config/lux-components-config-parameters.interface';\nimport { LuxComponentsConfigService } from '../lux-components-config/lux-components-config.service';\nimport { LuxAriaLabelDirective } from '../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxImageComponent } from '../lux-icon/lux-image/lux-image.component';\nimport { LuxMediaQueryObserverService } from '../lux-util/lux-media-query-observer.service';\n\n@Component({\n  selector: 'lux-tenant-logo',\n  templateUrl: './lux-tenant-logo.component.html',\n  styleUrls: ['./lux-tenant-logo.component.scss'],\n  imports: [LuxImageComponent, LuxAriaLabelDirective]\n})\nexport class LuxTenantLogoComponent implements OnInit, OnDestroy {\n  private componentsConfigService = inject(LuxComponentsConfigService);\n  private queryObserver = inject(LuxMediaQueryObserverService);\n\n  /*\n   * Statische Methoden, die beschreiben, wie (z.B.) die Url aufgebaut wird und sich diese je nach Media Query verändert\n   * Kann eventuell durch konfigurierbare Breakpoints ersetzt werden in der Zukunft.\n   */\n\n  public static buildTenantLogoUrlFromMediaQuery(\n    baseUrl: string,\n    tenantKey: string,\n    tenantVariant: string | undefined,\n    mediaQuery: string\n  ): string {\n    const actualTenantVariant = tenantVariant || LuxTenantLogoComponent.getVariantByMediaQuery(mediaQuery);\n    return LuxTenantLogoComponent.buildTenantLogoUrl(baseUrl, tenantKey, actualTenantVariant);\n  }\n\n  public static getVariantByMediaQuery(mediaQuery: string): string {\n    if (mediaQuery === 'xs' || mediaQuery === 'sm') {\n      return 'kurz';\n    } else {\n      return 'lang';\n    }\n  }\n\n  public static buildTenantLogoUrl(baseUrl: string, tenantKey: string, tenantVariant: string): string {\n    return baseUrl + tenantKey + '_' + tenantVariant + '.svg';\n  }\n\n  private _luxTenantKey!: string;\n\n  @Input()\n  public set luxTenantKey(luxTenantKey: string) {\n    this._luxTenantKey = luxTenantKey;\n    this.updateSrc();\n    this.updateAriaLabel();\n  }\n\n  public get luxTenantKey(): string {\n    return this._luxTenantKey;\n  }\n\n  private _luxTenantVariant: string | undefined;\n\n  @Input()\n  public set luxTenantVariant(luxTenantVariant: string | undefined) {\n    this._luxTenantVariant = luxTenantVariant;\n    this.updateSrc();\n  }\n\n  public get luxTenantVariant(): string | undefined {\n    return this._luxTenantVariant;\n  }\n\n  public actualLuxTenantLogoHeight = '';\n  private _luxTenantLogoHeight = '';\n\n  @Input()\n  public set luxTenantLogoHeight(luxTenantLogoHeight: string) {\n    this._luxTenantLogoHeight = luxTenantLogoHeight;\n\n    this.updateHeight();\n  }\n\n  public get luxTenantLogoHeight(): string {\n    return this._luxTenantLogoHeight;\n  }\n\n  @Output() luxTenantLogoClicked = new EventEmitter<Event>();\n\n  private apiPath?: string;\n  private mediaQuery?: string;\n\n  public tenantLogoSrc: any;\n  public luxTenantLogoAriaLabel?: string;\n  public luxTenantLogoAlt = 'Tenant Logo';\n\n  private subscriptions: Subscription[] = [];\n\n  ngOnInit(): void {\n    this.subscriptions.push(\n      this.componentsConfigService.config.subscribe((newConfig: LuxComponentsConfigParameters) => {\n        this.apiPath = newConfig.tenantLogoLookupServiceUrl ?? LuxComponentsConfigService.DEFAULT_CONFIG.tenantLogoLookupServiceUrl;\n        this.updateSrc();\n      })\n    );\n\n    this.subscriptions.push(\n      this.queryObserver.getMediaQueryChangedAsObservable().subscribe((mediaQuery) => {\n        this.mediaQuery = mediaQuery;\n        this.updateSrc();\n        this.updateHeight();\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.forEach((sub) => sub.unsubscribe());\n  }\n\n  private updateSrc(): void {\n    if (!this.apiPath) return;\n    if (!this.mediaQuery) return;\n\n    this.tenantLogoSrc = LuxTenantLogoComponent.buildTenantLogoUrlFromMediaQuery(\n      this.apiPath,\n      this.luxTenantKey,\n      this.luxTenantVariant,\n      this.mediaQuery\n    );\n  }\n\n  private updateHeight(): void {\n    if (!this.luxTenantLogoHeight) {\n      if (!this.mediaQuery) return;\n      else if (this.mediaQuery === 'xs' || this.mediaQuery === 'sm') {\n        this.actualLuxTenantLogoHeight = '32px';\n      } else {\n        this.actualLuxTenantLogoHeight = '40px';\n      }\n    } else {\n      this.actualLuxTenantLogoHeight = this.luxTenantLogoHeight;\n    }\n  }\n\n  private updateAriaLabel(): void {\n    this.luxTenantLogoAriaLabel = 'Logo ' + this.luxTenantKey;\n    this.luxTenantLogoAlt = 'Logo ' + this.luxTenantKey;\n  }\n\n  public onImageClicked(event: any): void {\n    this.luxTenantLogoClicked.emit(event);\n  }\n}\n","@if (tenantLogoSrc) {\n<lux-image\n  [luxImageSrc]=\"tenantLogoSrc\"\n  [luxImageHeight]=\"actualLuxTenantLogoHeight\"\n  class=\"lux-tenant-logo\"\n  [luxAlt]=\"luxTenantLogoAlt\"\n  [luxAriaLabel]=\"luxTenantLogoAriaLabel\"\n  luxTagId=\"lux-tenant-logo-image\"\n  (luxClicked)=\"onImageClicked($event)\"\n></lux-image>\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxAppService {\n  appEl?: HTMLElement;\n  appHeaderEl?: HTMLElement;\n  appContentEl?: HTMLElement;\n  appFooterEl?: HTMLElement;\n\n  resize$ = new Subject<void>();\n\n  constructor() {}\n\n  getHeaderWidth(): number {\n    return this.appHeaderEl ? this.appHeaderEl.getBoundingClientRect().width : 0;\n  }\n\n  getHeaderHeight(): number {\n    return this.appHeaderEl ? this.appHeaderEl.getBoundingClientRect().height : 0;\n  }\n\n  getContentWidth(): number {\n    return this.getAppWidth();\n  }\n\n  getContentHeight(): number {\n    return this.getAppHeight() - this.getHeaderHeight() - this.getFooterHeight();\n  }\n\n  getFooterWidth(): number {\n    return this.appFooterEl ? this.appFooterEl.getBoundingClientRect().width : 0;\n  }\n\n  getFooterHeight(): number {\n    return this.appFooterEl ? this.appFooterEl.getBoundingClientRect().height : 0;\n  }\n\n  getAppTop(): number {\n    return this.appEl ? this.appEl.getBoundingClientRect().top : 0;\n  }\n\n  getAppLeft(): number {\n    return this.appEl ? this.appEl.getBoundingClientRect().left : 0;\n  }\n\n  getAppBottom(): number {\n    let bottom = 0;\n\n    if (this.appEl) {\n      const boundingBox = this.appEl.getBoundingClientRect();\n      bottom = boundingBox.bottom - boundingBox.height;\n    }\n\n    return bottom;\n  }\n\n  getAppRight(): number {\n    let right = 0;\n\n    if (this.appEl) {\n      const boundingBox = this.appEl.getBoundingClientRect();\n      right = boundingBox.right - boundingBox.width;\n    }\n\n    return right;\n  }\n\n  getAppHeight(): number {\n    return this.appEl ? this.appEl.getBoundingClientRect().height : 0;\n  }\n\n  getAppWidth(): number {\n    return this.appEl ? this.appEl.getBoundingClientRect().width : 0;\n  }\n\n  onResize() {\n    this.resize$.next();\n  }\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxAppFooterFixedService implements OnDestroy {\n  private configService = inject(LuxComponentsConfigService);\n  private mediaQueryService = inject(LuxMediaQueryObserverService);\n\n  private fixedModeSubject = new BehaviorSubject<boolean>(true);\n\n  subscriptions: Subscription[] = [];\n\n  constructor() {\n    this.updateFixedMode();\n\n    this.subscriptions.push(\n      this.configService.config.subscribe(() => {\n        this.updateFixedMode();\n      })\n    );\n\n    this.subscriptions.push(\n      this.mediaQueryService.getMediaQueryChangedAsObservable(...LuxMediaQueryObserverService.BREAKPOINTS_ALL).subscribe(() => {\n        this.updateFixedMode();\n      })\n    );\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((sub) => {\n      sub.unsubscribe();\n    });\n  }\n\n  get fixedMode(): boolean {\n    return this.fixedModeSubject.getValue();\n  }\n\n  get fixedModeAsObservable(): Observable<boolean> {\n    return this.fixedModeSubject.asObservable();\n  }\n\n  private updateFixedMode() {\n    const fixedDesktopConfig = !!this.configService.currentConfig.appFooter?.fixedDesktop;\n    const fixedMobileConfig = !!this.configService.currentConfig.appFooter?.fixedMobile;\n    const isMobile = this.mediaQueryService.isHandset();\n    const isDesktop = !isMobile;\n\n    const isFixedDesktop = fixedDesktopConfig && isDesktop;\n    const isFixedMobile = fixedMobileConfig && isMobile;\n    const newFixedMode = isFixedDesktop || isFixedMobile;\n\n    if (this.fixedMode !== newFixedMode) {\n      this.fixedModeSubject.next(newFixedMode);\n    }\n  }\n}\n","import { Component, ElementRef, HostBinding, HostListener, Input, OnDestroy, OnInit, inject } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { LuxThemeService } from '../../lux-theme/lux-theme.service';\nimport { LuxAppService } from '../../lux-util/lux-app.service';\nimport { LuxAppFooterFixedService } from '../lux-app-footer/lux-app-footer-fixed.service';\n\n@Component({\n  selector: 'lux-app-content',\n  templateUrl: './lux-app-content.component.html',\n  styleUrls: ['./lux-app-content.component.scss'],\n  imports: [RouterOutlet]\n})\nexport class LuxAppContentComponent implements OnInit, OnDestroy {\n  private elementRef = inject(ElementRef);\n  private appService = inject(LuxAppService);\n  private footerService = inject(LuxAppFooterFixedService);\n  themeService = inject(LuxThemeService);\n\n  @Input() luxAriaRoleMainLabel = '';\n\n  @HostListener('window:resize') windowResize() {\n    this.appService.onResize();\n  }\n\n  @HostBinding('class.lux-app-footer-no-fixed') get getNoStickModeClass() {\n    return !this.fixedMode;\n  }\n\n  @HostBinding('attr.role') role?: string;\n  @HostBinding('attr.aria-label') label?: string;\n\n  fixedMode: boolean;\n  themeName: string;\n  subscriptions: Subscription[] = [];\n\n  constructor() {\n    this.appService.appContentEl = this.elementRef.nativeElement;\n\n    this.fixedMode = this.footerService.fixedMode;\n    this.subscriptions.push(\n      this.footerService.fixedModeAsObservable.subscribe((fixedMode) => {\n        this.fixedMode = fixedMode;\n      })\n    );\n\n    this.themeName = this.themeService.getTheme().name;\n    this.subscriptions.push(\n      this.themeService.getThemeAsObservable().subscribe((theme) => {\n        this.themeName = theme.name;\n      })\n    );\n  }\n\n  ngOnInit(): void {\n    if (this.luxAriaRoleMainLabel) {\n      this.role = 'main';\n      this.label = this.luxAriaRoleMainLabel;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.forEach((sub) => {\n      sub.unsubscribe();\n    });\n  }\n}\n","<div class=\"lux-app-content-container lux-theme-{{ themeName }}\">\n  <router-outlet></router-outlet>\n  <ng-content></ng-content>\n</div>\n","import { LuxThemePalette } from '../../lux-util/lux-colors.enum';\n\nexport interface ILuxAppFooterButtonInfo {\n  label: string;\n  cmd: string;\n  prio: number;\n  color?: LuxThemePalette;\n  disabled?: boolean;\n  hidden?: boolean;\n  raised?: boolean;\n  flat?: boolean;\n  stroked?: boolean;\n  iconName?: string;\n  alwaysVisible?: boolean;\n  tooltip?: string;\n  onClick?: (that: ILuxAppFooterButtonInfo) => void;\n}\n\nexport class LuxAppFooterButtonInfo implements ILuxAppFooterButtonInfo {\n  label: string;\n  color: LuxThemePalette;\n  prio: number;\n  disabled: boolean;\n  cmd: string;\n  hidden: boolean;\n  raised: boolean;\n  flat: boolean;\n  stroked: boolean;\n  iconName?: string;\n  alwaysVisible: boolean;\n  tooltip: string;\n  tooltipMenu: string;\n  onClick: (that: ILuxAppFooterButtonInfo) => void;\n\n  constructor(\n    label: string,\n    cmd: string,\n    prio?: number,\n    color?: LuxThemePalette,\n    disabled?: boolean,\n    hidden?: boolean,\n    raised?: boolean,\n    flat?: boolean,\n    stroked?: boolean,\n    iconName?: string,\n    alwaysVisible?: boolean,\n    tooltip?: string,\n    tooltipMenu?: string,\n    onClick?: (that: ILuxAppFooterButtonInfo) => void\n  ) {\n    this.label = label;\n    this.color = color;\n    this.prio = !prio ? 0 : prio;\n    this.disabled = disabled ?? false;\n    this.cmd = cmd;\n    this.hidden = hidden === true;\n    this.raised = raised === undefined || raised === null || raised;\n    this.flat = flat === true;\n    this.stroked = stroked === true;\n    this.iconName = iconName;\n    this.alwaysVisible = !(alwaysVisible === undefined || alwaysVisible === null || !alwaysVisible);\n    this.tooltip = tooltip ? tooltip : '';\n    this.tooltipMenu = tooltipMenu ? tooltipMenu : '';\n    this.onClick = onClick ? onClick : () => {};\n  }\n\n  /**\n   * Statische Methode um ein Info-Objekt zu generieren.\n   * Nimmt ein Objekt vom Typ ILuxAppFooterButtonInfo entgegen.\n   * @param data\n   * @returns eine Button Info\n   */\n  static generateInfo(data: Partial<ILuxAppFooterButtonInfo>): LuxAppFooterButtonInfo {\n    const info = new LuxAppFooterButtonInfo(data.label ?? '', data.cmd ?? '');\n    Object.assign(info, data);\n\n    return info;\n  }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { LuxAppFooterButtonInfo } from './lux-app-footer-button-info';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxAppFooterButtonService implements OnDestroy {\n  private buttonInfoSubject = new BehaviorSubject<LuxAppFooterButtonInfo[]>([]);\n\n  get buttonInfos(): LuxAppFooterButtonInfo[] {\n    return this.buttonInfoSubject.getValue();\n  }\n\n  set buttonInfos(buttonInfos: LuxAppFooterButtonInfo[]) {\n    this.buttonInfoSubject.next(buttonInfos ? buttonInfos : []);\n  }\n\n  getButtonInfosAsObservable(): Observable<LuxAppFooterButtonInfo[]> {\n    return this.buttonInfoSubject.asObservable();\n  }\n\n  ngOnDestroy() {\n    this.buttonInfoSubject.complete();\n  }\n\n  pushButtonInfos(...value: LuxAppFooterButtonInfo[]) {\n    this.buttonInfos = [...this.buttonInfos, ...value];\n  }\n\n  getButtonInfoByCMD(cmd: string) {\n    return this.buttonInfos.find((buttonInfo: LuxAppFooterButtonInfo) => buttonInfo.cmd === cmd);\n  }\n\n  removeButtonInfoAtIndex(i: number) {\n    this.buttonInfos = this.buttonInfos.filter((info, index) => index !== i);\n  }\n\n  removeButtonInfoByCmd(cmd: string) {\n    this.buttonInfos = this.buttonInfos.filter((info) => info.cmd !== cmd);\n  }\n\n  clearButtonInfos() {\n    this.buttonInfos = [];\n  }\n\n  sendButtonCommand(buttonCommand: string) {\n    // Den angeklickten Button erhalten und dessen onClick-Funktion aufrufen.\n    // Als Parameter den Button selbst mitgeben (falls dieser bearbeitet werden muss, z.B.).\n    const clickedButton = this.getButtonInfoByCMD(buttonCommand);\n    if (clickedButton) {\n      clickedButton.onClick(clickedButton);\n    }\n  }\n}\n","export interface ILuxAppFooterLinkInfo {\n  label: string;\n  path: string;\n  alwaysVisible?: boolean;\n  blank?: boolean;\n  onClick?: (that: ILuxAppFooterLinkInfo) => void;\n}\n\nexport class LuxAppFooterLinkInfo implements ILuxAppFooterLinkInfo {\n  label: string;\n  path: string;\n  alwaysVisible: boolean;\n  blank: boolean;\n  onClick?: (that: ILuxAppFooterLinkInfo) => void;\n\n  constructor(label: string, path: string, alwaysVisible?: boolean, blank?: boolean, onClick?: (that: ILuxAppFooterLinkInfo) => void) {\n    this.label = label;\n    this.path = path;\n    this.alwaysVisible = alwaysVisible ?? false;\n    this.blank = blank ?? false;\n    this.onClick = onClick;\n  }\n\n  /**\n   * Statische Methode um ein Info-Objekt zu generieren.\n   * Nimmt ein Objekt vom Typ ILuxAppFooterLinkInfo entgegen.\n   * @param data\n   * @returns eine Link Info\n   */\n  static generateInfo(data: ILuxAppFooterLinkInfo): LuxAppFooterLinkInfo {\n    return new LuxAppFooterLinkInfo(data.label, data.path, data.alwaysVisible, data.blank, data.onClick);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { LuxAppFooterLinkInfo } from './lux-app-footer-link-info';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxAppFooterLinkService {\n  private linkInfoSubject = new BehaviorSubject<LuxAppFooterLinkInfo[]>([]);\n\n  get linkInfos(): LuxAppFooterLinkInfo[] {\n    return this.linkInfoSubject.getValue();\n  }\n\n  set linkInfos(links: LuxAppFooterLinkInfo[]) {\n    this.linkInfoSubject.next(links ? links : []);\n  }\n\n  getLinkInfosAsObservable(): Observable<LuxAppFooterLinkInfo[]> {\n    return this.linkInfoSubject.asObservable();\n  }\n\n  pushLinkInfos(...links: LuxAppFooterLinkInfo[]) {\n    this.linkInfos = [...this.linkInfos, ...links];\n  }\n\n  removeLinkInfoAtIndex(i: number) {\n    this.linkInfos = this.linkInfos.filter((info, index) => index !== i);\n  }\n\n  clearLinkInfos() {\n    this.linkInfos = [];\n  }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxLinkComponent } from '../../lux-action/lux-link/lux-link.component';\nimport { LuxMenuItemComponent } from '../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxMenuComponent } from '../../lux-action/lux-menu/lux-menu.component';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxAriaRoleDirective } from '../../lux-directives/lux-aria/lux-aria-role.directive';\nimport { LuxAppService } from '../../lux-util/lux-app.service';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxAppFooterButtonInfo } from './lux-app-footer-button-info';\nimport { LuxAppFooterButtonService } from './lux-app-footer-button.service';\nimport { LuxAppFooterLinkInfo } from './lux-app-footer-link-info';\nimport { LuxAppFooterLinkService } from './lux-app-footer-link.service';\n\n@Component({\n  selector: 'lux-app-footer',\n  templateUrl: './lux-app-footer.component.html',\n  imports: [LuxAriaRoleDirective, LuxAriaLabelDirective, NgClass, NgStyle, LuxLinkComponent, LuxMenuComponent, LuxMenuItemComponent, TranslocoPipe]\n})\nexport class LuxAppFooterComponent implements OnInit, AfterViewInit, OnDestroy {\n  buttonService = inject(LuxAppFooterButtonService);\n  private linkService = inject(LuxAppFooterLinkService);\n  private mediaObserver = inject(LuxMediaQueryObserverService);\n  private elementRef = inject(ElementRef);\n  private appService = inject(LuxAppService);\n  private cdr = inject(ChangeDetectorRef);\n  private configService = inject(LuxComponentsConfigService);\n\n  @ViewChild('buttonMenu', { static: true }) buttonMenu!: LuxMenuComponent;\n\n  @Input() luxVersion?: string;\n  @Input() luxAriaRoleFooterLabel = '';\n  @Input() luxCenteredView!: boolean;\n  @Input() luxCenteredWidth!: string;\n\n  desktopView?: boolean;\n  buttonInfos: LuxAppFooterButtonInfo[] = [];\n  linkInfos: LuxAppFooterLinkInfo[] = [];\n  subscriptions: Subscription[] = [];\n\n  constructor() {\n    this.appService.appFooterEl = this.elementRef.nativeElement;\n  }\n\n  ngOnInit() {\n    this.desktopView = this.mediaObserver.isSM() || this.mediaObserver.isMD() || this.mediaObserver.isLG() || this.mediaObserver.isXL();\n    this.subscriptions.push(\n      this.mediaObserver.getMediaQueryChangedAsObservable().subscribe(() => {\n        this.desktopView = this.mediaObserver.isSM() || this.mediaObserver.isMD() || this.mediaObserver.isLG() || this.mediaObserver.isXL();\n      })\n    );\n\n    this.subscriptions.push(\n      this.buttonService.getButtonInfosAsObservable().subscribe((buttonInfos) => {\n        this.buttonInfos = buttonInfos;\n        this.cdr.detectChanges();\n      })\n    );\n\n    this.subscriptions.push(\n      this.linkService.getLinkInfosAsObservable().subscribe((linkInfos) => {\n        this.linkInfos = linkInfos;\n        this.cdr.detectChanges();\n      })\n    );\n\n    if (!this.luxCenteredView) {\n      this.luxCenteredView = this.configService.currentConfig.viewConfiguration?.centeredView\n        ? this.configService.currentConfig.viewConfiguration.centeredView\n        : LuxComponentsConfigService.DEFAULT_CONFIG.viewConfiguration.centeredView;\n    }\n\n    if (!this.luxCenteredWidth) {\n      this.luxCenteredWidth = this.configService.currentConfig.viewConfiguration?.centeredWidth\n        ? this.configService.currentConfig.viewConfiguration.centeredWidth\n        : LuxComponentsConfigService.DEFAULT_CONFIG.viewConfiguration.centeredWidth;\n    }\n  }\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('buttonMenu', this.buttonMenu);\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n  }\n\n  sendButtonCommand(cmd: string) {\n    this.buttonService.sendButtonCommand(cmd);\n  }\n}\n","<footer\n  class=\"lux-app-footer lux-p-3 lt-md:lux-p-2\"\n  [luxAriaRole]=\"luxAriaRoleFooterLabel ? 'contentinfo' : undefined\"\n  luxAriaLabel=\"{{ luxAriaRoleFooterLabel || ('luxc.app-footer.ariarolefooter' | transloco) }}\"\n  [ngClass]=\"{ 'lux-centered': luxCenteredView }\"\n  [ngStyle]=\"{ 'max-width': luxCenteredView ? luxCenteredWidth : '100%' }\"\n>\n  @if (luxVersion) {\n  <div class=\"version lt-lg:lux-display-none\">{{ 'luxc.app-footer.version' | transloco: { version: luxVersion } }}</div>\n  } @if (linkInfos) {\n  <div class=\"lux-app-footer-links\">\n    @for (linkItem of linkInfos; track linkItem) { @if (linkItem.alwaysVisible || desktopView) {\n    <lux-link [luxLabel]=\"linkItem.label\" [luxHref]=\"linkItem.path\" [luxBlank]=\"linkItem.blank\" (luxClicked)=\"linkItem.onClick?.(linkItem)\"> </lux-link>\n    } }\n  </div>\n  }\n\n  <div class=\"lux-app-footer-buttons\">\n    <lux-menu\n      [luxDisplayExtended]=\"true\"\n      [luxDisplayMenuLeft]=\"false\"\n      [luxMaximumExtended]=\"10\"\n      luxMenuIconName=\"lux-interface-setting-menu-vertical\"\n      luxTagId=\"app_footer_menu\"\n      #buttonMenu\n    >\n      @for (menuItem of buttonInfos; track menuItem) {\n      <lux-menu-item\n        [luxLabel]=\"menuItem.label\"\n        [luxIconName]=\"menuItem.iconName\"\n        [luxTagId]=\"menuItem.label\"\n        [luxPrio]=\"menuItem.prio\"\n        [luxHidden]=\"menuItem.hidden\"\n        [luxAlwaysVisible]=\"menuItem.alwaysVisible\"\n        [luxDisabled]=\"menuItem.disabled\"\n        [luxRaised]=\"menuItem.raised\"\n        [luxFlat]=\"menuItem.flat\"\n        [luxStroked]=\"menuItem.stroked\"\n        [luxColor]=\"menuItem.color\"\n        [luxButtonTooltip]=\"menuItem.tooltip\"\n        [luxMenuTooltip]=\"menuItem.tooltipMenu\"\n        (luxClicked)=\"sendButtonCommand(menuItem.cmd)\"\n      >\n      </lux-menu-item>\n      }\n    </lux-menu>\n  </div>\n</footer>\n","import { Component, DestroyRef, inject, signal } from '@angular/core';\nimport { LuxDialogRef } from '../../../../../lux-popups/lux-dialog/lux-dialog-model/lux-dialog-ref.class';\nimport { LuxDialogStructureComponent } from '../../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure.component';\nimport { LuxProgressComponent } from '../../../../../lux-common/lux-progress/lux-progress.component';\nimport { LuxDialogContentComponent } from '../../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-content.component';\nimport { LuxIconComponent } from '../../../../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxButtonComponent } from '../../../../../lux-action/lux-button/lux-button.component';\nimport { LuxAppHeaderAcSessionTimerService } from '../lux-app-header-ac-session-timer-service/lux-app-header-ac-session-timer.service';\nimport { LuxDialogActionsComponent } from '../../../../../lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-actions.component';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxAriaLabelDirective } from '../../../../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport enum LuxSessionTimerDialogType {\n  INFO = 'info',\n  WAIT = 'wait',\n  NOTEXTENDABLE = 'notextendable'\n}\n\n@Component({\n  selector: 'lux-app-header-ac-session-timer-dialog',\n  imports: [\n    LuxDialogStructureComponent,\n    LuxProgressComponent,\n    LuxDialogContentComponent,\n    LuxIconComponent,\n    LuxButtonComponent,\n    LuxDialogActionsComponent,\n    TranslocoPipe,\n    LuxAriaLabelDirective\n  ],\n  templateUrl: './lux-app-header-ac-session-timer-dialog.html'\n})\nexport class LuxAppHeaderAcSessionTimerDialogComponent {\n  private readonly timerService = inject(LuxAppHeaderAcSessionTimerService);\n  private readonly luxDialogRef = inject(LuxDialogRef<any>);\n  private readonly destroyRef = inject(DestroyRef);\n  currentStep = signal<LuxSessionTimerDialogType>(LuxSessionTimerDialogType.INFO);\n\n  extendSession() {\n    const extendSessionTimer$ = this.timerService?.extendSessionTimer();\n    if (!extendSessionTimer$) {\n      this.currentStep.set(LuxSessionTimerDialogType.NOTEXTENDABLE);\n      return;\n    }\n    //Bei Langsamen Antworten soll die UI direkt anzeigen dass die Verlängerung läuft, damit der Nutzer weiß dass etwas passiert.\n    this.currentStep.set(LuxSessionTimerDialogType.WAIT);\n    extendSessionTimer$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n      complete: () => {\n        this.confirmDialog();\n      },\n      error: () => {\n        this.luxDialogRef.closeDialog('error');\n      }\n    });\n  }\n\n  logoutUser() {\n    this.timerService.logoutUser();\n    this.luxDialogRef.closeDialog('logout');\n  }\n\n  setNotExtendableDialog() {\n    this.currentStep.set(LuxSessionTimerDialogType.NOTEXTENDABLE);\n  }\n\n  confirmDialog() {\n    this.luxDialogRef.closeDialog('confirmed');\n  }\n}\n","@switch (currentStep()) { @default {\n<lux-dialog-structure luxTagId=\"lux-session-timer-dialog-default\" class=\"lux-session-timer-dialog lux-flex lux-flex-col lux-flex-auto\">\n  <lux-dialog-content luxTagId=\"lux-session-timer-dialog-content-default\" class=\"lux-session-timer-dialog-info\">\n    <lux-icon class=\"lux-session-timer-dialog-icon lux-color-blue\" luxIconName=\"lux-interface-time-sleep\" luxIconSize=\"3x\"></lux-icon>\n    <h2>{{ 'luxc.app-header.session-timer.dialog.info.title' | transloco }}</h2>\n    <p>\n      {{ 'luxc.app-header.session-timer.dialog.info.message.part1' | transloco }}\n      <strong>{{ 'luxc.app-header.session-timer.dialog.info.message.part2' | transloco }}</strong>\n      {{ 'luxc.app-header.session-timer.dialog.info.message.part3' | transloco }}\n    </p>\n  </lux-dialog-content>\n  <lux-dialog-actions luxTagId=\"lux-session-timer-dialog-actions-default\" class=\"lux-session-timer-dialog-info-actions\">\n    <lux-button\n      luxTagId=\"lux-session-timer-button-logout\"\n      [luxStroked]=\"true\"\n      luxLabel=\"{{ 'luxc.app-header.session-timer.dialog.logout.btn' | transloco }}\"\n      luxAriaLabel=\"{{ 'luxc.app-header.session-timer.dialog.logout.btn' | transloco }}\"\n      luxIconName=\"lux-interface-logout-circle\"\n      (luxClicked)=\"logoutUser()\"\n    ></lux-button>\n    <lux-button\n      luxTagId=\"lux-session-timer-button-extend-session\"\n      [luxFlat]=\"true\"\n      luxColor=\"primary\"\n      luxLabel=\"{{ 'luxc.app-header.session-timer.dialog.extendSession.btn' | transloco }}\"\n      luxAriaLabel=\"{{ 'luxc.app-header.session-timer.dialog.extendSession.btn' | transloco }}\"\n      luxIconName=\"lux-interface-validation-check\"\n      (luxClicked)=\"extendSession()\"\n    ></lux-button>\n  </lux-dialog-actions>\n</lux-dialog-structure>\n} @case (\"wait\") {\n<lux-dialog-structure luxTagId=\"lux-session-timer-dialog-wait\" class=\"lux-session-timer-dialog lux-flex lux-flex-col lux-flex-auto\">\n  <lux-dialog-content luxTagId=\"lux-session-timer-dialog-content-wait\" class=\"lux-session-timer-dialog-waiting\">\n    <lux-progress luxType=\"Spinner\" luxMode=\"indeterminate\" luxSize=\"large\"></lux-progress>\n    <h2>{{ 'luxc.app-header.session-timer.dialog.wait.title' | transloco }}</h2>\n  </lux-dialog-content>\n</lux-dialog-structure>\n} @case (\"notextendable\") {\n<lux-dialog-structure luxTagId=\"lux-session-timer-dialog-logout\" class=\"lux-session-timer-dialog lux-flex lux-flex-col lux-flex-auto\">\n  <lux-dialog-content luxTagId=\"lux-session-timer-dialog-content-logout\" class=\"lux-session-timer-dialog-logout\">\n    <lux-icon\n      class=\"lux-session-timer-dialog-icon lux-color-blue\"\n      luxIconName=\"lux-interface-arrows-synchronize-warning\"\n      luxIconSize=\"3x\"\n    ></lux-icon>\n    <h2>{{ 'luxc.app-header.session-timer.dialog.notextendable.title' | transloco }}</h2>\n    <p>{{ 'luxc.app-header.session-timer.dialog.notextendable.message' | transloco }}</p>\n  </lux-dialog-content>\n  <lux-dialog-actions luxTagId=\"lux-session-timer-dialog-actions-logout\" class=\"lux-session-timer-dialog-info-actions\">\n    <lux-button\n      luxTagId=\"lux-session-timer-button-logout\"\n      [luxFlat]=\"true\"\n      luxColor=\"primary\"\n      luxLabel=\"{{ 'luxc.app-header.session-timer.dialog.logout.btn' | transloco }}\"\n      luxAriaLabel=\"{{ 'luxc.app-header.session-timer.dialog.logout.btn' | transloco }}\"\n      luxIconName=\"lux-interface-logout-circle\"\n      (luxClicked)=\"logoutUser()\"\n    ></lux-button>\n    <lux-button\n      luxTagId=\"lux-session-timer-button-confirm\"\n      [luxStroked]=\"true\"\n      luxColor=\"primary\"\n      luxLabel=\"{{ 'luxc.app-header.session-timer.dialog.confirm.btn' | transloco }}\"\n      luxAriaLabel=\"{{ 'luxc.app-header.session-timer.dialog.confirm.btn' | transloco }}\"\n      luxIconName=\"lux-interface-validation-check\"\n      (luxClicked)=\"confirmDialog()\"\n    ></lux-button>\n  </lux-dialog-actions>\n</lux-dialog-structure>\n} }\n","import { HttpClient } from '@angular/common/http';\nimport { computed, inject, Injectable, Signal, signal, EventEmitter } from '@angular/core';\nimport { LuxDialogService } from '../../../../../lux-popups/lux-dialog/lux-dialog.service';\nimport { LuxAppHeaderAcSessionTimerDialogComponent } from '../lux-app-header-ac-session-timer-dialog/lux-app-header-ac-session-timer-dialog';\nimport { ILuxDialogConfig } from '../../../../../lux-popups/lux-dialog/lux-dialog-model/lux-dialog-config.interface';\nimport { map, switchMap, takeWhile, timer } from 'rxjs';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { LuxComponentsConfigService } from '../../../../../lux-components-config/lux-components-config.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxAppHeaderAcSessionTimerService {\n  private readonly http = inject(HttpClient);\n  private readonly dialogService = inject(LuxDialogService);\n  private readonly configService = inject(LuxComponentsConfigService);\n\n  luxLogoutEvent = new EventEmitter<void>();\n  luxTimeoutEvent = new EventEmitter<void>();\n\n  private dialogIsOpen = false;\n  private dialogWasClosed = false;\n  private currentDialogRef: any = null;\n  protected readonly startingSeconds = signal<number>(0);\n  private urlValue = '';\n  private canExtendSessionValue = true;\n\n  get url(): string {\n    return this.urlValue;\n  }\n\n  set url(value: string) {\n    this.urlValue = value;\n  }\n\n  get canExtendSession(): boolean {\n    return this.canExtendSessionValue;\n  }\n\n  set canExtendSession(value: boolean) {\n    this.canExtendSessionValue = value;\n  }\n\n  timeRemaining$ = toObservable(this.startingSeconds).pipe(\n    switchMap((seconds) =>\n      timer(0, 1000).pipe(\n        map((n) => (seconds - n) * 1000),\n        takeWhile((n) => n >= 0)\n      )\n    )\n  );\n\n  timeRemaining = toSignal(this.timeRemaining$, { initialValue: 0 });\n\n  formattedMinutes = computed(() => {\n    const totalMinutes = Math.floor(this.timeRemaining() / 1000);\n    return Math.floor(totalMinutes / 60);\n  });\n\n  formattedSeconds = computed(() => {\n    const totalSeconds = Math.floor(this.timeRemaining() / 1000);\n    return totalSeconds % 60;\n  });\n\n  showSessionTimer: Signal<boolean> = computed(() => {\n    return this.timeRemaining() > 0;\n  });\n\n  showSeconds: Signal<boolean> = computed(() => {\n    return this.timeRemaining() > 0 && this.timeRemaining() / 1000 < 60;\n  });\n\n  showHours: Signal<boolean> = computed(() => {\n    return this.timeRemaining() / 1000 >= 3600;\n  });\n\n  dialogConfig: ILuxDialogConfig = {\n    height: 'auto',\n    width: 'auto',\n    maxWidth: '90%',\n    disableClose: false,\n    panelClass: ['session-timer-dialog-panel-class']\n  };\n\n  constructor() {\n    // Dialog-Status zurücksetzen wenn sich startingSeconds ändert\n    toObservable(this.startingSeconds)\n      .pipe(takeUntilDestroyed())\n      .subscribe(() => {\n        if (this.canExtendSession) {\n          this.dialogWasClosed = false;\n        }\n      });\n\n    this.timeRemaining$.pipe(takeUntilDestroyed()).subscribe((remainingMs: number) => {\n      // Dialog öffnen wenn: Zeit < 120s, Dialog ist nicht offen, Timer wird angezeigt UND Dialog wurde noch nicht geschlossen\n      if (remainingMs / 1000 < 120 && !this.dialogIsOpen && this.showSessionTimer() && !this.dialogWasClosed) {\n        this.openDialog();\n      }\n\n      // 1 Sekunde vor Ablauf damit der Dialog nicht geöffnet wird wenn keine Zeit gesetzt wurde\n      if (remainingMs / 1000 === 1) {\n        if (this.currentDialogRef) {\n          this.currentDialogRef.closeDialog();\n          this.currentDialogRef = null;\n        }\n        //Der Timeout ist notwendig, weil sonst der Fehler \"Blocked aria-hidden in an element because its descendant retained focus....\" auftritt.\n        //Nachgestellt kann man das indem der normale Dialog geöffnet ist, dann der Timer ausläuft und der User abgemeldet wird. Weil die Dialoge kurz hintereinander geöffnet werden, taucht dieser Fehler auf.\n        setTimeout(() => {\n          this.dialogIsOpen = false;\n          this.dialogWasClosed = false;\n          this.timeoutUser();\n        });\n      }\n    });\n\n    this.url = this.configService.currentConfig.sessionTimerConfig?.url ?? '';\n  }\n\n  extendSessionTimer() {\n    if (!this.canExtendSession) {\n      return;\n    }\n\n    return this.http.post(this.url, null);\n  }\n\n  openDialog() {\n    if (!this.canExtendSession) {\n      this.openNotExtendableDialog();\n      return;\n    }\n\n    this.dialogIsOpen = true;\n    this.currentDialogRef = this.dialogService.openComponent(LuxAppHeaderAcSessionTimerDialogComponent, this.dialogConfig);\n\n    this.currentDialogRef.dialogClosed.subscribe((result: any) => {\n      this.dialogIsOpen = false;\n      this.dialogWasClosed = result !== 'confirmed';\n    });\n\n    this.currentDialogRef.dialogDeclined.subscribe(() => {\n      this.dialogIsOpen = false;\n      this.dialogWasClosed = true;\n    });\n  }\n\n  openNotExtendableDialog() {\n    this.dialogIsOpen = true;\n    this.currentDialogRef = this.dialogService.openComponent(LuxAppHeaderAcSessionTimerDialogComponent, this.dialogConfig);\n    this.currentDialogRef.componentInstance.setNotExtendableDialog();\n\n    this.currentDialogRef.dialogClosed.subscribe((result: any) => {\n      this.dialogIsOpen = false;\n      this.dialogWasClosed = true;\n    });\n  }\n\n  timeoutUser() {\n    this.resetTimer(0);\n    this.luxTimeoutEvent.emit();\n  }\n\n  logoutUser() {\n    this.resetTimer(0);\n    this.luxLogoutEvent.emit();\n  }\n\n  resetTimer(seconds: number) {\n    this.startingSeconds.set(0);\n    this.startingSeconds.set(seconds);\n  }\n}\n","import { Component, DestroyRef, inject, OnInit, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LuxButtonComponent } from '../../../../lux-action/lux-button/lux-button.component';\nimport { LuxAppHeaderAcSessionTimerService } from './lux-app-header-ac-session-timer-service/lux-app-header-ac-session-timer.service';\nimport { LuxTooltipDirective } from '../../../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxMediaQueryObserverService } from '../../../../lux-util/lux-media-query-observer.service';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { LuxAriaLabelDirective } from '../../../../lux-directives/lux-aria/lux-aria-label.directive';\n\n@Component({\n  selector: 'lux-app-header-ac-session-timer',\n  imports: [LuxButtonComponent, LuxTooltipDirective, LuxAriaLabelDirective],\n  templateUrl: './lux-app-header-ac-session-timer.html'\n})\nexport class LuxAppHeaderAcSessionTimerComponent implements OnInit {\n  private readonly luxSessionTimerService = inject(LuxAppHeaderAcSessionTimerService);\n  private readonly mediaQueryService = inject(LuxMediaQueryObserverService);\n  private readonly tService = inject(TranslocoService);\n  private readonly liveAnnouncer = inject(LiveAnnouncer);\n  private readonly destroyRef = inject(DestroyRef);\n\n  private luxLoading = false;\n  private mobileView: boolean;\n\n  luxLogoutEvent = output<void>();\n  luxTimeoutEvent = output<void>();\n\n  constructor() {\n    this.mobileView = this.mediaQueryService.activeMediaQuery === 'xs';\n\n    this.mediaQueryService\n      .getMediaQueryChangedAsObservable()\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((query: string) => {\n        this.mobileView = query === 'xs';\n      });\n  }\n\n  ngOnInit(): void {\n    this.luxSessionTimerService.luxTimeoutEvent.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.luxTimeoutEvent.emit();\n    });\n\n    this.luxSessionTimerService.luxLogoutEvent.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.luxLogoutEvent.emit();\n    });\n  }\n\n  protected isMobileView(): boolean {\n    return this.mobileView;\n  }\n\n  protected isLuxLoading(): boolean {\n    return this.luxLoading;\n  }\n\n  protected showSessionTimer(): boolean {\n    return this.luxSessionTimerService.showSessionTimer();\n  }\n\n  extendTimer() {\n    if (!this.luxSessionTimerService.canExtendSession) {\n      this.luxSessionTimerService.openNotExtendableDialog();\n      return;\n    }\n    const extendSessionTimer$ = this.luxSessionTimerService?.extendSessionTimer();\n    if (!extendSessionTimer$) {\n      this.luxSessionTimerService.logoutUser();\n      return;\n    }\n\n    //Bei Langsamen Antworten soll die UI direkt anzeigen dass die Verlängerung läuft, damit der Nutzer weiß dass etwas passiert.\n    this.luxLoading = true;\n\n    extendSessionTimer$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\n      next: () => {\n        this.luxLoading = true;\n      },\n      complete: () => {\n        this.luxLoading = false;\n      },\n      error: (err) => {\n        console.error('LuxAppHeaderAcSessionTimerComponent: Error while extending session timer: ', err);\n        this.luxLoading = false;\n        this.luxSessionTimerService.logoutUser();\n      }\n    });\n  }\n\n  getTimerLabel(): string {\n    if (this.luxSessionTimerService.showHours()) {\n      return `${this.tService.translate('luxc.app-header.session-timer.timer.button.lbl.hours')}`;\n    } else if (this.luxSessionTimerService.showSeconds()) {\n      return `${this.luxSessionTimerService.formattedSeconds()} ${this.tService.translate('luxc.app-header.session-timer.timer.button.lbl.seconds')}`;\n    } else {\n      return `${this.luxSessionTimerService.formattedMinutes()} ${this.tService.translate('luxc.app-header.session-timer.timer.button.lbl.minutes')}`;\n    }\n  }\n\n  announceSessionTimer(): void {\n    this.liveAnnouncer.announce(`${this.tService.translate('luxc.app-header.session-timer.timer.button.announcer')}`);\n  }\n\n  getTimerTooltip(): string {\n    return this.tService.translate('luxc.app-header.session-timer.timer.button.tooltip');\n  }\n}\n","@if (showSessionTimer() && !isMobileView()) {\n<lux-button\n  luxTagId=\"lux-session-timer-button\"\n  luxColor=\"primary\"\n  luxIconName=\"lux-interface-time-reset\"\n  [luxLabel]=\"getTimerLabel()\"\n  (luxClicked)=\"extendTimer()\"\n  [luxAriaLabel]=\"getTimerLabel()\"\n  (focusin)=\"announceSessionTimer()\"\n  [luxLoading]=\"isLuxLoading()\"\n  [luxTooltip]=\"getTimerTooltip()\"\n  [luxTooltipShowDelay]=\"1000\"\n></lux-button>\n}\n","import { AfterViewInit, Component, ContentChild, ContentChildren, QueryList, TemplateRef, ViewChild } from '@angular/core';\nimport { LuxUtil } from '../../../../lux-util/lux-util';\nimport { LuxAppHeaderAcActionNavItemComponent } from './lux-app-header-ac-action-nav-item/lux-app-header-ac-action-nav-item.component';\nimport { LuxAppHeaderAcSessionTimerComponent } from '../lux-app-header-ac-session-timer/lux-app-header-ac-session-timer';\n\n@Component({\n  selector: 'lux-app-header-ac-action-nav',\n  templateUrl: './lux-app-header-ac-action-nav.component.html',\n  imports: [LuxAppHeaderAcSessionTimerComponent]\n})\nexport class LuxAppHeaderAcActionNavComponent implements AfterViewInit {\n  @ViewChild(TemplateRef, { static: true }) templateRef!: TemplateRef<any>;\n  @ContentChildren(LuxAppHeaderAcActionNavItemComponent) menuItemComponents!: QueryList<LuxAppHeaderAcActionNavItemComponent>;\n  @ContentChild(LuxAppHeaderAcSessionTimerComponent) sessionTimerComponent?: LuxAppHeaderAcSessionTimerComponent;\n\n  constructor() {}\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('templateRef', this.templateRef);\n  }\n}\n","<ng-template>\n  <div class=\"lux-app-header-action-nav lux-mr-3 lt-md:lux-mr-2 lux-flex lux-justify-start lux-items-center lux-gap-3\">\n    @if (sessionTimerComponent) {\n      <ng-content select=\"lux-app-header-ac-session-timer\"></ng-content>\n    }\n    <ng-content select=\"lux-app-header-ac-action-nav-item\"></ng-content>\n  </div>\n</ng-template>\n","import { Component, Input } from '@angular/core';\nimport { LuxMenuItemComponent } from '../../../../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxThemePalette } from '../../../../../lux-util/lux-colors.enum';\n@Component({\n  selector: 'lux-app-header-ac-nav-menu-item',\n  template: `<ng-content></ng-content>`\n})\nexport class LuxAppHeaderAcNavMenuItemComponent extends LuxMenuItemComponent {\n  @Input() luxSelected = false;\n  @Input() override luxButtonBadgeColor: LuxThemePalette = 'primary';\n\n  constructor() {\n    super();\n  }\n}\n","import { NgClass } from '@angular/common';\nimport { Component, ContentChildren, Input, OnDestroy, QueryList, inject } from '@angular/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxButtonComponent } from '../../../../lux-action/lux-button/lux-button.component';\nimport { LuxMenuItemComponent } from '../../../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxMenuTriggerComponent } from '../../../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-trigger.component';\nimport { LuxMenuComponent } from '../../../../lux-action/lux-menu/lux-menu.component';\nimport { LuxAriaLabelDirective } from '../../../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxMediaQueryObserverService } from '../../../../lux-util/lux-media-query-observer.service';\nimport { LuxAppHeaderAcNavMenuItemComponent } from './lux-app-header-ac-nav-menu-item/lux-app-header-ac-nav-menu-item.component';\n\n@Component({\n  selector: 'lux-app-header-ac-nav-menu',\n  templateUrl: './lux-app-header-ac-nav-menu.component.html',\n  imports: [NgClass, LuxAriaLabelDirective, LuxMenuItemComponent, LuxMenuTriggerComponent, LuxButtonComponent, LuxMenuComponent, TranslocoPipe]\n})\nexport class LuxAppHeaderAcNavMenuComponent implements OnDestroy {\n  private queryService = inject(LuxMediaQueryObserverService);\n\n  @ContentChildren(LuxAppHeaderAcNavMenuItemComponent) menuItemComponents!: QueryList<LuxAppHeaderAcNavMenuItemComponent>;\n\n  @Input() luxNavMenuMaximumExtended = 5;\n\n  mobileView: boolean;\n  subscription: Subscription;\n  navMenuOpened = false;\n\n  constructor() {\n    this.mobileView = this.queryService.activeMediaQuery === 'xs' || this.queryService.activeMediaQuery === 'sm';\n    this.subscription = this.queryService.getMediaQueryChangedAsObservable().subscribe((query) => {\n      this.mobileView = query === 'xs' || query === 'sm';\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  navMenuItemClicked(navItem: LuxAppHeaderAcNavMenuItemComponent, event: Event) {\n    navItem.clicked(event);\n  }\n\n  onNavMenuOpend() {\n    this.navMenuOpened = true;\n  }\n  onNavMenuClosed() {\n    this.navMenuOpened = false;\n  }\n}\n","<!-- Navigations-Menu -->\n<lux-menu\n  [luxDisplayExtended]=\"!mobileView\"\n  [luxMaximumExtended]=\"luxNavMenuMaximumExtended\"\n  class=\"lux-header-ac-nav-menu\"\n  [ngClass]=\"{ 'lux-mobile': mobileView }\"\n  luxClassName=\"lux-header-ac-nav\"\n  luxTagId=\"app_header_nav_menu\"\n  (luxMenuClosed)=\"onNavMenuClosed()\"\n  (luxMenuOpened)=\"onNavMenuOpend()\"\n>\n  @for (navMenuItem of menuItemComponents; track navMenuItem; let navIndex = $index) {\n  <lux-menu-item\n    [luxLabel]=\"navMenuItem.luxLabel\"\n    [luxIconName]=\"navMenuItem.luxIconName\"\n    [luxTagId]=\"navMenuItem.luxLabel\"\n    [luxAlwaysVisible]=\"navMenuItem.luxAlwaysVisible\"\n    [luxDisabled]=\"navMenuItem.luxDisabled\"\n    [luxFlat]=\"false\"\n    [luxRaised]=\"false\"\n    [luxStroked]=\"false\"\n    [luxRounded]=\"false\"\n    luxColor=\"primary\"\n    [luxClass]=\"navMenuItem.luxSelected ? 'nav-item-selected' : ''\"\n    [luxPrio]=\"navMenuItem.luxPrio\"\n    [luxButtonBadge]=\"navMenuItem.luxButtonBadge\"\n    [luxButtonBadgeColor]=\"navMenuItem.luxButtonBadgeColor\"\n    class=\"nav-item\"\n    (luxClicked)=\"navMenuItemClicked(navMenuItem, $event)\"\n  >\n  </lux-menu-item>\n  }\n  <lux-menu-trigger>\n    <lux-button\n      [luxRounded]=\"true\"\n      luxIconName=\"lux-interface-setting-menu-1\"\n      luxColor=\"primary\"\n      class=\"nav-menu-trigger-ac\"\n      [ngClass]=\"{ 'lux-mobile': mobileView, 'menu-opened': navMenuOpened }\"\n      luxAriaLabel=\"{{ 'luxc.app-header.user.menu.trigger' | transloco }}\"\n      aria-haspopup=\"true\"\n      #customTrigger\n      luxTagId=\"lux-nav-menu-trigger-ac\"\n    >\n    </lux-button>\n  </lux-menu-trigger>\n</lux-menu>\n","import { HttpInterceptorFn, HttpResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { tap } from 'rxjs';\nimport { LuxUtil } from '../../../../lux-util/lux-util';\nimport { LuxAppHeaderAcSessionTimerService } from './lux-app-header-ac-session-timer-service/lux-app-header-ac-session-timer.service';\nimport { LuxComponentsConfigService } from '../../../../lux-components-config/lux-components-config.service';\n\nexport const luxSessionTimerInterceptor: HttpInterceptorFn = (req, next) => {\n  const timerService = inject(LuxAppHeaderAcSessionTimerService);\n  const configService = inject(LuxComponentsConfigService);\n\n  return next(req).pipe(\n    tap((event) => {\n      if (!LuxUtil.checkIfRequestIsAssetRequest(req) && event instanceof HttpResponse) {\n        const headers = event.headers;\n        const prolongation = headers.get(\n          configService.currentConfig.sessionTimerConfig?.httpSessionProlongationHeaderName || 'X-GfI-Session-Prolongation'\n        );\n        timerService.canExtendSession = prolongation?.toLowerCase() === 'true';\n\n        const sessionTimeHeader = headers.get(\n          configService.currentConfig.sessionTimerConfig?.httpSessionTimeHeaderName || 'X-GfI-Session-Time'\n        );\n        const sessionTime = Number(sessionTimeHeader);\n        if (sessionTimeHeader !== null && !Number.isNaN(sessionTime) && sessionTime > 0) {\n          timerService.resetTimer(sessionTime);\n        }\n      }\n    })\n  );\n};\n","import { Component, ContentChildren, input, QueryList } from '@angular/core';\nimport { LuxMenuItemComponent } from '../../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxDividerComponent } from '../../lux-divider/lux-divider.component';\nimport { LuxMenuSectionTitleComponent } from '../../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-section-title.component';\n\n@Component({\n  selector: 'lux-app-header-ac-user-menu',\n  template: ''\n})\nexport class LuxAppHeaderAcUserMenuComponent {\n  @ContentChildren(LuxMenuItemComponent) menuItemComponents!: QueryList<LuxMenuItemComponent>;\n  @ContentChildren('menuSection') menuSectionComponents!: QueryList<\n    LuxMenuItemComponent | LuxDividerComponent | LuxMenuSectionTitleComponent\n  >;\n\n  luxUseSectionsAndHeaderPanel = input<boolean>(false);\n\n  constructor() {}\n}\n","import { NgClass } from '@angular/common';\nimport { Component, ElementRef, Input, OnInit, ViewChild, inject } from '@angular/core';\nimport { TranslocoPipe, TranslocoService } from '@jsverse/transloco';\nimport { CookieService } from 'ngx-cookie-service';\nimport { LuxButtonComponent } from '../../../../lux-action/lux-button/lux-button.component';\nimport { LuxMenuItemComponent } from '../../../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxMenuTriggerComponent } from '../../../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-trigger.component';\nimport { LuxMenuComponent } from '../../../../lux-action/lux-menu/lux-menu.component';\nimport { LuxAriaLabelDirective } from '../../../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxTooltipDirective } from '../../../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxLocaleAc } from './lux-locale-ac';\n\n@Component({\n  selector: 'lux-lang-select-ac',\n  templateUrl: './lux-lang-select-ac.component.html',\n  imports: [\n    LuxAriaLabelDirective,\n    LuxTooltipDirective,\n    NgClass,\n    LuxMenuComponent,\n    LuxMenuItemComponent,\n    LuxMenuTriggerComponent,\n    LuxButtonComponent,\n    TranslocoPipe\n  ]\n})\nexport class LuxLangSelectAcComponent implements OnInit {\n  private cookieService = inject(CookieService);\n  protected translocoService = inject(TranslocoService);\n\n  @Input() luxLocaleSupported = ['de'];\n  @Input() luxLocaleBaseHref = '';\n  @Input() mobileView = false;\n\n  @ViewChild('customTrigger', { read: ElementRef }) customTrigger?: ElementRef;\n\n  menuOpened = false;\n\n  cookieName = 'X-GFI-LANGUAGE';\n  cookiePath = '/';\n\n  // Hinweis: Transloco ist aktuell (App-Konfiguration) nur für 'de' und 'en' konfiguriert.\n  // 'fr' ist hier vorerst ausgeblendet, um fehlende Übersetzungen nach Sprachwechsel zu vermeiden.\n  allSupportedLocaleArr: LuxLocaleAc[] = [\n    { code: 'de', label: 'Deutsch', labelSelected: 'DE', path: '' },\n    { code: 'en', label: 'English', labelSelected: 'EN', path: '/en' }\n  ];\n\n  localeOptions: LuxLocaleAc[] = [];\n\n  ngOnInit() {\n    this.luxLocaleSupported.forEach((locale) => {\n      const foundLocale = this.allSupportedLocaleArr.find((item) => item.code === locale);\n      if (foundLocale) {\n        this.localeOptions.push(foundLocale);\n      }\n    });\n\n    let locale = this.cookieService.get(this.cookieName);\n    if (!locale || !this.localeOptions.find((item) => item.code === locale)) {\n      locale = 'de';\n    }\n    const newLocale = this.localeOptions.find((item) => item.code === locale);\n    if (newLocale) {\n      // Sicherstellen, dass Übersetzungen nach Lazy-Nachladen vorhanden sind\n      this.translocoService\n        .load(newLocale.code)\n        .subscribe({\n          next: () => this.translocoService.setActiveLang(newLocale!.code),\n          error: () => this.translocoService.setActiveLang('de')\n        });\n    }\n  }\n\n  onLocaleChanged(locale: LuxLocaleAc) {\n    // Vor Sprachwechsel: erst laden, dann aktivieren, damit Komponenten nicht kurz Keys anzeigen.\n    this.translocoService\n      .load(locale.code)\n      .subscribe({\n        next: () => {\n          this.cookieService.set(this.cookieName, locale.code, undefined, this.cookiePath);\n          this.translocoService.setActiveLang(locale.code);\n        },\n        error: () => {\n          // Fallback: Cookie nicht setzen, bei Fehler auf Default zurück.\n          this.translocoService.setActiveLang('de');\n        }\n      });\n  }\n\n  onMenuOpened() {\n    this.menuOpened = true;\n  }\n  onMenuClosed() {\n    this.menuOpened = false;\n    if (this.customTrigger) {\n      this.customTrigger.nativeElement.children[0].focus();\n    }\n  }\n}\n","<lux-menu\n  class=\"lux-lang-select-menu-ac\"\n  luxAriaMenuTriggerLabel=\"{{ 'luxc.lang-select.aria.langmenu.btn' | transloco }}\"\n  [luxDisplayExtended]=\"false\"\n  (luxMenuOpened)=\"onMenuOpened()\"\n  (luxMenuClosed)=\"onMenuClosed()\"\n>\n  @for (item of localeOptions; track item) {\n  <lux-menu-item\n    class=\"lux-lang-select-menu-item\"\n    [luxLabel]=\"item.label\"\n    [luxClass]=\"item.code === translocoService.getActiveLang() ? 'lux-selected-item-ac' : ''\"\n    [luxDisabled]=\"item.code === translocoService.getActiveLang()\"\n    (luxClicked)=\"onLocaleChanged(item)\"\n  ></lux-menu-item>\n  }\n  <lux-menu-trigger>\n    <lux-button\n      [luxRounded]=\"true\"\n      luxColor=\"primary\"\n      luxIconName=\"lux-programming-web\"\n      class=\"lang-select-trigger-ac\"\n      luxAriaLabel=\"{{ 'luxc.app-header.lang.select.trigger' | transloco }}\"\n      aria-haspopup=\"true\"\n      luxTagId=\"lang-select-trigger-btn\"\n      [ngClass]=\"{ 'menu-opened': menuOpened, 'lang-select-trigger-mobile': mobileView }\"\n      luxTagId=\"lang-select-trigger-btn\"\n      luxTooltip=\"{{ 'luxc.app-header.lang.select.trigger' | transloco }}\"\n      [luxTooltipShowDelay]=\"1500\"\n      #customTrigger\n    ></lux-button>\n  </lux-menu-trigger>\n</lux-menu>\n","import { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  inject\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LuxButtonComponent } from '../../lux-action/lux-button/lux-button.component';\nimport { LuxMenuItemComponent } from '../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxMenuTriggerComponent } from '../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-trigger.component';\nimport { LuxMenuComponent } from '../../lux-action/lux-menu/lux-menu.component';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxAriaRoleDirective } from '../../lux-directives/lux-aria/lux-aria-role.directive';\nimport { LuxTooltipDirective } from '../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxTenantLogoComponent } from '../../lux-tenant-logo/lux-tenant-logo.component';\nimport { LuxAppService } from '../../lux-util/lux-app.service';\nimport { LuxConsoleService } from '../../lux-util/lux-console.service';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxAppHeaderAcActionNavComponent } from './lux-app-header-ac-subcomponents/lux-app-header-ac-action-nav/lux-app-header-ac-action-nav.component';\nimport { LuxAppHeaderAcNavMenuComponent } from './lux-app-header-ac-subcomponents/lux-app-header-ac-nav-menu/lux-app-header-ac-nav-menu.component';\nimport { LuxAppHeaderAcUserMenuComponent } from './lux-app-header-ac-subcomponents/lux-app-header-ac-user-menu.component';\nimport { LuxLangSelectAcComponent } from './lux-app-header-ac-subcomponents/lux-lang-select-ac/lux-lang-select-ac.component';\n\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxMenuPanelHeaderComponent } from '../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-panel-header.component';\nimport { LuxMenuSectionTitleComponent } from '../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-section-title.component';\nimport { LuxImageComponent } from '../../lux-icon/lux-image/lux-image.component';\nimport { LuxDividerComponent } from '../lux-divider/lux-divider.component';\n\n@Component({\n  selector: 'lux-app-header-ac',\n  templateUrl: './lux-app-header-ac.component.html',\n  imports: [\n    LuxAriaRoleDirective,\n    LuxAriaLabelDirective,\n    NgClass,\n    NgStyle,\n    NgTemplateOutlet,\n    LuxLangSelectAcComponent,\n    LuxTooltipDirective,\n    LuxMenuItemComponent,\n    LuxMenuTriggerComponent,\n    LuxButtonComponent,\n    LuxMenuComponent,\n    LuxImageComponent,\n    LuxMenuPanelHeaderComponent,\n    LuxDividerComponent,\n    LuxMenuSectionTitleComponent,\n    TranslocoPipe\n  ]\n})\nexport class LuxAppHeaderAcComponent implements OnInit, OnChanges {\n  private logger = inject(LuxConsoleService);\n  private queryService = inject(LuxMediaQueryObserverService);\n  private elementRef = inject(ElementRef);\n  private appService = inject(LuxAppService);\n  private configService = inject(LuxComponentsConfigService);\n\n  @Input() luxUserName?: string;\n  @Input() luxUserEmail?: string;\n  @Input() luxAppTitle?: string;\n  @Input() luxAppTitleShort?: string;\n  @Input() luxBrandLogoSrc?: string;\n  @Input() luxHideBrandLogo = false;\n  @Input() luxAppLogoSrc?: string;\n  @Input() luxHideAppLogo = false;\n  @Input() luxLocaleSupported = ['de'];\n  @Input() luxLocaleBaseHref = '';\n  @Input() luxHideTopBar = false;\n  @Input() luxHideNavBar = false;\n  @Input() luxAriaRoleHeaderLabel = '';\n  @Input() luxAriaUserMenuButtonLabel = '';\n  @Input() luxAriaTitleIconLabel = '';\n  @Input() luxAriaTitleImageLabel = '';\n  @Input() luxCenteredView!: boolean;\n  @Input() luxCenteredWidth!: string;\n\n  @Output() luxAppLogoClicked = new EventEmitter<Event>();\n  @Output() luxBrandLogoClicked = new EventEmitter<Event>();\n\n  @ViewChild('customTrigger', { read: ElementRef }) customTrigger?: ElementRef;\n\n  @ContentChild(LuxTenantLogoComponent) tenantLogo?: LuxTenantLogoComponent;\n  @ContentChild(LuxAppHeaderAcNavMenuComponent) navMenu?: LuxAppHeaderAcNavMenuComponent;\n  @ContentChild(LuxAppHeaderAcUserMenuComponent) userMenu?: LuxAppHeaderAcUserMenuComponent;\n  @ContentChild(LuxAppHeaderAcActionNavComponent) actionNav?: LuxAppHeaderAcActionNavComponent;\n\n  userNameShort?: string;\n\n  mobileView: boolean;\n  subscriptions: Subscription[] = [];\n\n  menuOpened = false;\n\n  private iconBasePath = '';\n\n  constructor() {\n    this.mobileView = this.queryService.activeMediaQuery === 'xs' || this.queryService.activeMediaQuery === 'sm';\n    this.subscriptions.push(\n      this.queryService.getMediaQueryChangedAsObservable().subscribe((query) => {\n        this.mobileView = query === 'xs' || query === 'sm';\n      })\n    );\n    this.appService.appHeaderEl = this.elementRef.nativeElement;\n    this.iconBasePath = this.configService.currentConfig.iconBasePath ?? '';\n    if (this.iconBasePath.endsWith('/')) {\n      this.iconBasePath = this.iconBasePath.substring(0, this.iconBasePath.length - 1);\n    }\n  }\n\n  ngOnInit(): void {\n    if (!this.luxAppLogoSrc && !this.luxHideAppLogo) {\n      this.luxAppLogoSrc = this.iconBasePath + '/assets/logos/app_logo_platzhalter.svg';\n    }\n\n    if (this.luxHideAppLogo) {\n      this.luxAppLogoSrc = undefined;\n    }\n\n    if (!this.luxBrandLogoSrc && !this.luxHideBrandLogo) {\n      this.luxBrandLogoSrc = this.iconBasePath + '/assets/logos/ihk_logo_platzhalter.svg';\n    }\n\n    if (this.luxHideBrandLogo) {\n      this.luxBrandLogoSrc = undefined;\n    }\n\n    if (!this.luxCenteredView) {\n      this.luxCenteredView = this.configService.currentConfig.viewConfiguration?.centeredView\n        ? this.configService.currentConfig.viewConfiguration.centeredView\n        : LuxComponentsConfigService.DEFAULT_CONFIG.viewConfiguration.centeredView;\n    }\n\n    if (!this.luxCenteredWidth) {\n      this.luxCenteredWidth = this.configService.currentConfig.viewConfiguration?.centeredWidth\n        ? this.configService.currentConfig.viewConfiguration.centeredWidth\n        : LuxComponentsConfigService.DEFAULT_CONFIG.viewConfiguration.centeredWidth;\n    }\n  }\n\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    if (!this.luxAppTitleShort || this.luxAppTitleShort.length === 0) {\n      this.logger.warn('No title is set for the mobile view.');\n    }\n  }\n\n  onMenuOpened() {\n    this.menuOpened = true;\n  }\n\n  onMenuClosed() {\n    this.menuOpened = false;\n    if (this.customTrigger) {\n      this.customTrigger.nativeElement.children[0].focus();\n    }\n  }\n\n  onAppLogoClicked(event: any) {\n    this.luxAppLogoClicked.emit(event);\n  }\n\n  onBrandLogoClicked(event: any) {\n    this.luxBrandLogoClicked.emit(event);\n  }\n\n  isItemDivider(menuItem: any): menuItem is LuxDividerComponent {\n    return menuItem instanceof LuxDividerComponent;\n  }\n\n  isItemMenuItem(menuItem: any): menuItem is LuxMenuItemComponent {\n    return menuItem instanceof LuxMenuItemComponent;\n  }\n\n  isSectionTitle(menuItem: any): menuItem is LuxMenuSectionTitleComponent {\n    return menuItem instanceof LuxMenuSectionTitleComponent;\n  }\n}\n","<header\n  class=\"lux-app-header-ac-container lux-flex lux-flex-col\"\n  [luxAriaRole]=\"'banner'\"\n  luxAriaLabel=\"{{ luxAriaRoleHeaderLabel || ('luxc.app-header.aria.role_header.lbl' | transloco) }}\"\n>\n  <!-- Top-Bar -->\n  <div class=\"lux-app-header-top-bar-bg\">\n    @if (!luxHideTopBar) {\n    <div\n      class=\"lux-app-header-top-bar\"\n      [ngClass]=\"{ 'lux-mobile': mobileView, 'lux-centered': luxCenteredView }\"\n      [ngStyle]=\"{ 'max-width': luxCenteredView ? luxCenteredWidth : '100%' }\"\n    >\n      <!-- Brand-Logo -->\n      <!-- Zeige lux-tenant-logo falls vorhanden UND Attribut luxBrandLogoSrc nicht gesetzt ist, also das Attribut hat hier vorrang -->\n      @if (luxBrandLogoSrc) {\n      <lux-image\n        [luxImageSrc]=\"luxBrandLogoSrc\"\n        [luxImageHeight]=\"mobileView ? '24px' : '40px'\"\n        class=\"lux-brand-logo\"\n        [ngClass]=\"{ 'lux-brand-logo-mobile': mobileView }\"\n        luxAlt=\"{{ luxAriaTitleImageLabel || ('luxc.app-header.aria.title.image.lbl' | transloco) }}\"\n        luxAriaLabel=\"{{ luxAriaTitleImageLabel || ('luxc.app-header.aria.title.image.lbl' | transloco) }}\"\n        luxTagId=\"lux-brand-logo-button\"\n        (luxClicked)=\"onBrandLogoClicked($event)\"\n      ></lux-image>\n      } @else { @if (tenantLogo) {\n      <ng-content select=\"lux-tenant-logo\"></ng-content>\n      } @else {\n      <div class=\"lux-brand-logo-empty\"></div>\n      } }\n      <!-- App-Logo -->\n      @if (luxAppLogoSrc && !mobileView) {\n      <lux-image\n        [luxImageSrc]=\"luxAppLogoSrc\"\n        luxImageHeight=\"40px\"\n        class=\"lux-app-logo\"\n        luxAlt=\"{{ luxAriaTitleIconLabel || ('luxc.app-header.aria.title_icon.lbl' | transloco) }}\"\n        luxAriaLabel=\"{{ luxAriaTitleIconLabel || ('luxc.app-header.aria.title_icon.lbl' | transloco) }}\"\n        (luxClicked)=\"onAppLogoClicked($event)\"\n      ></lux-image>\n      } @if (!luxAppLogoSrc && !mobileView) {\n      <div class=\"lux-app-logo-empty\"></div>\n      }\n      <!-- Action-Nav / Lang-Select / User-Menu -->\n      <div class=\"header-menu-container lux-flex lux-justify-end lux-items-center\" luxAriaLabel=\"{{ luxAriaUserMenuButtonLabel || ('luxc.app-header.aria.usermenu.btn' | transloco) }}\">\n        @if (actionNav) {\n        <div class=\"lux-action-nav-ac-container lux-flex lux-flex-shrink-0\">\n          @if (actionNav) {\n          <ng-container [ngTemplateOutlet]=\"actionNav.templateRef\"></ng-container>\n          }\n        </div>\n        } @if (luxLocaleSupported && (luxLocaleSupported?.length ?? 0) > 1) {\n        <lux-lang-select-ac\n          [luxLocaleSupported]=\"luxLocaleSupported\"\n          [luxLocaleBaseHref]=\"luxLocaleBaseHref\"\n          [mobileView]=\"mobileView\"\n          class=\"lux-lang-select-ac lux-flex lux-flex-shrink-0\"\n        ></lux-lang-select-ac>\n        }\n        <!-- User-Menu -->\n        @if (userMenu && !userMenu.luxUseSectionsAndHeaderPanel()) {\n        <lux-menu\n          class=\"lux-user-menu lux-flex lux-flex-shrink-0\"\n          [ngClass]=\"{ 'lux-user-menu-mobile': mobileView }\"\n          [luxDisplayExtended]=\"false\"\n          (luxMenuClosed)=\"onMenuClosed()\"\n          (luxMenuOpened)=\"onMenuOpened()\"\n          luxClassName=\"lux-header-user-menu\"\n          luxTagId=\"app_header_user_menu\"\n        >\n          <!-- Anzeige des Usernames falls dieser vorhanden und eingeloggt ist -->\n          @if (luxUserName) {\n          <lux-menu-item [luxLabel]=\"luxUserName\" [luxDisabled]=\"true\" luxClass=\"lux-user-name-label\"></lux-menu-item>\n          }@for (menuItem of userMenu?.menuItemComponents; track menuItem) {\n          <lux-menu-item\n            [luxLabel]=\"menuItem.luxLabel\"\n            [luxTagId]=\"menuItem.luxLabel\"\n            [luxIconName]=\"menuItem.luxIconName\"\n            [luxAlwaysVisible]=\"menuItem.luxAlwaysVisible\"\n            [luxDisabled]=\"menuItem.luxDisabled\"\n            [luxRaised]=\"menuItem.luxRaised\"\n            [luxColor]=\"menuItem.luxColor\"\n            [luxRounded]=\"menuItem.luxRounded\"\n            [luxClass]=\"menuItem.luxClass\"\n            (luxClicked)=\"menuItem.luxClicked.emit($event)\"\n            [luxHidden]=\"menuItem.luxHidden\"\n          >\n          </lux-menu-item>\n          }\n          <lux-menu-trigger>\n            <lux-button\n              [luxRounded]=\"true\"\n              [luxIconName]=\"luxUserName ? 'lux-interface-user-check' : 'lux-interface-user-single'\"\n              luxColor=\"primary\"\n              class=\"user-menu-trigger-ac\"\n              luxAriaLabel=\"{{ 'luxc.app-header.user.menu.trigger' | transloco }}\"\n              aria-haspopup=\"true\"\n              luxTagId=\"user-menu-trigger-ac\"\n              [ngClass]=\"{ 'menu-opened': menuOpened, 'user-menu-trigger-mobile': mobileView }\"\n              luxTooltip=\"{{ 'luxc.app-header.user.menu.trigger' | transloco }}\"\n              [luxTooltipShowDelay]=\"1500\"\n              #customTrigger\n              luxTagId=\"lux-user-menu-trigger-btn\"\n            >\n            </lux-button>\n          </lux-menu-trigger>\n        </lux-menu>\n        }\n        <!-- Das neue User-Menu mit Usernamen und Email im Header -->\n        @if (userMenu && userMenu.luxUseSectionsAndHeaderPanel()) {\n        <lux-menu\n          class=\"lux-user-menu lux-flex lux-flex-shrink-0\"\n          [ngClass]=\"{ 'lux-user-menu-mobile': mobileView }\"\n          [luxDisplayExtended]=\"false\"\n          (luxMenuClosed)=\"onMenuClosed()\"\n          (luxMenuOpened)=\"onMenuOpened()\"\n          luxClassName=\"lux-header-user-menu\"\n          luxTagId=\"app_header_user_menu\"\n          [luxShowSections]=\"true\"\n        >\n          <!-- Anzeige des Usernames falls dieser vorhanden und eingeloggt ist -->\n          @if (luxUserName) {\n          <lux-menu-panel-header [luxTitle]=\"luxUserName\" [luxSubtitle]=\"luxUserEmail\" #menuSection></lux-menu-panel-header>\n          } @for (menuItem of userMenu?.menuSectionComponents; track menuItem) { @if (isItemMenuItem(menuItem)){\n          <lux-menu-item\n            [luxLabel]=\"menuItem.luxLabel\"\n            [luxTagId]=\"menuItem.luxLabel\"\n            [luxIconName]=\"menuItem.luxIconName\"\n            [luxAlwaysVisible]=\"menuItem.luxAlwaysVisible\"\n            [luxDisabled]=\"menuItem.luxDisabled\"\n            [luxRaised]=\"menuItem.luxRaised\"\n            [luxColor]=\"menuItem.luxColor\"\n            [luxRounded]=\"menuItem.luxRounded\"\n            [luxClass]=\"menuItem.luxClass\"\n            (luxClicked)=\"menuItem.luxClicked.emit($event)\"\n            [luxHidden]=\"menuItem.luxHidden\"\n            #menuSection\n          >\n          </lux-menu-item>\n          } @if(isSectionTitle(menuItem)){\n          <lux-menu-section-title [luxTitle]=\"menuItem.luxTitle()\" #menuSection></lux-menu-section-title>\n          } @if (isItemDivider(menuItem)) {\n          <lux-divider #menuSection></lux-divider>\n          } }\n\n          <lux-menu-trigger>\n            <lux-button\n              [luxRounded]=\"true\"\n              [luxIconName]=\"luxUserName ? 'lux-interface-user-check' : 'lux-interface-user-single'\"\n              luxColor=\"primary\"\n              class=\"user-menu-trigger-ac\"\n              luxAriaLabel=\"{{ 'luxc.app-header.user.menu.trigger' | transloco }}\"\n              aria-haspopup=\"true\"\n              luxTagId=\"user-menu-trigger-ac\"\n              [ngClass]=\"{ 'menu-opened': menuOpened, 'user-menu-trigger-mobile': mobileView }\"\n              luxTooltip=\"{{ 'luxc.app-header.user.menu.trigger' | transloco }}\"\n              [luxTooltipShowDelay]=\"1500\"\n              #customTrigger\n              luxTagId=\"lux-user-menu-trigger-btn\"\n            >\n            </lux-button>\n          </lux-menu-trigger>\n        </lux-menu>\n        }\n      </div>\n    </div>\n    }\n  </div>\n  <!-- Nav-Bar -->\n  <div class=\"lux-app-header-nav-bar-bg\">\n    @if (!luxHideNavBar) {\n    <div\n      class=\"lux-app-header-nav-bar\"\n      [ngClass]=\"{ 'lux-mobile': mobileView, 'lux-centered': luxCenteredView }\"\n      [ngStyle]=\"{ 'max-width': luxCenteredView ? luxCenteredWidth : '100%' }\"\n    >\n      <div class=\"lux-app-title-container lux-flex lux-items-center lux-justify-start lux-gap-4\">\n        @if (luxAppLogoSrc && mobileView) {\n        <lux-image\n          [luxImageSrc]=\"luxAppLogoSrc\"\n          luxImageHeight=\"32px\"\n          class=\"lux-app-logo-mobile\"\n          luxAlt=\"Lux-App-Logo\"\n          (luxClicked)=\"onAppLogoClicked($event)\"\n        ></lux-image>\n        }\n        <div class=\"lux-app-title\" [ngClass]=\"{ 'lux-mobile': mobileView }\">{{ mobileView ? luxAppTitleShort : luxAppTitle }}</div>\n      </div>\n      <div class=\"lux-app-nav-menu\">\n        @if (navMenu) {\n        <ng-content select=\"lux-app-header-ac-nav-menu\"></ng-content>\n        }\n      </div>\n    </div>\n    }\n  </div>\n</header>\n","import { AfterViewInit, Component, TemplateRef, ViewChild } from '@angular/core';\nimport { LuxUtil } from '../../../../lux-util/lux-util';\n\n@Component({\n  selector: 'lux-app-header-action-nav',\n  templateUrl: './lux-app-header-action-nav.component.html'\n})\nexport class LuxAppHeaderActionNavComponent implements AfterViewInit {\n  @ViewChild(TemplateRef, { static: true }) templateRef!: TemplateRef<any>;\n\n  constructor() {}\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('templateRef', this.templateRef);\n  }\n}\n","<ng-template>\n  <div class=\"lux-app-header-action-nav lux-mr-3 lt-md:lux-mr-2\">\n    <ng-content select=\"lux-app-header-action-nav-item\"></ng-content>\n  </div>\n</ng-template>\n","import { Component, ContentChildren, QueryList } from '@angular/core';\nimport { LuxMenuItemComponent } from '../../../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\n\n@Component({\n  selector: 'lux-app-header-right-nav',\n  template: ''\n})\nexport class LuxAppHeaderRightNavComponent {\n  @ContentChildren(LuxMenuItemComponent) menuItemComponents!: QueryList<LuxMenuItemComponent>;\n\n  constructor() {}\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { TranslocoPipe, TranslocoService } from '@jsverse/transloco';\nimport { CookieService } from 'ngx-cookie-service';\nimport { LuxMenuItemComponent } from '../../../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxMenuComponent } from '../../../../lux-action/lux-menu/lux-menu.component';\nimport { LuxLocale } from './lux-locale';\n\n@Component({\n  selector: 'lux-lang-select',\n  templateUrl: './lux-lang-select.component.html',\n  imports: [LuxMenuComponent, LuxMenuItemComponent, TranslocoPipe]\n})\nexport class LuxLangSelectComponent implements OnInit {\n  private cookieService = inject(CookieService);\n  protected translocoService = inject(TranslocoService);\n\n  @Input() luxLocaleSupported = ['de'];\n  @Input() luxLocaleBaseHref = '';\n\n  cookieName = 'X-GFI-LANGUAGE';\n  cookiePath = '/';\n\n  allSupportedLocaleArr: LuxLocale[] = [\n    { code: 'de', label: 'Deutsch', labelSelected: 'DE', path: '' },\n    { code: 'en', label: 'English', labelSelected: 'EN', path: '/en' },\n    { code: 'fr', label: 'Français', labelSelected: 'FR', path: '/fr' }\n  ];\n\n  localeOptions: LuxLocale[] = [];\n\n  ngOnInit() {\n    this.luxLocaleSupported.forEach((locale) => {\n      const foundLocale = this.allSupportedLocaleArr.find((item) => item.code === locale);\n      if (foundLocale) {\n        this.localeOptions.push(foundLocale);\n      }\n    });\n\n    let locale = this.cookieService.get(this.cookieName);\n    if (!locale || !this.allSupportedLocaleArr.find((item) => item.code === locale)) {\n      locale = 'de';\n    }\n    const newLocale = this.allSupportedLocaleArr.find((item) => item.code === locale);\n    if (newLocale) {\n      this.translocoService.setActiveLang(locale);\n    }\n  }\n\n  onLocaleChanged(locale: LuxLocale) {\n    this.cookieService.set(this.cookieName, locale.code, undefined, this.cookiePath);\n    this.translocoService.setActiveLang(locale.code);\n  }\n\n}\n","<div class=\"lux-lang-select lux-flex lux-flex-grow-0 lux-flex-shrink-0 lux-flex-basis-auto lux-place-content-center\">\n  <lux-menu\n    class=\"lux-lang-select-menu\"\n    luxAriaMenuTriggerLabel=\"{{ 'luxc.lang-select.aria.langmenu.btn' | transloco }}\"\n    [luxMenuLabel]=\"translocoService.getActiveLang().toUpperCase()\"\n    luxMenuIconName=\"\"\n    [luxDisplayExtended]=\"false\"\n  >\n    @for (item of localeOptions; track item.label) {\n    <lux-menu-item\n      class=\"lux-lang-select-menu-item\"\n      [luxLabel]=\"item.label\"\n      luxIconName=\"lux-travel-map-rectangle-flag\"\n      (luxClicked)=\"onLocaleChanged(item)\"\n    ></lux-menu-item>\n    }\n  </lux-menu>\n</div>\n","export class LuxLocale {\n  code: string;\n  label: string;\n  labelSelected: string;\n  path: string;\n\n  constructor(code: string, label: string, labelSelected: string, path: string) {\n    this.code = code;\n    this.label = label;\n    this.labelSelected = labelSelected;\n    this.path = path;\n  }\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\n\nconst ANIMATION_DURATION = '200ms';\n\n/**\n * Animation für das Herein-Sliden der Seitennavigation von Links in den Contentbereich hinein und wieder zurück.\n */\nexport const sideNavAnimation = trigger('expandHide', [\n  state(\n    'void',\n    style({\n      opacity: '0'\n    }),\n    { params: { width: '100%' } }\n  ),\n  state(\n    'expanded',\n    style({\n      opacity: '1'\n    }),\n    { params: { width: '100%' } }\n  ),\n  transition('void => expanded', [animate(ANIMATION_DURATION)]),\n  transition('expanded => void', [animate(ANIMATION_DURATION)])\n]);\n\n/**\n * Animation um das Overlay für die Sidebar ein- und auszublenden.\n */\nexport const sideNavOverlayAnimation = trigger('expandHideOverlay', [\n  state(\n    'void',\n    style({\n      opacity: '0'\n    })\n  ),\n  state(\n    'expanded',\n    style({\n      opacity: '1'\n    })\n  ),\n  transition('void => expanded', [animate(ANIMATION_DURATION)]),\n  transition('expanded => void', [animate(ANIMATION_DURATION)])\n]);\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-side-nav-footer',\n  template: '<div class=\"lux-side-nav-footer-content\"><ng-content></ng-content></div>'\n})\nexport class LuxSideNavFooterComponent {\n  constructor() {}\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-side-nav-header',\n  template: '<div class=\"lux-side-nav-header-content\"><ng-content></ng-content></div>'\n})\nexport class LuxSideNavHeaderComponent {\n  constructor() {}\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    EventEmitter,\n    forwardRef,\n    inject,\n    Input,\n    OnChanges,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\nimport { LuxButtonComponent } from '../../../../../lux-action/lux-button/lux-button.component';\nimport { LuxAriaExpandedDirective } from '../../../../../lux-directives/lux-aria/lux-aria-expanded.directive';\nimport { LuxIconComponent } from '../../../../../lux-icon/lux-icon/lux-icon.component';\n\n@Component({\n  selector: 'lux-side-nav-item',\n  templateUrl: './lux-side-nav-item.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgClass, LuxAriaExpandedDirective, NgTemplateOutlet, LuxButtonComponent, LuxIconComponent]\n})\nexport class LuxSideNavItemComponent implements AfterViewInit, OnChanges {\n  private cdr = inject(ChangeDetectorRef);\n\n  @ViewChild(TemplateRef) templateRef?: TemplateRef<any>;\n\n  @Input() luxLabel?: string;\n  @Input() luxDisabled = false;\n  @Input() luxTagId?: string;\n  @Input() luxSelected = false;\n  @Input() luxCloseOnClick = true;\n  @Input() luxIconName?: string;\n  @Input() luxExpandable = false;\n  @Input() luxExpanded = true;\n\n  @Output() luxClicked = new EventEmitter<Event>();\n\n  @ContentChildren(forwardRef(() => LuxSideNavItemComponent)) sideNavItems!: QueryList<LuxSideNavItemComponent>;\n\n  ngOnChanges() {\n    // Bei Input Änderungen die CD anstossen\n    this.cdr.detectChanges();\n  }\n\n  ngAfterViewInit() {\n    // Nach Abschluss der Initialisierung die CD anstossen\n    this.cdr.detectChanges();\n  }\n\n  onClick(event: Event) {\n    if (this.luxDisabled) {\n      return;\n    }\n\n    this.luxClicked.emit(event);\n    if (this.luxExpandable) {\n      this.luxExpanded = !this.luxExpanded;\n    }\n  }\n}\n","<ng-template>\n  <div class=\"lux-side-nav-item-container\">\n    <div\n      class=\"lux-side-nav-item lux-nowrap lux-flex lux-place-content-center lux-align-items-center\"\n      (click)=\"onClick($event)\"\n      (keydown.enter)=\"onClick($event)\"\n      (keydown.space)=\"onClick($event)\"\n      [attr.tabindex]=\"luxDisabled ? -1 : 0\"\n      [ngClass]=\"{\n        'lux-side-nav-item-expandable': luxExpandable,\n        'lux-side-nav-item-selected': luxSelected && !luxDisabled,\n        'lux-side-nav-disabled': luxDisabled\n      }\"\n    >\n      <lux-icon\n        [luxIconName]=\"luxIconName\"\n        luxIconSize=\"2.5rem\"\n        luxMargin=\"0 0 0 0.25rem\"\n        luxPadding=\"0.5625rem\"\n        class=\"lux-side-nav-item-icon\"\n        [ngClass]=\"{ 'lux-side-nav-disabled': luxDisabled }\"\n      >\n      </lux-icon>\n\n      <lux-button\n        [luxLabel]=\"luxLabel\"\n        [luxTagId]=\"luxTagId\"\n        [luxDisabled]=\"luxDisabled\"\n        class=\"lux-side-nav-item-button lux-flex lux-flex-grow-1 lux-flex-shrink-1 lux-flex-basis-auto\"\n        [luxAriaExpanded]=\"luxExpandable ? luxExpanded : undefined\"\n      ></lux-button>\n\n      @if (luxExpandable) {\n      <lux-icon\n        class=\"lux-side-nav-item-expansion-icon lux-flex lux-flex-grow-0 lux-flex-shrink-0 lux-align-self-center\"\n        luxIconSize=\"1x\"\n        [luxIconName]=\"luxExpanded ? 'lux-interface-arrows-button-up' : 'lux-interface-arrows-button-down'\"\n        [ngClass]=\"{ 'lux-side-nav-disabled': luxDisabled }\"\n      >\n      </lux-icon>\n      }\n    </div>\n    @if (luxExpanded) { @for (sideNavItem of sideNavItems; track sideNavItem; let i = $index) { @if (i >= 0) {\n    <div class=\"lux-side-nav-sub-item\">\n      <ng-container [ngTemplateOutlet]=\"sideNavItem.templateRef ?? null\"></ng-container>\n    </div>\n    } } @if (sideNavItems.last && (sideNavItems.last.sideNavItems.length <= 0 || !sideNavItems.last.luxExpanded)) {\n    <div class=\"lux-side-nav-sub-item-last-child\"></div>\n    } }\n  </div>\n  <ng-content select=\"lux-divider\"></ng-content>\n</ng-template>\n<ng-content select=\"lux-side-nav-item\"></ng-content>\n","import { NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  Output,\n  QueryList,\n  ViewChild,\n  inject\n} from '@angular/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxLinkComponent } from '../../../../lux-action/lux-link/lux-link.component';\nimport { LuxAriaLabelDirective } from '../../../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxAriaRoleDirective } from '../../../../lux-directives/lux-aria/lux-aria-role.directive';\nimport { LuxIconComponent } from '../../../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxAppService } from '../../../../lux-util/lux-app.service';\nimport { LuxUtil } from '../../../../lux-util/lux-util';\nimport { LuxDividerComponent } from '../../../lux-divider/lux-divider.component';\nimport { sideNavAnimation, sideNavOverlayAnimation } from './lux-side-nav-model/lux-side-nav-animations';\nimport { LuxSideNavItemComponent } from './lux-side-nav-subcomponents/lux-side-nav-item.component';\n\n@Component({\n  selector: 'lux-side-nav',\n  templateUrl: './lux-side-nav.component.html',\n  animations: [sideNavAnimation, sideNavOverlayAnimation],\n  imports: [NgStyle, LuxAriaRoleDirective, LuxAriaLabelDirective, LuxDividerComponent, NgTemplateOutlet, LuxLinkComponent, LuxIconComponent, TranslocoPipe]\n})\nexport class LuxSideNavComponent implements AfterViewInit, OnDestroy {\n  private appService = inject(LuxAppService);\n\n  @Input() luxDashboardLink?: string;\n  @Input() luxDashboardLinkTitle = 'LUX Dashboard';\n  @Input() luxOpenLinkBlank?: boolean;\n  @Input() luxAriaRoleNavigationLabel = '';\n\n  @Output() luxSideNavExpandedChange = new EventEmitter<boolean>();\n\n  @ContentChildren(LuxSideNavItemComponent, { descendants: true }) sideNavItems!: QueryList<LuxSideNavItemComponent>;\n  @ContentChildren(LuxSideNavItemComponent, { descendants: false }) directSideNavItems!: QueryList<LuxSideNavItemComponent>;\n\n  @ViewChild('sideNav', { read: ElementRef, static: true }) sideNavEl!: ElementRef;\n  @ViewChild('sideNavHeader', { read: ElementRef, static: true }) sideNavHeaderEl!: ElementRef;\n  @ViewChild('sideNavFooter', { read: ElementRef, static: true }) sideNavFooterEl!: ElementRef;\n\n  top?: string;\n  left?: string;\n  bottom?: string;\n  right?: string;\n  focusElement: any;\n  height?: number;\n  width?: number;\n  visibility = 'hidden';\n  _sideNavExpanded = false;\n\n  get sideNavExpanded(): boolean {\n    return this._sideNavExpanded;\n  }\n\n  set sideNavExpanded(expanded: boolean) {\n    this._sideNavExpanded = expanded;\n    this.luxSideNavExpandedChange.next(this._sideNavExpanded);\n  }\n\n  private itemClickSubscriptions: Subscription[] = [];\n  private subscription?: Subscription;\n\n  @HostListener('window:keyup', ['$event'])\n  keyEvent(event: KeyboardEvent) {\n    if (LuxUtil.isKeyEscape(event) && this.sideNavExpanded) {\n      // Escape soll nur das Menü schließen, wenn es auch geöffnet ist.\n      this.toggle();\n    }\n  }\n\n  @HostListener('window:resize') windowResize() {\n    this.calculateWidthHeight();\n    this.calculateAppMenuPosition();\n  }\n\n  ngAfterViewInit() {\n    this.subscription = this.sideNavItems.changes.subscribe(() => this.updateItemClickListeners());\n    this.updateItemClickListeners();\n    this.calculateWidthHeight();\n  }\n\n  ngOnDestroy() {\n    this.subscription?.unsubscribe();\n    this.itemClickSubscriptions.forEach((subscription: Subscription) => subscription.unsubscribe());\n  }\n\n  toggle() {\n    this.calculateAppMenuPosition();\n\n    this.sideNavExpanded = !this.sideNavExpanded;\n\n    if (this.sideNavExpanded) {\n      this.visibility = 'visible';\n      this.calculateWidthHeight();\n\n      // Hier wird sich der Menübutton zwischengespeichert\n      this.focusElement = document.activeElement;\n    } else {\n      setTimeout(() => {\n        // Wenn das SideNavMenü geschlossen wird, wird wieder der SideNavMenübutton fokussiert.\n        if (this.focusElement) {\n          this.focusElement.focus();\n        }\n      });\n    }\n  }\n\n  private calculateAppMenuPosition() {\n    this.top = this.appService.getAppTop() + 'px';\n    this.left = this.appService.getAppLeft() + 'px';\n    this.bottom = this.appService.getAppBottom() + 'px';\n    this.right = this.appService.getAppRight() + 'px';\n  }\n\n  /**\n   * Wenn die Animation beendet ist, wird das Menü ausgeblendet, damit der Fokus weiter zum Inhalt springt und nicht\n   * durch das versteckte Menü wandert. Das ist auch für Screenreader nötig.\n   */\n  updateSideNavAfterAnimationIsFinished() {\n    this.visibility = this.sideNavExpanded ? 'visible' : 'hidden';\n\n    // Den Fokus auf den ersten Button setzen\n    if (this.sideNavExpanded && this.sideNavEl && this.sideNavEl.nativeElement) {\n      setTimeout(() => {\n        const firstButton = (this.sideNavEl.nativeElement as HTMLElement).querySelector('button');\n        if (firstButton) {\n          firstButton.focus();\n        }\n      });\n    }\n  }\n\n  open() {\n    this.sideNavExpanded = true;\n    this.calculateWidthHeight();\n  }\n\n  close() {\n    this.sideNavExpanded = false;\n  }\n\n  /**\n   * Berechnet die Höhe für den Container der SideNavMenuItems.\n   * Dafür wird die Gesamthöhe minus der Höhe des Headers und des Footers sowie eine feste Höhe\n   * für den App-Header gerechnet.\n   */\n  private calculateWidthHeight() {\n    setTimeout(() => {\n      const totalHeight = this.sideNavEl.nativeElement.offsetHeight;\n      const headerHeight = this.sideNavHeaderEl.nativeElement.offsetHeight;\n      const footerHeight = this.sideNavFooterEl.nativeElement.offsetHeight;\n      this.height = totalHeight - headerHeight - footerHeight;\n      this.width = this.sideNavEl.nativeElement.offsetWidth + 20 /* Sicherheitsaufschlag (Schatten, Scrollbar,...) */;\n    });\n  }\n\n  /**\n   * Hängt sich an die Klick-Events der einzelnen SideNavItems, um so, je nach Einstellung der Items,\n   * die SideNav zu schließen.\n   */\n  private updateItemClickListeners() {\n    this.itemClickSubscriptions.forEach((subscription: Subscription) => subscription.unsubscribe());\n\n    this.sideNavItems.forEach((item: LuxSideNavItemComponent) => {\n      this.itemClickSubscriptions.push(\n        item.luxClicked.subscribe(() => {\n          if (item.luxCloseOnClick) {\n            this.close();\n          }\n        })\n      );\n    });\n  }\n}\n","<div [ngStyle]=\"{ visibility: visibility }\">\n  <div\n    class=\"lux-side-nav lux-side-nav-z-index\"\n    [@expandHide]=\"{ value: sideNavExpanded ? 'expanded' : 'void', params: { width: width + 'px' } }\"\n    (@expandHide.done)=\"updateSideNavAfterAnimationIsFinished()\"\n    luxAriaRole=\"navigation\"\n    luxAriaLabel=\"{{ luxAriaRoleNavigationLabel || ('luxc.side-nav.ariarolenavigation' | transloco) }}\"\n    [ngStyle]=\"{ top: top, left: left, bottom: bottom }\"\n    #sideNav\n  >\n    <div class=\"lux-side-nav-header\" #sideNavHeader>\n      <ng-content select=\"lux-side-nav-header\"></ng-content>\n    </div>\n    <div class=\"lux-side-nav-content lux-flex lux-flex-col\" [ngStyle]=\"{ height: height + 'px', visibility: visibility }\">\n      @if (luxDashboardLink) {\n      <div class=\"lux-side-nav-item lux-nowrap lux-side-nav-dashboard-link lux-flex lux-place-content-center\">\n        <lux-icon\n          luxIconName=\"lux-interface-edit-grid\"\n          luxIconSize=\"2.5rem\"\n          luxPadding=\"0.5625rem\"\n          luxMargin=\"0 0 0 0.25rem\"\n          class=\"lux-side-nav-item-icon\"\n        >\n        </lux-icon>\n        <lux-link\n          class=\"lux-flex lux-flex-grow-1 lux-flex-grow-1 lux-flex-shrink-1 lux-flex-basis-auto\"\n          [luxLabel]=\"luxDashboardLinkTitle\"\n          [luxBlank]=\"luxOpenLinkBlank\"\n          [luxHref]=\"luxDashboardLink\"\n        ></lux-link>\n      </div>\n      <lux-divider></lux-divider>\n      } @for (sideNavItem of directSideNavItems; track sideNavItem) {\n      <ng-container [ngTemplateOutlet]=\"sideNavItem.templateRef ?? null\"></ng-container>\n      }\n      <ng-content select=\"lux-side-nav-item\"></ng-content>\n    </div>\n    <div class=\"lux-side-nav-footer\" #sideNavFooter>\n      <ng-content select=\"lux-side-nav-footer\"></ng-content>\n    </div>\n  </div>\n  @if (sideNavExpanded) {\n  <div\n    tabindex=\"0\"\n    class=\"lux-side-nav-overlay lux-side-nav-overlay-z-index\"\n    [ngStyle]=\"{ top: top, left: left, bottom: bottom, right: right }\"\n    [@expandHideOverlay]=\"sideNavExpanded ? 'expanded' : 'void'\"\n    (click)=\"close()\"\n    (keydown.escape)=\"close()\"\n  ></div>\n  }\n</div>\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  inject\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxButtonComponent } from '../../lux-action/lux-button/lux-button.component';\nimport { LuxMenuItemComponent } from '../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nimport { LuxMenuTriggerComponent } from '../../lux-action/lux-menu/lux-menu-subcomponents/lux-menu-trigger.component';\nimport { LuxMenuComponent } from '../../lux-action/lux-menu/lux-menu.component';\nimport { LuxAriaExpandedDirective } from '../../lux-directives/lux-aria/lux-aria-expanded.directive';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxAriaRoleDirective } from '../../lux-directives/lux-aria/lux-aria-role.directive';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxImageComponent } from '../../lux-icon/lux-image/lux-image.component';\nimport { LuxAppService } from '../../lux-util/lux-app.service';\nimport { LuxConsoleService } from '../../lux-util/lux-console.service';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxAppHeaderActionNavComponent } from './lux-app-header-subcomponents/lux-app-header-action-nav/lux-app-header-action-nav.component';\nimport { LuxAppHeaderRightNavComponent } from './lux-app-header-subcomponents/lux-app-header-right-nav/lux-app-header-right-nav.component';\nimport { LuxLangSelectComponent } from './lux-app-header-subcomponents/lux-lang-select/lux-lang-select.component';\nimport { LuxSideNavComponent } from './lux-app-header-subcomponents/lux-side-nav/lux-side-nav.component';\n\n@Component({\n  selector: 'lux-app-header',\n  templateUrl: './lux-app-header.component.html',\n  imports: [\n    LuxAriaRoleDirective,\n    LuxAriaLabelDirective,\n    NgClass,\n    LuxAriaExpandedDirective,\n    NgTemplateOutlet,\n    LuxLangSelectComponent,\n    MatButton,\n    LuxMenuComponent,\n    LuxMenuItemComponent,\n    LuxMenuTriggerComponent,\n    LuxButtonComponent,\n    LuxIconComponent,\n    LuxImageComponent,\n    TranslocoPipe\n  ],\n  host: {\n    '[class.lux-header-mobile]': 'mobileView'\n  }\n})\nexport class LuxAppHeaderComponent implements OnInit, OnChanges, OnDestroy {\n  private queryService = inject(LuxMediaQueryObserverService);\n  private logger = inject(LuxConsoleService);\n  private elementRef = inject(ElementRef);\n  private appService = inject(LuxAppService);\n\n  @Input() luxLocaleSupported = ['de'];\n  @Input() luxLocaleBaseHref = '';\n  @Input() luxUserName?: string;\n  @Input() luxAppTitle?: string;\n  @Input() luxAppTitleShort?: string;\n  @Input() luxIconName?: string;\n  @Input() luxImageSrc?: string;\n  @Input() luxImageHeight = '55px';\n  @Input() luxAriaAppMenuButtonLabel = '';\n  @Input() luxAriaUserMenuButtonLabel = '';\n  @Input() luxAriaTitleIconLabel = '';\n  @Input() luxAriaTitleImageLabel = '';\n  @Input() luxAriaTitleLinkLabel = '';\n  @Input() luxAriaRoleHeaderLabel = '';\n\n  @Output() luxClicked = new EventEmitter<Event>();\n\n  mobileView: boolean;\n  userNameShort?: string;\n  hasOnClickedListener?: boolean;\n  subscriptions: Subscription[] = [];\n\n  @ViewChild('customTrigger', { read: ElementRef }) customTrigger?: ElementRef;\n\n  @ContentChild(LuxAppHeaderActionNavComponent) actionNav?: LuxAppHeaderActionNavComponent;\n  @ContentChild(LuxAppHeaderRightNavComponent) rightNav?: LuxAppHeaderRightNavComponent;\n  @ContentChild(LuxSideNavComponent) sideNav?: LuxSideNavComponent;\n\n  constructor() {\n    this.appService.appHeaderEl = this.elementRef.nativeElement;\n\n    this.mobileView = this.queryService.activeMediaQuery === 'xs' || this.queryService.activeMediaQuery === 'sm';\n    this.subscriptions.push(\n      this.queryService.getMediaQueryChangedAsObservable().subscribe((query) => {\n        this.mobileView = query === 'xs' || query === 'sm';\n      })\n    );\n  }\n\n  ngOnInit() {\n    if (this.luxClicked.observed) {\n      this.hasOnClickedListener = true;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.forEach((sub) => sub.unsubscribe());\n  }\n\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    if (simpleChanges['luxUserName']) {\n      this.userNameShort = this.generateUserNameShort();\n    }\n\n    if (!this.luxAppTitleShort || this.luxAppTitleShort.length === 0) {\n      this.logger.warn('No title is set for the mobile view.');\n    }\n  }\n\n  onMenuClosed() {\n    if (this.customTrigger) {\n      this.customTrigger.nativeElement.focus();\n    }\n  }\n\n  onClicked(event: Event) {\n    this.luxClicked.emit(event);\n  }\n\n  private generateUserNameShort(): string {\n    let short = this.luxUserName ? this.luxUserName.trim() : '';\n\n    if (short.length > 0) {\n      short = short.charAt(0);\n    }\n    return short.toUpperCase();\n  }\n}\n","<div class=\"lux-app-header\" luxAriaRole=\"banner\" luxAriaLabel=\"{{ luxAriaRoleHeaderLabel || ('luxc.app-header.aria.role_header.lbl' | transloco) }}\">\n  <!-- ausklappbares Side-Nav (linksbündig) -->\n  <div class=\"lux-header-side-nav lux-flex lux-flex-grow-0 lux-flex-shrink-0 lux-flex-basis-auto\">\n    <div>\n      @if (sideNav) {\n      <lux-button\n        class=\"lux-side-nav-trigger\"\n        [ngClass]=\"{ 'lux-side-nav-trigger-active': sideNav.sideNavExpanded }\"\n        (luxClicked)=\"sideNav.toggle()\"\n        luxIconName=\"lux-interface-setting-menu-1\"\n        luxTagId=\"lux-side-nav-trigger\"\n        luxAriaLabel=\"{{ luxAriaAppMenuButtonLabel || ('luxc.app-header.aria.appmenu.btn' | transloco) }}\"\n        [luxAriaExpanded]=\"sideNav.sideNavExpanded\"\n      ></lux-button>\n      }\n\n      <span class=\"lux-nowrap lux-header-title lux-flex lux-place-content-center lux-flex-grow-1 lux-flex-shrink-1 lux-flex-basis-auto\">\n        @if (luxIconName && !sideNav && !mobileView) {\n        <lux-icon\n          style=\"padding: 6px 5px\"\n          luxAriaLabel=\"{{ luxAriaTitleIconLabel || ('luxc.app-header.aria.title_icon.lbl' | transloco) }}\"\n          [luxIconName]=\"luxIconName\"\n          [ngClass]=\"{ 'lux-cursor': hasOnClickedListener, focused: hasOnClickedListener }\"\n          (click)=\"onClicked($event)\"\n          (keydown.enter)=\"onClicked($event)\"\n          (keydown.space)=\"onClicked($event)\"\n          [attr.role]=\"hasOnClickedListener ? 'link' : null\"\n          [attr.tabindex]=\"hasOnClickedListener ? '0' : null\"\n        ></lux-icon>\n        } @if (luxImageSrc && !sideNav && !mobileView) {\n        <lux-image\n          style=\"padding: 0 5px\"\n          luxAriaLabel=\"{{ luxAriaTitleImageLabel || ('luxc.app-header.aria.title.image.lbl' | transloco) }}\"\n          [luxImageSrc]=\"luxImageSrc\"\n          [luxImageHeight]=\"luxImageHeight\"\n          [luxImageWidth]=\"'auto'\"\n          [ngClass]=\"{ 'lux-cursor': hasOnClickedListener, focused: hasOnClickedListener }\"\n          (click)=\"onClicked($event)\"\n          (keydown.enter)=\"onClicked($event)\"\n          (keydown.space)=\"onClicked($event)\"\n          [attr.role]=\"hasOnClickedListener ? 'link' : null\"\n          [attr.tabindex]=\"hasOnClickedListener ? '0' : null\"\n        ></lux-image>\n        }<span\n          class=\"lux-app-header-title-label\"\n          luxAriaLabel=\"{{ (luxAriaTitleLinkLabel || ('luxc.app-header.aria.title.link.lbl' | transloco)) ? (luxAriaTitleLinkLabel || ('luxc.app-header.aria.title.link.lbl' | transloco)) : luxAppTitle }}\"\n          (click)=\"onClicked($event)\"\n          (keydown.enter)=\"onClicked($event)\"\n          (keydown.space)=\"onClicked($event)\"\n          [attr.role]=\"hasOnClickedListener ? 'link' : null\"\n          [attr.tabindex]=\"hasOnClickedListener ? '0' : null\"\n          [ngClass]=\"{ 'lux-cursor': hasOnClickedListener, focused: hasOnClickedListener }\"\n          >{{ mobileView ? luxAppTitleShort : luxAppTitle }}</span\n        >\n      </span>\n    </div>\n  </div>\n  <!-- Action-Menu (mittig) -->\n  <div class=\"lux-header-action\">\n    @if (actionNav) {\n    <ng-container [ngTemplateOutlet]=\"actionNav.templateRef\"></ng-container>\n    }\n  </div>\n  <!-- Lang-Menu (rechtsbündig) -->\n  @if (luxLocaleSupported && (luxLocaleSupported?.length ?? 0) > 1) {\n  <div class=\"lux-lang-select-menu lux-header-action\">\n    <lux-lang-select\n      [luxLocaleSupported]=\"luxLocaleSupported\"\n      [luxLocaleBaseHref]=\"luxLocaleBaseHref\"\n      class=\"lux-flex-grow-0 lux-flex-shrink-0 lux-flex-basis-auto\"\n    ></lux-lang-select>\n  </div>\n  }\n  <!-- User-Menu (rechtsbündig) -->\n  @if (rightNav) {\n  <div luxAriaLabel=\"{{ luxAriaUserMenuButtonLabel || ('luxc.app-header.aria.usermenu.btn' | transloco) }}\" class=\"lux-header-user lux-pr-2 lux-pl-2\" [ngClass]=\"{ 'lux-show-border': !!actionNav }\">\n    <lux-menu\n      class=\"lux-header-menu\"\n      [ngClass]=\"{ 'lux-header-menu-mobile': mobileView }\"\n      [luxDisplayExtended]=\"false\"\n      (luxMenuClosed)=\"onMenuClosed()\"\n      luxClassName=\"lux-right-nav-menu\"\n      luxTagId=\"app_header_menu\"\n    >\n      @for (menuItem of rightNav.menuItemComponents; track menuItem) {\n      <lux-menu-item\n        [luxLabel]=\"menuItem.luxLabel\"\n        [luxIconName]=\"menuItem.luxIconName\"\n        [luxTagId]=\"menuItem.luxLabel\"\n        [luxAlwaysVisible]=\"menuItem.luxAlwaysVisible\"\n        [luxDisabled]=\"menuItem.luxDisabled\"\n        [luxRaised]=\"menuItem.luxRaised\"\n        [luxColor]=\"menuItem.luxColor\"\n        [luxRounded]=\"menuItem.luxRounded\"\n        [luxClass]=\"menuItem.luxClass\"\n        (luxClicked)=\"menuItem.luxClicked.emit($event)\"\n      >\n      </lux-menu-item>\n      }\n      <lux-menu-trigger>\n        <button\n          mat-button\n          class=\"lux-right-nav-trigger lux-flex lux-justify-end lux-items-center\"\n          luxAriaLabel=\"{{ 'luxc.app-header.user.menu.trigger' | transloco }}\"\n          aria-haspopup=\"true\"\n          #customTrigger\n        >\n          @if (luxUserName) {\n          <span>\n            <span class=\"lux-nowrap lux-header-username\" [ngClass]=\"{ 'lux-display-none': mobileView }\">\n              {{ luxUserName }}\n            </span>\n            <span class=\"lux-nowrap lux-header-user-short\" [ngClass]=\"{ 'lux-block': mobileView, 'lux-display-none': !mobileView }\">\n              <span>{{ userNameShort }}</span>\n            </span>\n          </span>\n          }\n          <lux-icon\n            class=\"lux-icon-menu-0\"\n            luxIconSize=\"1x\"\n            luxIconName=\"lux-interface-user-single\"\n            luxMargin=\"0 0 0 8px\"\n            [ngClass]=\"{ 'lux-display-none': luxUserName && mobileView }\"\n          >\n          </lux-icon>\n          <lux-icon class=\"lux-icon-menu-1\" luxIconSize=\"1x\" luxIconName=\"lux-interface-arrows-button-down\" luxPadding=\"0\" luxMargin=\"0\">\n          </lux-icon>\n        </button>\n      </lux-menu-trigger>\n    </lux-menu>\n  </div>\n  }\n</div>\n\n<ng-content select=\"lux-app-header-right-nav\"></ng-content>\n<ng-content select=\"lux-side-nav\"></ng-content>\n","import { NgClass } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'lux-checkbox-container-ac',\n  templateUrl: './lux-checkbox-container-ac.component.html',\n  imports: [NgClass]\n})\nexport class LuxCheckboxContainerAcComponent {\n  @Input() luxLabel = '';\n  @Input() luxVertical = true;\n\n  constructor() {}\n}\n","@if (luxLabel) {\n<div class=\"lux-label-container\">\n  {{ luxLabel }}\n</div>\n}\n<div class=\"lux-checkbox-container\" [ngClass]=\"{ 'lux-vertical': luxVertical }\">\n  <ng-content></ng-content>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-list-item-content',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxListItemContentComponent {\n  constructor() {}\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-list-item-custom-header',\n  template: '<ng-content></ng-content>',\n  host: { class: 'lux-flex lux-flex-auto' }\n})\nexport class LuxListItemCustomHeaderComponent {}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-list-item-icon',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxListItemIconComponent {\n  constructor() {}\n}\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport { NgClass } from '@angular/common';\nimport { Component, ContentChild, ElementRef, EventEmitter, HostBinding, Input, Output, inject } from '@angular/core';\nimport { LuxCardContentComponent } from '../../lux-card/lux-card-subcomponents/lux-card-content.component';\nimport { LuxCardCustomHeaderComponent } from \"../../lux-card/lux-card-subcomponents/lux-card-custom-header.component\";\nimport { LuxCardInfoComponent } from '../../lux-card/lux-card-subcomponents/lux-card-info.component';\nimport { LuxCardComponent } from '../../lux-card/lux-card.component';\nimport { LuxListItemCustomHeaderComponent } from './lux-list-item-custom-header.component';\n\n@Component({\n  selector: 'lux-list-item',\n  templateUrl: './lux-list-item.component.html',\n  imports: [LuxCardComponent, NgClass, LuxCardInfoComponent, LuxCardContentComponent, LuxCardCustomHeaderComponent]\n})\nexport class LuxListItemComponent implements FocusableOption {\n  elementRef = inject(ElementRef);\n\n  private _luxTitle = '';\n  private _luxSubTitle = '';\n  private _luxSelected = false;\n\n  @HostBinding('attr.aria-label') ariaLabel?: string;\n  @HostBinding('attr.aria-selected') ariaSelected?: boolean;\n  @HostBinding('attr.role') role = 'option';\n  @HostBinding('attr.tabindex') tabindex = '-1';\n\n  @Input() luxTitleTooltip?: string;\n  @Input() luxSubTitleTooltip?: string;\n  @Input() luxTitleLineBreak = true;\n  \n  @Output() luxClicked = new EventEmitter<Event>();\n\n  @ContentChild(LuxListItemCustomHeaderComponent) customHeaderComponent?: LuxListItemCustomHeaderComponent;\n\n  get luxTitle(): string {\n    return this._luxTitle;\n  }\n\n  @Input() set luxTitle(title: string) {\n    this._luxTitle = title;\n    this.ariaLabel = this.getLabel();\n  }\n\n  get luxSubTitle(): string {\n    return this._luxSubTitle;\n  }\n\n  @Input() set luxSubTitle(subTitle: string) {\n    this._luxSubTitle = subTitle;\n    this.ariaLabel = this.getLabel();\n  }\n\n  get luxSelected(): boolean {\n    return this._luxSelected;\n  }\n\n  @Input() set luxSelected(selected: boolean) {\n    this._luxSelected = selected;\n    this.ariaSelected = selected;\n  }\n\n  clicked(event: Event) {\n    this.luxClicked.emit(event);\n  }\n\n  focus(): void {\n    this.elementRef.nativeElement.focus();\n  }\n\n  getLabel() {\n    return `${this.luxTitle ? this.luxTitle : ''} ${this.luxSubTitle ? this.luxSubTitle : ''}`;\n  }\n}\n","<lux-card\n  [ngClass]=\"{ 'lux-list-item-selected': luxSelected }\"\n  class=\"lux-item\"\n  [luxTitle]=\"luxTitle\"\n  [luxTitleTooltip]=\"luxTitleTooltip\"\n  [luxSubTitle]=\"luxSubTitle\"\n  [luxSubTitleTooltip]=\"luxSubTitleTooltip\"\n  [luxTitleLineBreak]=\"luxTitleLineBreak\"\n  [luxUseTabIndex]=\"false\"\n  (luxClicked)=\"clicked($event)\"\n>\n  @if (customHeaderComponent) {\n    <lux-card-custom-header>\n      <ng-content select=\"lux-list-item-custom-header\"></ng-content>\n    </lux-card-custom-header>\n  }\n  <lux-card-info>\n    <ng-content select=\"lux-list-item-icon\"></ng-content>\n  </lux-card-info>\n  <lux-card-content>\n    <ng-content select=\"lux-list-item-content\"></ng-content>\n  </lux-card-content>\n</lux-card>\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport {\n  AfterViewInit,\n  Component,\n  ContentChildren,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList\n} from '@angular/core';\nimport { TranslocoPipe, TranslocoService } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxListItemComponent } from './lux-list-subcomponents/lux-list-item.component';\n\n@Component({\n  selector: 'lux-list',\n  templateUrl: './lux-list.component.html',\n  imports: [LuxIconComponent, TranslocoPipe]\n})\nexport class LuxListComponent implements AfterViewInit, OnInit, OnDestroy {\n  private tService = inject(TranslocoService);\n  private _luxSelectedPosition = 0;\n\n  private previousFocusedPosition?: number;\n  private clickSubscriptions: Subscription[] = [];\n  private listItemsSubscription?: Subscription;\n  private keyManager: FocusKeyManager<LuxListItemComponent> = new FocusKeyManager<LuxListItemComponent>([]);\n\n  @ContentChildren(LuxListItemComponent) luxItems!: QueryList<LuxListItemComponent>;\n\n  @Output() luxFocusedItemChange = new EventEmitter<LuxListItemComponent>();\n  @Output() luxFocusedPositionChange = new EventEmitter<number>();\n  @Output() luxSelectedPositionChange = new EventEmitter<number>();\n\n  @Input() luxEmptyIconName = 'lux-interface-alert-information-circle';\n  @Input() luxEmptyIconSize = '5x';\n  @Input() luxEmptyLabel = '';\n  @Input() set luxLabel(value: string) {\n    this.label = value || this.tService.translate('luxc.list.arialabel');\n  }\n\n  @HostBinding('attr.role') role = 'listbox';\n  @HostBinding('attr.tabindex') tabindex = '0';\n  @HostBinding('attr.aria-multiselectable') ariaMulti = 'true';\n  @HostBinding('attr.aria-label') label = this.tService.translate('luxc.list.arialabel');\n\n  @HostListener('focus', ['$event']) onFocus(event: FocusEvent) {\n    if (event.relatedTarget === null || 'lux-list-item' !== this.getTagName(event)) {\n      // Wenn die Liste den Focus erhält, soll direkt das selektierte Element (bzw. das erste Element) focussiert werden.\n      if (this.luxItems.length > 0) {\n        if (this.luxSelectedPosition >= 0) {\n          this.focus(this.luxSelectedPosition);\n        } else {\n          this.focus(0);\n        }\n      }\n    }\n  }\n\n  @HostListener('keydown', ['$event']) onKeydown(keyboardEvent: KeyboardEvent) {\n    this.keydown(keyboardEvent);\n  }\n\n  get luxSelectedPosition(): number {\n    return this._luxSelectedPosition;\n  }\n\n  @Input() set luxSelectedPosition(position: number) {\n    if (position === this.luxSelectedPosition) {\n      return;\n    }\n\n    this.focus(position);\n    this.select(position);\n    this.scroll(position);\n  }\n\n  constructor() {}\n\n  isEmpty() {\n    return !this.luxItems || this.luxItems.length === 0;\n  }\n\n  ngOnInit() {\n    const defaultLabel = this.tService.translate('luxc.list.arialabel');\n    if (this.label === defaultLabel) {\n      console.warn(\n        'lux-list:\\n' +\n          'Die Property \"luxLabel\" wurde nicht gesetzt.\\n' +\n          'Bitte ein sprechendes Label setzen, damit dieses von Screenreadern vorgelesen werden kann.\\n' +\n          `Es wird das Standardlabel \"${defaultLabel}\" verwendet.`\n      );\n    }\n  }\n\n  ngAfterViewInit() {\n    // Click-Events der LuxListItems erhalten\n    this.listItemsSubscription = this.luxItems.changes.subscribe(() => {\n      this.listenForClicks();\n      this.keyManager = new FocusKeyManager<LuxListItemComponent>(this.luxItems);\n      if (this.previousFocusedPosition) {\n        this.keyManager.setActiveItem(this.previousFocusedPosition);\n      }\n    });\n    this.listenForClicks();\n    this.keyManager = new FocusKeyManager<LuxListItemComponent>(this.luxItems);\n    if (this.luxSelectedPosition) {\n      this.keyManager.setActiveItem(this.luxSelectedPosition);\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.listItemsSubscription) {\n      this.listItemsSubscription.unsubscribe();\n    }\n\n    this.clickSubscriptions.forEach((sub) => sub.unsubscribe());\n  }\n\n  /**\n   * Wird beim Drücken einer Taste ausgeführt und handelt die Aktionen bei speziellen Tasten\n   * (UP_ARROW || DOWN_ARROW werden vom KeyManager selbstständig gepflegt)\n   * @param keyboardEvent\n   */\n  keydown(keyboardEvent: KeyboardEvent) {\n    if (LuxUtil.isKeySpace(keyboardEvent) || LuxUtil.isKeyEnter(keyboardEvent)) {\n      this.select(this.keyManager.activeItemIndex!);\n      keyboardEvent.preventDefault();\n    } else if (LuxUtil.isKeyHome(keyboardEvent)) {\n      this.keyManager.setFirstItemActive();\n      this.focus(this.keyManager.activeItemIndex!);\n      keyboardEvent.preventDefault();\n    } else if (LuxUtil.isKeyEnd(keyboardEvent)) {\n      this.keyManager.setLastItemActive();\n      this.focus(this.keyManager.activeItemIndex!);\n      keyboardEvent.preventDefault();\n    } else if (LuxUtil.isKeyArrowUp(keyboardEvent)) {\n      this.keyManager.setPreviousItemActive();\n      this.focus(this.keyManager.activeItemIndex!);\n      keyboardEvent.preventDefault();\n    } else if (LuxUtil.isKeyArrowDown(keyboardEvent)) {\n      this.keyManager.setNextItemActive();\n      this.focus(this.keyManager.activeItemIndex!);\n      keyboardEvent.preventDefault();\n    } else {\n      this.keyManager.onKeydown(keyboardEvent);\n    }\n  }\n\n  /**\n   * Auf Click-Events der hier bekannten LuxListItems hören und entsprechend das selektierte ListItem aktualisieren.\n   */\n  private listenForClicks() {\n    this.clickSubscriptions.forEach((sub) => sub.unsubscribe());\n    this.clickSubscriptions = [];\n\n    this.luxItems.forEach((listItem: LuxListItemComponent, index: number) => {\n      this.clickSubscriptions.push(\n        listItem.luxClicked.subscribe(() => {\n          this.focus(index);\n          this.select(index);\n        })\n      );\n    });\n  }\n\n  /**\n   * Merkt sich die Position als Selektionsposition und aktualisiert den luxSelected-Wert\n   * aller luxItems, die hier bekannt sind.\n   * @param position\n   */\n  private select(position: number) {\n    this._luxSelectedPosition = position;\n    this.previousFocusedPosition = position;\n    this.luxSelectedPositionChange.emit(position);\n\n    if (this.luxItems) {\n      this.luxItems.forEach((listItem: LuxListItemComponent) => {\n        listItem.luxSelected = false;\n      });\n\n      const selectedListItem = this.findListItem(position);\n      if (selectedListItem) {\n        selectedListItem.luxSelected = true;\n      }\n    }\n  }\n\n  /**\n   * Merkt sich die position als Fokus-Position und aktualisiert die CSS-Klassen der ListItems.\n   * @param position\n   */\n  private focus(position: number) {\n    this.keyManager.setActiveItem(position);\n\n    this.luxFocusedPositionChange.emit(position);\n    this.luxFocusedItemChange.emit(this.keyManager.activeItem!);\n\n    this.previousFocusedPosition = position;\n  }\n\n  /**\n   * Scrollt zu dem Element an der position.\n   * @param position\n   */\n  private scroll(position: number) {\n    if (this.luxItems) {\n      const listItem = this.keyManager.activeItem;\n\n      if (listItem) {\n        listItem.elementRef.nativeElement.scrollIntoView(true);\n      }\n    }\n  }\n\n  /**\n   * Gibt das ListItem an der position zurück bzw. \"null\" wenn die luxItems undefined/null sind.\n   * @param position\n   */\n  private findListItem(position: number): LuxListItemComponent | null {\n    const item = this.luxItems ? this.luxItems.find((listItem: LuxListItemComponent, index: number) => index === position) : null;\n\n    return item ?? null;\n  }\n\n  private getTagName(event: FocusEvent) {\n    let tagName = '';\n\n    if (event.relatedTarget && event.relatedTarget instanceof HTMLElement && (event.relatedTarget as HTMLElement).tagName) {\n      tagName = (event.relatedTarget as HTMLElement).tagName.toLocaleLowerCase();\n    }\n\n    return tagName;\n  }\n}\n","<!-- die tatsächlichen LuxListItems via Content-Projection einbinden -->\n@if (!isEmpty()) {\n<ng-content></ng-content>\n}\n<!-- wenn keine gefunden werden konnten, Empty-Icon und Empty-Label anzeigen -->\n@if (isEmpty()) {\n<div>\n  <div\n    class=\"lux-list-empty-container lux-flex lux-flex-col lux-place-content-center lux-items-center lux-p-2\"\n    role=\"option\"\n    aria-selected=\"false\"\n  >\n    <lux-icon\n      class=\"lux-list-empty-icon lux-color-gray\"\n      [luxIconName]=\"luxEmptyIconName\"\n      [luxIconSize]=\"luxEmptyIconSize\"\n      luxMargin=\"0 0 8 0\"\n    >\n    </lux-icon>\n    <span class=\"lux-list-empty-icon-text\">\n      {{ luxEmptyLabel || ('luxc.list.empty_label' | transloco) }}\n    </span>\n  </div>\n</div>\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-detail-header-ac',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxDetailHeaderAcComponent {\n  constructor() {}\n}\n","import { AfterContentInit, Component, ContentChild, TemplateRef } from '@angular/core';\nimport { LuxUtil } from '../../../lux-util/lux-util';\n\n@Component({\n  selector: 'lux-detail-view-ac',\n  template: ''\n})\nexport class LuxDetailViewAcComponent implements AfterContentInit {\n  @ContentChild(TemplateRef) tempRef!: TemplateRef<any>;\n\n  constructor() {}\n\n  ngAfterContentInit() {\n    LuxUtil.assertNonNull('tempRef', this.tempRef);\n  }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, TemplateRef } from '@angular/core';\nimport { LuxUtil } from '../../../lux-util/lux-util';\n\n@Component({\n  selector: 'lux-detail-wrapper-ac',\n  template: '<ng-container *ngTemplateOutlet=\"luxDetailTemplate; context: luxDetailContext\"></ng-container>',\n  imports: [NgTemplateOutlet]\n})\nexport class LuxDetailWrapperAcComponent implements OnInit, AfterViewInit {\n  private _luxDetailTemplate!: TemplateRef<any>;\n\n  @Output() luxDetailRendered = new EventEmitter<void>();\n\n  @Input() luxDetailContext: any;\n\n  @Input() set luxDetailTemplate(ref: TemplateRef<any>) {\n    this._luxDetailTemplate = ref;\n  }\n\n  get luxDetailTemplate(): TemplateRef<any> {\n    return this._luxDetailTemplate;\n  }\n\n  constructor() {}\n\n  ngOnInit() {\n    LuxUtil.assertNonNull('_luxDetailTemplate', this._luxDetailTemplate);\n  }\n\n  ngAfterViewInit() {\n    this.luxDetailRendered.emit();\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LuxUtil } from '../../lux-util/lux-util';\n\n@Pipe({ name: 'luxPropertyFromObject', pure: false })\nexport class LuxPropertyFromObjectPipe implements PipeTransform {\n  /**\n   * Ruft die Funktion aus Util auf, um ein Property aus einem Objekt (auch mit Unterpfaden) auszulesen.\n   * @param object\n   * @param propertyNamePath\n   */\n  transform(object: any, propertyNamePath: string): any {\n    return LuxUtil.readPropertyValueFromObject(object, propertyNamePath);\n  }\n}\n","import { Component, ContentChild, Input, TemplateRef } from '@angular/core';\n\n@Component({\n  selector: 'lux-tab',\n  template: ''\n})\nexport class LuxTabComponent {\n  @Input() luxTitle = '';\n  @Input() luxIconName?: string;\n  @Input() luxCounter?: number;\n  @Input() luxCounterCap = 10;\n  @Input() luxShowNotification?: boolean;\n  @Input() luxDisabled = false;\n  @Input() luxTagIdHeader?: string;\n  @Input() luxTagIdContent?: string;\n  @Input() luxImageSrc?: string;\n  @Input() luxImageAlign: 'left' | 'center' | 'right' = 'center';\n  @Input() luxImageWidth = '36px';\n  @Input() luxImageHeight = '36px';\n\n  @ContentChild(TemplateRef) contentTemplate!: TemplateRef<any>;\n\n  constructor() {}\n\n  onTabActivated() {\n    // Wird aufgerufen, wenn der Tab aktiviert wird (sichtbar wird).\n  }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  SimpleChanges,\n  ViewChild,\n  inject\n} from '@angular/core';\nimport { MatTab, MatTabChangeEvent, MatTabGroup, MatTabLabel } from '@angular/material/tabs';\nimport { ReplaySubject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { LuxComponentsConfigService } from '../../lux-components-config/lux-components-config.service';\nimport { LuxBadgeNotificationDirective } from '../../lux-directives/lux-badge-notification/lux-badge-notification.directive';\nimport { LuxCustomTagIdDirective } from '../../lux-directives/lux-tag-id/lux-custom-tag-id.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxImageComponent } from '../../lux-icon/lux-image/lux-image.component';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxTabComponent } from './lux-tabs-subcomponents/lux-tab.component';\n\n@Component({\n  selector: 'lux-tabs',\n  templateUrl: './lux-tabs.component.html',\n  imports: [\n    NgClass,\n    MatTabGroup,\n    LuxTagIdDirective,\n    LuxCustomTagIdDirective,\n    MatTab,\n    MatTabLabel,\n    NgTemplateOutlet,\n    LuxBadgeNotificationDirective,\n    LuxIconComponent,\n    LuxImageComponent\n  ]\n})\nexport class LuxTabsComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n  componentsConfigService = inject(LuxComponentsConfigService);\n  private queryService = inject(LuxMediaQueryObserverService);\n\n  private static readonly _DEBOUNCE_TIME: number = 50;\n\n  private static _notificationNewClass = 'lux-notification-new';\n  private static _notificationReadClass = 'lux-notification-read';\n\n  private subscriptions: Subscription[] = [];\n\n  tabChange$: ReplaySubject<MatTabChangeEvent> = new ReplaySubject<MatTabChangeEvent>(1);\n  labelUppercase?: boolean;\n  smallDevice?: boolean;\n\n  @Input() luxActiveTab = 0;\n  @Input() luxIconSize = '2x';\n  @Input() luxDisplayDivider = true;\n  @Input() luxTagId?: string;\n  @Input() luxLazyLoading = false;\n  @Input() luxShowBorder = false;\n\n  @Output() luxActiveTabChanged = new EventEmitter<MatTabChangeEvent>();\n\n  @ContentChildren(LuxTabComponent) luxTabs!: QueryList<LuxTabComponent>;\n  @ViewChild('matTabs', { read: ElementRef, static: true }) tabHeader!: ElementRef;\n\n  ngOnInit() {\n    this.subscriptions.push(\n      this.tabChange$\n        .asObservable()\n        .pipe(debounceTime(LuxTabsComponent._DEBOUNCE_TIME))\n        .subscribe((tabChange: MatTabChangeEvent) => {\n          this.luxActiveTab = tabChange.index;\n          this.luxActiveTabChanged.emit(tabChange);\n          this.callOnTabActivated();\n        })\n    );\n\n    this.subscriptions.push(\n      this.componentsConfigService.config.subscribe(() => {\n        this.labelUppercase = this.componentsConfigService.isLabelUppercaseForSelector('lux-tab');\n      })\n    );\n\n    this.subscriptions.push(\n      this.queryService.getMediaQueryChangedAsObservable().subscribe((query) => {\n        this.smallDevice = query === 'xs' || query === 'sm';\n      })\n    );\n  }\n\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    const activeTabChange = simpleChanges['activeTab'];\n    if (activeTabChange) {\n      if (!activeTabChange.currentValue) {\n        this.luxActiveTab = 0;\n      }\n    }\n  }\n\n  ngAfterViewInit() {\n    this.rerenderTabs();\n    this.callOnTabActivated();\n  }\n\n  private callOnTabActivated() {\n    setTimeout(() => {\n      this.luxTabs.get(this.luxActiveTab)?.onTabActivated();\n    });\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((sub) => sub.unsubscribe());\n  }\n\n  getNotificationIconColorClassForTab(luxTab: LuxTabComponent): string {\n    return luxTab.luxShowNotification === true ? LuxTabsComponent._notificationNewClass : LuxTabsComponent._notificationReadClass;\n  }\n\n  /**\n   * Forciert Angular die Tab-Header neu zu prüfen, in dem\n   * der erste Tab ein Leerzeichen bekommt, welches im nächsten\n   * Prüfzyklus entfernt wird.\n   */\n  rerenderTabs() {\n    if (this.luxTabs.length > 0) {\n      setTimeout(() => {\n        this.luxTabs.first.luxTitle += ' ';\n        setTimeout(() => {\n          this.luxTabs.first.luxTitle = this.luxTabs.first.luxTitle.trim();\n        });\n      });\n    }\n  }\n\n}\n","<div [ngClass]=\"{ 'lux-tabs-show-border': luxShowBorder }\">\n  <mat-tab-group\n    [mat-stretch-tabs]=\"false\"\n    [dynamicHeight]=\"false\"\n    [selectedIndex]=\"luxActiveTab\"\n    (selectedTabChange)=\"tabChange$.next($event)\"\n    [disableRipple]=\"true\"\n    class=\"lux-tab-group\"\n    [ngClass]=\"{\n      'lux-tabs-show-divider': luxDisplayDivider,\n      'lux-tabs-mobile': smallDevice\n    }\"\n    #matTabs\n    luxTagIdHandler\n    [luxTagId]=\"luxTagId\"\n    [luxCustomTagId]=\"luxTagId\"\n  >\n    @for (luxTab of luxTabs; track luxTab) {\n    <mat-tab\n      [label]=\"luxTab.luxTitle\"\n      [labelClass]=\"luxTab.luxIconName || luxTab.luxImageSrc ? ['lux-tab-with-icon'] : []\"\n      [disabled]=\"luxTab.luxDisabled\"\n    >\n      <ng-template matTabLabel>\n        <ng-container *ngTemplateOutlet=\"tabLabelTemplate; context: { $implicit: luxTab }\"></ng-container>\n      </ng-template>\n    </mat-tab>\n    }\n  </mat-tab-group>\n\n  @for (luxTab of luxTabs; track i; let i = $index) { @if (!luxLazyLoading) {\n  <section\n    luxTagIdHandler\n    [luxTagId]=\"luxTab.luxTagIdContent\"\n    [luxCustomTagId]=\"luxTab.luxTagIdContent\"\n    [class.lux-display-none]=\"i !== luxActiveTab\"\n    class=\"lux-mt-3 lux-tab-content\"\n    [ngClass]=\"{ 'lux-pl-4': luxShowBorder, 'lux-pr-4': luxShowBorder }\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxTab.contentTemplate\"></ng-container>\n    <span>&nbsp;</span>\n  </section>\n  } @if (luxLazyLoading && i === luxActiveTab) {\n  <section\n    luxTagIdHandler\n    [luxTagId]=\"luxTab.luxTagIdContent\"\n    [luxCustomTagId]=\"luxTab.luxTagIdContent\"\n    class=\"lux-mt-3 lux-tab-content\"\n    [ngClass]=\"{ 'lux-pl-4': luxShowBorder, 'lux-pr-4': luxShowBorder }\"\n  >\n    <ng-container *ngTemplateOutlet=\"luxTab.contentTemplate\"></ng-container>\n    <span>&nbsp;</span>\n  </section>\n  } }\n</div>\n<ng-template #tabLabelTemplate let-luxTab>\n  <div luxTagIdHandler [luxTagId]=\"luxTab.luxTagIdHeader\" [luxCustomTagId]=\"luxTab.luxTagIdHeader\" class=\"lux-mt-3 lux-mb-3\">\n    <div class=\"lux-flex lux-flex-grow-1 lux-flex-shrink-1 lux-flex-basis-auto gt-sm:lux-flex-col xs:lux-flex-row\">\n      <div class=\"lux-flex lux-place-content-center lux-items-center lux-flex-grow-0 lux-flex-shrink-0\">\n        @if (luxTab.luxImageSrc && !luxTab.luxIconName) {\n        <div class=\"lux-tab-header-image-container lux-flex lux-flex-grow-1 lux-flex-shrink-1 lux-flex-basis-full\">\n          @if (luxTab.luxImageAlign === 'right' || luxTab.luxImageAlign === 'center') {\n          <div class=\"lux-tab-header-image-left\"></div>\n          }\n          <lux-image\n            class=\"lux-tab-header-image lux-flex-grow-0 lux-flex-shrink-0\"\n            [luxBadgeNotification]=\"smallDevice || (!smallDevice && !luxTab.luxTitle) ? luxTab.luxCounter : ''\"\n            [luxBadgeNoBorder]=\"true\"\n            luxBadgeColor=\"primary\"\n            [luxBadgeDisabled]=\"luxTab.luxDisabled\"\n            [luxBadgeCap]=\"luxTab.luxCounterCap\"\n            [luxBadgeOverlap]=\"false\"\n            [luxImageSrc]=\"luxTab.luxImageSrc\"\n            [luxImageWidth]=\"luxTab.luxImageWidth\"\n            [luxImageHeight]=\"luxTab.luxImageHeight\"\n          >\n          </lux-image>\n          @if (luxTab.luxImageAlign === 'left' || luxTab.luxImageAlign === 'center') {\n          <div class=\"lux-tab-header-image-right\"></div>\n          }\n        </div>\n        } @if (luxTab.luxIconName) {\n        <lux-icon\n          class=\"lux-tab-icon\"\n          [luxIconName]=\"luxTab.luxIconName\"\n          [luxIconSize]=\"luxIconSize\"\n          [luxBadgeNotification]=\"smallDevice || (!smallDevice && !luxTab.luxTitle) ? luxTab.luxCounter : ''\"\n          [luxBadgeNoBorder]=\"true\"\n          luxBadgeColor=\"primary\"\n          [luxBadgeDisabled]=\"luxTab.luxDisabled\"\n          [luxBadgeCap]=\"luxTab.luxCounterCap\"\n          [luxBadgeOverlap]=\"false\"\n        ></lux-icon>\n        } @if (smallDevice || (!smallDevice && !luxTab.luxTitle)) {\n        <span\n          [ngClass]=\"[\n            'lux-tabs-notification-icon',\n            'lux-tabs-notification-icon-position-after-icon',\n            getNotificationIconColorClassForTab(luxTab),\n            luxTab.luxCounter !== null && luxTab.luxCounter !== undefined ? 'lux-counter-visible' : ''\n          ]\"\n        ></span>\n        }\n      </div>\n      <div class=\"lux-flex lux-tab-title-container\" [ngClass]=\"{ 'lux-label-lower': !smallDevice }\">\n        @if (luxTab.luxIconName || luxTab.luxImageSrc) {\n        <div\n          class=\"lux-tab-title\"\n          [ngClass]=\"{ 'lux-uppercase': labelUppercase, 'lux-display-none': smallDevice }\"\n          [luxBadgeNotification]=\"!smallDevice && luxTab.luxTitle ? luxTab.luxCounter : ''\"\n          [luxBadgeNoBorder]=\"true\"\n          luxBadgeColor=\"primary\"\n          [luxBadgeDisabled]=\"luxTab.luxDisabled\"\n          [luxBadgeCap]=\"luxTab.luxCounterCap\"\n          [luxBadgeOverlap]=\"false\"\n        >\n          {{ luxTab.luxTitle }}\n          @if (luxTab.luxShowNotification && !smallDevice && luxTab.luxTitle) {\n          <span\n            [ngClass]=\"[\n              'lux-tabs-notification-icon',\n              'lux-tabs-notification-icon-position-after-label',\n              getNotificationIconColorClassForTab(luxTab),\n              luxTab.luxCounter !== null && luxTab.luxCounter !== undefined ? 'lux-counter-visible' : ''\n            ]\"\n          ></span>\n          }\n        </div>\n        } @if (!luxTab.luxIconName && !luxTab.luxImageSrc) {\n        <div\n          class=\"lux-tab-title\"\n          [ngClass]=\"{ 'lux-uppercase': labelUppercase }\"\n          [luxBadgeNotification]=\"!luxTab.luxIconName ? luxTab.luxCounter : ''\"\n          [luxBadgeNoBorder]=\"true\"\n          luxBadgeColor=\"primary\"\n          [luxBadgeDisabled]=\"luxTab.luxDisabled\"\n          [luxBadgeCap]=\"luxTab.luxCounterCap\"\n          [luxBadgeOverlap]=\"false\"\n        >\n          {{ luxTab.luxTitle }}\n          @if (luxTab.luxShowNotification && !smallDevice && luxTab.luxTitle) {\n          <span\n            [ngClass]=\"[\n              'lux-tabs-notification-icon',\n              'lux-tabs-notification-icon-position-after-label',\n              getNotificationIconColorClassForTab(luxTab),\n              luxTab.luxCounter !== null && luxTab.luxCounter !== undefined ? 'lux-counter-visible' : ''\n            ]\"\n          ></span>\n          }\n        </div>\n        }\n      </div>\n    </div>\n  </div>\n</ng-template>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-master-footer-ac',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxMasterFooterAcComponent {\n  constructor() {}\n}\n","import { Component, ElementRef, EventEmitter, HostBinding, Input, OnDestroy, Output, ViewChild, inject } from '@angular/core';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxButtonComponent } from '../../../lux-action/lux-button/lux-button.component';\nimport { LuxAriaExpandedDirective } from '../../../lux-directives/lux-aria/lux-aria-expanded.directive';\nimport { LuxAriaLabelDirective } from '../../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxMediaQueryObserverService } from '../../../lux-util/lux-media-query-observer.service';\n\n@Component({\n  selector: 'lux-master-header-ac',\n  templateUrl: './lux-master-header-ac.component.html',\n  imports: [LuxAriaLabelDirective, LuxAriaExpandedDirective, LuxButtonComponent]\n})\nexport class LuxMasterHeaderAcComponent implements OnDestroy {\n  private mediaObserver = inject(LuxMediaQueryObserverService);\n  private tService = inject(TranslocoService);\n\n  iconName?: string = 'lux-interface-arrows-button-left';\n  open?: boolean;\n  subscription: Subscription;\n\n  @Input() luxToggleHidden?: boolean;\n  @Output() luxOpened = new EventEmitter<boolean>();\n\n  @ViewChild('headerContentContainer', { read: ElementRef, static: true }) headerContentContainer!: ElementRef;\n\n  @HostBinding('class.lux-no-toggle') isMobile?: boolean;\n\n  constructor() {\n    this.isMobile = this.mediaObserver.isXS() || this.mediaObserver.isSM();\n    this.open = true;\n\n    this.subscription = this.mediaObserver.getMediaQueryChangedAsObservable().subscribe(() => {\n      setTimeout(() => {\n        this.isMobile = this.mediaObserver.isXS() || this.mediaObserver.isSM();\n      });\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.subscription.unsubscribe();\n  }\n\n  getAriaLabelForOpenCloseButton(iconName?: string): string {\n    if (iconName === 'lux-interface-arrows-button-left') {\n      return this.tService.translate('luxc.master-detail.header.close.btn');\n    } else {\n      return this.tService.translate('luxc.master-detail.header.open.btn');\n    }\n  }\n\n  clicked(that: LuxButtonComponent) {\n    if (this.iconName === 'lux-interface-arrows-button-left') {\n      this.iconName = 'lux-interface-arrows-button-right';\n      this.open = false;\n    } else {\n      this.iconName = 'lux-interface-arrows-button-left';\n      this.open = true;\n    }\n\n    this.luxOpened.emit(!!this.open);\n  }\n}\n","<div class=\"lux-master-header-container-ac\">\n  @if (!luxToggleHidden) {\n  <lux-button\n    [luxIconName]=\"iconName\"\n    [luxRounded]=\"true\"\n    luxTagId=\"master-detail.toggle\"\n    luxAriaLabel=\"{{ getAriaLabelForOpenCloseButton(iconName) }}\"\n    luxAriaLabelSelector=\"button\"\n    [luxAriaExpanded]=\"iconName === 'lux-interface-arrows-button-left'\"\n    luxAriaExpandedSelector=\"button\"\n    (luxClicked)=\"clicked(toggleButton)\"\n    class=\"master-ac-toggle\"\n    #toggleButton\n  ></lux-button>\n  }\n\n  <div class=\"lux-master-header-content-container-ac\" #headerContentContainer>\n    <ng-content></ng-content>\n  </div>\n</div>\n","import { Component, ContentChild, Input, TemplateRef } from '@angular/core';\n\n@Component({\n  selector: 'lux-master-list-ac',\n  template: ''\n})\nexport class LuxMasterListAcComponent {\n  @Input() luxTitleProp?: string;\n  @Input() luxTitleTooltipProp?: string;\n  @Input() luxSubTitleProp?: string;\n  @Input() luxSubTitleTooltipProp?: string;\n\n  @ContentChild('luxSimpleContent') contentTempRef?: TemplateRef<any>;\n  @ContentChild('luxSimpleIcon') iconTempRef?: TemplateRef<any>;\n  @ContentChild('luxSimpleCustomHeader') customHeaderTempRef?: TemplateRef<any>;\n\n  constructor() {}\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterContentInit,\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ComponentFactoryResolver,\n  ContentChild,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  ViewChild,\n  ViewChildren,\n  ViewContainerRef,\n  inject\n} from '@angular/core';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { BehaviorSubject, ReplaySubject, Subscription, tap } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { LuxButtonComponent } from '../../lux-action/lux-button/lux-button.component';\nimport { LuxInfiniteScrollDirective } from '../../lux-directives/lux-infinite-scroll/lux-infinite-scroll.directive';\nimport { LuxCustomTagIdDirective } from '../../lux-directives/lux-tag-id/lux-custom-tag-id.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxPropertyFromObjectPipe } from '../../lux-pipes/lux-property-from-object/lux-property-from-object.pipe';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxCardContentComponent } from '../lux-card/lux-card-subcomponents/lux-card-content.component';\nimport { LuxCardCustomHeaderComponent } from \"../lux-card/lux-card-subcomponents/lux-card-custom-header.component\";\nimport { LuxCardComponent } from '../lux-card/lux-card.component';\nimport { LuxListItemContentComponent } from '../lux-list/lux-list-subcomponents/lux-list-item-content.component';\nimport { LuxListItemCustomHeaderComponent } from \"../lux-list/lux-list-subcomponents/lux-list-item-custom-header.component\";\nimport { LuxListItemIconComponent } from '../lux-list/lux-list-subcomponents/lux-list-item-icon.component';\nimport { LuxListItemComponent } from '../lux-list/lux-list-subcomponents/lux-list-item.component';\nimport { LuxListComponent } from '../lux-list/lux-list.component';\nimport { LuxTabsComponent } from '../lux-tabs/lux-tabs.component';\nimport { LuxDetailHeaderAcComponent } from './lux-detail-header-ac/lux-detail-header-ac.component';\nimport { LuxDetailViewAcComponent } from './lux-detail-view-ac/lux-detail-view-ac.component';\nimport { LuxDetailWrapperAcComponent } from './lux-detail-view-ac/lux-detail-wrapper-ac.component';\nimport { LuxMasterFooterAcComponent } from './lux-master-footer-ac/lux-master-footer-ac.component';\nimport { LuxMasterHeaderAcComponent } from './lux-master-header-ac/lux-master-header-ac.component';\nimport { LuxMasterListAcComponent } from './lux-master-list-ac/lux-master-list-ac.component';\n\n@Component({\n  selector: 'lux-master-detail-ac',\n  templateUrl: './lux-master-detail-ac.component.html',\n  styleUrls: ['./lux-master-detail-ac.component.scss'],\n  animations: [\n    trigger('masterIsLoadingChanged', [\n      state('true', style({ opacity: 1 })),\n      state('false', style({ opacity: 0 })),\n      transition('1 => 0', animate('0.5s')),\n      transition('0 => 1', animate('1s'))\n    ])\n  ],\n  imports: [\n    NgClass,\n    LuxTagIdDirective,\n    LuxCustomTagIdDirective,\n    LuxMasterHeaderAcComponent,\n    LuxListComponent,\n    LuxInfiniteScrollDirective,\n    LuxListItemComponent,\n    LuxListItemIconComponent,\n    NgTemplateOutlet,\n    LuxListItemContentComponent,\n    MatProgressSpinner,\n    LuxCardComponent,\n    LuxCardContentComponent,\n    LuxButtonComponent,\n    LuxIconComponent,\n    LuxPropertyFromObjectPipe,\n    TranslocoPipe,\n    LuxCardCustomHeaderComponent,\n    LuxListItemCustomHeaderComponent\n]\n})\nexport class LuxMasterDetailAcComponent<T = any> implements OnInit, AfterContentInit, AfterViewInit, DoCheck, OnDestroy {\n  private cdr = inject(ChangeDetectorRef);\n  private cfr = inject(ComponentFactoryResolver);\n  private liveAnnouncer = inject(LiveAnnouncer);\n  private mediaObserver = inject(LuxMediaQueryObserverService);\n\n  @Output() luxSelectedDetailChange = new EventEmitter<T | null>();\n  @Output() luxScrolled = new EventEmitter<void>();\n\n  @ContentChild(LuxMasterListAcComponent) masterSimple?: LuxMasterListAcComponent;\n  @ContentChild(LuxDetailViewAcComponent) detailView!: LuxDetailViewAcComponent;\n  @ContentChild(LuxMasterFooterAcComponent, { read: ElementRef }) masterFooter?: ElementRef;\n  @ContentChild(LuxDetailHeaderAcComponent, { read: ElementRef }) detailHeader?: ElementRef;\n\n  @ViewChildren(LuxListComponent, { read: ElementRef, emitDistinctChangesOnly: false }) luxMasterQueryList!: QueryList<ElementRef>;\n  @ViewChildren(LuxListItemComponent) luxMasterListItemQueryList!: QueryList<LuxListItemComponent>;\n  @ViewChild(LuxMasterHeaderAcComponent, { read: ElementRef, static: true }) masterHeader?: ElementRef;\n  @ViewChild(LuxMasterHeaderAcComponent, { static: true }) masterHeaderComponent?: LuxMasterHeaderAcComponent;\n  @ViewChild(LuxListItemComponent, { read: ElementRef }) luxMasterEntryElementRef?: ElementRef;\n  @ContentChild(LuxTabsComponent) tabsComponent?: LuxTabsComponent;\n  @ViewChild('masterSpinnerCard', { read: ElementRef, static: true }) masterSpinnerCard?: ElementRef;\n  @ViewChild('detailContainer', { read: ElementRef }) detailFrame?: ElementRef;\n  @ViewChild('detailEmpty', { read: ElementRef, static: true }) detailEmpty?: ElementRef;\n  @ViewChild('detailViewContainerRef', { read: ViewContainerRef, static: true }) detailViewContainerRef!: ViewContainerRef;\n  @ViewChild('masterContainer', { read: ElementRef, static: true }) masterContainer?: ElementRef;\n\n  private _luxOpen = true;\n  private _luxMasterList = new BehaviorSubject<any[]>([]);\n  private _luxSelectedDetail: T | null = null;\n\n  private masterListLength = 0;\n  private maxItemsVisible?: number;\n  private updateDetail$ = new ReplaySubject<any>(1);\n  private subscriptions: Subscription[] = [];\n\n  isMobile: boolean;\n  isMedium: boolean;\n  detailContext = { $implicit: {} };\n  showMasterHeader?: boolean;\n  // Enthält die Position des aktuell selektierten Elements\n  selectedPosition = -1;\n\n  // Flag, das bestimmt, ob die Empty-Anzeigen der Masterliste anhand der Detail-Ansicht ausgerichtet werden\n  alignEmptyIndicators = true;\n\n  @Input() luxEmptyIconMaster = 'lux-interface-alert-information-circle';\n  @Input() luxEmptyLabelMaster = '';\n  @Input() luxEmptyIconDetail = 'lux-interface-alert-information-circle';\n  @Input() luxEmptyLabelDetail = '';\n  @Input() luxEmptyIconMasterSize = '5x';\n  @Input() luxEmptyIconDetailSize = '5x';\n  @Input() luxMasterSpinnerDelay = 1000;\n  @Input() luxTagIdMaster?: string;\n  @Input() luxTagIdDetail?: string;\n  @Input() luxTitleLineBreak = false;\n  @Input() luxMasterListLabel = '';\n  @Input() luxMasterIsLoading = false;\n  @Input() luxCompareWith = (o1: T, o2: T) => o1 === o2;\n  @Input() luxDefaultDetailHeader = true;\n\n  get luxOpen() {\n    return this._luxOpen;\n  }\n\n  @Input()\n  set luxOpen(open) {\n    this._luxOpen = open;\n  }\n\n  /* Selected Detail Get/Set */\n  get luxSelectedDetail() {\n    return this._luxSelectedDetail;\n  }\n\n  @Input()\n  set luxSelectedDetail(value) {\n    this.updateDetail$.next(value);\n  }\n\n  /* Master List Get/Set */\n  get luxMasterList() {\n    return this._luxMasterList.getValue();\n  }\n\n  @Input()\n  set luxMasterList(value: any[]) {\n    if (this.masterListLength && value && this.masterListLength < value.length) {\n      this.announcePossibleInfiniteScrolling();\n    }\n    this._luxMasterList.next(value ? value : []);\n    this.masterListLength = value ? value.length : 0;\n  }\n\n  constructor() {\n    this.isMobile = this.mediaObserver.isXS() || this.mediaObserver.isSM();\n    this.isMedium = this.mediaObserver.isMD();\n    this.subscriptions.push(\n      this.mediaObserver.getMediaQueryChangedAsObservable().subscribe(() => {\n        this.isMobile = this.mediaObserver.isXS() || this.mediaObserver.isSM();\n        this.isMedium = this.mediaObserver.isMD();\n      })\n    );\n  }\n\n  ngOnInit() {\n    this.handleMasterListUpdate();\n  }\n\n  ngAfterContentInit() {\n    LuxUtil.assertNonNull('detailView', this.detailView);\n  }\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('detailViewContainerRef', this.detailViewContainerRef);\n    this.showMasterHeader = this.masterHeaderComponent?.headerContentContainer.nativeElement.children.length > 0;\n    this.handleDetailUpdate();\n    this.handleMasterQueryList();\n    this.cdr.detectChanges();\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((sub) => sub.unsubscribe());\n  }\n\n  ngDoCheck() {\n    // Wurde ein Element in die Masterliste gepusht oder entfernt?\n    if (this.luxMasterList && this.luxMasterList.length !== this.masterListLength) {\n      if (this.luxMasterList.length > this.masterListLength) {\n        this.announcePossibleInfiniteScrolling();\n      }\n\n      // Wenn ja, dass selektierte Detail neu rendern\n      this.masterListLength = this.luxMasterList.length;\n      this.luxSelectedDetail = this.luxMasterList[this.selectedPosition];\n\n      this.announcePossibleInfiniteScrolling();\n    }\n\n    // Ausrichtung der Empty-Indikatoren der Masterliste prüfen\n    if (!this.isMobile && (!this.luxMasterList || this.luxMasterList.length === 0)) {\n      this.checkEmptyIndicatorAlignment();\n    }\n  }\n\n  /**\n   * Wenn in der LuxList ein neuer Selected-Wert gepusht wird, diesen abfangen und\n   * ein neues Detail auswählen.\n   * @param index\n   */\n  onSelectedChange(index: number) {\n    if (index > -1) {\n      this.selectedPosition = index;\n\n      this.updateDetail$.next(this.luxMasterList[index]);\n\n      if (this.isMobile) {\n        this.onCloseMaster();\n      }\n    }\n  }\n\n  onOpenMaster() {\n    this.luxOpen = true;\n  }\n\n  onCloseMaster() {\n    this.luxOpen = false;\n  }\n\n  /**\n   * Bestimmt, ob die Masterliste auf- oder eingeklappt ist.\n   * @param open\n   */\n  toggleList(open: boolean) {\n    if (open) {\n      this.onOpenMaster();\n    } else {\n      this.onCloseMaster();\n    }\n\n    if (this.tabsComponent) {\n      this.tabsComponent.rerenderTabs();\n    }\n  }\n\n  /**\n   * Prüft, ob die Detailansicht gerade für den User sichtbar ist.\n   * @returns boolean\n   */\n  isDetailInvisible(): boolean {\n    return this.isMobile && this.luxOpen;\n  }\n\n  onInfiniteScrollingLoad() {\n    this.luxScrolled.emit();\n  }\n\n  onSwipeLeft() {\n    if (this.isMobile) {\n      this.onCloseMaster();\n    }\n  }\n\n  onSwipeRight() {\n    if (this.isMobile) {\n      this.onOpenMaster();\n    }\n  }\n\n  /**\n   * Kapselung von der übergebenen luxCompareWith-Funktion.\n   * Fängt undefinierte Objekte ab und returned stattdessen false.\n   * @param o1\n   * @param o2\n   */\n  compareObjects(o1: T | null, o2: T | null): boolean {\n    if (o1 === o2) {\n      return true;\n    }\n    if (!o1 || !o2) {\n      return false;\n    }\n    return this.luxCompareWith(o1, o2);\n  }\n\n  /**\n   * Kümmert sich um Änderungen an der HTML-Node der Master-Liste.\n   * Rückt dabei das selektierte Element in den Fokus und berechnet wie viele Elemente\n   * gerade in der Liste sichtbar sein können (für das Durchschalten mit Pfeiltasten benötigt).\n   */\n  private handleMasterQueryList() {\n    this.subscriptions.push(\n      this.luxMasterQueryList.changes.subscribe((masterListElements: QueryList<ElementRef>) => {\n        if (masterListElements.first) {\n          const { nativeElement } = masterListElements.first;\n          this.maxItemsVisible = Math.floor(nativeElement.offsetHeight / nativeElement.offsetHeight);\n        }\n        // Der Abschnitt hier fängt den Fall ab, dass z.B. das LuxMasterList-Array selbst angepasst wird (z.B. durch Array.reverse).\n        // Das sorgt dafür, dass das visuell selektierte Element auch das passende zur Detail-View ist.\n        const newSelectedPosition: number = this.luxMasterList.indexOf(this.luxSelectedDetail);\n        if (newSelectedPosition !== this.selectedPosition) {\n          setTimeout(() => {\n            this.selectedPosition = newSelectedPosition;\n          });\n        }\n      })\n    );\n  }\n\n  /**\n   * Kümmert sich um Änderungen an dem selektierten Detail.\n   * Dabei werden mehrere Zuweisungen an das Detail über throttleTime gebündelt und nur das Aktuellste genommen.\n   * Anschließend wird die Komponente angewiesen das neue Detail-Objekt zu rendern.\n   */\n  private handleDetailUpdate() {\n    this.subscriptions.push(\n      this.updateDetail$.asObservable().subscribe((detail: any) => {\n        if (!detail) {\n          this.detailViewContainerRef.clear();\n          this.setNewDetail(detail);\n        } else {\n          if (!this.compareObjects(this.luxSelectedDetail, detail)) {\n            this.detailViewContainerRef.clear();\n\n            if (detail) {\n              this.detailContext = { $implicit: detail };\n\n              // Den Detail-Wrapper erzeugen und abfangen, wann die Nodes geladen worden sind\n              const child = this.cfr.resolveComponentFactory(LuxDetailWrapperAcComponent);\n              const childRef = this.detailViewContainerRef.createComponent(child);\n              const instance = childRef.instance;\n              instance.luxDetailContext = this.detailContext;\n              instance.luxDetailTemplate = this.detailView.tempRef;\n              this.subscriptions.push(\n                instance.luxDetailRendered.subscribe(() => {\n                  this.setNewDetail(detail);\n                })\n              );\n              // Die Detailansicht nach dem Wechsel wieder nach oben scrollen lassen\n              this.detailViewContainerRef.element.nativeElement.parentNode.scrollTop = 0;\n\n              this.cdr.detectChanges();\n            }\n          }\n        }\n      })\n    );\n  }\n\n  /**\n   * Wird aufgerufen, nachdem ein neues Detail-Template gerendert wurde und aktualisiert\n   * luxSelectedDetail dementsprechend.\n   * @param detail\n   */\n  private setNewDetail(detail: any) {\n    if (!this.compareObjects(this.luxSelectedDetail, detail)) {\n      this._luxSelectedDetail = detail;\n      this.selectedPosition = this.luxMasterList.indexOf(detail);\n      this.luxSelectedDetailChange.emit(this.luxSelectedDetail);\n      // Die Master-Liste fokussieren (die Liste gibt es nur einmal, weil wir auf Changes hören, ist sie aber in einer QueryList)\n      this.luxMasterQueryList.first.nativeElement.focus();\n\n      if (this.isMobile && this.luxMasterList.length !== 0) {\n        this.luxOpen = false;\n      }\n      this.cdr.detectChanges();\n    }\n  }\n\n  /**\n   * Kümmert sich um den Fall, dass die Master-Liste selbst sich ändert.\n   */\n  private handleMasterListUpdate() {\n    this.subscriptions.push(\n      this._luxMasterList\n        .asObservable()\n        .pipe(\n          // Workaround um ExpressionChanged-Fehler zu vermeiden\n          delay(0),\n          tap(() => {\n            if (!this.luxMasterList || this.luxMasterList.length === 0) {\n              this.luxSelectedDetail = null;\n            }\n          })\n        )\n        .subscribe()\n    );\n  }\n\n  /**\n   * Prüft, ob das Header- oder -Footer-Element der Masterliste ca. 50 % der Master-Höhe einnehmen.\n   *\n   * Wenn ja, wird die Ausrichtung des Master-Empty-Labels und Master-Empty-Icons nicht mehr anhand des Details bestimmt.\n   */\n  private checkEmptyIndicatorAlignment() {\n    const headerHeight = this.masterHeader ? this.masterHeader.nativeElement.offsetHeight : 0;\n    const footerHeight = this.masterFooter ? this.masterFooter.nativeElement.offsetHeight : 0;\n\n    if (this.masterContainer) {\n      // Max-Height ist die Hälfte der Master-Container Höhe minus eine kleine Pauschale von 100px damit\n      // die Ansicht nicht zu knapp ist\n      const maxHeight = this.masterContainer.nativeElement.offsetHeight / 2 - 100;\n      this.alignEmptyIndicators = !(headerHeight > maxHeight || footerHeight > maxHeight);\n    }\n  }\n\n  /**\n   * Meldet über den LiveAnnouncer, dass evtl. weitere Daten via InfiniteScrolling nachgeladen werden könnten.\n   *\n   * \"assertive\", damit die Meldung auf jeden Fall vom ScreenReader vorgelesen wird und nicht von etwaigen anderen\n   * Aussagen verdeckt wird.\n   */\n  private announcePossibleInfiniteScrolling() {\n    this.liveAnnouncer.announce(\n      'Die Masterliste hat weitere Einträge erhalten. ' +\n        'Aufgrund des Infinite-Scrollings könnten vielleicht noch mehr Einträge nachgeladen werden.',\n      'assertive'\n    );\n  }\n}\n","<div\n  class=\"lux-master-detail-ac\"\n  [ngClass]=\"{ 'lux-master-detail-ac-mobile': isMobile }\"\n  (swipeleft)=\"onSwipeLeft()\"\n  (swiperight)=\"onSwipeRight()\"\n>\n  <div\n    class=\"lux-master-ac-container\"\n    luxTagIdHandler\n    [luxTagId]=\"luxTagIdMaster\"\n    [luxCustomTagId]=\"luxTagIdMaster\"\n    [ngClass]=\"{\n      'lux-master-ac-container-mobile': isMobile,\n      'lux-master-ac-container-medium': isMedium,\n      'lux-empty-elements-aligned': alignEmptyIndicators,\n      'lux-master-closed': !luxOpen && !isMobile,\n      'lux-display-none': !luxOpen && isMobile\n    }\"\n    #masterContainer\n  >\n    <!-- Header Element über der Master-Liste -->\n    <!-- Wird keine Header übergeben, wird eine leere Card erzeugt, andem der Button hängt -->\n    <lux-master-header-ac\n      (luxOpened)=\"toggleList($event)\"\n      [luxToggleHidden]=\"(isMobile && !this.luxSelectedDetail && !luxOpen) || isMobile\"\n      [ngClass]=\"{\n        'lux-empty-master-header': !showMasterHeader && !isMobile && luxOpen\n      }\"\n    >\n      @if (luxOpen) {\n        <ng-content select=\"lux-master-header-content-ac\"></ng-content>\n      }\n    </lux-master-header-ac>\n\n    <!-- Master Simple Component gesetzt? -> Standard Lux Liste als Master nutzen  (window:keydown)=\"handleMasterKeyInput($event)\" -->\n    <div [ngClass]=\"{ 'lux-display-none': !luxOpen && !isMobile }\" class=\"lux-master-view-ac\">\n      <lux-list\n        class=\"lux-overflow-wrap-break-word\"\n        luxInfiniteScroll\n        luxLabel=\"{{ luxMasterListLabel || ('luxc.list.arialabel' | transloco) }}\"\n        [luxScrollPercent]=\"85\"\n        [luxImmediateCallback]=\"true\"\n        [luxIsLoading]=\"luxMasterIsLoading\"\n        [luxEmptyIconSize]=\"luxEmptyIconMasterSize\"\n        luxEmptyLabel=\"{{ luxEmptyLabelMaster || ('luxc.master-detail.master.empty_label' | transloco) }}\"\n        [luxEmptyIconName]=\"luxEmptyIconMaster\"\n        [luxSelectedPosition]=\"selectedPosition\"\n        (luxSelectedPositionChange)=\"onSelectedChange($event)\"\n        (luxScrolled)=\"onInfiniteScrollingLoad()\"\n      >\n        @for (masterElement of luxMasterList; track masterElement) {\n          <lux-list-item\n            [luxTitleLineBreak]=\"luxTitleLineBreak\"\n            luxTitle=\"{{ masterElement | luxPropertyFromObject: masterSimple?.luxTitleProp ?? '' }}\"\n            luxTitleTooltip=\"{{ masterElement | luxPropertyFromObject: masterSimple?.luxTitleTooltipProp ?? '' }}\"\n            luxSubTitle=\"{{ masterElement | luxPropertyFromObject: masterSimple?.luxSubTitleProp ?? '' }}\"\n            luxSubTitleTooltip=\"{{ masterElement | luxPropertyFromObject: masterSimple?.luxSubTitleTooltipProp ?? '' }}\"\n          >\n            @if (masterSimple?.customHeaderTempRef) {\n              <lux-list-item-custom-header>\n                <ng-container\n                  *ngTemplateOutlet=\"masterSimple?.customHeaderTempRef ?? null; context: { $implicit: masterElement }\"\n                ></ng-container>\n              </lux-list-item-custom-header>\n            }\n            <lux-list-item-icon>\n              <ng-container *ngTemplateOutlet=\"masterSimple?.iconTempRef ?? null; context: { $implicit: masterElement }\"></ng-container>\n            </lux-list-item-icon>\n            <lux-list-item-content>\n              <ng-container *ngTemplateOutlet=\"masterSimple?.contentTempRef ?? null; context: { $implicit: masterElement }\"></ng-container>\n            </lux-list-item-content>\n          </lux-list-item>\n        }\n\n        <div\n          #masterSpinnerCard\n          [@masterIsLoadingChanged]=\"luxMasterIsLoading\"\n          class=\"lux-master-progress-container\"\n          [ngClass]=\"{ 'lux-spinner-hidden': !luxMasterIsLoading }\"\n        >\n          @if (luxMasterIsLoading) {\n            <br />\n          }\n          <mat-progress-spinner class=\"lux-m-3\" color=\"primary\" mode=\"indeterminate\" diameter=\"48\"> </mat-progress-spinner>\n          @if (luxMasterIsLoading) {\n            <br />\n          }\n        </div>\n      </lux-list>\n    </div>\n\n    <!-- Footer Element unter der Master-Liste -->\n    @if (luxOpen) {\n      <ng-content select=\"lux-master-footer-ac\"></ng-content>\n    }\n  </div>\n  <!-- Detail - Container -->\n  <div\n    luxTagIdHandler\n    class=\"lux-detail-ac-container lux-overflow-y-auto\"\n    [ngClass]=\"{\n      'lux-display-none': isDetailInvisible(),\n      'lux-detail-ac-container-mobile': isMobile,\n      'lux-detail-ac-container-medium': isMedium,\n      'lux-empty-detail': selectedPosition < 0\n    }\"\n    [luxTagId]=\"luxTagIdDetail\"\n    [luxCustomTagId]=\"luxTagIdDetail\"\n  >\n    <!-- Button für die Mobile Ansicht -->\n    @if (!luxOpen && isMobile) {\n      <div class=\"back-to-master-button-container lux-mb-3\">\n        <lux-button\n          [luxRounded]=\"true\"\n          class=\"back-to-master-button\"\n          luxIconName=\"lux-interface-arrows-button-left\"\n          luxTagId=\"back-to-master-btn\"\n          (luxClicked)=\"onOpenMaster()\"\n        ></lux-button>\n        <span class=\"back-to-master-label\">{{ 'luxc.master-detail.back-to-master-label' | transloco }}</span>\n      </div>\n    }\n    <!-- Detail-Header -->\n    <div class=\"detail-header-container\" [ngClass]=\"{ 'lux-display-none': selectedPosition < 0 }\">\n      @if (!detailHeader && luxDefaultDetailHeader) {\n        <lux-card\n          luxTitle=\"{{ luxMasterList[selectedPosition] | luxPropertyFromObject: masterSimple?.luxTitleProp ?? '' }}\"\n          luxTitleTooltip=\"{{ luxMasterList[selectedPosition] | luxPropertyFromObject: masterSimple?.luxTitleTooltipProp ?? '' }}\"\n          luxSubTitle=\"{{ luxMasterList[selectedPosition] | luxPropertyFromObject: masterSimple?.luxSubTitleProp ?? '' }}\"\n          luxSubTitleTooltip=\"{{ luxMasterList[selectedPosition] | luxPropertyFromObject: masterSimple?.luxSubTitleTooltipProp ?? '' }}\"\n          [luxTitleLineBreak]=\"luxTitleLineBreak\"\n          class=\"lux-detail-header-ac lux-mb-4\"\n          luxTagId=\"defaultDetailHeader\"\n        >\n          @if (luxMasterList[selectedPosition] && masterSimple?.customHeaderTempRef) {\n            <lux-card-custom-header>\n              <ng-container\n                *ngTemplateOutlet=\"masterSimple?.customHeaderTempRef ?? null; context: { $implicit: luxMasterList[selectedPosition] }\"\n              ></ng-container>\n            </lux-card-custom-header>\n          }\n          @if (luxMasterList[selectedPosition]) {\n            <lux-card-content>\n              <ng-container\n                *ngTemplateOutlet=\"masterSimple?.contentTempRef ?? null; context: { $implicit: luxMasterList[selectedPosition] }\"\n              ></ng-container>\n            </lux-card-content>\n          }\n        </lux-card>\n      }\n      @if (detailHeader) {\n        <ng-content select=\"lux-detail-header-ac\"></ng-content>\n      }\n    </div>\n    <div class=\"lux-detail-view-container\" [ngClass]=\"{ 'lux-display-none': selectedPosition < 0 }\">\n      <ng-template #detailViewContainerRef></ng-template>\n    </div>\n    <!-- Das Empty-Icon und Empty-Label, wenn kein Detail gegeben ist -->\n    <div\n      class=\"lux-detail-empty-container lux-mt-4\"\n      [ngClass]=\"{ 'lux-display-none': (isMobile && luxOpen) || selectedPosition > -1 }\"\n      #detailEmpty\n    >\n      <lux-icon\n        class=\"lux-detail-empty-icon\"\n        luxMargin=\"0 0 8px 0\"\n        [luxIconName]=\"luxEmptyIconDetail\"\n        [luxIconSize]=\"luxEmptyIconDetailSize\"\n      >\n      </lux-icon>\n      <span class=\"lux-detail-empty-icon-text\">\n        {{ luxEmptyLabelDetail || ('luxc.master-detail.detail.empty_label' | transloco) }}\n      </span>\n    </div>\n  </div>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-master-header-content-ac',\n  template: `<ng-content></ng-content>`\n})\nexport class LuxMasterHeaderContentAcComponent {\n  constructor() {}\n}\n","import { AfterViewInit, Component, ElementRef, input, viewChild } from '@angular/core';\nimport { MatExpansionPanelDescription } from '@angular/material/expansion';\nimport { MatTooltip } from '@angular/material/tooltip';\n\n@Component({\n  selector: 'lux-panel-header-description',\n  template: `<mat-panel-description\n    [class.lux-crop]=\"luxTruncated()\"\n    [class.lux-hyphenate]=\"!luxTruncated()\"\n    [style.display]=\"luxTruncated() ? 'block' : null\"\n    matTooltip=\"{{ luxTruncatedTooltip() }}\"\n    [matTooltipShowDelay]=\"500\"\n    [matTooltipDisabled]=\"!luxTruncated()\"\n    ><ng-content></ng-content\n  ></mat-panel-description>`,\n  imports: [MatExpansionPanelDescription, MatTooltip]\n})\nexport class LuxPanelHeaderDescriptionComponent implements AfterViewInit {\n  luxTruncated = input<boolean>(false);\n  luxTruncatedTooltip = input<string>('');\n\n  matPanelDescription = viewChild(MatExpansionPanelDescription, { read: ElementRef });\n\n  constructor() {}\n\n  ngAfterViewInit(): void {\n    if (this.luxTruncated() && !this.luxTruncatedTooltip()) {\n      console.warn(\n        `Für das Panel mit der ID \"${\n          this.matPanelDescription()?.nativeElement.textContent\n        }\" wurde die Property \"luxTruncated\" aktiviert, aber \"luxTruncatedTooltip\" nicht gesetzt!`\n      );\n    }\n  }\n}\n","import { LuxThemePalette } from '../../../lux-util/lux-colors.enum';\n\nexport const LUX_STEPPER_LARGE_DEFAULT_PREV_BTN_CONF: LuxStepperLargeButtonInfo = {\n  label: '',\n  color: undefined,\n  iconName: 'lux-interface-arrows-left',\n  iconShowRight: false\n};\n\nexport const LUX_STEPPER_LARGE_DEFAULT_NEXT_BTN_CONF: LuxStepperLargeButtonInfo = {\n  label: '',\n  color: 'primary',\n  iconName: 'lux-interface-arrows-right',\n  iconShowRight: true\n};\n\nexport const LUX_STEPPER_LARGE_DEFAULT_FIN_BTN_CONF: LuxStepperLargeButtonInfo = {\n  label: '',\n  color: 'primary',\n  iconName: undefined,\n  iconShowRight: false\n};\n\nexport class LuxStepperLargeButtonInfo {\n  label?: string;\n  color?: LuxThemePalette;\n  iconName?: string;\n  iconShowRight?: boolean;\n  alignIconWithLabel?: boolean;\n}\n","import { LuxStepperLargeComponent } from '../lux-stepper-large.component';\nimport { ILuxStepperLargeStep } from './lux-stepper-large-step.interface';\n\nexport type LuxStepperLargeClickEventSourceType = 'nav' | 'prev_button' | 'next_button' | 'fin_button';\n\nexport class LuxStepperLargeClickEvent {\n  stepper: LuxStepperLargeComponent;\n  newIndex: number;\n  newStep: ILuxStepperLargeStep;\n  source: LuxStepperLargeClickEventSourceType;\n\n  constructor(\n    stepper: LuxStepperLargeComponent,\n    newIndex: number,\n    newStep: ILuxStepperLargeStep,\n    source: LuxStepperLargeClickEventSourceType\n  ) {\n    this.stepper = stepper;\n    this.newIndex = newIndex;\n    this.newStep = newStep;\n    this.source = source;\n  }\n}\n","import { LuxStepperLargeComponent } from '../lux-stepper-large.component';\nimport { ILuxStepperLargeStep } from './lux-stepper-large-step.interface';\n\nexport class LuxStepperLargeSelectionEvent {\n  stepper: LuxStepperLargeComponent;\n  currentIndex: number;\n  currentStep: ILuxStepperLargeStep;\n  prevIndex: number;\n  prevStep: ILuxStepperLargeStep;\n\n  constructor(\n    stepper: LuxStepperLargeComponent,\n    currentIndex: number,\n    currentStep: ILuxStepperLargeStep,\n    prevIndex: number,\n    prevStep: ILuxStepperLargeStep\n  ) {\n    this.stepper = stepper;\n    this.currentIndex = currentIndex;\n    this.currentStep = currentStep;\n    this.prevIndex = prevIndex;\n    this.prevStep = prevStep;\n  }\n}\n","import { TemplateRef } from '@angular/core';\nimport { LuxStepperLargeClickEvent } from './lux-stepper-large-click-event';\n\nexport enum LuxVetoState {\n  navigationAccepted,\n  navigationRejected\n}\n\nexport interface ILuxStepperLargeStep {\n  luxTitle: string;\n  luxTouched: boolean;\n  luxCompleted: boolean;\n  luxDisabled: boolean;\n  luxVetoFn: (clickEvent: LuxStepperLargeClickEvent) => Promise<LuxVetoState>;\n  contentTemplate: TemplateRef<any>;\n}\n","import { LuxStepperLargeMobileOverlayData } from './lux-stepper-large-mobile-overlay-data';\n\nexport const LUX_STEPPER_LARGE_OVERLAY_DEFAULT_CONFIG: LuxStepperLargeMobileOverlayConfig = {\n  hasBackdrop: true,\n  backdropClass: 'lux-stepper-large-mobile-overlay-backdrop',\n  panelClass: 'lux-stepper-large-mobile-overlay-panel'\n};\n\nexport interface LuxStepperLargeMobileOverlayConfig {\n  panelClass?: string;\n  hasBackdrop?: boolean;\n  backdropClass?: string;\n  data?: LuxStepperLargeMobileOverlayData;\n}\n","import { InjectionToken } from '@angular/core';\nimport { LuxStepperLargeComponent } from '../../lux-stepper-large.component';\n\nexport const LUX_STEPPER_LARGE_OVERLAY_DATA = new InjectionToken<LuxStepperLargeMobileOverlayData>('LUX_STEPPER_LARGE_OVERLAY_DATA');\n\nexport interface LuxStepperLargeMobileOverlayData {\n  stepperComponent: LuxStepperLargeComponent;\n}\n","import { OverlayRef } from '@angular/cdk/overlay';\n\nexport class LuxStepperLargeMobileOverlayRef {\n  focusedElement: Element | null = null;\n\n  constructor(private overlayRef: OverlayRef) {\n    this.focusedElement = document.activeElement;\n  }\n\n  close(): void {\n    this.overlayRef.dispose();\n\n    if (this.focusedElement instanceof HTMLElement) {\n      this.focusedElement.focus();\n    }\n  }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, HostListener, OnInit, QueryList, ViewChildren, inject } from '@angular/core';\nimport { LuxButtonComponent } from '../../../../lux-action/lux-button/lux-button.component';\nimport { LuxUtil } from '../../../../lux-util/lux-util';\nimport { LuxStepperLargeComponent } from '../../lux-stepper-large.component';\nimport { LUX_STEPPER_LARGE_OVERLAY_DATA, LuxStepperLargeMobileOverlayData } from './lux-stepper-large-mobile-overlay-data';\nimport { LuxStepperLargeMobileOverlayRef } from './lux-stepper-large-mobile-overlay-ref';\n\n@Component({\n  selector: 'lux-stepper-large-mobile-overlay',\n  templateUrl: './lux-stepper-large-mobile-overlay.component.html',\n  styleUrls: ['./lux-stepper-large-mobile-overlay.component.scss'],\n  imports: [NgClass, NgTemplateOutlet, LuxButtonComponent]\n})\nexport class LuxStepperLargeMobileOverlayComponent implements OnInit, AfterViewInit {\n  overlayRef = inject<LuxStepperLargeMobileOverlayRef>(LuxStepperLargeMobileOverlayRef);\n  data = inject<LuxStepperLargeMobileOverlayData>(LUX_STEPPER_LARGE_OVERLAY_DATA);\n\n  @ViewChildren('links') links!: QueryList<ElementRef>;\n\n  stepperComponent!: LuxStepperLargeComponent;\n\n  @HostListener('document:keydown', ['$event'])\n  handleKeydown(keyboardEvent: KeyboardEvent) {\n    if (LuxUtil.isKeyEscape(keyboardEvent)) {\n      this.overlayRef.close();\n    }\n  }\n\n  ngOnInit(): void {\n    this.stepperComponent = this.data.stepperComponent;\n\n    LuxUtil.assertNonNull('stepperComponent', this.stepperComponent);\n  }\n\n  ngAfterViewInit() {\n    if (this.links && this.links.length > 0) {\n      const activeLink = this.links\n        .toArray()\n        .find(\n          (element) => element.nativeElement && element.nativeElement.classList && !!element.nativeElement.classList.contains('active-link')\n        );\n      if (activeLink && activeLink.nativeElement) {\n        activeLink.nativeElement.focus();\n      }\n    }\n  }\n\n  onNavLink(stepIndex: number) {\n    if (this.stepperComponent.luxCurrentStepNumber !== stepIndex) {\n      this.overlayRef.close();\n      this.stepperComponent.onNavLink(stepIndex);\n    }\n  }\n}\n","@if (stepperComponent && stepperComponent.steps && stepperComponent.steps.length > 0) {\n<div class=\"lux-stepper-large-mobile-nav-container\">\n  <div class=\"lux-stepper-large-mobile-nav-close-button-container\">\n    <lux-button class=\"lux-stepper-large-mobile-nav-close-button\" luxIconName=\"lux-close\" (luxClicked)=\"overlayRef.close()\"></lux-button>\n  </div>\n  <div class=\"lux-stepper-large-mobile-nav-header\">\n    <div>Schritt {{ stepperComponent.luxCurrentStepNumber + 1 }} von {{ stepperComponent.steps.length }}</div>\n  </div>\n  <div class=\"lux-stepper-large-nav-item-container lux-stepper-large-mobile-nav-item-container\">\n    @for (step of stepperComponent.steps; track step; let i = $index) {\n    <div\n      class=\"lux-stepper-large-nav-item lux-stepper-large-mobile-nav-item\"\n      [id]=\"'luxstepperlargenavitem' + (i + 1)\"\n      [ngClass]=\"{\n        'lux-touched': step.luxTouched,\n        'lux-active': i === stepperComponent.luxCurrentStepNumber,\n        'lux-disabled': step.luxDisabled,\n        'lux-completed': step.luxCompleted\n      }\"\n    >\n      <div class=\"lux-stepper-large-nav-item-number-container lux-stepper-large-mobile-nav-item-number-container\">\n        <div class=\"lux-stepper-large-nav-item-number lux-stepper-large-mobile-nav-item-number\">{{ i + 1 < 10 ? '0' : '' }}{{ i + 1 }}</div>\n      </div>\n      <div class=\"lux-stepper-large-nav-item-label-container lux-stepper-large-mobile-nav-item-label-container\">\n        <ng-container\n          *ngTemplateOutlet=\"step.luxTouched && !step.luxDisabled ? link : nolink; context: { step: step, i: i }\"\n        ></ng-container>\n      </div>\n    </div>\n    }\n  </div>\n</div>\n}\n\n<ng-template let-step=\"step\" let-i=\"i\" #link>\n  <a\n    class=\"lux-stepper-large-nav-item-label-link lux-stepper-large-mobile-nav-item-label-link\"\n    tabindex=\"0\"\n    [ngClass]=\"{ 'active-link': i === stepperComponent.luxCurrentStepNumber }\"\n    [attr.aria-label]=\"'Schritt' + (i + 1) + ' ' + step.luxTitle\"\n    (click)=\"onNavLink(i)\"\n    (keydown.enter)=\"onNavLink(i)\"\n    #links\n    >{{ step.luxTitle }}</a\n  >\n</ng-template>\n\n<ng-template let-step=\"step\" let-i=\"i\" #nolink>\n  <div class=\"lux-stepper-large-nav-item-label lux-stepper-large-mobile-nav-item-label\">{{ step.luxTitle }}</div>\n</ng-template>\n","import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ComponentRef, Injectable, Injector, inject } from '@angular/core';\nimport { LUX_STEPPER_LARGE_OVERLAY_DEFAULT_CONFIG, LuxStepperLargeMobileOverlayConfig } from './lux-stepper-large-mobile-overlay-config';\nimport { LUX_STEPPER_LARGE_OVERLAY_DATA } from './lux-stepper-large-mobile-overlay-data';\nimport { LuxStepperLargeMobileOverlayRef } from './lux-stepper-large-mobile-overlay-ref';\nimport { LuxStepperLargeMobileOverlayComponent } from './lux-stepper-large-mobile-overlay.component';\n\n@Injectable({ providedIn: 'root' })\nexport class LuxStepperLargeMobileOverlayService {\n  private injector = inject(Injector);\n  private overlay = inject(Overlay);\n\n  open(config: LuxStepperLargeMobileOverlayConfig): LuxStepperLargeMobileOverlayRef {\n    const previewConfig = { ...LUX_STEPPER_LARGE_OVERLAY_DEFAULT_CONFIG, ...config };\n    const overlayRef = this.createOverlay(previewConfig);\n    const previewRef = new LuxStepperLargeMobileOverlayRef(overlayRef);\n    this.attachDialogContainer(overlayRef, previewRef, previewConfig);\n\n    overlayRef.backdropClick().subscribe(() => previewRef.close());\n\n    return previewRef;\n  }\n\n  private attachDialogContainer(\n    overlayRef: OverlayRef,\n    dialogRef: LuxStepperLargeMobileOverlayRef,\n    config: LuxStepperLargeMobileOverlayConfig\n  ) {\n    const injector = this.createInjector(config, dialogRef);\n    const containerPortal = new ComponentPortal(LuxStepperLargeMobileOverlayComponent, null, injector);\n    const containerRef: ComponentRef<LuxStepperLargeMobileOverlayComponent> = overlayRef.attach(containerPortal);\n\n    return containerRef.instance;\n  }\n\n  private createOverlay(config: LuxStepperLargeMobileOverlayConfig) {\n    return this.overlay.create(this.getOverlayConfig(config));\n  }\n\n  private createInjector(config: LuxStepperLargeMobileOverlayConfig, dialogRef: LuxStepperLargeMobileOverlayRef): Injector {\n    return Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: LuxStepperLargeMobileOverlayRef, useValue: dialogRef },\n        { provide: LUX_STEPPER_LARGE_OVERLAY_DATA, useValue: config.data }\n      ]\n    });\n  }\n\n  private getOverlayConfig(config: LuxStepperLargeMobileOverlayConfig): OverlayConfig {\n    const positionStrategy = this.overlay.position().global().right();\n\n    return new OverlayConfig({\n      hasBackdrop: config.hasBackdrop,\n      backdropClass: config.backdropClass,\n      panelClass: config.panelClass,\n      scrollStrategy: this.overlay.scrollStrategies.block(),\n      positionStrategy\n    });\n  }\n}\n","import { AfterViewInit, Component, Input, TemplateRef, ViewChild } from '@angular/core';\nimport { LuxUtil } from '../../../../lux-util/lux-util';\nimport { LuxStepperLargeClickEvent } from '../../lux-stepper-large-model/lux-stepper-large-click-event';\nimport { ILuxStepperLargeStep, LuxVetoState } from '../../lux-stepper-large-model/lux-stepper-large-step.interface';\n\n@Component({\n  selector: 'lux-stepper-large-step',\n  template: `\n    <ng-template #content>\n      <ng-content></ng-content>\n    </ng-template>\n  `\n})\nexport class LuxStepperLargeStepComponent implements ILuxStepperLargeStep, AfterViewInit {\n  @ViewChild('content', { static: true }) contentTemplate!: TemplateRef<any>;\n\n  @Input() luxTitle = '';\n  @Input() luxTouched = false;\n  @Input() luxCompleted = false;\n  @Input() luxDisabled = false;\n  @Input() luxVetoFn: (clickEvent: LuxStepperLargeClickEvent) => Promise<LuxVetoState> = () =>\n    Promise.resolve(LuxVetoState.navigationAccepted);\n\n  constructor() {}\n\n  ngAfterViewInit() {\n    LuxUtil.assertNonNull('contentTemplate', this.contentTemplate);\n  }\n}\n","import { Component, OnInit, inject } from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';\nimport { Observable, Subject } from 'rxjs';\nimport { LuxIconComponent } from '../../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxSnackbarConfig } from '../lux-snackbar-config';\n\n@Component({\n  selector: 'lux-snackbar',\n  templateUrl: './lux-snackbar.component.html',\n  imports: [LuxIconComponent, MatButton]\n})\nexport class LuxSnackbarComponent implements OnInit {\n  config = inject<LuxSnackbarConfig>(MAT_SNACK_BAR_DATA);\n  snackbarRef = inject<MatSnackBarRef<LuxSnackbarComponent>>(MatSnackBarRef);\n\n  private action$: Subject<void> = new Subject<void>();\n\n  ngOnInit() {\n    Object.keys(this.config).forEach((key: string) => {\n      if ((this.config as any)[key]) {\n        (this.config as any)[key] = (this.config as any)[key].trim();\n      }\n    });\n  }\n\n  onAction(): Observable<void> {\n    return this.action$.asObservable();\n  }\n\n  actionClick() {\n    this.snackbarRef.dismiss();\n    this.action$.next();\n  }\n}\n","<div class=\"lux-gap-5 lux-flex lux-justify-start lux-items-center lux-snackbar-content\">\n  <div class=\"lux-snackbar-icon lux-flex lux-flex-none lux-border-box\">\n    <lux-icon [luxIconName]=\"config.iconName\" [luxIconSize]=\"config.iconSize\"> </lux-icon>\n  </div>\n  <div class=\"lux-snackbar-text lux-hyphenate lux-flex lux-flex-auto lux-borderbox\">\n    {{ config.text }}\n  </div>\n\n  @if (config.action) {\n  <div class=\"lux-flex lux-flex-none lux-border-box\">\n    <button class=\"lux-snackbar-action\" mat-button [disableRipple]=\"true\" (click)=\"actionClick()\">\n      {{ config.action }}\n    </button>\n  </div>\n  }\n</div>\n","import { ComponentType } from '@angular/cdk/portal';\nimport { Injectable, OnDestroy, inject } from '@angular/core';\nimport { MatSnackBar, MatSnackBarDismiss } from '@angular/material/snack-bar';\nimport { Observable, Subscription } from 'rxjs';\nimport { LuxAppService } from '../../lux-util/lux-app.service';\nimport { LuxSnackbarComponent } from './lux-snackbar-component/lux-snackbar.component';\nimport { LuxSnackbarConfig } from './lux-snackbar-config';\n\n/**\n * Über den LuxSnackbarService können einfach Snackbar-Informationen angezeigt werden.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxSnackbarService implements OnDestroy {\n  private snackBar = inject(MatSnackBar);\n  private appService = inject(LuxAppService);\n\n  private static readonly VERTICAL_POSITION = 'top';\n  private static readonly HORIZONTAL_POSITION = 'end';\n\n  private afterOpenedSubscription?: Subscription;\n  private resizeSubscription: Subscription;\n\n  constructor() {\n    this.resizeSubscription = this.appService.resize$.asObservable().subscribe(() => {\n      this.updateSnackbarPosition(false);\n    });\n  }\n\n  /**\n   * Diese Methode öffnet eine Snackbar mit einem Text.\n   * @param message Ein Text.\n   * @param duration Eine Dauer in Msec (z.B. 2000 = 2 Sekunden). Wenn die Snackbar permanent angezeigt werden soll,\n   * muss der Wert 0 angegeben werden.\n   * @param actionName Eine Bezeichnung (z.B. Wiederherstellen) für die Action. Dieser Parameter ist optional und\n   * muss nicht angegeben werden.\n   */\n  public openText(message: string, duration: number, actionName?: string): void {\n    const snackbarRef = this.snackBar.open(message, actionName, {\n      duration,\n      verticalPosition: LuxSnackbarService.VERTICAL_POSITION,\n      horizontalPosition: LuxSnackbarService.HORIZONTAL_POSITION,\n      panelClass: 'lux-snackbar'\n    });\n\n    this.afterOpenedSubscription = snackbarRef.afterOpened().subscribe(() => {\n      this.updateSnackbarPosition(true);\n      this.afterOpenedSubscription?.unsubscribe();\n    });\n  }\n\n  /**\n   * Diese Methode öffnet eine Snackbar, in der die übergebene Komponente angezeigt wird.\n   * @param component Die Komponente, die angezeigt werden soll.\n   * @param duration Eine Dauer in Msec (z.B. 2000 = 2 Sekunden). Wenn die Snackbar permanent angezeigt werden soll,\n   * muss der Wert 0 angegeben werden.\n   * @param data Ein Datenobjekt, das an die Komponente weitergereicht wird. Mit dem Code folgenden Code können die\n   * Daten verwendet werden. constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any).\n   */\n  public openComponent(component: ComponentType<any>, duration = 0, data?: any) {\n    const snackbarRef = this.snackBar.openFromComponent(component, {\n      duration,\n      data,\n      verticalPosition: LuxSnackbarService.VERTICAL_POSITION,\n      horizontalPosition: LuxSnackbarService.HORIZONTAL_POSITION,\n      panelClass: 'lux-snackbar'\n    });\n\n    this.afterOpenedSubscription = snackbarRef.afterOpened().subscribe(() => {\n      this.updateSnackbarPosition(true);\n      this.afterOpenedSubscription?.unsubscribe();\n    });\n  }\n\n  /**\n   * Öffnet eine Snackbar anhand der übergebenen Konfiguration.\n   * Ermöglicht eine genaue Konfiguration der Snackbar.\n   * @param duration\n   * @param config\n   */\n  public open(duration: number, config?: LuxSnackbarConfig) {\n    const panelClassArr = ['lux-snackbar'];\n\n    if (config && config.textColor) {\n      panelClassArr.push('lux-snackbar-color-text-' + config.textColor);\n    }\n\n    if (config && config.actionColor) {\n      panelClassArr.push('lux-snackbar-color-action-' + config.actionColor);\n    }\n\n    if (config && config.iconColor) {\n      panelClassArr.push('lux-snackbar-color-icon-' + config.iconColor);\n    }\n\n    const snackbarRef = this.snackBar.openFromComponent(LuxSnackbarComponent, {\n      duration,\n      data: config,\n      verticalPosition: LuxSnackbarService.VERTICAL_POSITION,\n      horizontalPosition: LuxSnackbarService.HORIZONTAL_POSITION,\n      panelClass: panelClassArr\n    });\n\n    this.afterOpenedSubscription = snackbarRef.afterOpened().subscribe(() => {\n      this.updateSnackbarPosition(true);\n      this.afterOpenedSubscription?.unsubscribe();\n    });\n  }\n\n  /**\n   * Diese Methode liefert ein Observable zurück, das den Aufrufer benachrichtigt, wenn die Action in der Snackbar\n   * geklickt wird.\n   */\n  public onAction(): Observable<void> {\n    if (!this.snackBar._openedSnackBarRef) {\n      throw Error('Snackbar-Ref is not found!');\n    }\n\n    if (this.snackBar._openedSnackBarRef.instance instanceof LuxSnackbarComponent) {\n      return this.snackBar._openedSnackBarRef.instance.onAction();\n    }\n\n    return this.snackBar._openedSnackBarRef.onAction();\n  }\n\n  /**\n   * Diese Methode liefert ein Observable zurück, das den Aufrufer benachrichtigt, wenn die Action in der Snackbar\n   * geklickt wird.\n   */\n  public afterDismissed(): Observable<MatSnackBarDismiss> {\n    if (!this.snackBar._openedSnackBarRef) {\n      throw Error('Snackbar-Ref is not found!');\n    }\n\n    return this.snackBar._openedSnackBarRef.afterDismissed();\n  }\n\n  /**\n   * Diese Methode blendet die Snackbar aus.\n   */\n  public dismiss() {\n    this.snackBar.dismiss();\n  }\n\n  ngOnDestroy() {\n    if (this.afterOpenedSubscription) {\n      this.afterOpenedSubscription.unsubscribe();\n    }\n\n    this.resizeSubscription.unsubscribe();\n  }\n\n  private updateSnackbarPosition(logError: boolean) {\n    const snackbarContainerArr = document.getElementsByClassName('mat-mdc-snack-bar-container');\n\n    if (snackbarContainerArr.length > 0) {\n      const snackbarEl = snackbarContainerArr[0] as HTMLElement;\n      const snackbarElParent = snackbarContainerArr[0].parentElement as HTMLElement;\n      // Die Overlay-Paine für die Snackbar muss verschoben werden, da diese sonst den Header blockiert\n      snackbarElParent.style.top = this.appService.getAppTop() + this.appService.getHeaderHeight() + 3 /* Abstand zum Header */ + 'px';\n      snackbarElParent.style.right = this.appService.getAppRight() + 3 /* Abstand zum Rand */ + 'px';\n      snackbarElParent.style.position = 'absolute';\n      snackbarEl.style.visibility = 'visible';\n    } else {\n      if (logError) {\n        console.error('Snackbar (mat-mdc-snack-bar-container) could not be found! The snackbar is not shown.');\n      }\n    }\n  }\n}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterContentInit,\n  Component,\n  ContentChildren,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  inject\n} from '@angular/core';\nimport { TranslocoPipe, TranslocoService } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\nimport { LuxButtonComponent } from '../../lux-action/lux-button/lux-button.component';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxSnackbarService } from '../../lux-popups/lux-snackbar/lux-snackbar.service';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport {\n  LUX_STEPPER_LARGE_DEFAULT_FIN_BTN_CONF,\n  LUX_STEPPER_LARGE_DEFAULT_NEXT_BTN_CONF,\n  LUX_STEPPER_LARGE_DEFAULT_PREV_BTN_CONF\n} from './lux-stepper-large-model/lux-stepper-large-button-info';\nimport { LuxStepperLargeClickEvent } from './lux-stepper-large-model/lux-stepper-large-click-event';\nimport { LuxStepperLargeSelectionEvent } from './lux-stepper-large-model/lux-stepper-large-selection-event';\nimport { ILuxStepperLargeStep, LuxVetoState } from './lux-stepper-large-model/lux-stepper-large-step.interface';\nimport { LuxStepperLargeMobileOverlayService } from './lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay.service';\nimport { LuxStepperLargeStepComponent } from './lux-stepper-large-subcomponents/lux-stepper-large-step/lux-stepper-large-step.component';\n\n@Component({\n  selector: 'lux-stepper-large',\n  templateUrl: './lux-stepper-large.component.html',\n  styleUrls: ['./lux-stepper-large.component.scss'],\n  imports: [NgTemplateOutlet, LuxAriaLabelDirective, NgClass, LuxButtonComponent, TranslocoPipe]\n})\nexport class LuxStepperLargeComponent implements OnInit, AfterContentInit, OnDestroy {\n  private mobileOverlayService = inject(LuxStepperLargeMobileOverlayService);\n  private queryService = inject(LuxMediaQueryObserverService);\n  private liveAnnouncer = inject(LiveAnnouncer);\n  private snackbar = inject(LuxSnackbarService);\n  private tService = inject(TranslocoService);\n\n  @ContentChildren(LuxStepperLargeStepComponent) steps!: QueryList<ILuxStepperLargeStep>;\n\n  @Input() luxStepValidationActive = true;\n  @Input() luxA11YMode = true;\n  @Input() luxPrevButtonConfig = LUX_STEPPER_LARGE_DEFAULT_PREV_BTN_CONF;\n  @Input() luxNextButtonConfig = LUX_STEPPER_LARGE_DEFAULT_NEXT_BTN_CONF;\n  @Input() luxFinButtonConfig = LUX_STEPPER_LARGE_DEFAULT_FIN_BTN_CONF;\n\n  @Output() luxStepperFinished = new EventEmitter<void>();\n  @Output() luxStepChanged = new EventEmitter<LuxStepperLargeSelectionEvent>();\n  @Output() luxCurrentStepNumberChange = new EventEmitter<number>();\n  @Output() luxOnNextStepNotComplete = new EventEmitter<number>();\n\n  _luxCurrentStepNumber = 0;\n\n  get luxCurrentStepNumber(): number {\n    return this._luxCurrentStepNumber;\n  }\n\n  @Input()\n  set luxCurrentStepNumber(stepNumber: number) {\n    if (this.luxCurrentStepNumber !== stepNumber) {\n      const prevStepIndex = this.luxCurrentStepNumber;\n      if (\n        stepNumber >= 0 &&\n        stepNumber < (this.steps ? this.steps.length : 0) &&\n        this.steps &&\n        this.steps.get(stepNumber) &&\n        this.steps.get(stepNumber)!.luxTouched\n      ) {\n        this._luxCurrentStepNumber = stepNumber;\n        this.isFirstStep = stepNumber === 0;\n        this.isLastStep = stepNumber === this.steps.length - 1;\n\n        this.luxCurrentStepNumberChange.emit(this._luxCurrentStepNumber);\n        this.luxStepChanged.emit({\n          stepper: this,\n          prevIndex: prevStepIndex,\n          prevStep: this.steps.get(prevStepIndex)!,\n          currentIndex: this._luxCurrentStepNumber,\n          currentStep: this.steps.get(this._luxCurrentStepNumber)!\n        });\n        LuxUtil.goTo('luxstepperlargenavitem' + (this.luxCurrentStepNumber + 1));\n        if (this.isMobile) {\n          LuxUtil.goTo('luxstepperlargemobilecontentanchor');\n        } else {\n          LuxUtil.goTo('luxstepperlargecontentanchor');\n        }\n      }\n    }\n  }\n\n  isMobile = false;\n  isFirstStep = true;\n  isLastStep = false;\n  isFinished = false;\n  cursorPos = -1;\n\n  subscriptions: Subscription[] = [];\n\n  ngOnInit() {\n    this.subscriptions.push(\n      this.queryService.getMediaQueryChangedAsObservable().subscribe((query) => {\n        this.isMobile = query === 'xs' || query === 'sm';\n      })\n    );\n  }\n\n  ngAfterContentInit() {\n    if (this.luxCurrentStepNumber >= 0 && this.luxCurrentStepNumber < this.steps.length) {\n      this.steps.get(this.luxCurrentStepNumber)!.luxTouched = true;\n    }\n\n    this.isLastStep = this.luxCurrentStepNumber === this.steps.length - 1;\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((subscription) => subscription.unsubscribe());\n  }\n\n  onPrevStep() {\n    const newIndex = this.getPrevIndex(this.luxCurrentStepNumber);\n\n    const event: LuxStepperLargeClickEvent = {\n      stepper: this,\n      newIndex: newIndex,\n      newStep: this.steps.get(newIndex)!,\n      source: 'prev_button'\n    };\n    const vetoPromise = this.steps.get(this.luxCurrentStepNumber)!.luxVetoFn(event);\n\n    vetoPromise\n      .then((veto) => {\n        if (veto === LuxVetoState.navigationAccepted) {\n          this.activatePrevStep(newIndex);\n        }\n      })\n      .catch((err) => console.error(err));\n  }\n\n  onNextStep() {\n    if (this.luxStepValidationActive && this.luxA11YMode && !this.steps.get(this.luxCurrentStepNumber)!.luxCompleted) {\n      this.luxOnNextStepNotComplete.emit(this.luxCurrentStepNumber);\n    }\n\n    const newIndex = this.getNextIndex(this.luxCurrentStepNumber);\n\n    const event: LuxStepperLargeClickEvent = {\n      stepper: this,\n      newIndex: newIndex,\n      newStep: this.steps.get(newIndex)!,\n      source: 'next_button'\n    };\n    const vetoPromise = this.steps.get(this.luxCurrentStepNumber)!.luxVetoFn(event);\n\n    if (this.luxStepValidationActive && this.luxCurrentStepNumber < newIndex && newIndex < this.steps.length) {\n      for (let i = this.luxCurrentStepNumber; i < newIndex; i++) {\n        if (this.steps.get(i)!.luxCompleted === false) {\n          return;\n        }\n      }\n    }\n\n    vetoPromise\n      .then((veto) => {\n        if (veto === LuxVetoState.navigationAccepted) {\n          this.activateNextStep(newIndex);\n        }\n      })\n      .catch((err) => console.error(err));\n  }\n\n  onFinStep() {\n    if (this.luxStepValidationActive && this.luxA11YMode && !this.steps.get(this.luxCurrentStepNumber)!.luxCompleted) {\n      this.luxOnNextStepNotComplete.emit(this._luxCurrentStepNumber);\n      return;\n    }\n\n    const event: LuxStepperLargeClickEvent = {\n      stepper: this,\n      newIndex: this.luxCurrentStepNumber,\n      newStep: this.steps.get(this.luxCurrentStepNumber)!,\n      source: 'fin_button'\n    };\n    const vetoPromise = this.steps.get(this.luxCurrentStepNumber)!.luxVetoFn(event);\n\n    vetoPromise\n      .then((veto) => {\n        if (veto === LuxVetoState.navigationAccepted) {\n          if (this.luxStepValidationActive) {\n            // Prüfen, ob es einen Step gibt, der noch nicht abgeschlossen ist.\n            const index = this.steps.toArray().findIndex((step) => !step.luxCompleted && !step.luxDisabled);\n            if (index === -1) {\n              // Alle Steps signalisieren (luxCompleted = true) das sie valide sind.\n              // Der Stepper kann beendet werden.\n              this.finishStepper();\n            } else {\n              // Mindestens ein Step (luxCompleted = false) ist noch nicht valide.\n              // Springe zum ersten nicht validen Schritt.\n              this.luxCurrentStepNumber = index;\n            }\n          } else {\n            this.finishStepper();\n          }\n        }\n      })\n      .catch((err) => console.error(err));\n  }\n\n  onNavFocusin(index: number) {\n    if (index === this.luxCurrentStepNumber) {\n      // Dieser Timeout ist nötig, um einen ExpressionChangedAfterItHasBeenCheckedError zu vermeiden.\n      // Details:\n      // Ohne Timeout würde die Cursorposition zweimal (alter Eintrag verliert den Fokus \"this.cursorPos = -1\" und\n      // neuer Eintrag erhält den Fokus \"this.cursorPos = index\") innerhalb eines Zyklus geändert werden,\n      // was zu dem ExpressionChangedAfterItHasBeenCheckedError führt.\n      // Dieser Fehler wurde entdeckt, als man in einer Veto-Methode einen Dialog geöffnet hat.\n      setTimeout(() => {\n        this.cursorPos = index;\n      });\n    }\n  }\n\n  onNavFocusout(index: number) {\n    if (index === this.luxCurrentStepNumber) {\n      this.cursorPos = -1;\n    }\n  }\n\n  onNavLinkEnter(stepIndex: number) {\n    const newIndex = stepIndex === this.cursorPos ? stepIndex : this.cursorPos;\n    this.onNavLink(newIndex);\n    this.liveAnnouncer.announce('Schritt ausgewählt');\n  }\n\n  onNavLink(stepIndex: number) {\n    if (this.luxStepValidationActive && this.luxCurrentStepNumber <= stepIndex) {\n      for (let i = this.luxCurrentStepNumber; i < stepIndex; i++) {\n        if (this.steps.get(i)!.luxCompleted === false) {\n          this.snackbar.open(0, {\n            text: this.tService.translate(`luxc.stepper-large.error_message.steps_not_completed`, { i: i + 1 }),\n            action: 'Ok',\n            iconName: 'lux-interface-alert-warning-triangle',\n            iconColor: 'orange'\n          });\n          return;\n        }\n      }\n    }\n\n    const event: LuxStepperLargeClickEvent = { stepper: this, newIndex: stepIndex, newStep: this.steps.get(stepIndex)!, source: 'nav' };\n    const vetoPromise = this.steps.get(this.luxCurrentStepNumber)!.luxVetoFn(event);\n\n    vetoPromise\n      .then((veto) => {\n        if (veto === LuxVetoState.navigationAccepted) {\n          this.luxCurrentStepNumber = stepIndex;\n          this.cursorPos = -1;\n        }\n      })\n      .catch((err) => console.error(err));\n  }\n\n  onOpenMobileOverlay() {\n    this.mobileOverlayService.open({ data: { stepperComponent: this } });\n  }\n\n  onResetStepper() {\n    this.luxCurrentStepNumber = 0;\n    this.isFinished = false;\n  }\n\n  onNavKeyUp() {\n    if (this.cursorPos === -1) {\n      this.cursorPos = this.luxCurrentStepNumber;\n    }\n\n    if (this.cursorPos > 0) {\n      this.cursorPos = this.getPrevIndex(this.cursorPos);\n      this.liveAnnouncer.announce('Schritt' + (this.cursorPos + 1) + ' ' + this.steps.get(this.cursorPos)!.luxTitle);\n    }\n  }\n\n  onNavKeyDown() {\n    if (this.cursorPos === -1) {\n      this.cursorPos = this.luxCurrentStepNumber;\n    }\n\n    if (this.cursorPos < this.steps.length) {\n      this.cursorPos = this.getNextIndex(this.cursorPos);\n      this.liveAnnouncer.announce('Schritt' + (this.cursorPos + 1) + ' ' + this.steps.get(this.cursorPos)!.luxTitle);\n    }\n  }\n\n  private activatePrevStep(newIndex: number) {\n    const newStepNumber = newIndex;\n\n    if (newStepNumber >= 0 && newStepNumber < (this.steps ? this.steps.length : 0) && this.steps && this.steps.get(newStepNumber)) {\n      this.steps.get(newStepNumber)!.luxTouched = true;\n      this.luxCurrentStepNumber = newStepNumber;\n      this.liveAnnouncer.announce('Schritt' + (newStepNumber + 1) + ' ' + this.steps.get(newStepNumber)!.luxTitle + ' aktiv.');\n    }\n  }\n\n  private activateNextStep(newIndex: number) {\n    const newStepNumber = newIndex;\n\n    if (newStepNumber >= 0 && newStepNumber < (this.steps ? this.steps.length : 0) && this.steps && this.steps.get(newStepNumber)) {\n      this.steps.get(newStepNumber)!.luxTouched = true;\n      this.luxCurrentStepNumber = newStepNumber;\n      this.liveAnnouncer.announce('Schritt' + (newStepNumber + 1) + ' ' + this.steps.get(newStepNumber)!.luxTitle + ' aktiv.');\n    }\n  }\n\n  private finishStepper() {\n    this.isFinished = true;\n    this.luxStepperFinished.emit();\n  }\n\n  private getPrevIndex(index: number): number {\n    const newIndex = index - 1;\n    if (!this.steps.get(newIndex)!.luxDisabled) {\n      return newIndex;\n    } else {\n      return this.getPrevIndex(newIndex);\n    }\n  }\n\n  private getNextIndex(index: number): number {\n    const newIndex = index + 1;\n    if (!this.steps.get(newIndex)!.luxDisabled) {\n      return newIndex;\n    } else {\n      this.steps.get(newIndex)!.luxTouched = true;\n      return this.getNextIndex(newIndex);\n    }\n  }\n}\n","@if (steps && steps.length > 0) {\n<!-- Desktop -->\n@if (!isMobile) {\n<div class=\"lux-stepper-large-container\">\n  <div class=\"lux-stepper-large-nav-container\" role=\"tablist\" aria-orientation=\"vertical\">\n    <ng-container *ngTemplateOutlet=\"nav\"></ng-container>\n  </div>\n  <div class=\"lux-stepper-large-content-container\">\n    <div class=\"lux-stepper-large-content\" [id]=\"'lux-stepper-large-content' + luxCurrentStepNumber\" role=\"tabpanel\">\n      <a aria-hidden=\"true\" id=\"luxstepperlargecontentanchor\"></a>\n      <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n    </div>\n    <div class=\"lux-stepper-large-button-container\">\n      <ng-container *ngTemplateOutlet=\"buttons\"></ng-container>\n    </div>\n  </div>\n</div>\n} @else {\n<div class=\"lux-stepper-large-mobile-container\">\n  <a aria-hidden=\"true\" id=\"luxstepperlargemobilecontentanchor\"></a>\n  <div class=\"lux-stepper-large-mobile-header\">\n    <div class=\"lux-stepper-large-mobile-header-label\">SCHRITT {{ luxCurrentStepNumber + 1 }} VON {{ steps.length }}</div>\n    <lux-button\n      class=\"lux-stepper-large-mobile-header-button\"\n      luxAriaLabel=\"Steppermenu\"\n      luxColor=\"primary\"\n      luxIconName=\"lux-tasks\"\n      (luxClicked)=\"onOpenMobileOverlay()\"\n    ></lux-button>\n  </div>\n  <div class=\"lux-stepper-large-content\" [id]=\"'lux-stepper-large-content' + luxCurrentStepNumber\" role=\"tabpanel\">\n    <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n  </div>\n  <div class=\"lux-stepper-large-button-container\">\n    <ng-container *ngTemplateOutlet=\"buttons\"></ng-container>\n  </div>\n</div>\n} }\n\n<!-- Mobile -->\n\n<!-- Templates -->\n<ng-template #nav>\n  @for (step of steps; track step; let i = $index) {\n  <div\n    class=\"lux-stepper-large-nav-item\"\n    [id]=\"'luxstepperlargenavitem' + (i + 1)\"\n    [inert]=\"step.luxDisabled\"\n    [ngClass]=\"{\n      'lux-touched': step.luxTouched,\n      'lux-active': i === luxCurrentStepNumber,\n      'lux-disabled': step.luxDisabled,\n      'lux-completed': step.luxCompleted\n    }\"\n  >\n    <div class=\"lux-stepper-large-nav-item-number-container\">\n      <div class=\"lux-stepper-large-nav-item-number\">{{ i + 1 < 10 ? '0' : '' }}{{ i + 1 }}</div>\n    </div>\n    <div class=\"lux-stepper-large-nav-item-label-container\">\n      <ng-container *ngTemplateOutlet=\"step.luxTouched && !step.luxDisabled ? link : nolink; context: { step: step, i: i }\"></ng-container>\n    </div>\n  </div>\n  }\n</ng-template>\n\n<ng-template #content>\n  <ng-container *ngTemplateOutlet=\"steps.get(luxCurrentStepNumber)!.contentTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #buttons>\n  @if (isFirstStep) {\n  <div></div>\n  } @if (!isFirstStep) {\n  <lux-button\n    class=\"lux-stepper-large-button-prev\"\n    luxLabel=\"{{ luxPrevButtonConfig.label || ('luxc.stepper.back.btn' | transloco) }}\"\n    [luxIconName]=\"luxPrevButtonConfig.iconName\"\n    [luxIconShowRight]=\"luxPrevButtonConfig.iconShowRight\"\n    [luxColor]=\"luxPrevButtonConfig.color\"\n    (luxClicked)=\"onPrevStep()\"\n    [luxRaised]=\"true\"\n  ></lux-button>\n  } @if (!isLastStep) {\n  <lux-button\n    class=\"lux-stepper-large-button-next\"\n    luxLabel=\"{{ luxNextButtonConfig.label || ('luxc.stepper.next.btn' | transloco) }}\"\n    [luxIconName]=\"luxNextButtonConfig.iconName\"\n    [luxIconShowRight]=\"luxNextButtonConfig.iconShowRight\"\n    [luxColor]=\"luxNextButtonConfig.color\"\n    [luxRaised]=\"true\"\n    [luxDisabled]=\"\n      luxA11YMode ? false : luxStepValidationActive && (!steps.get(luxCurrentStepNumber) || !steps.get(luxCurrentStepNumber)!.luxCompleted)\n    \"\n    [attr.aria-disabled]=\"luxStepValidationActive && (!steps.get(luxCurrentStepNumber) || !steps.get(luxCurrentStepNumber)!.luxCompleted)\"\n    (luxClicked)=\"onNextStep()\"\n  ></lux-button>\n  } @if (isLastStep) {\n  <lux-button\n    class=\"lux-stepper-large-button-fin\"\n    luxLabel=\"{{ luxFinButtonConfig.label || ('luxc.stepper.finish.btn' | transloco) }}\"\n    [luxIconName]=\"luxFinButtonConfig.iconName\"\n    [luxIconShowRight]=\"luxFinButtonConfig.iconShowRight\"\n    [luxColor]=\"luxFinButtonConfig.color\"\n    [luxRaised]=\"true\"\n    [luxDisabled]=\"\n      luxA11YMode\n        ? false\n        : luxStepValidationActive && (!steps.get(luxCurrentStepNumber) || !steps.get(luxCurrentStepNumber)!.luxCompleted || isFinished)\n    \"\n    [attr.aria-disabled]=\"\n      luxStepValidationActive && (!steps.get(luxCurrentStepNumber) || !steps.get(luxCurrentStepNumber)!.luxCompleted || isFinished)\n    \"\n    (luxClicked)=\"onFinStep()\"\n  ></lux-button>\n  }\n</ng-template>\n\n<ng-template let-step=\"step\" let-i=\"i\" #link>\n  <a\n    class=\"lux-stepper-large-nav-item-label-link\"\n    role=\"tab\"\n    [id]=\"'lux-stepper-large-nav-item-label-link-' + i\"\n    [ngClass]=\"{ 'lux-focused': cursorPos === i }\"\n    (keydown.arrowUp)=\"onNavKeyUp()\"\n    (keydown.arrowDown)=\"onNavKeyDown()\"\n    [attr.aria-label]=\"'Schritt' + (i + 1) + ' ' + step.luxTitle\"\n    [attr.tabindex]=\"i === luxCurrentStepNumber ? 0 : -1\"\n    [attr.aria-posinset]=\"i + 1\"\n    [attr.aria-setsize]=\"steps.length\"\n    [attr.aria-controls]=\"'lux-stepper-large-content' + luxCurrentStepNumber\"\n    [attr.aria-selected]=\"i === luxCurrentStepNumber\"\n    (click)=\"onNavLink(i)\"\n    (keydown.enter)=\"onNavLinkEnter(i)\"\n    (focusin)=\"onNavFocusin(i)\"\n    (focusout)=\"onNavFocusout(i)\"\n    >{{ step.luxTitle }}</a\n  >\n</ng-template>\n\n<ng-template let-step=\"step\" let-i=\"i\" #nolink>\n  <div class=\"lux-stepper-large-nav-item-label\">{{ step.luxTitle }}</div>\n</ng-template>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { LuxStepperComponent } from './lux-stepper.component';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxStepperHelperService {\n  private switchStep = new Map<LuxStepperComponent, BehaviorSubject<boolean>>();\n\n  constructor() {}\n\n  /**\n   * Springt im Stepper zum nächsten Step.\n   * Alternativ (ohne Stepper als Parameter) lässt die Funktion alle\n   * bekannten Stepper einen Schritt nach vorne springen.\n   *\n   * Voraussetzung: luxLinear = false oder aktuell Form ist valide.\n   * @param stepper\n   */\n  public nextStep(stepper?: LuxStepperComponent) {\n    if (stepper) {\n      const subject = this.switchStep.get(stepper);\n      if (subject) {\n        subject.next(true);\n      }\n    } else {\n      this.switchStep.forEach((switchStep: BehaviorSubject<boolean>) => switchStep.next(true));\n    }\n  }\n\n  /**\n   * Springt im Stepper zum vorherigen Step.\n   * Alternativ (ohne Stepper als Parameter) lässt die Funktion alle\n   * Bekannten Stepper einen Schritt zurückspringen.\n   * @param stepper\n   */\n  public previousStep(stepper?: LuxStepperComponent) {\n    if (stepper) {\n      const subject = this.switchStep.get(stepper);\n      if (subject) {\n        subject.next(false);\n      }\n    } else {\n      this.switchStep.forEach((switchStep: BehaviorSubject<boolean>) => switchStep.next(false));\n    }\n  }\n\n  /**\n   * Gibt das Observable der internen Map für den Stepper zurück.\n   * @param stepper\n   * @returns Observable<boolean> | Observable<any>\n   */\n  public getObservable(stepper: LuxStepperComponent): Observable<boolean | null> {\n    const subject = this.switchStep.get(stepper);\n    return subject ? subject.asObservable() : of(null);\n  }\n\n  /**\n   * Trägt den Stepper in die Map der dem Service bekannten Stepper ein.\n   * @param stepper\n   */\n  public registerStepper(stepper: LuxStepperComponent) {\n    if (!this.switchStep.get(stepper)) {\n      this.switchStep.set(stepper, new BehaviorSubject(false));\n    }\n  }\n}\n","import { StepperSelectionEvent } from '@angular/cdk/stepper';\nimport {\n  AfterViewInit,\n  Directive,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  QueryList,\n  ViewChild,\n  ViewChildren,\n  ViewContainerRef\n} from '@angular/core';\nimport { MatStepper } from '@angular/material/stepper';\nimport { Subscription } from 'rxjs';\nimport { ILuxStepperConfiguration } from './lux-stepper-configuration.interface';\n\n/**\n * Parent-Klasse für den LuxStepperVertical und LuxStepperHorizontal, beide Komponenten werden ausschließlich von\n * dem LuxStepper zur Darstellung genutzt.\n */\n@Directive()\nexport class LuxStepperParent implements OnDestroy, AfterViewInit {\n  // Diese Outputs werden bei den Klicks auf die Stepper-eigenen Navigations-Buttons ausgelöst und informieren die\n  // LuxStepperComponent\n  @Output() luxFinButtonClicked = new EventEmitter<void>();\n  @Output() luxNextButtonClicked = new EventEmitter<void>();\n  @Output() luxPrevButtonClicked = new EventEmitter<void>();\n  // Wird beim Wechsel des Steps (über Header oder Button) aufgerufen\n  @Output() luxStepChanged = new EventEmitter<StepperSelectionEvent>();\n  // über die aktuellen Elemente informiert zu halten\n  @Output() luxMatStepperLoaded = new EventEmitter<MatStepper>();\n  @Output() luxMatStepLabelsLoaded = new EventEmitter<ViewContainerRef[]>();\n  @Output() luxStepClicked = new EventEmitter<number>();\n\n  @ViewChild('stepper', { static: true }) matStepper!: MatStepper;\n  @ViewChildren('matStepLabel', { read: ViewContainerRef }) matStepLabels!: QueryList<ViewContainerRef>;\n\n  @Input() luxStepperConfig?: ILuxStepperConfiguration;\n\n  subscription?: Subscription;\n\n  constructor() {}\n\n  ngAfterViewInit() {\n    // Sobald die Component initialisiert ist, dem Parent (luxStepper) den\n    // MatStepper und die MatStepLabels mitteilen\n    this.luxMatStepperLoaded.emit(this.matStepper);\n    this.luxMatStepLabelsLoaded.emit(this.matStepLabels.toArray());\n    this.subscription = this.matStepLabels.changes.subscribe(() => {\n      this.luxMatStepLabelsLoaded.emit(this.matStepLabels.toArray());\n    });\n  }\n\n  onStepClicked(event: Event) {\n    const target = event.target || event.srcElement || event.currentTarget;\n    const stepIndex = this.getStepIndex(target as HTMLElement);\n\n    if (stepIndex !== -1) {\n      this.luxStepClicked.emit(stepIndex);\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  private getStepIndex(element: HTMLElement, count = 0): number {\n    if (element) {\n      if ('mat-step-header' === element.nodeName.toLowerCase()) {\n        // Das Attribut \"aria-posinset\" fängt mit dem Index 1 an,\n        // während das Property \"luxCurrentStepNumber\" bei Index 0 beginnt.\n        // Deshalb wird hier -1 gerechnet.\n        return +element.getAttribute('aria-posinset')! - 1;\n      } else {\n        if (count <= 10) {\n          return this.getStepIndex(element.parentElement!, count + 1);\n        } else {\n          return -1;\n        }\n      }\n    } else {\n      return -1;\n    }\n  }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'lux-step-content',\n  template: '<ng-content></ng-content>'\n})\nexport class LuxStepContentComponent {\n  constructor() {}\n}\n","import { NgClass } from '@angular/common';\nimport { Component, OnDestroy, OnInit, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LuxComponentsConfigService } from '../../../lux-components-config/lux-components-config.service';\n\n@Component({\n  selector: 'lux-step-header',\n  template: `\n    <div [ngClass]=\"{ 'lux-uppercase': labelUppercase }\">\n      <ng-content></ng-content>\n    </div>\n  `,\n  imports: [NgClass]\n})\nexport class LuxStepHeaderComponent implements OnInit, OnDestroy {\n  componentsConfigService = inject(LuxComponentsConfigService);\n\n  private configSubscription?: Subscription;\n\n  labelUppercase?: boolean;\n\n  ngOnInit() {\n    this.configSubscription = this.componentsConfigService.config.subscribe(() => {\n      this.labelUppercase = this.componentsConfigService.isLabelUppercaseForSelector('lux-step');\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.configSubscription) {\n      this.configSubscription.unsubscribe();\n    }\n  }\n}\n","import { Component, Input, TemplateRef, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Component({\n  selector: 'lux-step',\n  template: `\n    <ng-template #header>\n      <ng-content select=\"lux-step-header\"></ng-content>\n    </ng-template>\n    <ng-template #content>\n      <ng-content select=\"lux-step-content\"></ng-content>\n    </ng-template>\n  `\n})\nexport class LuxStepComponent {\n  private _iconChange = new BehaviorSubject<boolean>(false);\n  private _luxIconName?: string = undefined;\n\n  @ViewChild('header', { static: true }) headerTemplate!: TemplateRef<any>;\n  @ViewChild('content', { static: true }) contentTemplate!: TemplateRef<any>;\n\n  @Input() luxIconSize = '1x';\n  @Input() luxOptional = false;\n  @Input() luxEditable = true;\n  @Input() luxCompleted = true;\n  @Input() luxStepControl?: FormGroup;\n\n  get luxIconName(): string | undefined {\n    return this._luxIconName;\n  }\n\n  @Input()\n  set luxIconName(iconName: string | undefined) {\n    this._luxIconName = iconName;\n    this._iconChange.next(true);\n  }\n\n  getIconChangeObsv(): Observable<boolean> {\n    return this._iconChange.asObservable();\n  }\n\n  constructor() {}\n\n  /**\n   * Gibt an, ob der Step als abgeschlossen gilt.\n   *\n   * Möglichkeiten:\n   *  1. Hat ein luxStepControl, welches valid ist\n   *  2. Der Wert luxCompleted ist true\n   *  3. Der Wert luxOptional ist true\n   */\n  isCompleted() {\n    if (this.luxStepControl) {\n      return this.luxStepControl.valid;\n    }\n    return this.luxCompleted || this.luxOptional;\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../../../../lux-action/lux-button/lux-button.component';\nimport { ILuxStepperConfiguration } from '../../lux-stepper-model/lux-stepper-configuration.interface';\nimport { LuxStepComponent } from '../lux-step.component';\n\n@Component({\n  selector: 'lux-stepper-nav-buttons',\n  templateUrl: './lux-stepper-nav-buttons.component.html',\n  imports: [LuxButtonComponent, TranslocoPipe]\n})\nexport class LuxStepperNavButtonsComponent {\n  @Output() luxPrevClick = new EventEmitter<void>();\n  @Output() luxNextClick = new EventEmitter<void>();\n  @Output() luxFinClick = new EventEmitter<void>();\n\n  @Input() luxIndex = -1;\n  @Input() luxStep!: LuxStepComponent;\n  @Input() luxStepperConfig?: ILuxStepperConfiguration;\n\n  constructor() {}\n}\n","<div class=\"lux-mt-3 lux-flex lux-place-content-end lux-items-center\">\n  <!-- Previous-Button -->\n  @if (luxIndex > 0) {\n  <lux-button\n    luxLabel=\"{{ luxStepperConfig?.luxPreviousButtonConfig?.label || ('luxc.stepper.back.btn' | transloco) }}\"\n    [luxColor]=\"luxStepperConfig?.luxPreviousButtonConfig?.color\"\n    [luxIconName]=\"luxStepperConfig?.luxPreviousButtonConfig?.iconName\"\n    (luxClicked)=\"luxPrevClick.emit()\"\n    luxTagId=\"luxStepper.previousStep\"\n  >\n  </lux-button>\n  }\n  <!-- Next-Button -->\n  @if (luxIndex < (luxStepperConfig?.luxSteps?.length ?? 0) - 1) {\n  <lux-button\n    luxLabel=\"{{ luxStepperConfig?.luxNextButtonConfig?.label || ('luxc.stepper.next.btn' | transloco) }}\"\n    [luxColor]=\"luxStepperConfig?.luxNextButtonConfig?.color\"\n    [luxIconName]=\"luxStepperConfig?.luxNextButtonConfig?.iconName\"\n    (luxClicked)=\"luxNextClick.emit()\"\n    [luxDisabled]=\"!luxStep.isCompleted() && luxStepperConfig && luxStepperConfig.luxLinear\"\n    luxTagId=\"luxStepper.nextStep\"\n  >\n  </lux-button>\n  }\n  <!-- Finish-Button -->\n  @if (luxIndex === (luxStepperConfig?.luxSteps?.length ?? 0) - 1) {\n  <lux-button\n    luxLabel=\"{{ luxStepperConfig?.luxFinishButtonConfig?.label || ('luxc.stepper.finish.btn' | transloco) }}\"\n    [luxColor]=\"luxStepperConfig?.luxFinishButtonConfig?.color\"\n    [luxIconName]=\"luxStepperConfig?.luxFinishButtonConfig?.iconName\"\n    (luxClicked)=\"luxFinClick.emit()\"\n    [luxDisabled]=\"!luxStep.isCompleted() && luxStepperConfig && luxStepperConfig.luxLinear\"\n    luxTagId=\"luxStepper.finished\"\n  >\n  </lux-button>\n  }\n</div>\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MatStep, MatStepLabel, MatStepper, MatStepperIcon } from '@angular/material/stepper';\nimport { LuxIconComponent } from '../../../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxStepperParent } from '../../lux-stepper-model/lux-stepper-parent.class';\nimport { LuxStepperNavButtonsComponent } from '../lux-stepper-nav-buttons/lux-stepper-nav-buttons.component';\n\n@Component({\n  selector: 'lux-stepper-horizontal',\n  templateUrl: './lux-stepper-horizontal.component.html',\n  imports: [MatStepper, NgClass, MatStep, MatStepLabel, NgTemplateOutlet, MatStepperIcon, LuxStepperNavButtonsComponent, LuxIconComponent]\n})\nexport class LuxStepperHorizontalComponent extends LuxStepperParent {\n  constructor() {\n    super();\n  }\n}\n","<!-- Horizontaler Stepper, die Konfiguration stammt aus dem LuxStepper und wird hier angewandt -->\n<mat-horizontal-stepper\n  [linear]=\"luxStepperConfig?.luxLinear\"\n  [selectedIndex]=\"luxStepperConfig?.luxCurrentStepNumber\"\n  [ngClass]=\"{\n    'lux-ignore-mat-step-icons': luxStepperConfig?.luxUseCustomIcons,\n    'lux-block-pointer-events': luxStepperConfig?.luxDisabled,\n    'lux-linear-stepper': luxStepperConfig?.luxLinear,\n    'lux-no-animation': !luxStepperConfig?.luxHorizontalStepAnimationActive\n  }\"\n  [disableRipple]=\"true\"\n  (selectionChange)=\"luxStepChanged.emit($event)\"\n  (click)=\"onStepClicked($event)\"\n  (keydown.enter)=\"onStepClicked($event)\"\n  #stepper\n>\n  <!-- Alle aktuell bekannten Steps zeichnen -->\n  @for (luxStep of luxStepperConfig?.luxSteps; track luxStep; let i = $index) {\n  <mat-step [completed]=\"luxStep.isCompleted()\" [optional]=\"luxStep.luxOptional\" [editable]=\"luxStep.luxEditable\">\n    <!-- Header des Steps -->\n    <ng-template matStepLabel>\n      <div class=\"lux-flex lux-place-content-start lux-items-center\">\n        <ng-template #matStepLabel></ng-template>\n        <ng-container *ngTemplateOutlet=\"luxStep.headerTemplate\"></ng-container>\n      </div>\n    </ng-template>\n    <!-- Content des Steps, wenn Animationen aktiviert sind -->\n    @if (luxStepperConfig?.luxHorizontalStepAnimationActive) {\n    <ng-container *ngTemplateOutlet=\"luxStep.contentTemplate\"></ng-container>\n    <ng-container *ngTemplateOutlet=\"navButtonsTemplate; context: { index: i, step: luxStep }\"></ng-container>\n    }\n  </mat-step>\n  }\n\n  <!-- Überschreiben der default Material-Icons -->\n  <ng-template matStepperIcon=\"edit\">\n    <lux-icon luxIconName=\"lux-interface-edit-pencil\" luxIconSize=\"1.25rem\"></lux-icon>\n  </ng-template>\n  <ng-template matStepperIcon=\"done\">\n    <lux-icon luxIconName=\"lux-interface-validation-check\" luxIconSize=\"1.25rem\"></lux-icon>\n  </ng-template>\n  <ng-template matStepperIcon=\"error\">\n    <lux-icon luxIconName=\"lux-interface-delete-1\" luxIconSize=\"1.25rem\"></lux-icon>\n  </ng-template>\n  <ng-template matStepperIcon=\"home\">\n    <lux-icon luxIconName=\"lux-interface-home-3\" luxIconSize=\"1.25rem\"></lux-icon>\n  </ng-template>\n</mat-horizontal-stepper>\n\n<!-- Content des Steps, wenn Animationen deaktiviert sind -->\n@if (!luxStepperConfig?.luxHorizontalStepAnimationActive) { @for (luxStep of luxStepperConfig?.luxSteps; track luxStep; let i = $index) {\n@if (matStepper) {\n<section class=\"lux-stepper-content-section\" [class.lux-display-none]=\"i !== matStepper.selectedIndex\">\n  <ng-container *ngTemplateOutlet=\"luxStep.contentTemplate ? luxStep.contentTemplate : noDataTemplate\"></ng-container>\n  <ng-container *ngTemplateOutlet=\"navButtonsTemplate; context: { index: i, step: luxStep }\"></ng-container>\n</section>\n} } }\n<ng-template #noDataTemplate></ng-template>\n\n<!-- Nav-Buttons in separatem Template (da 2 mal hier verwendet) -->\n<ng-template #navButtonsTemplate let-i=\"index\" let-step=\"step\">\n  @if (luxStepperConfig?.luxShowNavigationButtons) {\n  <lux-stepper-nav-buttons\n    [luxIndex]=\"i\"\n    [luxStep]=\"step\"\n    [luxStepperConfig]=\"luxStepperConfig\"\n    (luxPrevClick)=\"luxPrevButtonClicked.emit()\"\n    (luxNextClick)=\"luxNextButtonClicked.emit()\"\n    (luxFinClick)=\"luxFinButtonClicked.emit()\"\n  >\n  </lux-stepper-nav-buttons>\n  }\n</ng-template>\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { MatStep, MatStepLabel, MatStepper, MatStepperIcon } from '@angular/material/stepper';\nimport { LuxIconComponent } from '../../../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxStepperParent } from '../../lux-stepper-model/lux-stepper-parent.class';\nimport { LuxStepperNavButtonsComponent } from '../lux-stepper-nav-buttons/lux-stepper-nav-buttons.component';\n\n@Component({\n  selector: 'lux-stepper-vertical',\n  templateUrl: './lux-stepper-vertical.component.html',\n  imports: [MatStepper, NgClass, MatStep, MatStepLabel, NgTemplateOutlet, LuxStepperNavButtonsComponent, MatStepperIcon, LuxIconComponent]\n})\nexport class LuxStepperVerticalComponent extends LuxStepperParent {\n  constructor() {\n    super();\n  }\n}\n","<!-- Vertikaler Stepper, die Konfiguration stammt aus dem LuxStepper und wird hier angewandt -->\n<mat-vertical-stepper\n  [linear]=\"luxStepperConfig?.luxLinear\"\n  [selectedIndex]=\"luxStepperConfig?.luxCurrentStepNumber\"\n  [ngClass]=\"{\n    'lux-ignore-mat-step-icons': luxStepperConfig?.luxUseCustomIcons,\n    'lux-block-pointer-events': luxStepperConfig?.luxDisabled,\n    'lux-linear-stepper': luxStepperConfig?.luxLinear\n  }\"\n  [disableRipple]=\"true\"\n  (selectionChange)=\"luxStepChanged.emit($event)\"\n  (click)=\"onStepClicked($event)\"\n  (keydown.enter)=\"onStepClicked($event)\"\n  #stepper\n>\n  @for (luxStep of luxStepperConfig?.luxSteps; track luxStep; let i = $index) {\n  <mat-step [completed]=\"luxStep.isCompleted()\" [optional]=\"luxStep.luxOptional\" [editable]=\"luxStep.luxEditable\">\n    <!-- Header des Steps -->\n    <ng-template matStepLabel>\n      <div class=\"lux-flex lux-place-content-start lux-items-center\">\n        <ng-template #matStepLabel></ng-template>\n        <ng-container *ngTemplateOutlet=\"luxStep.headerTemplate\"></ng-container>\n      </div>\n    </ng-template>\n    <!-- Content des Steps, wenn Animationen aktiviert sind -->\n    <ng-container *ngTemplateOutlet=\"luxStep.contentTemplate\"></ng-container>\n    <!-- Nav-Buttons, wenn aktiviert -->\n    @if (luxStepperConfig?.luxShowNavigationButtons) {\n    <lux-stepper-nav-buttons\n      [luxIndex]=\"i\"\n      [luxStep]=\"luxStep\"\n      [luxStepperConfig]=\"luxStepperConfig\"\n      (luxPrevClick)=\"luxPrevButtonClicked.emit()\"\n      (luxNextClick)=\"luxNextButtonClicked.emit()\"\n      (luxFinClick)=\"luxFinButtonClicked.emit()\"\n    >\n    </lux-stepper-nav-buttons>\n    }\n  </mat-step>\n  }\n\n  <!-- Überschreiben der default Material-Icons -->\n  <ng-template matStepperIcon=\"edit\">\n    <lux-icon luxIconName=\"lux-interface-edit-pencil\" luxIconSize=\"1.25rem\"></lux-icon>\n  </ng-template>\n  <ng-template matStepperIcon=\"done\">\n    <lux-icon luxIconName=\"lux-interface-validation-check\" luxIconSize=\"1.25rem\"></lux-icon>\n  </ng-template>\n  <ng-template matStepperIcon=\"error\">\n    <lux-icon luxIconName=\"lux-interface-delete-1\" luxIconSize=\"1.25rem\"></lux-icon>\n  </ng-template>\n  <ng-template matStepperIcon=\"home\">\n    <lux-icon luxIconName=\"lux-interface-home-3\" luxIconSize=\"1.25rem\"></lux-icon>\n  </ng-template>\n</mat-vertical-stepper>\n","import { CdkStepHeader, StepperSelectionEvent } from '@angular/cdk/stepper';\nimport { NgClass } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ComponentFactory,\n  ComponentFactoryResolver,\n  ComponentRef,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  ViewContainerRef,\n  inject\n} from '@angular/core';\nimport { MatStepper } from '@angular/material/stepper';\nimport { Subscription } from 'rxjs';\nimport { skip } from 'rxjs/operators';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\nimport { LuxUtil } from '../../lux-util/lux-util';\nimport { LuxStepperHelperService } from './lux-stepper-helper.service';\nimport { ILuxStepperButtonConfig } from './lux-stepper-model/lux-stepper-button-config.interface';\nimport { ILuxStepperConfiguration } from './lux-stepper-model/lux-stepper-configuration.interface';\nimport { LuxStepComponent } from './lux-stepper-subcomponents/lux-step.component';\nimport { LuxStepperHorizontalComponent } from './lux-stepper-subcomponents/lux-stepper-horizontal/lux-stepper-horizontal.component';\nimport { LuxStepperVerticalComponent } from './lux-stepper-subcomponents/lux-stepper-vertical/lux-stepper-vertical.component';\n\n@Component({\n  selector: 'lux-stepper',\n  templateUrl: './lux-stepper.component.html',\n  styleUrls: ['./lux-stepper.component.scss'],\n  imports: [LuxStepperVerticalComponent, NgClass, LuxStepperHorizontalComponent]\n})\nexport class LuxStepperComponent implements AfterViewInit, OnDestroy, OnInit {\n  stepperService = inject(LuxStepperHelperService);\n  private cdr = inject(ChangeDetectorRef);\n  private cfr = inject(ComponentFactoryResolver);\n  private elementRef = inject(ElementRef);\n  private queryService = inject(LuxMediaQueryObserverService);\n\n  private readonly _DEFAULT_PREV_BTN_CONF: ILuxStepperButtonConfig = {\n    label:''\n  };\n  private readonly _DEFAULT_NEXT_BTN_CONF: ILuxStepperButtonConfig = {\n    label: ''\n  };\n  private readonly _DEFAULT_FIN_BTN_CONF: ILuxStepperButtonConfig = {\n    label: '',\n    color: 'primary'\n  };\n\n  @ContentChildren(LuxStepComponent) luxSteps!: QueryList<LuxStepComponent>;\n\n  @Output() luxFinishButtonClicked = new EventEmitter<void>();\n  @Output() luxStepChanged = new EventEmitter<StepperSelectionEvent>();\n  @Output() luxCurrentStepNumberChange = new EventEmitter<number>();\n  @Output() luxCheckValidation = new EventEmitter<number>();\n  @Output() luxStepClicked = new EventEmitter<number>();\n\n  matStepper!: MatStepper;\n  matStepLabels!: ViewContainerRef[];\n  matStepHeaders!: CdkStepHeader[];\n\n  stepperConfiguration: ILuxStepperConfiguration = {\n    luxCurrentStepNumber: 0,\n    luxShowNavigationButtons: true,\n    luxHorizontalStepAnimationActive: true,\n    luxEditedIconName: 'lux-interface-edit-pencil'\n  };\n\n  private subscriptions: Subscription[] = [];\n  mobileView?: boolean;\n  subscription?: Subscription;\n  constructor() {\n    // Die Default-Konfiguration präventiv als Startwert setzen\n    this.luxPreviousButtonConfig = this._DEFAULT_PREV_BTN_CONF;\n    this.luxNextButtonConfig = this._DEFAULT_NEXT_BTN_CONF;\n    this.luxFinishButtonConfig = this._DEFAULT_FIN_BTN_CONF;\n    // Den Stepper im Helper-Service bekannt machen\n    this.stepperService.registerStepper(this);\n  }\n  ngOnInit() {\n    this.subscription = this.queryService.getMediaQueryChangedAsObservable().subscribe((query) => {\n      this.mobileView = query === 'xs' || query === 'sm';\n    });\n  }\n\n  ngAfterViewInit() {\n    // Änderungen an den steps sollten auch dem Konfigurationsobjekt bekannt gemacht werden\n    this.subscriptions.push(\n      this.luxSteps.changes.subscribe(() => {\n        this.stepperConfiguration.luxSteps = this.luxSteps.toArray();\n        this.cdr.detectChanges();\n        this.updateIcons();\n      })\n    );\n    // Initial die aktuellen steps in die Konfiguration schreiben\n    this.stepperConfiguration.luxSteps = this.luxSteps.toArray();\n    this.cdr.detectChanges();\n\n    // Falls initial bereits bestimmt wurde, dass individuelle Icons genutzt werden, diese generieren\n    if (this.stepperConfiguration.luxUseCustomIcons) {\n      this.generateCustomIcons();\n    }\n\n    // Workaround: this.matStepper._stepHeader.\n    // Normalerweise sollte man über this.matStepper._stepHeader an die MatStepHeader kommen,\n    // aber leider ist mit Angular 9 die QueryList<MatStepHeader> nur in diesem Lifecycle Hook\n    // \"ngAfterViewInit\" gefüllt und danach immer leer. Deshalb werden hier die MatStepHeader\n    // zwischengespeichert.\n    this.matStepHeaders = this.matStepper._stepHeader.toArray();\n\n    this.subscriptions.push(\n      this.matStepper._stepHeader.changes.subscribe((newStepHeaders) => {\n        this.matStepHeaders = newStepHeaders.toArray();\n      })\n    );\n\n    // Auf next/previous Aufrufe aus dem Service horchen und entsprechend reagieren\n    this.subscriptions.push(\n      this.stepperService\n        .getObservable(this)\n        .pipe(skip(1))\n        .subscribe((next: boolean | null) => {\n          // Voraussetzung: Stepper nicht deaktiviert\n          if (!this.stepperConfiguration.luxDisabled) {\n            if (next === true) {\n              this.checkValidation();\n              this.matStepper.next();\n              if (this.matStepper.selectedIndex < this.matStepHeaders.length) {\n                this.matStepHeaders[this.matStepper.selectedIndex].focus();\n              }\n            } else if (next === false) {\n              this.matStepper.previous();\n              if (this.matStepper.selectedIndex < this.matStepHeaders.length) {\n                this.matStepHeaders[this.matStepper.selectedIndex].focus();\n              }\n            }\n          }\n        })\n    );\n\n    // Änderungen an den Icons jedes einzelnen Steps führt zu Neugenerierung aller individuellen Icons\n    // ==> Material erlaubt leider nur alle Icons identisch zu ändern, nicht für jeden Step einzeln, deshalb\n    // generieren wir selbst die Icons.\n    this.luxSteps.toArray().forEach((luxStep: LuxStepComponent) => {\n      this.subscriptions.push(\n        luxStep.getIconChangeObsv().subscribe((iconChange: boolean) => {\n          if (this.stepperConfiguration.luxUseCustomIcons && iconChange) {\n            this.updateIcons();\n          }\n        })\n      );\n    });\n\n    this.setFocusedCSS(this.luxCurrentStepNumber);\n    this.cdr.detectChanges();\n  }\n\n  fixRoleAttributes() {\n    // Workaround: Der Stepper setzt die Rolle \"tablist\" auf den Header, was nicht korrekt ist.\n    // Für den vertikalen Stepper wurde keine einfacher Workaround gefunden.\n    if (!this.luxVerticalStepper) {\n      if (this.elementRef && this.elementRef.nativeElement) {\n        const stepperElements = this.elementRef.nativeElement.getElementsByClassName('mat-stepper-horizontal');\n        if (stepperElements.length > 0) {\n          stepperElements[0].removeAttribute('role');\n        }\n\n        const headerElements = this.elementRef.nativeElement.getElementsByClassName('mat-horizontal-stepper-header-container');\n        if (headerElements.length > 0) {\n          headerElements[0].setAttribute('role', 'tablist');\n        }\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscriptions.forEach((sub) => sub.unsubscribe());\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  /**\n   * Wird beim Wechsel des aktuellen Steps (Klick auf Tab oder .next()/.previous() Aufruf) aufgerufen.\n   * @param selectionEvent\n   */\n  onStepChanged(selectionEvent: StepperSelectionEvent) {\n    this.luxCurrentStepNumber = selectionEvent.selectedIndex;\n    this.luxStepChanged.emit(selectionEvent);\n\n    const matStepHeaders: NodeListOf<any> = this.elementRef.nativeElement.querySelectorAll('mat-step-header');\n    if (matStepHeaders.item(selectionEvent.selectedIndex).className.indexOf('lux-step-header-touched') === -1) {\n      matStepHeaders.item(selectionEvent.selectedIndex).className += ' lux-step-header-touched';\n    }\n\n    this.setFocusedCSS(selectionEvent.selectedIndex);\n  }\n\n  /**\n   * Generiert die individuellen Icons für die Steps.\n   */\n  generateCustomIcons() {\n    const factory = this.cfr.resolveComponentFactory(LuxIconComponent);\n    let index = 0;\n    this.matStepLabels.forEach((stepLabel: ViewContainerRef) => {\n      this.generateCustomIconForStep(stepLabel, this.luxSteps.toArray()[index], factory);\n      index++;\n    });\n  }\n\n  /**\n   * Entfernt die eigenen Icons für die Steps.\n   */\n  clearCustomIcons() {\n    this.matStepLabels.forEach((stepLabel: ViewContainerRef) => {\n      stepLabel.clear();\n    });\n  }\n\n  /**\n   * Stößt die Validierungsprüfung für den aktuell sichtbaren Step und dessen StepControl (wenn vorhanden) an.\n   */\n  checkValidation() {\n    const stepControl = this.luxSteps.toArray()[this.stepperConfiguration.luxCurrentStepNumber ?? 0].luxStepControl;\n    if (stepControl) {\n      LuxUtil.showValidationErrors(stepControl);\n    }\n  }\n\n  onStepClicked(event: number) {\n    this.luxStepClicked.emit(event);\n\n    this.checkValidation();\n    // Das Event könnte interessant sein, wenn die Property \"luxCompleted\" verwendet wird und kein Formular.\n    this.luxCheckValidation.emit(event);\n  }\n\n  /**\n   * Generiert die Icons für einen einzelnen Step\n   * @param stepLabel\n   * @param luxStep\n   * @param factory\n   */\n  private generateCustomIconForStep(stepLabel: ViewContainerRef, luxStep: LuxStepComponent, factory: ComponentFactory<LuxIconComponent>) {\n    if (luxStep && luxStep.luxIconName) {\n      // Das edited und normal Icon generieren\n      const componentIconEdited: ComponentRef<LuxIconComponent> = stepLabel.createComponent(factory);\n      const instanceIconEdited: LuxIconComponent = componentIconEdited.instance;\n\n      instanceIconEdited.luxIconName = this.luxEditedIconName;\n      instanceIconEdited.luxIconSize = '1.25rem';\n      instanceIconEdited.luxRounded = true;\n      instanceIconEdited.luxMargin = '0 0.5rem 0 0';\n      instanceIconEdited.luxPadding = '0.625rem';\n      componentIconEdited.location.nativeElement.className += ' lux-stepper-edited-icon';\n\n      const componentIconNormal: ComponentRef<LuxIconComponent> = stepLabel.createComponent(factory);\n      const instanceIconNormal: LuxIconComponent = componentIconNormal.instance;\n      instanceIconNormal.luxIconName = luxStep.luxIconName;\n      instanceIconNormal.luxIconSize = '1.25rem';\n      instanceIconNormal.luxRounded = true;\n      instanceIconNormal.luxMargin = '0 0.5rem 0 0';\n      instanceIconNormal.luxPadding = '0.625rem';\n      componentIconNormal.location.nativeElement.className += ' lux-stepper-normal-icon';\n    }\n  }\n\n  /**\n   * Aktualisiert die aktuellen Icons, entfernt zunächst die individuellen Icons und\n   * versucht anschließend diese neu zu generieren (nötig bei Änderungen).\n   */\n  private updateIcons() {\n    if (this.matStepLabels) {\n      this.clearCustomIcons();\n      if (this.stepperConfiguration.luxUseCustomIcons) {\n        this.generateCustomIcons();\n      }\n    }\n  }\n\n  private setFocusedCSS(index: number) {\n    const matStepHeaders: NodeListOf<any> = this.elementRef.nativeElement.querySelectorAll('mat-step-header');\n    if (matStepHeaders.item(index).className.indexOf('lux-step-header-touched') === -1) {\n      matStepHeaders.item(index).className += ' lux-step-header-touched';\n    }\n  }\n\n  /**** Getter/Setter luxCurrentStepNumber ****/\n  get luxCurrentStepNumber() {\n    return this.stepperConfiguration.luxCurrentStepNumber ?? 0;\n  }\n\n  @Input() set luxCurrentStepNumber(step: number) {\n    if (step !== this.luxCurrentStepNumber) {\n      setTimeout(() => {\n        // OutOfBound-Steps abfangen\n        step = step < 0 ? 0 : step;\n        step = step >= this.luxSteps.length ? this.luxSteps.length - 1 : step;\n\n        this.stepperConfiguration.luxCurrentStepNumber = step;\n        this.luxCurrentStepNumberChange.emit(this.stepperConfiguration.luxCurrentStepNumber);\n      });\n    }\n  }\n\n  /**** Getter/Setter luxUseCustomIcons ****/\n  get luxUseCustomIcons() {\n    return this.stepperConfiguration.luxUseCustomIcons ?? false;\n  }\n\n  @Input() set luxUseCustomIcons(use: boolean) {\n    this.stepperConfiguration.luxUseCustomIcons = use;\n    setTimeout(() => {\n      this.updateIcons();\n    });\n  }\n\n  /**** Getter/Setter luxEditedIconName ****/\n  get luxEditedIconName() {\n    return this.stepperConfiguration.luxEditedIconName ?? '';\n  }\n\n  @Input() set luxEditedIconName(iconName: string) {\n    this.stepperConfiguration.luxEditedIconName = iconName;\n    this.updateIcons();\n  }\n\n  /**** Getter/Setter luxVerticalStepper ****/\n  get luxVerticalStepper() {\n    return this.stepperConfiguration.luxVerticalStepper!;\n  }\n\n  @Input() set luxVerticalStepper(vertical: boolean) {\n    this.stepperConfiguration.luxVerticalStepper = vertical;\n\n    if (!vertical) {\n      setTimeout(() => {\n        this.fixRoleAttributes();\n      });\n    }\n  }\n\n  /**** Getter/Setter luxLinear ****/\n  get luxLinear() {\n    return this.stepperConfiguration.luxLinear ?? true;\n  }\n\n  @Input() set luxLinear(linear: boolean) {\n    this.stepperConfiguration.luxLinear = linear;\n  }\n\n  /**** Getter/Setter luxDisabled ****/\n  get luxDisabled() {\n    return this.stepperConfiguration.luxDisabled ?? false;\n  }\n\n  @Input() set luxDisabled(disabled: boolean) {\n    this.stepperConfiguration.luxDisabled = disabled;\n  }\n\n  /**** Getter/Setter luxShowNavigationButtons ****/\n  get luxShowNavigationButtons() {\n    return this.stepperConfiguration.luxShowNavigationButtons ?? true;\n  }\n\n  @Input() set luxShowNavigationButtons(showNavButtons: boolean) {\n    this.stepperConfiguration.luxShowNavigationButtons = showNavButtons;\n  }\n\n  /**** Getter/Setter luxHorizontalStepAnimationActive ****/\n  get luxHorizontalStepAnimationActive() {\n    return this.stepperConfiguration.luxHorizontalStepAnimationActive ?? false;\n  }\n\n  @Input() set luxHorizontalStepAnimationActive(animationActive: boolean) {\n    this.stepperConfiguration.luxHorizontalStepAnimationActive = animationActive;\n  }\n\n  /**** Getter/Setter luxPreviousButtonConfig ****/\n  get luxPreviousButtonConfig() {\n    return this.stepperConfiguration.luxPreviousButtonConfig!;\n  }\n\n  @Input() set luxPreviousButtonConfig(config: ILuxStepperButtonConfig | undefined) {\n    this.stepperConfiguration.luxPreviousButtonConfig = config ? config : this._DEFAULT_PREV_BTN_CONF;\n  }\n\n  /**** Getter/Setter luxNextButtonConfig ****/\n  get luxNextButtonConfig(): ILuxStepperButtonConfig | undefined {\n    return this.stepperConfiguration.luxNextButtonConfig!;\n  }\n\n  @Input() set luxNextButtonConfig(config: ILuxStepperButtonConfig | undefined) {\n    this.stepperConfiguration.luxNextButtonConfig = config ? config : this._DEFAULT_NEXT_BTN_CONF;\n  }\n\n  /**** Getter/Setter luxFinishButtonConfig ****/\n  get luxFinishButtonConfig() {\n    return this.stepperConfiguration.luxFinishButtonConfig!;\n  }\n\n  @Input() set luxFinishButtonConfig(config: ILuxStepperButtonConfig | undefined) {\n    this.stepperConfiguration.luxFinishButtonConfig = config ? config : this._DEFAULT_FIN_BTN_CONF;\n  }\n}\n","@switch (luxVerticalStepper) {\n<!-- VERTIKALER STEPPER -->\n@case (true) {\n<lux-stepper-vertical\n  [luxStepperConfig]=\"stepperConfiguration\"\n  (luxMatStepperLoaded)=\"matStepper = $event\"\n  (luxMatStepLabelsLoaded)=\"matStepLabels = $event\"\n  (luxStepChanged)=\"onStepChanged($event)\"\n  (luxFinButtonClicked)=\"luxFinishButtonClicked.emit($event)\"\n  (luxPrevButtonClicked)=\"stepperService.previousStep(this)\"\n  (luxNextButtonClicked)=\"stepperService.nextStep(this)\"\n  (luxStepClicked)=\"onStepClicked($event)\"\n  [ngClass]=\"{ 'lux-stepper-mobile': mobileView }\"\n>\n</lux-stepper-vertical>\n}\n<!-- HORIZONTALER STEPPER -->\n@default {\n<lux-stepper-horizontal\n  [luxStepperConfig]=\"stepperConfiguration\"\n  (luxMatStepperLoaded)=\"matStepper = $event\"\n  (luxMatStepLabelsLoaded)=\"matStepLabels = $event\"\n  (luxStepChanged)=\"onStepChanged($event)\"\n  (luxFinButtonClicked)=\"luxFinishButtonClicked.emit($event)\"\n  (luxPrevButtonClicked)=\"stepperService.previousStep(this)\"\n  (luxNextButtonClicked)=\"stepperService.nextStep(this)\"\n  (luxStepClicked)=\"onStepClicked($event)\"\n  [ngClass]=\"{ 'lux-stepper-mobile': mobileView }\"\n>\n</lux-stepper-horizontal>\n} }\n\n<ng-content select=\"lux-step\"></ng-content>\n<div class=\"lux-stepper-disabled-overlay\" [class.lux-hidden]=\"!luxDisabled\"></div>\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { MatCard, MatCardHeader, MatCardSubtitle, MatCardTitle } from '@angular/material/card';\nimport { Subscription } from 'rxjs';\nimport {\n  LuxBadgeNotificationColor,\n  LuxBadgeNotificationDirective,\n  LuxBadgeNotificationSize\n} from '../../lux-directives/lux-badge-notification/lux-badge-notification.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxTooltipDirective } from '../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\n\n@Component({\n  selector: 'lux-tile-ac',\n  templateUrl: './lux-tile-ac.component.html',\n  imports: [MatCard, LuxTagIdDirective, LuxBadgeNotificationDirective, MatCardTitle, MatCardSubtitle, LuxTooltipDirective, MatCardHeader],\n  host: { class: 'lux-flex' }\n})\nexport class LuxTileAcComponent implements OnInit, OnChanges, OnDestroy {\n  private queryService = inject(LuxMediaQueryObserverService);\n\n  @Input() luxLabel?: string;\n  @Input() luxLabelTruncateAfterOneLine = false;\n  @Input() luxLabelTruncateAfterTwoLines = false;\n  @Input() luxSubTitle?: string;\n  @Input() luxSubTitleTruncateAfterOneLine = false;\n  @Input() luxSubTitleTruncateAfterTwoLines = false;\n  @Input() luxTagId?: string;\n\n  @Input() set luxShowNotification(value: boolean) {\n    this._showNotification = value;\n    this.updateBadgeContent();\n  }\n  get luxShowNotification() {\n    return this._showNotification;\n  }\n\n  @Input() set luxCounter(counter: number | undefined) {\n    this._counter = counter;\n    this.updateBadgeContent();\n  }\n  get luxCounter() {\n    return this._counter;\n  }\n\n  @Input() luxCounterCap = 10;\n  @Input() luxNotificationColor: LuxBadgeNotificationColor = 'primary';\n  @Input() luxNotificationSize: LuxBadgeNotificationSize = 'medium';\n\n  private _showNotification = false;\n  private _counter?: number;\n\n  luxBadgeContent = '';\n\n  @Output() luxClicked = new EventEmitter<Event>();\n\n  mobileView?: boolean;\n  subscription?: Subscription;\n\n  ngOnInit() {\n    this.subscription = this.queryService.getMediaQueryChangedAsObservable().subscribe((query) => {\n      this.mobileView = query === 'xs' || query === 'sm';\n    });\n    this.updateBadgeContent();\n  }\n\n  ngOnChanges() {\n    this.updateBadgeContent();\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  clicked() {\n    this.luxClicked.emit();\n  }\n\n  getBadgeContent() {\n    this.updateBadgeContent();\n    return this.luxBadgeContent;\n  }\n\n  private updateBadgeContent() {\n    if (!this.luxCounter) {\n      if (this.luxShowNotification) {\n        this.luxBadgeContent = ' ';\n      } else {\n        this.luxBadgeContent = '';\n      }\n    } else {\n      this.luxBadgeContent = '' + this.luxCounter;\n    }\n  }\n}\n","<mat-card\n  appearance=\"raised\"\n  (click)=\"clicked()\"\n  (keydown.enter)=\"clicked()\"\n  (keydown.space)=\"clicked()\"\n  luxTagIdHandler\n  [luxTagId]=\"luxTagId\"\n  tabindex=\"0\"\n  class=\"lux-cursor lux-tile-ac\"\n  [luxBadgeNotification]=\"getBadgeContent()\"\n  [luxBadgeColor]=\"luxNotificationColor\"\n  luxBadgePosition=\"above after\"\n  [luxBadgeSize]=\"luxNotificationSize\"\n  [luxBadgeCap]=\"luxCounterCap\"\n  role=\"link\"\n  [attr.aria-label]=\"luxLabel\"\n  [attr.aria-description]=\"luxSubTitle\"\n>\n  <mat-card-header class=\"lux-tile-header\">\n    <mat-card-title class=\"lux-tile-title\">\n      <span\n        [class.lux-hyphenate]=\"!luxLabelTruncateAfterOneLine\"\n        [style.display]=\"luxLabelTruncateAfterOneLine && !luxLabelTruncateAfterTwoLines ? 'block' : null\"\n        [class.lux-crop]=\"luxLabelTruncateAfterOneLine\"\n        [class.lux-crop-2-lines]=\"luxLabelTruncateAfterTwoLines\"\n        luxTooltip=\"{{ luxLabel }}\"\n        [luxTooltipShowDelay]=\"500\"\n        [luxTooltipDisabled]=\"!luxLabelTruncateAfterOneLine && !luxLabelTruncateAfterTwoLines\"\n        [attr.aria-label]=\"luxLabel\"\n        >{{ luxLabel }}</span\n      >\n    </mat-card-title>\n    <div class=\"lux-tile-icon-container\">\n      <ng-content select=\"lux-icon\"></ng-content>\n      <ng-content select=\"lux-image\"></ng-content>\n    </div>\n    <mat-card-subtitle class=\"lux-tile-subtitle\"\n      ><span\n        [class.lux-hyphenate]=\"!luxSubTitleTruncateAfterOneLine\"\n        [style.display]=\"luxSubTitleTruncateAfterOneLine && !luxSubTitleTruncateAfterTwoLines ? 'block' : null\"\n        [class.lux-crop]=\"luxSubTitleTruncateAfterOneLine\"\n        [class.lux-crop-2-lines]=\"luxSubTitleTruncateAfterTwoLines\"\n        luxTooltip=\"{{ luxSubTitle }}\"\n        [luxTooltipShowDelay]=\"500\"\n        [luxTooltipDisabled]=\"!luxSubTitleTruncateAfterOneLine && !luxSubTitleTruncateAfterTwoLines\"\n        [attr.aria-label]=\"luxLabel\"\n        >{{ luxSubTitle }}</span\n      ></mat-card-subtitle\n    >\n  </mat-card-header>\n</mat-card>\n","import { NgClass } from '@angular/common';\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { Subscription } from 'rxjs';\nimport { LuxBadgeNotificationDirective } from '../../lux-directives/lux-badge-notification/lux-badge-notification.directive';\nimport { LuxTagIdDirective } from '../../lux-directives/lux-tag-id/lux-tag-id.directive';\nimport { LuxTooltipDirective } from '../../lux-directives/lux-tooltip/lux-tooltip.directive';\nimport { LuxMediaQueryObserverService } from '../../lux-util/lux-media-query-observer.service';\n\n@Component({\n  selector: 'lux-tile',\n  templateUrl: './lux-tile.component.html',\n  imports: [MatCard, LuxTagIdDirective, NgClass, LuxBadgeNotificationDirective, MatCardContent, LuxTooltipDirective]\n})\nexport class LuxTileComponent implements OnInit, OnDestroy {\n  private queryService = inject(LuxMediaQueryObserverService);\n\n  private static _notificationNewClass = 'lux-notification-new';\n  private static _notificationReadClass = 'lux-notification-read';\n\n  @Input() luxLabel?: string;\n  @Input() luxLabelTruncateAfterOneLine = false;\n  @Input() luxLabelTruncateAfterTwoLines = false;\n  @Input() luxTagId?: string;\n  @Input() luxShowNotification?: boolean;\n  @Input() luxCounter?: number;\n  @Input() luxCounterCap = 10;\n  @Input() luxShowShadow = true;\n\n  @Output() luxClicked = new EventEmitter<Event>();\n\n  mobileView?: boolean;\n  subscription?: Subscription;\n\n  ngOnInit() {\n    this.subscription = this.queryService.getMediaQueryChangedAsObservable().subscribe((query) => {\n      this.mobileView = query === 'xs' || query === 'sm';\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  clicked() {\n    this.luxClicked.emit();\n  }\n\n  getNotificationIconColorClass(): string {\n    return this.luxShowNotification ? LuxTileComponent._notificationNewClass : LuxTileComponent._notificationReadClass;\n  }\n}\n","<mat-card\n  (click)=\"clicked()\"\n  (keydown.enter)=\"clicked()\"\n  (keydown.space)=\"clicked()\"\n  luxTagIdHandler\n  [luxTagId]=\"luxTagId\"\n  tabindex=\"0\"\n  class=\"lux-cursor lux-tile lux-tile-mobile-view\"\n  [ngClass]=\"{ 'lux-tile-desktop-view': !mobileView, 'lux-tile-mobile': mobileView, 'lux-tile-shadow': luxShowShadow }\"\n  [luxBadgeNotification]=\"luxCounter ? '' + luxCounter : ''\"\n  luxBadgeColor=\"accent\"\n  [luxBadgeCap]=\"luxCounterCap\"\n  [luxBadgeOverlap]=\"true\"\n>\n  <mat-card-content>\n    <div class=\"lux-tile-content-container lux-flex lux-flex-col\">\n      <div class=\"lux-tile-icon lux-flex lux-place-content-center lux-items-center\" [ngClass]=\"{ 'lux-tile-mobile': mobileView }\">\n        <ng-content select=\"lux-icon\"></ng-content>\n        <ng-content select=\"lux-image\"></ng-content>\n      </div>\n\n      <h2 class=\"lux-tile-label lux-flex lux-place-content-center lux-items-center\">\n        <span\n          [class.lux-crop]=\"luxLabelTruncateAfterOneLine\"\n          [class.lux-crop-2-lines]=\"luxLabelTruncateAfterTwoLines\"\n          luxTooltip=\"{{ luxLabel }}\"\n          [luxTooltipShowDelay]=\"500\"\n          [luxTooltipDisabled]=\"!luxLabelTruncateAfterOneLine && !luxLabelTruncateAfterTwoLines\"\n          [attr.aria-label]=\"luxLabel\"\n          >{{ luxLabel }}</span\n        >\n      </h2>\n    </div>\n  </mat-card-content>\n</mat-card>\n\n@if (luxShowNotification !== undefined && luxShowNotification !== null) {\n<div\n  class=\"lux-flex lux-flex-grow-1 lux-flex-shrink-1 lux-flex-basis-full\"\n  [ngClass]=\"[\n    'lux-tile-notification-icon',\n    getNotificationIconColorClass(),\n    luxCounter !== null && luxCounter !== undefined ? 'lux-badge-notification-visible' : '',\n    mobileView ? 'lux-tile-notification-mobile' : ''\n  ]\"\n></div>\n}\n","import { Component, DestroyRef, Input, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { LuxConsoleService } from '../../lux-util/lux-console.service';\nimport { LuxFieldValues, LuxLookupParameters } from '../lux-lookup-model/lux-lookup-parameters';\nimport { LuxLookupTableEntry } from '../lux-lookup-model/lux-lookup-table-entry';\nimport { LuxLookupHandlerService } from '../lux-lookup-service/lux-lookup-handler.service';\nimport { LuxLookupService } from '../lux-lookup-service/lux-lookup.service';\n\n@Component({\n  selector: 'lux-lookup-label',\n  templateUrl: './lux-lookup-label.component.html'\n})\nexport class LuxLookupLabelComponent implements OnInit {\n  private readonly destroyRef = inject(DestroyRef);\n\n  lookupService: LuxLookupService;\n  lookupHandler: LuxLookupHandlerService;\n  logger: LuxConsoleService;\n  lookupParameters?: LuxLookupParameters;\n  entry?: LuxLookupTableEntry;\n\n  init = false;\n  _luxLookupKnr!: number;\n  _luxTableKey!: string;\n  _luxTableNo!: string;\n  _luxFields?: LuxFieldValues[];\n\n  @Input() luxLookupId!: string;\n  @Input() luxLookupUrl = '/lookup/';\n  @Input() luxBezeichnung = 'kurz';\n\n  @Input()\n  get luxLookupKnr(): number {\n    return this._luxLookupKnr;\n  }\n\n  set luxLookupKnr(knr: number) {\n    const changed = knr !== this._luxLookupKnr;\n\n    this._luxLookupKnr = knr;\n\n    if (this.init && changed) {\n      this.fetchLookupData();\n    }\n  }\n\n  @Input()\n  get luxTableNo(): string {\n    return this._luxTableNo;\n  }\n\n  set luxTableNo(tableNo: string) {\n    const changed = tableNo !== this._luxTableNo;\n\n    this._luxTableNo = tableNo;\n\n    if (this.init && changed) {\n      this.fetchLookupData();\n    }\n  }\n\n  @Input()\n  get luxTableKey(): string {\n    return this._luxTableKey;\n  }\n\n  set luxTableKey(key: string) {\n    const changed = key !== this._luxTableKey;\n\n    this._luxTableKey = key;\n\n    if (this.init && changed) {\n      this.fetchLookupData();\n    }\n  }\n\n  @Input()\n  get luxFields(): LuxFieldValues[] | undefined {\n    return this._luxFields;\n  }\n\n  set luxFields(fields: LuxFieldValues[] | undefined) {\n    const changed = fields !== this._luxFields;\n\n    this._luxFields = fields;\n\n    if (this.init && changed) {\n      this.fetchLookupData();\n    }\n  }\n\n  constructor() {\n    const lookupService = inject(LuxLookupService);\n    const lookupHandler = inject(LuxLookupHandlerService);\n    const luxConsoleLogger = inject(LuxConsoleService);\n\n    this.lookupService = lookupService;\n    this.lookupHandler = lookupHandler;\n    this.logger = luxConsoleLogger;\n  }\n\n  ngOnInit() {\n    if (!this.luxLookupKnr) {\n      console.warn(`The lookup label with the table number ${this.luxLookupKnr} has no LookupKnr.`);\n    }\n\n    if (!this.luxLookupId) {\n      console.warn(`The lookup label with the table number ${this.luxTableNo} has no LookupId.`);\n    }\n\n    if (!this.luxTableNo) {\n      console.warn(`The lookup label with the LookupId ${this.luxLookupId} has no table number`);\n    }\n\n    if (!this.luxTableKey) {\n      console.warn(`The lookup label with the table number ${this.luxTableNo} has no table key`);\n    }\n\n    this.fetchLookupData();\n\n    this.lookupHandler.addLookupElement(this.luxLookupId);\n\n    const lookupElementObs = this.lookupHandler.getLookupElementObsv(this.luxLookupId);\n    if (!lookupElementObs) {\n      throw Error(`Observable \"${this.luxLookupId}\" not found.\"`);\n    }\n\n    lookupElementObs.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.fetchLookupData();\n    });\n\n    this.init = true;\n  }\n\n  protected fetchLookupData() {\n    if (this.isReadyToFetch()) {\n      const keys: string[] = [this.luxTableKey];\n\n      this.lookupParameters = new LuxLookupParameters({ knr: this.luxLookupKnr, keys, fields: this.luxFields });\n\n      this.lookupService\n        .getLookupTable(this.luxTableNo, this.lookupParameters, this.luxLookupUrl)\n        .subscribe((entries: LuxLookupTableEntry[]) => {\n          if (typeof entries !== 'undefined' && entries.length === 1) {\n            this.entry = entries[0];\n          }\n        });\n    }\n  }\n\n  /**\n   * liefert die Bezeichnung (Kurz- oder Langbezeichnung) des Entries für den Key zur Tabelle.\n   * @returns string\n   */\n  getBezeichnung(): string {\n    let bezeichnung;\n\n    if (this.entry) {\n      if ('kurz' === this.luxBezeichnung) {\n        bezeichnung = this.entry.kurzText;\n      } else if ('lang' === this.luxBezeichnung) {\n        bezeichnung = this.entry.langText1;\n\n        if (!bezeichnung) {\n          bezeichnung = this.entry.kurzText;\n        }\n      }\n    }\n\n    return bezeichnung ?? '';\n  }\n\n  private isReadyToFetch(): boolean {\n    return !!this.luxLookupKnr && !!this.luxLookupId && !!this.luxTableNo && !!this.luxTableKey;\n  }\n}\n","<span>{{ getBezeichnung() }}</span>\n","/**\n * Kennzeichnet einen einzelnen Eintrag in einer Schlüsseltabelle.\n */\nexport class LuxLookupTableEntry {\n  gueltigkeitBis?: string;\n  gueltigkeitVon?: string;\n  key: string;\n  kurzText?: string;\n  langText1?: string;\n  langText2?: string;\n  ableitungsText1?: string;\n  ableitungsText2?: string;\n  ableitungsText3?: string;\n  ableitungsText4?: string;\n  ableitungsText5?: string;\n  ableitungsText6?: string;\n\n  /*\n   * Properties, die nur intern genutzt werden\n   */\n  isUngueltig?: boolean;\n\n  constructor(partial: Partial<LuxLookupTableEntry>) {\n    if (!Object.hasOwn(partial, 'key') || !partial.key) {\n      throw Error(`The LuxLookupTableEntry has no key.`);\n    }\n    this.key = partial.key;\n\n    Object.assign(this, partial);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'luxAlphabeticallySorted' })\nexport class LuxAlphabeticallySortedPipe implements PipeTransform {\n  transform(array: any[]): any {\n    if (!array) {\n      return [];\n    }\n    return this.sortAlphabetically(array);\n  }\n\n  private sortAlphabetically(array: any[]) {\n    return array.slice().sort((a, b) => {\n      const valueA = a.label || '';\n      const valueB = b.label || '';\n\n      const stringA = (valueA as string).toLocaleLowerCase();\n      const stringB = (valueB as string).toLocaleLowerCase();\n      return stringA.localeCompare(stringB);\n    });\n  }\n}\n","import { ChangeDetectorRef, inject, OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { Subscription } from 'rxjs';\n\nexport const MS_PER_DAY = 1000 * 60 * 60 * 24;\n\nexport const timeDeltas = [\n  { id: 'years', days: 672, dayUnit: 336 },\n  { id: 'months', days: 56, dayUnit: 28 },\n  { id: 'weeks', days: 14, dayUnit: 7 },\n  { id: 'days', days: 2, dayUnit: 1 }\n];\n\nexport const timeDeltasRelative = [\n  { id: 'tomorrow', days: 1 },\n  { id: 'yesterday', days: -1 },\n  { id: 'today', days: 0 }\n];\n\n@Pipe({ name: 'luxRelativeTimestamp', pure: false })\nexport class LuxRelativeTimestampPipe implements PipeTransform, OnDestroy {\n  private tService = inject(TranslocoService);\n  // ChangeDetectorRef is only available when Angular creates the pipe inside a view. For unit tests\n  // where we manually instantiate the pipe, we allow it to be optional to avoid NG0201.\n  private cdr = inject(ChangeDetectorRef, { optional: true });\n  private langSub?: Subscription;\n  private lastArgs?: { timestamp: number | null; defaultText: string; prefix?: string };\n  private lastResult = '';\n\n  constructor() {\n    // Bei Sprachwechsel erneute Berechnung forcieren\n    this.langSub = this.tService.langChanges$.subscribe(() => {\n      if (this.lastArgs) {\n        this.lastResult = this.compute(this.lastArgs.timestamp, this.lastArgs.defaultText, this.lastArgs.prefix);\n        this.cdr?.markForCheck();\n      }\n    });\n  }\n\n  transform(timestamp: number | null, defaultText = '', prefix?: string): string {\n    this.lastArgs = { timestamp, defaultText, prefix };\n    this.lastResult = this.compute(timestamp, defaultText, prefix);\n    return this.lastResult;\n  }\n\n  private compute(timestamp: number | null, defaultText = '', prefix?: string): string {\n    if (!timestamp) {\n      return defaultText;\n    }\n\n    const now = new Date();\n    const then = new Date(timestamp);\n\n    const delta = this.calcDiff(now, then);\n    let timeName = null;\n\n    for (const timeDelta of timeDeltas) {\n      const tempDelta = delta < 0 ? delta * -1 : delta;\n\n      if (tempDelta >= timeDelta.days) {\n        let timeUnits = timeDelta.id === 'days' ? tempDelta : Math.floor(tempDelta / timeDelta.dayUnit);\n        timeUnits *= timeUnits < 0 ? -1 : 1;\n\n        if (!prefix) {\n          if (delta < 0) {\n            timeName = this.tService.translate('luxc.relative-timestamp.past', {\n              prefix: this.tService.translate('luxc.relative-timestamp.ago'),\n              timeUnits: timeUnits,\n              timeDelta: this.tService.translate('luxc.relative-timestamp.' + timeDelta.id)\n            });\n          } else {\n            timeName = this.tService.translate('luxc.relative-timestamp.future', {\n              prefix: this.tService.translate('luxc.relative-timestamp.in'),\n              timeUnits: timeUnits,\n              timeDelta: this.tService.translate('luxc.relative-timestamp.' + timeDelta.id)\n            });\n          }\n        } else {\n          timeName = `${prefix} ${timeUnits} ` + this.tService.translate('luxc.relative-timestamp.' + timeDelta.id);\n        }\n        break;\n      }\n    }\n\n    if (timeName === null) {\n      for (const timeDelta of timeDeltasRelative) {\n        if (delta === timeDelta.days) {\n          timeName = this.tService.translate('luxc.relative-timestamp.' + timeDelta.id);\n          break;\n        }\n      }\n    }\n    return timeName ?? '';\n  }\n\n  private calcDiff(a: Date, b: Date) {\n    const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n    const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n\n    return Math.floor((utc2 - utc1) / MS_PER_DAY);\n  }\n\n  ngOnDestroy(): void {\n    this.langSub?.unsubscribe();\n  }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n@Directive({\n  selector: 'ng-template[luxPopupActions]',\n  exportAs: 'luxPopupActions'\n})\nexport class LuxPopupActionsDirective {\n  public readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { Directive, ElementRef, HostBinding, HostListener, OnDestroy, effect, inject, input } from '@angular/core';\nimport { LuxPopupComponent } from './lux-popup.component';\nimport { LuxPopupCloseReason, LuxPopupPosition } from './lux-popup.types';\n\n@Directive({\n  selector: '[luxPopupTriggerFor]',\n  exportAs: 'luxPopupTrigger'\n})\nexport class LuxPopupTriggerDirective implements OnDestroy {\n  private popup?: LuxPopupComponent;\n  private showTimeoutId?: number;\n  private hideTimeoutId?: number;\n  private activePopup?: LuxPopupComponent;\n  readonly luxPopupTriggerFor = input<LuxPopupComponent | undefined>(undefined);\n  readonly luxPopupPosition = input<LuxPopupPosition>('above');\n  readonly luxPopupShowDelay = input(500);\n  readonly luxPopupHideDelay = input(120);\n  readonly luxPopupDisabled = input(false);\n\n  @HostBinding('attr.aria-haspopup')\n  get ariaHasPopup() {\n    if (!this.popup) {\n      return undefined;\n    }\n\n    return this.popup.luxPersistent() ? 'dialog' : 'true';\n  }\n\n  @HostBinding('attr.aria-controls') ariaControls?: string;\n  @HostBinding('attr.aria-expanded') ariaExpanded?: 'true' | 'false';\n\n  public readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  constructor() {\n    this.setupPopupBindingEffect();\n    this.setupDisabledEffect();\n  }\n\n  open() {\n    if (!this.popup || this.luxPopupDisabled()) {\n      return;\n    }\n\n    if (!this.popup.isOpenFor(this)) {\n      this.popup.open(this);\n    }\n  }\n\n  close(reason: LuxPopupCloseReason = 'program') {\n    if (!this.popup || !this.popup.isOpenFor(this)) {\n      return;\n    }\n\n    this.popup.close(reason);\n  }\n\n  toggle() {\n    if (!this.popup || this.luxPopupDisabled()) {\n      return;\n    }\n\n    this.popup.toggle(this);\n  }\n\n  onPopupOpened(component: LuxPopupComponent) {\n    if (this.popup !== component) {\n      this.popup = component;\n    }\n    this.ariaControls = component.popupId;\n    this.activePopup = component;\n    this.applyAriaExpanded(component, true);\n  }\n\n  onPopupClosed(_reason: LuxPopupCloseReason) {\n    this.clearTimers();\n    this.applyAriaExpanded(this.activePopup, false);\n    this.activePopup = undefined;\n  }\n\n  @HostListener('mouseenter')\n  handleMouseEnter() {\n    if (this.shouldIgnorePointerInteraction()) {\n      return;\n    }\n\n    this.scheduleShow();\n  }\n\n  @HostListener('mouseleave')\n  handleMouseLeave() {\n    if (this.shouldIgnorePointerInteraction()) {\n      return;\n    }\n\n    this.scheduleHide('pointer-leave');\n  }\n\n  @HostListener('focusin')\n  handleFocusIn() {\n    if (this.luxPopupDisabled() || !this.popup) {\n      return;\n    }\n\n    if (this.popup.luxPersistent()) {\n      return;\n    }\n\n    this.scheduleShow();\n  }\n\n  @HostListener('focusout', ['$event'])\n  handleFocusOut(event: FocusEvent) {\n    if (!this.popup || this.popup.luxPersistent()) {\n      return;\n    }\n\n    if (event.relatedTarget && this.elementRef.nativeElement.contains(event.relatedTarget as Node)) {\n      return;\n    }\n\n    this.scheduleHide('trigger-blur');\n  }\n\n  @HostListener('click', ['$event'])\n  handleClick(event: Event) {\n    if (!this.popup || this.luxPopupDisabled()) {\n      return;\n    }\n\n    if (!this.popup.luxPersistent()) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n    this.toggle();\n  }\n\n  @HostListener('longpress')\n  handleLongPress() {\n    if (this.shouldIgnorePointerInteraction()) {\n      return;\n    }\n\n    this.open();\n  }\n\n  @HostListener('touchend')\n  handleTouchEnd() {\n    if (this.shouldIgnorePointerInteraction()) {\n      return;\n    }\n\n    this.scheduleHide('pointer-leave');\n  }\n\n  ngOnDestroy() {\n    this.clearTimers();\n    if (this.popup?.isOpenFor(this)) {\n      this.popup.close('program');\n    }\n  }\n\n  private shouldIgnorePointerInteraction(): boolean {\n    return this.luxPopupDisabled() || !this.popup || this.popup.luxPersistent();\n  }\n\n  private scheduleShow() {\n    if (!this.popup || this.popup.luxPersistent()) {\n      return;\n    }\n\n    this.clearHideTimeout();\n    if (this.showTimeoutId) {\n      return;\n    }\n\n    const delay = Math.max(this.luxPopupShowDelay(), 0);\n    this.showTimeoutId = window.setTimeout(() => {\n      this.showTimeoutId = undefined;\n      this.open();\n    }, delay);\n  }\n\n  private scheduleHide(reason: LuxPopupCloseReason) {\n    if (!this.popup || this.popup.luxPersistent()) {\n      return;\n    }\n\n    this.clearShowTimeout();\n    this.clearHideTimeout();\n    if (!this.popup.isOpenFor(this)) {\n      return;\n    }\n\n    const delay = Math.max(this.luxPopupHideDelay(), 0);\n    this.hideTimeoutId = window.setTimeout(() => {\n      this.hideTimeoutId = undefined;\n      this.close(reason);\n    }, delay);\n  }\n\n  private clearTimers() {\n    this.clearShowTimeout();\n    this.clearHideTimeout();\n  }\n\n  private clearShowTimeout() {\n    if (this.showTimeoutId) {\n      clearTimeout(this.showTimeoutId);\n      this.showTimeoutId = undefined;\n    }\n  }\n\n  private clearHideTimeout() {\n    if (this.hideTimeoutId) {\n      clearTimeout(this.hideTimeoutId);\n      this.hideTimeoutId = undefined;\n    }\n  }\n\n  private applyAriaExpanded(component: LuxPopupComponent | undefined, isOpen: boolean) {\n    if (!component || !component.luxPersistent()) {\n      this.ariaExpanded = undefined;\n      return;\n    }\n\n    this.ariaExpanded = isOpen ? 'true' : 'false';\n  }\n\n  private setupPopupBindingEffect() {\n    effect(() => {\n      const popup = this.luxPopupTriggerFor();\n      const previousPopup = this.popup;\n\n      this.popup = popup;\n\n      if (previousPopup && previousPopup !== popup && previousPopup.isOpenFor(this)) {\n        previousPopup.close('program');\n      } else {\n        this.close('program');\n      }\n\n      this.ariaControls = popup?.popupId;\n      this.applyAriaExpanded(popup, false);\n    });\n  }\n\n  private setupDisabledEffect() {\n    effect(() => {\n      if (!this.luxPopupDisabled()) {\n        return;\n      }\n\n      this.close('program');\n      this.applyAriaExpanded(this.activePopup ?? this.popup, false);\n    });\n  }\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport { ConnectedPosition, Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { ScrollDispatcher } from '@angular/cdk/scrolling';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  ContentChild,\n  EventEmitter,\n  NgZone,\n  OnDestroy,\n  Output,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n  effect,\n  inject,\n  input\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LuxPopupActionsDirective } from './lux-popup-actions.directive';\nimport { LuxPopupTriggerDirective } from './lux-popup-trigger.directive';\nimport { LuxPopupCloseReason, LuxPopupPosition } from './lux-popup.types';\n\nlet nextPopupId = 0;\n\n@Component({\n  selector: 'lux-popup',\n  templateUrl: './lux-popup.component.html',\n  exportAs: 'luxPopup',\n  imports: [NgTemplateOutlet]\n})\nexport class LuxPopupComponent implements OnDestroy {\n  private overlay = inject(Overlay);\n  private viewContainerRef = inject(ViewContainerRef);\n  private zone = inject(NgZone);\n  private dir = inject(Directionality, { optional: true });\n  private document = inject(DOCUMENT);\n  private scrollDispatcher = inject(ScrollDispatcher);\n\n  @ContentChild(LuxPopupActionsDirective) actions?: LuxPopupActionsDirective;\n  @ViewChild('popupTemplate', { static: true }) popupTemplate!: TemplateRef<unknown>;\n\n  readonly luxTitle = input<string | undefined>();\n  readonly luxPersistent = input(false);\n  readonly luxMinWidth = input(220);\n  readonly luxMaxWidth = input(360);\n  readonly luxAriaLabel = input<string | undefined>();\n\n  @Output() luxOpened = new EventEmitter<void>();\n  @Output() luxClosed = new EventEmitter<LuxPopupCloseReason>();\n\n  popupId = `lux-popup-${nextPopupId++}`;\n\n  private overlayRef?: OverlayRef;\n  private portal?: TemplatePortal<unknown>;\n  private documentPointerDownListener?: (event: Event) => void;\n  private documentKeydownListener?: (event: KeyboardEvent) => void;\n  private currentTrigger?: LuxPopupTriggerDirective;\n  private pendingCloseReason: LuxPopupCloseReason = 'program';\n  private focusedElementBeforeOpen?: HTMLElement | null;\n  private scrollSubscription?: Subscription;\n\n  constructor() {\n    this.setupOverlaySizeEffect();\n    this.setupPersistentClassEffect();\n  }\n\n  get role(): 'dialog' | 'tooltip' {\n    return this.luxPersistent() ? 'dialog' : 'tooltip';\n  }\n\n  get minWidthPx() {\n    return Math.max(0, this.luxMinWidth());\n  }\n\n  get maxWidthPx() {\n    return Math.max(this.minWidthPx, this.luxMaxWidth());\n  }\n\n  open(trigger: LuxPopupTriggerDirective) {\n    if (this.currentTrigger === trigger && this.isOpen()) {\n      return;\n    }\n\n    if (this.document.activeElement instanceof HTMLElement) {\n      this.focusedElementBeforeOpen = this.document.activeElement;\n    }\n\n    this.currentTrigger = trigger;\n\n    const overlayConfig = this.buildOverlayConfig(trigger);\n    if (!this.overlayRef) {\n      this.overlayRef = this.overlay.create(overlayConfig);\n      this.overlayRef.detachments().subscribe(() => this.handleOverlayDetached());\n    } else {\n      if (overlayConfig.positionStrategy) {\n        this.overlayRef.updatePositionStrategy(overlayConfig.positionStrategy);\n      }\n      if (overlayConfig.scrollStrategy) {\n        this.overlayRef.updateScrollStrategy(overlayConfig.scrollStrategy);\n      }\n      this.syncPanelClasses(overlayConfig.panelClass);\n    }\n\n    if (!this.portal) {\n      this.portal = new TemplatePortal(this.popupTemplate, this.viewContainerRef);\n    }\n\n    if (!this.overlayRef.hasAttached()) {\n      this.overlayRef.attach(this.portal);\n      this.applyOverlaySize();\n    }\n\n    this.focusPopupIfNeeded();\n\n    this.currentTrigger.onPopupOpened(this);\n    this.addOverlayListeners();\n    this.luxOpened.emit();\n  }\n\n  close(reason: LuxPopupCloseReason = 'program') {\n    if (!this.overlayRef || !this.overlayRef.hasAttached()) {\n      return;\n    }\n\n    this.pendingCloseReason = reason;\n    this.overlayRef.detach();\n\n    if (this.luxPersistent() && this.shouldRestoreFocus(reason)) {\n      this.focusedElementBeforeOpen?.focus();\n    }\n  }\n\n  toggle(trigger: LuxPopupTriggerDirective) {\n    if (this.isOpenFor(trigger)) {\n      this.close('toggle');\n    } else {\n      this.open(trigger);\n    }\n  }\n\n  private shouldRestoreFocus(reason: LuxPopupCloseReason): boolean {\n    switch (reason) {\n      case 'outside':\n      case 'pointer-leave':\n      case 'trigger-blur':\n      case 'scroll':\n        return false;\n      default:\n        return true;\n    }\n  }\n\n  isOpen(): boolean {\n    return !!this.overlayRef?.hasAttached();\n  }\n\n  isOpenFor(trigger: LuxPopupTriggerDirective): boolean {\n    return this.currentTrigger === trigger && this.isOpen();\n  }\n\n  ngOnDestroy() {\n    this.removeOverlayListeners();\n    this.overlayRef?.dispose();\n  }\n\n  private handleOverlayDetached() {\n    if (!this.currentTrigger) {\n      this.removeOverlayListeners();\n      return;\n    }\n\n    const reason = this.pendingCloseReason;\n    this.pendingCloseReason = 'program';\n    this.currentTrigger.onPopupClosed(reason);\n    this.currentTrigger = undefined;\n    this.removeOverlayListeners();\n    this.luxClosed.emit(reason);\n  }\n\n  private buildOverlayConfig(trigger: LuxPopupTriggerDirective): OverlayConfig {\n    const positionStrategy = this.overlay\n      .position()\n      .flexibleConnectedTo(trigger.elementRef)\n      .withFlexibleDimensions(false)\n      .withViewportMargin(8)\n      .withPush(true);\n\n    positionStrategy.withPositions(this.buildPreferredPositions(trigger.luxPopupPosition()));\n\n    return {\n      positionStrategy,\n      scrollStrategy: this.overlay.scrollStrategies.noop(),\n      disposeOnNavigation: true,\n      panelClass: this.resolvePanelClasses()\n    };\n  }\n\n  private buildPreferredPositions(position: LuxPopupPosition): ConnectedPosition[] {\n    const order: LuxPopupPosition[] = [position, 'below', 'above', 'after', 'before', 'left', 'right'];\n    const seen = new Set<string>();\n\n    return order\n      .map((option) => this.mapPosition(option))\n      .filter((pos): pos is ConnectedPosition => {\n        const key = JSON.stringify(pos);\n        if (!pos || seen.has(key)) {\n          return false;\n        }\n        seen.add(key);\n        return true;\n      });\n  }\n\n  private mapPosition(position: LuxPopupPosition): ConnectedPosition {\n    const isRtl = this.dir?.value === 'rtl';\n    const beforeX = isRtl ? 'end' : 'start';\n    const afterX = isRtl ? 'start' : 'end';\n    const offset = 8;\n\n    switch (position) {\n      case 'below':\n        return { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset };\n      case 'above':\n        return { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -offset };\n      case 'after':\n        return { originX: afterX, originY: 'center', overlayX: beforeX, overlayY: 'center', offsetX: offset };\n      case 'before':\n        return { originX: beforeX, originY: 'center', overlayX: afterX, overlayY: 'center', offsetX: -offset };\n      case 'left':\n        return { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -offset };\n      case 'right':\n        return { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: offset };\n      default:\n        return { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: offset };\n    }\n  }\n\n  private resolvePanelClasses(): string[] {\n    const classes = ['lux-popup-panel'];\n    classes.push(this.luxPersistent() ? 'lux-popup-panel--persistent' : 'lux-popup-panel--transient');\n    return classes;\n  }\n\n  private syncPanelClasses(panelClasses?: string | string[]) {\n    if (!this.overlayRef) {\n      return;\n    }\n\n    const classes = Array.isArray(panelClasses) ? panelClasses : panelClasses ? [panelClasses] : [];\n    if (!classes.length) {\n      return;\n    }\n\n    const classList = this.overlayRef.overlayElement.classList;\n    classList.remove('lux-popup-panel--persistent', 'lux-popup-panel--transient');\n    classes.forEach((panelClass) => classList.add(panelClass));\n  }\n\n  private addOverlayListeners() {\n    if (this.documentPointerDownListener || !this.overlayRef) {\n      return;\n    }\n\n    this.zone.runOutsideAngular(() => {\n      this.documentPointerDownListener = (event: Event) => this.handleDocumentPointerDown(event);\n      this.documentKeydownListener = (event: KeyboardEvent) => this.handleDocumentKeydown(event);\n\n      this.document.addEventListener('pointerdown', this.documentPointerDownListener!, true);\n      this.document.addEventListener('keydown', this.documentKeydownListener!, true);\n    });\n\n    this.subscribeToScrollEvents();\n  }\n\n  private removeOverlayListeners() {\n    if (this.documentPointerDownListener) {\n      this.document.removeEventListener('pointerdown', this.documentPointerDownListener, true);\n      this.documentPointerDownListener = undefined;\n    }\n    if (this.documentKeydownListener) {\n      this.document.removeEventListener('keydown', this.documentKeydownListener, true);\n      this.documentKeydownListener = undefined;\n    }\n\n    this.unsubscribeFromScrollEvents();\n  }\n\n  private handleDocumentPointerDown(event: Event) {\n    if (!this.overlayRef || !this.currentTrigger) {\n      return;\n    }\n    const target = event.target as Node | null;\n    const overlayElement = this.overlayRef.overlayElement;\n    const triggerElement = this.currentTrigger.elementRef.nativeElement;\n\n    if (target && (overlayElement.contains(target) || triggerElement.contains(target))) {\n      return;\n    }\n\n    // Listener läuft außerhalb der Angular-Zone, daher Close-Aufruf bewusst wieder hineinführen\n    this.zone.run(() => this.close('outside'));\n  }\n\n  private handleDocumentKeydown(event: KeyboardEvent) {\n    if (event.key !== 'Escape' || !this.isOpen()) {\n      return;\n    }\n\n    event.stopPropagation();\n    // Listener läuft außerhalb der Angular-Zone, daher sicherstellen, dass Change Detection den Escape-Schluss mitbekommt\n    this.zone.run(() => this.close('escape'));\n  }\n\n  private applyOverlaySize() {\n    if (!this.overlayRef) {\n      return;\n    }\n\n    this.overlayRef.updateSize({\n      minWidth: this.minWidthPx,\n      maxWidth: this.maxWidthPx\n    });\n  }\n\n  private focusPopupIfNeeded() {\n    if (!this.luxPersistent()) {\n      return;\n    }\n\n    this.zone.runOutsideAngular(() => {\n      setTimeout(() => {\n        const element = this.overlayRef?.overlayElement.querySelector('.lux-popup') as HTMLElement | null;\n        element?.focus();\n      });\n    });\n  }\n\n  handlePopupKeydown(event: KeyboardEvent) {\n    if (!this.luxPersistent() || !this.overlayRef) {\n      return;\n    }\n\n    if (event.key === 'Escape') {\n      event.stopPropagation();\n      event.preventDefault();\n      this.close('escape');\n      return;\n    }\n\n    if (event.key !== 'Tab') {\n      return;\n    }\n\n    const overlayElement = this.overlayRef.overlayElement;\n    const target = event.target as HTMLElement | null;\n\n    if (!target || !overlayElement.contains(target)) {\n      return;\n    }\n\n    const focusables = this.getFocusableElements(overlayElement);\n    if (!focusables.length) {\n      return;\n    }\n\n    const first = focusables[0];\n    const last = focusables[focusables.length - 1];\n\n    if (!event.shiftKey && target === last) {\n      event.preventDefault();\n      this.close();\n      this.focusTriggerElement();\n      return;\n    }\n\n    if (event.shiftKey && target === first) {\n      event.preventDefault();\n      this.close();\n      this.focusTriggerElement();\n      return;\n    }\n  }\n\n  private focusTriggerElement() {\n    const triggerElement = this.focusedElementBeforeOpen as HTMLElement | null;\n    triggerElement?.focus();\n  }\n\n  private getFocusableElements(root: HTMLElement): HTMLElement[] {\n    const selector = 'a[href], area[href], button, input, select, textarea, [tabindex]';\n    const elements = [root, ...Array.from(root.querySelectorAll<HTMLElement>(selector))];\n    const seen = new Set<HTMLElement>();\n\n    return elements.filter((element) => {\n      if (seen.has(element)) {\n        return false;\n      }\n      if (!this.isFocusable(element)) {\n        return false;\n      }\n      seen.add(element);\n      return true;\n    });\n  }\n\n  private isFocusable(element: HTMLElement): boolean {\n    if (element.tabIndex < 0 || element.hasAttribute('disabled')) {\n      return false;\n    }\n\n    const hasRect = element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0;\n    if (!hasRect) {\n      return false;\n    }\n\n    const inertAncestor = element.closest('[inert]');\n    return !inertAncestor;\n  }\n\n  private subscribeToScrollEvents() {\n    if (this.scrollSubscription) {\n      return;\n    }\n\n    this.scrollSubscription = this.scrollDispatcher.scrolled(0).subscribe(() => {\n      if (!this.isOpen()) {\n        return;\n      }\n      this.zone.run(() => this.close('scroll'));\n    });\n  }\n\n  private unsubscribeFromScrollEvents() {\n    if (!this.scrollSubscription) {\n      return;\n    }\n\n    this.scrollSubscription.unsubscribe();\n    this.scrollSubscription = undefined;\n  }\n\n  private setupOverlaySizeEffect() {\n    effect(() => {\n      this.luxMinWidth();\n      this.luxMaxWidth();\n      if (this.overlayRef?.hasAttached()) {\n        this.applyOverlaySize();\n      }\n    });\n  }\n\n  private setupPersistentClassEffect() {\n    effect(() => {\n      this.luxPersistent();\n      if (this.overlayRef?.hasAttached()) {\n        this.syncPanelClasses(this.resolvePanelClasses());\n      }\n    });\n  }\n}\n","<ng-template #popupTemplate>\n  <div\n    class=\"lux-popup\"\n    [class.lux-popup--persistent]=\"luxPersistent()\"\n    [class.lux-popup--transient]=\"!luxPersistent()\"\n    (keydown)=\"handlePopupKeydown($event)\"\n    [attr.id]=\"popupId\"\n    [attr.role]=\"role\"\n    [attr.tabindex]=\"luxPersistent() ? 0 : -1\"\n    [attr.aria-label]=\"luxAriaLabel() ?? luxTitle() ?? null\"\n    [attr.aria-live]=\"luxPersistent() ? null : 'polite'\"\n    [attr.aria-modal]=\"luxPersistent() ? 'false' : null\"\n    [style.min-width.px]=\"minWidthPx\"\n    [style.max-width.px]=\"maxWidthPx\"\n  >\n    @if (luxTitle()) {\n      <div class=\"lux-popup__title\">\n        {{ luxTitle() }}\n      </div>\n    }\n\n    <div class=\"lux-popup__body\">\n      <ng-content></ng-content>\n    </div>\n\n    @if (actions) {\n      <div class=\"lux-popup__actions\">\n        <ng-template [ngTemplateOutlet]=\"actions.templateRef\"></ng-template>\n      </div>\n    }\n  </div>\n</ng-template>\n","export class LuxSnackbarConfig {\n  iconName?: string = '';\n  iconSize?: string = '3x';\n  iconColor?: string = '';\n  text?: string = '';\n  textColor?: string = '';\n  action?: string = '';\n  actionColor?: string = '';\n\n  constructor(partial: Partial<LuxSnackbarConfig>) {\n    Object.assign(this, partial);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { LuxTourHintComponent } from '../lux-tour-hint.component';\nimport { InitializedTourHintConfig } from '../lux-tour-hint.service';\n\nexport type OnCloseListener = (dontShowAgain: boolean) => void;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxTourHintRef<T = any> {\n  public get target(): any {\n    return this.tourStepConfigs[this.tourStep].target;\n  }\n\n  public get data(): T {\n    return this.tourStepConfigs[this.tourStep].data;\n  }\n\n  public get step(): number {\n    return this.tourStep;\n  }\n\n  public get steps(): number {\n    return this.tourStepConfigs.length;\n  }\n\n  private _opened = false;\n  public get opened(): boolean {\n    return this._opened;\n  }\n\n  private tourHintContainer?: LuxTourHintComponent;\n  private tourStep = 0;\n  private tourStepConfigs: InitializedTourHintConfig[] = [];\n\n  private _optionDontShowAgain = true;\n  public get optionDontShowAgain(): boolean {\n    return this._optionDontShowAgain;\n  }\n\n  private dontShowAgainCallback!: () => void;\n\n  private onCloseListeners: OnCloseListener[] = [];\n\n  constructor() {}\n\n  public init(\n    tourHintContainer: LuxTourHintComponent,\n    configs: InitializedTourHintConfig[],\n    optionDontShowAgain: boolean,\n    dontShowAgainCallback: () => void\n  ) {\n    this.tourHintContainer = tourHintContainer;\n    this.tourStep = 0;\n    this.tourStepConfigs = configs;\n    this._optionDontShowAgain = optionDontShowAgain;\n    this.dontShowAgainCallback = dontShowAgainCallback;\n    this._opened = true;\n\n    this.onCloseListeners = [];\n\n    this.updateTour();\n  }\n\n  private updateTour() {\n    if (!this.tourHintContainer) return;\n\n    const targetElement = this.target;\n    this.tourHintContainer.luxTarget = targetElement;\n  }\n\n  public hasNext(): boolean {\n    return this.tourStep + 1 < this.tourStepConfigs.length;\n  }\n\n  public hasPrevious(): boolean {\n    return this.tourStep - 1 >= 0;\n  }\n\n  public next() {\n    if (!this.hasNext()) {\n      return;\n    }\n\n    this.tourStep++;\n    this.updateTour();\n  }\n\n  public prev() {\n    if (!this.hasPrevious()) {\n      return;\n    }\n\n    this.tourStep--;\n    this.updateTour();\n  }\n\n  public close(dontShowAgain = false) {\n    this.onCloseListeners.forEach((listener) => {\n      listener(dontShowAgain);\n    });\n\n    if (dontShowAgain) {\n      this.dontShowAgainCallback();\n    }\n\n    this.tourHintContainer?.close();\n\n    this._opened = false;\n  }\n\n  public onClose(listener: OnCloseListener) {\n    this.onCloseListeners.push(listener);\n  }\n}\n","import { Component, inject } from '@angular/core';\nimport { TranslocoPipe } from '@jsverse/transloco';\nimport { LuxButtonComponent } from '../../lux-action/lux-button/lux-button.component';\nimport { LuxAriaLabelDirective } from '../../lux-directives/lux-aria/lux-aria-label.directive';\nimport { LuxCheckboxAcComponent } from '../../lux-form/lux-checkbox-ac/lux-checkbox-ac.component';\nimport { LuxIconComponent } from '../../lux-icon/lux-icon/lux-icon.component';\nimport { LuxTourHintRef } from '../lux-tour-hint-model/lux-tour-hint-ref.class';\n\n@Component({\n  selector: 'lux-tour-hint-preset',\n  templateUrl: './lux-tour-hint-preset.component.html',\n  styleUrls: ['./lux-tour-hint-preset.component.scss'],\n  imports: [LuxIconComponent, LuxCheckboxAcComponent, LuxButtonComponent, LuxAriaLabelDirective, TranslocoPipe]\n})\nexport class LuxTourHintPresetComponent {\n  tourRef = inject(LuxTourHintRef);\n\n  public dontShowAgainChecked = false;\n\n  public close() {\n    this.tourRef.close(this.dontShowAgainChecked);\n  }\n}\n","<div class=\"tour-hint-container\">\n  <lux-icon\n    luxTagId=\"btn-tour-hint-close\"\n    class=\"action-close\"\n    luxIconSize=\"1rem\"\n    luxIconName=\"lux-interface-delete-1\"\n    (click)=\"close()\"\n    (keydown.enter)=\"close()\"\n    tabindex=\"0\"\n    aria-label=\"Dialog schließen\"\n    role=\"button\"\n    luxAriaLabel=\"{{ 'luxc.dialog.btn.close.arialabel' | transloco }}\"\n  ></lux-icon>\n\n  <div class=\"tour-hint-inner-container\">\n    <div class=\"tour-hint-data\">\n      <h3 class=\"tour-hint-title\">{{ tourRef.data.title }}</h3>\n      <p class=\"tour-hint-content\">\n        {{ tourRef.data.content }}\n      </p>\n    </div>\n\n    <div class=\"tour-hint-actions\">\n      <div class=\"action-dont-show-again\">\n        @if (tourRef.optionDontShowAgain) {\n        <lux-checkbox-ac [luxNoLabels]=\"true\" luxLabel=\"Nicht wieder anzeigen\" [(luxChecked)]=\"dontShowAgainChecked\"></lux-checkbox-ac>\n        }\n      </div>\n\n      @if (tourRef.steps > 1) {\n      <div class=\"action-navigation\">\n        @if (tourRef.hasPrevious()) {\n        <lux-button\n          luxTagId=\"btn-tour-hint-prev\"\n          luxLabel=\"Vorheriger Schritt\"\n          class=\"action-nav-previous\"\n          luxIconName=\"lux-interface-arrows-button-left\"\n          [luxRounded]=\"true\"\n          (luxClicked)=\"tourRef.prev()\"\n        ></lux-button>\n        }\n        <span class=\"nav-label-step\">Step {{ tourRef.step + 1 }} / {{ tourRef.steps }}</span>\n        @if (tourRef.hasNext()) {\n        <lux-button\n          luxTagId=\"btn-tour-hint-next\"\n          luxLabel=\"Nächster Schritt\"\n          class=\"action-nav-next\"\n          luxIconName=\"lux-interface-arrows-button-right\"\n          [luxRounded]=\"true\"\n          (luxClicked)=\"tourRef.next()\"\n        ></lux-button>\n        }\n      </div>\n      }\n    </div>\n  </div>\n</div>\n","import { NgClass, NgStyle } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild, inject } from '@angular/core';\nimport { LuxTourHintRef } from './lux-tour-hint-model/lux-tour-hint-ref.class';\n\n@Component({\n  selector: 'lux-tour-hint',\n  templateUrl: './lux-tour-hint.component.html',\n  styleUrls: ['./lux-tour-hint.component.scss'],\n  imports: [NgStyle, NgClass]\n})\nexport class LuxTourHintComponent implements OnInit, AfterViewInit {\n  private cdr = inject(ChangeDetectorRef);\n  private element = inject(ElementRef);\n  tourHintRef = inject(LuxTourHintRef);\n\n  //The element which is the target of the hint or tour\n  private _luxTarget: any;\n\n  set luxTarget(luxTarget: any) {\n    this._luxTarget = luxTarget;\n\n    //Needs a timeout or the content will not be rendered and so the bounds cannot be read corretly\n    setTimeout(() => {\n      this.updateTargetAndPositions();\n    });\n  }\n\n  get luxTarget(): any {\n    return this._luxTarget;\n  }\n\n  //CSS Class for the arrow where to point\n  public arrowClass = 'top';\n\n  //Constants which are also used in scss but can't directly be read from here\n  private arrowLength = 16;\n  private shadowPadding = 5;\n\n  //Positions of the tour-hint modal\n  public tourHintPosLeft = 0;\n  public tourHintPosTop = 0;\n\n  //Positions / Sizes of the tour-hint shadows\n  public bgTopSize = 0;\n  public bgBottomSize = 0;\n  public bgLeftSize = 0;\n  public bgRightSize = 0;\n  public bgContentHeight = 0;\n\n  //Style variables for the rendering of a dynamic 'Modal-Arrow'\n  public dynamicArrowStyle = {};\n\n  @ViewChild('tourHintContainer', { read: ElementRef })\n  private tourHintContainer!: ElementRef;\n\n  ngOnInit(): void {\n    //When resizing / min- / maximizing window update all positions\n    addEventListener('resize', () => {\n      this.updateTargetAndPositions();\n    });\n  }\n\n  ngAfterViewInit(): void {\n    //Focus after loaded so we can navigate the tour with arrow keys\n    this.updateTargetAndPositions();\n    this.tourHintContainer.nativeElement.focus();\n  }\n\n  private updateTargetAndPositions() {\n    if (!this.luxTarget) return;\n\n    //Scrolls the element into view\n    //TODO: In some cases scroll 'feels' wrong and target element is not centered on screen.\n    this.luxTarget.scrollIntoView({\n      block: 'center',\n      inline: 'center'\n    });\n\n    const windowWidth = window.innerWidth;\n    const windowHeight = window.innerHeight;\n    const bounds = this.getSurroundingBounds(this.luxTarget);\n\n    this.calculatePositions(windowWidth, windowHeight, bounds);\n\n    //Css variables, positions and styles were changesd so we need to rerender\n    this.cdr.detectChanges();\n  }\n\n  private calculatePositions(winWidth: number, winHeight: number, bounds: any) {\n    if (this.tourHintContainer) {\n      //Calculate where the tour-hint should be shown\n      const calculatedComponentBounds = this.tourHintContainer.nativeElement.getBoundingClientRect();\n      const calculatedWidth = calculatedComponentBounds.width;\n      const calculatedHeight = calculatedComponentBounds.height;\n\n      const spaceTop = bounds.top - calculatedHeight;\n      const spaceBottom = winHeight - bounds.bottom - calculatedHeight;\n      const spaceLeft = bounds.left - calculatedWidth;\n      const spaceRight = winWidth - bounds.right - calculatedWidth;\n      const spaceMax = Math.max(spaceTop, spaceBottom, spaceLeft, spaceRight);\n\n      const neededWidth = calculatedWidth + this.arrowLength;\n      const neededHeight = calculatedHeight + this.arrowLength;\n\n      const showTop = spaceTop === spaceMax;\n      const showBottom = spaceBottom === spaceMax;\n      const showLeft = spaceLeft === spaceMax;\n      const showRight = spaceRight === spaceMax;\n\n      //Min value for offsetting the arrow when tour-hint is at an edge of the screen\n      const arrowOffset = this.arrowLength * 4;\n\n      //Offsets for modal and arrow so when target is outside screen it will be handled correctly\n      let baseOffX = 0;\n      let baseOffY = 0;\n      let arrowOffX = 0;\n      let arrowOffY = 0;\n\n      if (showTop || showBottom) {\n        //Top OR Bottom\n        this.tourHintPosLeft = bounds.midX - this.arrowLength * 2;\n        if (this.tourHintPosLeft < 0) this.tourHintPosLeft = 0;\n\n        baseOffX = this.tourHintPosLeft + neededWidth - winWidth;\n        arrowOffX = baseOffX;\n        baseOffY = 0;\n        arrowOffY = 0;\n\n        if (baseOffX < 0) {\n          baseOffX = 0;\n          arrowOffX = 0;\n        } else if (baseOffX >= calculatedWidth - arrowOffset) arrowOffX = calculatedWidth - arrowOffset;\n\n        if (showTop) {\n          //Show on top\n          this.arrowClass = 'bottom';\n          this.tourHintPosTop = bounds.top - neededHeight;\n        } else {\n          //Show on bottom\n          this.arrowClass = 'top';\n          this.tourHintPosTop = bounds.bottom + this.arrowLength;\n        }\n\n        if (this.tourHintPosTop < 0) this.tourHintPosTop = 0;\n      } else {\n        //Left OR Right\n        this.tourHintPosTop = bounds.midY - this.arrowLength * 2;\n        if (this.tourHintPosTop < 0) this.tourHintPosTop = 0;\n\n        baseOffX = 0;\n        arrowOffX = 0;\n        baseOffY = this.tourHintPosTop + neededHeight - winHeight;\n        arrowOffY = baseOffY;\n\n        if (baseOffY < 0) {\n          baseOffY = 0;\n          arrowOffY = 0;\n        } else if (baseOffY >= calculatedHeight - arrowOffset) arrowOffY = calculatedHeight - arrowOffset;\n\n        if (showLeft) {\n          //Show on left side\n          this.arrowClass = 'right';\n          this.tourHintPosLeft = bounds.left - neededWidth;\n        } else {\n          //Show on right side\n          this.arrowClass = 'left';\n          this.tourHintPosLeft = bounds.right + this.arrowLength;\n        }\n\n        if (this.tourHintPosLeft < 0) this.tourHintPosLeft = 0;\n      }\n\n      this.dynamicArrowStyle = {\n        '--baseOffsetX': -baseOffX + 'px',\n        '--baseOffsetY': -baseOffY + 'px',\n        '--arrowOffsetX': -arrowOffX + 'px',\n        '--arrowOffsetY': -arrowOffY + 'px'\n      };\n\n      //Calculate shadows for the highlight\n      this.bgTopSize = Math.max(0, bounds.top - this.shadowPadding);\n      this.bgBottomSize = Math.max(0, winHeight - (bounds.bottom + this.shadowPadding));\n      this.bgLeftSize = Math.max(0, bounds.left - this.shadowPadding);\n      this.bgRightSize = Math.max(0, winWidth - (bounds.right + this.shadowPadding));\n\n      this.bgContentHeight = winHeight - (this.bgTopSize + this.bgBottomSize);\n    }\n  }\n\n  //Calculates the 'surrounding bounds' of an element so the element and all its children are contained.\n  //This is needed because sometimes elements dont have a width / height but the children define the bounds.\n  private getSurroundingBounds(el: any, bounds: any = {}) {\n    const myBounds = el.getBoundingClientRect();\n\n    if (myBounds.left !== undefined && (bounds.left === undefined || myBounds.left < bounds.left)) {\n      bounds.left = myBounds.left;\n    }\n\n    if (myBounds.right !== undefined && (bounds.right === undefined || myBounds.right > bounds.right)) {\n      bounds.right = myBounds.right;\n    }\n\n    if (myBounds.top !== undefined && (bounds.top === undefined || myBounds.top < bounds.top)) {\n      bounds.top = myBounds.top;\n    }\n\n    if (myBounds.bottom !== undefined && (bounds.bottom === undefined || myBounds.bottom > bounds.bottom)) {\n      bounds.bottom = myBounds.bottom;\n    }\n\n    if (!myBounds.width || !myBounds.height) {\n      const children = el.children;\n      for (const child of children) {\n        this.getSurroundingBounds(child, bounds);\n      }\n    }\n\n    bounds.midX = (bounds.left + bounds.right) / 2;\n    bounds.midY = (bounds.top + bounds.bottom) / 2;\n\n    return bounds;\n  }\n\n  public close() {\n    this.element.nativeElement.remove();\n  }\n}\n","@if (luxTarget) {\n<div\n  class=\"tour-hint\"\n  [ngStyle]=\"dynamicArrowStyle\"\n  [style.left.px]=\"tourHintPosLeft\"\n  [style.top.px]=\"tourHintPosTop\"\n  tabindex=\"0\"\n  #tourHintContainer\n>\n  <div class=\"arrow\" [ngClass]=\"arrowClass\"></div>\n  <ng-content></ng-content>\n</div>\n}\n\n<div\n  class=\"tour-hint-overlay content\"\n  [style.left.px]=\"bgLeftSize\"\n  [style.top.px]=\"bgTopSize\"\n  [style.right.px]=\"bgRightSize\"\n  [style.bottom.px]=\"bgBottomSize\"\n></div>\n\n<div class=\"tour-hint-overlay top\" [style.height.px]=\"bgTopSize\"></div>\n\n<div class=\"tour-hint-overlay bottom\" [style.height.px]=\"bgBottomSize\"></div>\n\n<div class=\"tour-hint-overlay left\" [style.width.px]=\"bgLeftSize\" [style.top.px]=\"bgTopSize\" [style.height.px]=\"bgContentHeight\"></div>\n\n<div class=\"tour-hint-overlay right\" [style.width.px]=\"bgRightSize\" [style.top.px]=\"bgTopSize\" [style.height.px]=\"bgContentHeight\"></div>\n","import { ComponentType } from '@angular/cdk/portal';\nimport { ApplicationRef, ComponentRef, createComponent, EnvironmentInjector, inject, Injectable } from '@angular/core';\nimport { LuxConsentPurpose } from '../lux-consent/lux-consent.model';\nimport { LuxConsentService } from '../lux-consent/lux-consent.service';\nimport { LuxStorageService } from '../lux-util/lux-storage.service';\nimport { LuxTourHintRef } from './lux-tour-hint-model/lux-tour-hint-ref.class';\nimport { ILuxTourHintStepConfig } from './lux-tour-hint-model/lux-tour-hint-step-config.interface';\nimport { LuxTourHintPresetComponent } from './lux-tour-hint-preset/lux-tour-hint-preset.component';\nimport { LuxTourHintComponent } from './lux-tour-hint.component';\n\nexport interface InitializedTourHintConfig {\n  targetId: string;\n  target: any;\n  data?: any;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LuxTourHintService {\n  private appRef = inject(ApplicationRef);\n  private injector = inject(EnvironmentInjector);\n  private tourHintRef = inject(LuxTourHintRef);\n  private storage = inject(LuxStorageService);\n  private consentService = inject(LuxConsentService);\n  public tourContainer?: ComponentRef<LuxTourHintComponent>;\n\n  constructor() {\n    window.addEventListener('popstate', () => {\n      this.onPageNavigate();\n    });\n  }\n\n  //When navigating pages while the tour-hint is open tour-hint must be closed if open!\n  private onPageNavigate() {\n    if (this.tourHintRef.opened) {\n      this.close();\n    }\n  }\n\n  public open(tourConfig: ILuxTourHintStepConfig | ILuxTourHintStepConfig[], optionDontShowAgain = true): LuxTourHintRef {\n    return this.openComponent(LuxTourHintPresetComponent, tourConfig, optionDontShowAgain);\n  }\n\n  public openComponent(\n    comp: ComponentType<any>,\n    tourConfig: ILuxTourHintStepConfig | ILuxTourHintStepConfig[],\n    optionDontShowAgain = true\n  ): LuxTourHintRef {\n    if (!(tourConfig instanceof Array)) {\n      tourConfig = [tourConfig];\n    }\n\n    //Initialize the configs...\n    const initializedConfigs: InitializedTourHintConfig[] = this.prepareConfigs(tourConfig);\n\n    //DSA (Don't show again)\n    const dsaCacheId = this.getDontShowAgainId(initializedConfigs);\n\n    //If the dsa id is in local storage cancel showing the tour-hint\n    if (this.consentService.hasConsent(LuxConsentPurpose.Preferences)) {\n      const cacheEntry = this.storage.getItem(dsaCacheId);\n      if (cacheEntry) {\n        return this.tourHintRef;\n      }\n    } else {\n      this.storage.removeItem(dsaCacheId);\n    }\n\n    //The preset / custom component\n    const innerComp = createComponent(comp, {\n      environmentInjector: this.injector\n    });\n\n    //The outer container for the modal\n    this.tourContainer = createComponent(LuxTourHintComponent, {\n      environmentInjector: this.injector,\n      projectableNodes: [[innerComp.location.nativeElement]]\n    });\n\n    //Add a keylistener for the tour-hint content so we can navigate the tour with arrow keys\n    this.tourContainer.location.nativeElement.addEventListener('keydown', (e: any) => {\n      this.onTourElementKeyPress(e);\n    });\n\n    //Append the container to the html body and attach both generated components so they will work in the angular context\n    document.body.appendChild(this.tourContainer.location.nativeElement);\n    this.appRef.attachView(this.tourContainer.hostView);\n    this.appRef.attachView(innerComp.hostView);\n\n    //Push new tour-hint data to the tourHintRef\n    this.tourHintRef.init(this.tourContainer.instance, initializedConfigs, optionDontShowAgain, () => {\n      this.dsaCallback(dsaCacheId);\n    });\n\n    return this.tourHintRef;\n  }\n\n  private prepareConfigs(configs: ILuxTourHintStepConfig[]): InitializedTourHintConfig[] {\n    const initializedConfigs: InitializedTourHintConfig[] = [];\n\n    for (const config of configs) {\n      const target = document.getElementById(config.targetId);\n      if (!target) {\n        throw new Error(\n          'Cannot find element with id [' + config.targetId + ']. Perhaps tour-hint was started before content initialization?'\n        );\n      }\n\n      initializedConfigs.push({\n        targetId: config.targetId,\n        target: target,\n        data: config.data\n      });\n    }\n\n    return initializedConfigs;\n  }\n\n  private getDontShowAgainId(configs: InitializedTourHintConfig[]): string {\n    let id = 'lux.app.tour-hint.dsa';\n\n    for (let i = 0; i < configs.length; i++) {\n      id += i === 0 ? '.' : '_';\n\n      const config = configs[i];\n      id += config.targetId;\n    }\n\n    return id;\n  }\n\n  private onTourElementKeyPress(e: any) {\n    const key = e.key;\n    if (key === 'Enter') {\n      this.close();\n    } else if (key === 'ArrowLeft') {\n      this.tourHintRef.prev();\n    } else if (key === 'ArrowRight') {\n      this.tourHintRef.next();\n    }\n  }\n\n  private dsaCallback(dsaId: string) {\n    if (this.consentService.hasConsent(LuxConsentPurpose.Preferences)) {\n      this.storage.setItem(dsaId, 'true', false);\n    } else {\n      this.storage.removeItem(dsaId);\n    }\n  }\n\n  public clearDSACacheForConfig(tourConfig: ILuxTourHintStepConfig | ILuxTourHintStepConfig[]) {\n    if (!(tourConfig instanceof Array)) {\n      tourConfig = [tourConfig];\n    }\n\n    const initializedConfigs: InitializedTourHintConfig[] = this.prepareConfigs(tourConfig);\n    const cacheId = this.getDontShowAgainId(initializedConfigs);\n\n    this.storage.removeItem(cacheId);\n  }\n\n  public close(dontShowAgain = false) {\n    this.tourHintRef.close(dontShowAgain);\n  }\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, Output, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LuxIconComponent } from '../lux-icon/lux-icon/lux-icon.component';\nimport { LuxMediaQueryObserverService } from '../lux-util/lux-media-query-observer.service';\nimport { ILuxBreadcrumbEntry } from './lux-breadcrumb-model/lux-breadcrumb-entry.interface';\n\n@Component({\n  selector: 'lux-breadcrumb',\n  templateUrl: './lux-breadcrumb.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgClass, LuxIconComponent]\n})\nexport class LuxBreadcrumbComponent implements OnDestroy {\n  private mediaQueryService = inject(LuxMediaQueryObserverService);\n\n  @Input() luxEntries?: ILuxBreadcrumbEntry[] = [];\n\n  /**\n   * Aktiviert eine mehrzeilige Darstellung (Umbruch). Standard: einzeilig mit Truncation.\n   */\n  @Input() luxWrap = false;\n\n  /**\n   * Zeigt nur den ersten und den letzten Eintrag an. Alle dazwischenliegenden Einträge werden als Platzhalter (\"...\") dargestellt.\n   */\n  @Input() luxShowOnlyFirstAndLast = false;\n\n  @Output() luxClicked = new EventEmitter<ILuxBreadcrumbEntry>();\n\n  mobileView: boolean;\n  subscriptions: Subscription[] = [];\n\n  constructor() {\n    this.mobileView = this.mediaQueryService.activeMediaQuery === 'xs' || this.mediaQueryService.activeMediaQuery === 'sm';\n\n    this.subscriptions.push(\n      this.mediaQueryService.getMediaQueryChangedAsObservable().subscribe((query) => {\n        this.mobileView = query === 'xs' || query === 'sm';\n      })\n    );\n  }\n\n  isCollapsedMode(): boolean {\n    return this.luxShowOnlyFirstAndLast && (this.luxEntries?.length ?? 0) > 2;\n  }\n\n  isDottedEntry(isFirst: boolean, isLast: boolean): boolean {\n    return this.isCollapsedMode() && !isFirst && !isLast;\n  }\n\n  onEntryClick(event: Event, item: ILuxBreadcrumbEntry) {\n    event.preventDefault();\n    this.clicked(item);\n  }\n\n  clicked(item: ILuxBreadcrumbEntry) {\n    this.luxClicked.emit(item);\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((sub) => {\n      sub.unsubscribe();\n    });\n  }\n}\n","<nav class=\"lux-breadcrumb\" aria-label=\"Seitenpfad\">\n  <ol class=\"lux-breadcrumb-container\" [ngClass]=\"{ 'lux-breadcrumb-container-wrap': luxWrap }\">\n    @for (item of luxEntries ?? []; track item) {\n      @if (!$last) {\n        <li\n          class=\"lux-breadcrumb-item\"\n          [ngClass]=\"{ 'lux-breadcrumb-item-mobile': mobileView, 'lux-breadcrumb-item-dotted': isDottedEntry($first, $last) }\"\n        >\n          <a\n            (click)=\"onEntryClick($event, item)\"\n            [attr.href]=\"item.url?.trim() || '#'\"\n            [attr.aria-label]=\"item.name\"\n            [attr.title]=\"item.name\"\n            class=\"lux-breadcrumb-item-title\"\n          >\n            {{ isDottedEntry($first, $last) ? '...' : item.name }}\n          </a>\n          <lux-icon\n            luxIconName=\"lux-interface-arrows-right\"\n            [luxIconSize]=\"mobileView ? '18px' : '20px'\"\n            luxPadding=\"0.25rem 0.1875rem 0.25rem 0.375rem\"\n          ></lux-icon>\n        </li>\n      } @else {\n        <li class=\"lux-breadcrumb-item-current\" aria-current=\"page\" [ngClass]=\"{ 'lux-breadcrumb-current-item-mobile': mobileView }\">\n          <span class=\"lux-breadcrumb-item-title\" [attr.title]='item.name' [attr.aria-label]=\"item.name\">{{ item.name }}</span>\n        </li>\n      }\n    }\n  </ol>\n</nav>\n","import { SPACE } from '@angular/cdk/keycodes';\nimport { DebugElement } from '@angular/core';\nimport { ComponentFixture, tick } from '@angular/core/testing';\n\nexport class LuxTestHelper {\n  /**\n   * Wichtig: aus fakeAsync-Block heraus aufrufen, da hier tick() genutzt wird.\n   * @param input\n   * @param value\n   * @param fixture\n   */\n  public static setInputValue(input: any, value: any, fixture: any) {\n    if (input) {\n      input.value = value;\n      input.dispatchEvent(LuxTestHelper.createFakeEvent('input'));\n      LuxTestHelper.wait(fixture);\n    } else {\n      console.error('UNIT-TEST FEHLER: input ist nicht definiert.');\n    }\n  }\n\n  /**\n   * Wichtig: aus fakeAsync-Block heraus aufrufen, da hier tick() genutzt wird.\n   * Wartet asynchrone Aufrufe ab und ruft die ChangeDetection auf\n   * @param fixture\n   * @param tickDuration\n   */\n  public static wait(fixture: any, tickDuration?: number) {\n    fixture.detectChanges();\n    tick(tickDuration);\n    fixture.detectChanges();\n  }\n\n  /**\n   * Wichtig: aus fakeAsync-Block heraus aufrufen, da hier tick() genutzt wird.\n   * Sendet ein Klick-Event ab und wartet dann.\n   * @param fixture\n   * @param debugElement\n   */\n  public static click(fixture: any, debugElement: DebugElement) {\n    debugElement.triggerEventHandler('click', null);\n    LuxTestHelper.wait(fixture);\n  }\n\n  /**\n   * Utility to dispatch any event on a Node.\n   * @param node\n   * @param event\n   */\n  public static dispatchEvent(node: Node | Window, event: Event): Event {\n    node.dispatchEvent(event);\n    return event;\n  }\n\n  /**\n   * Shorthand to dispatch a fake event on a specified node.\n   * @param node\n   * @param type\n   * @param canBubble\n   */\n  public static dispatchFakeEvent(node: Node | Window, type: string, canBubble?: boolean): Event {\n    return LuxTestHelper.dispatchEvent(node, LuxTestHelper.createFakeEvent(type, canBubble));\n  }\n\n  /**\n   * Shorthand to dispatch a keyboard event with a specified key code.\n   * @param node\n   * @param type\n   * @param keyCode\n   * @param target\n   */\n  public static dispatchKeyboardEvent(node: Node, type: string, keyCode: number, target?: Element): KeyboardEvent {\n    return LuxTestHelper.dispatchEvent(node, LuxTestHelper.createKeyboardEvent(type, keyCode, target)) as KeyboardEvent;\n  }\n\n  /**\n   * Focuses an input and sets its value. Dispatches a fake input event afterwards.\n   * @param element\n   * @param value\n   * @param noInputEvent\n   */\n  public static typeInElement(element: HTMLInputElement, value: string, noInputEvent?: boolean) {\n    element.focus();\n    element.value = value;\n    if (!noInputEvent) {\n      LuxTestHelper.dispatchFakeEvent(element, 'input');\n    }\n  }\n\n  /** Steuerung und triggern von Overlays implementieren */\n\n  /**\n   * Inserts data into an input field, that has to update asynchronous before calling a callback-function\n   * Allows to use RxJs Interval-Timers within the Target-Components.\n   * @param text\n   * @param fixture\n   * @param element\n   * @param callback\n   */\n  public static typeInElementAsync(text: string, fixture: ComponentFixture<any>, element: HTMLInputElement, callback: () => void) {\n    fixture.whenStable().then(() => {\n      LuxTestHelper.typeInElement(element, text);\n      fixture.detectChanges();\n\n      fixture.whenStable().then(() => {\n        LuxTestHelper.dispatchKeyboardEvent(element, 'keydown', SPACE);\n        fixture.detectChanges();\n\n        fixture.whenStable().then(() => {\n          callback();\n        });\n      });\n    });\n  }\n\n  /**\n   * Dispatches a keydown event from an element.\n   * @param type\n   * @param keyCode\n   * @param target\n   * @param key\n   */\n  public static createKeyboardEvent(type: string, keyCode: number, target?: Element, key?: string) {\n    const event = document.createEvent('KeyboardEvent') as any;\n    // Firefox does not support `initKeyboardEvent`, but supports `initKeyEvent`.\n    const initEventFn = (event.initKeyEvent || event.initKeyboardEvent).bind(event);\n    const originalPreventDefault = event.preventDefault;\n\n    initEventFn(type, true, true, window, 0, 0, 0, 0, 0, keyCode);\n\n    // Webkit Browsers don't set the keyCode when calling the init function.\n    // See related bug https://bugs.webkit.org/show_bug.cgi?id=16735\n    Object.defineProperties(event, {\n      keyCode: { get: () => keyCode },\n      key: { get: () => key },\n      target: { get: () => target }\n    });\n\n    return event;\n  }\n\n  /**\n   * Creates a fake event object with any desired event type.\n   * @param type\n   * @param canBubble\n   * @param cancelable\n   */\n  public static createFakeEvent(type: string, canBubble = false, cancelable = true): Event {\n    let event;\n    if (typeof Event === 'function') {\n      event = new Event(type);\n    } else {\n      event = document.createEvent('Event');\n      event.initEvent(type, canBubble, cancelable);\n    }\n\n    return event;\n  }\n\n  public static createDropEvent(files: { name: string; type: string }[]): DragEvent {\n    const dataTransfer = new DataTransfer();\n    files.forEach((file) => {\n      dataTransfer.items.add(LuxTestHelper.createFileBrowserSafe(file.name, file.type));\n    });\n\n    return new DragEvent('drop', { dataTransfer });\n  }\n\n  /**\n   * Erstellt ein leeres File-Objekt mit Namen und Typ via Blob-Constructor (um Edge/IE-Fehler zu vermeiden).\n   * @param name\n   * @param type\n   */\n  public static createFileBrowserSafe(name: string, type: string) {\n    return new File([''], name, { type: type });\n  }\n}\n","import { OverlayContainer } from '@angular/cdk/overlay';\nimport { inject } from '@angular/core/testing';\n\nexport class LuxOverlayHelper {\n  private overlayContainer!: OverlayContainer;\n  private htmlElement!: HTMLElement;\n\n  constructor() {\n    inject([OverlayContainer], (oc: OverlayContainer) => {\n      this.overlayContainer = oc;\n      this.htmlElement = oc.getContainerElement();\n    })();\n  }\n\n  public selectAllFromOverlay(query: string) {\n    return this.htmlElement.querySelectorAll(query) as NodeListOf<HTMLElement>;\n  }\n\n  public selectOneFromOverlay(query: string) {\n    return this.htmlElement.querySelector(query) as HTMLElement;\n  }\n}\n","/*\n * Public API Surface of lux-components-lib\n */\n\n/**\n * LUX-Action\n */\nexport * from './lib/lux-action/lux-action-model/lux-action-component-base.class';\nexport * from './lib/lux-action/lux-button-toggle/lux-button-toggle.component';\nexport * from './lib/lux-action/lux-button/lux-button.component';\nexport * from './lib/lux-action/lux-link-plain/lux-link-plain.component';\nexport * from './lib/lux-action/lux-link/lux-link.component';\nexport { LuxMenuItemComponent } from './lib/lux-action/lux-menu/lux-menu-subcomponents/lux-menu-item.component';\nexport { LuxMenuPanelHeaderComponent } from './lib/lux-action/lux-menu/lux-menu-subcomponents/lux-menu-panel-header.component';\nexport { LuxMenuSectionTitleComponent } from './lib/lux-action/lux-menu/lux-menu-subcomponents/lux-menu-section-title.component';\nexport { LuxMenuTriggerComponent } from './lib/lux-action/lux-menu/lux-menu-subcomponents/lux-menu-trigger.component';\nexport * from './lib/lux-action/lux-menu/lux-menu.component';\n\n/**\n * LUX-Directives\n */\nexport * from './lib/lux-directives/lux-aria/lux-aria-base';\nexport * from './lib/lux-directives/lux-aria/lux-aria-describedby.directive';\nexport * from './lib/lux-directives/lux-aria/lux-aria-expanded.directive';\nexport * from './lib/lux-directives/lux-aria/lux-aria-haspopup.directive';\nexport * from './lib/lux-directives/lux-aria/lux-aria-hidden.directive';\nexport * from './lib/lux-directives/lux-aria/lux-aria-invalid.directive';\nexport * from './lib/lux-directives/lux-aria/lux-aria-label.directive';\nexport * from './lib/lux-directives/lux-aria/lux-aria-labelledby.directive';\nexport * from './lib/lux-directives/lux-aria/lux-aria-required.directive';\nexport * from './lib/lux-directives/lux-aria/lux-aria-role.directive';\nexport * from './lib/lux-directives/lux-autofocus/lux-autofocus.directive';\nexport * from './lib/lux-directives/lux-badge-notification/lux-badge-notification.directive';\nexport * from './lib/lux-directives/lux-infinite-scroll/lux-infinite-scroll.directive';\nexport * from './lib/lux-directives/lux-infinite-scroll/lux-scroll-position';\nexport * from './lib/lux-directives/lux-ripple/lux-ripple.directive';\nexport * from './lib/lux-directives/lux-tabindex/lux-tab-index.directive';\nexport * from './lib/lux-directives/lux-tag-id/lux-custom-tag-id.directive';\nexport * from './lib/lux-directives/lux-tag-id/lux-tag-id.directive';\nexport * from './lib/lux-directives/lux-tooltip/lux-tooltip.directive';\n\n/**\n * LUX-Common\n */\nexport * from './lib/lux-common/lux-badge/lux-badge.component';\nexport * from './lib/lux-common/lux-label/lux-label.component';\nexport {\n  type ILuxMessageChangeEvent,\n  type ILuxMessageCloseEvent\n} from './lib/lux-common/lux-message-box/lux-message-box-model/lux-message-events.interface';\nexport { type ILuxMessage } from './lib/lux-common/lux-message-box/lux-message-box-model/lux-message.interface';\nexport * from './lib/lux-common/lux-message-box/lux-message-box-subcomponents/lux-message.component';\nexport * from './lib/lux-common/lux-message-box/lux-message-box.component';\nexport * from './lib/lux-common/lux-progress/lux-progress.component';\nexport * from './lib/lux-common/lux-table/lux-table-column-visibility-store';\nexport * from './lib/lux-common/lux-table/lux-table-custom-css-config.interface';\nexport * from './lib/lux-common/lux-table/lux-table-data-source';\nexport * from './lib/lux-common/lux-table/lux-table-http/lux-table-http-dao-structure.interface';\nexport * from './lib/lux-common/lux-table/lux-table-http/lux-table-http-dao.interface';\nexport * from './lib/lux-common/lux-table/lux-table-subcomponents/lux-table-column-content.component';\nexport * from './lib/lux-common/lux-table/lux-table-subcomponents/lux-table-column-footer.component';\nexport * from './lib/lux-common/lux-table/lux-table-subcomponents/lux-table-column-header.component';\nexport * from './lib/lux-common/lux-table/lux-table-subcomponents/lux-table-column.component';\nexport * from './lib/lux-common/lux-table/lux-table.component';\nexport * from './lib/lux-common/lux-textbox/lux-textbox.component';\n\n/**\n * LUX-Config\n */\nexport * from './lib/lux-components-config/lux-components-config-parameters.interface';\nexport * from './lib/lux-components-config/lux-components-config.module';\nexport * from './lib/lux-components-config/lux-components-config.service';\n\n/**\n * LUX-Error\n */\nexport * from './lib/lux-error/lux-error-page/lux-error-interfaces/lux-error-page-config.interface';\nexport * from './lib/lux-error/lux-error-page/lux-error-interfaces/lux-error.interface';\nexport * from './lib/lux-error/lux-error-page/lux-error-page.component';\nexport * from './lib/lux-error/lux-error-page/lux-error-services/lux-error-service';\nexport * from './lib/lux-error/lux-error-page/lux-error-services/lux-error-store.service';\nexport * from './lib/lux-error/lux-http-error/lux-http-error-interceptor';\nexport * from './lib/lux-error/lux-http-error/lux-http-error.component';\n\n/**\n * LUX-Form\n */\nexport * from './lib/lux-form/lux-autocomplete-ac/lux-autocomplete-ac.component';\nexport * from './lib/lux-form/lux-checkbox-ac/lux-checkbox-ac.component';\nexport * from './lib/lux-form/lux-chips-ac/lux-chips-ac.component';\nexport * from './lib/lux-form/lux-chips-ac/lux-chips-subcomponents/lux-chip-ac-group.component';\nexport * from './lib/lux-form/lux-chips-ac/lux-chips-subcomponents/lux-chip-ac.component';\nexport * from './lib/lux-form/lux-datepicker-ac/lux-datepicker-ac-adapter';\nexport * from './lib/lux-form/lux-datepicker-ac/lux-datepicker-ac-custom-header/lux-datepicker-ac-custom-header.component';\nexport * from './lib/lux-form/lux-datepicker-ac/lux-datepicker-ac.component';\nexport * from './lib/lux-form/lux-datetimepicker-ac/lux-datetime-overlay-ac/lux-datetime-overlay-ac.component';\nexport * from './lib/lux-form/lux-datetimepicker-ac/lux-datetime-overlay-ac/lux-datetime-overlay-content-ac.component';\nexport * from './lib/lux-form/lux-datetimepicker-ac/lux-datetimepicker-ac-adapter';\nexport * from './lib/lux-form/lux-datetimepicker-ac/lux-datetimepicker-ac.component';\nexport * from './lib/lux-form/lux-file/lux-file-input-ac/lux-file-input-ac.component';\nexport * from './lib/lux-form/lux-file/lux-file-list/lux-file-list.component';\nexport * from './lib/lux-form/lux-file/lux-file-model/lux-file-action-config.interface';\nexport * from './lib/lux-form/lux-file/lux-file-model/lux-file-capture.directive';\nexport * from './lib/lux-form/lux-file/lux-file-model/lux-file-error.interface';\nexport * from './lib/lux-form/lux-file/lux-file-model/lux-file-list-action-config.interface';\nexport * from './lib/lux-form/lux-file/lux-file-model/lux-file-object.interface';\nexport * from './lib/lux-form/lux-file/lux-file-model/lux-file-upload-action-config.interface';\nexport * from './lib/lux-form/lux-file/lux-file-subcomponents/lux-file-delete-dialog/lux-file-delete-dialog.component';\nexport * from './lib/lux-form/lux-file/lux-file-subcomponents/lux-file-progress/lux-file-progress.component';\nexport * from './lib/lux-form/lux-file/lux-file-subcomponents/lux-file-rename-dialog/lux-file-rename-dialog.component';\nexport * from './lib/lux-form/lux-file/lux-file-subcomponents/lux-file-replace-dialog/lux-file-replace-dialog.component';\nexport * from './lib/lux-form/lux-file/lux-file-upload/lux-file-upload.component';\nexport * from './lib/lux-form/lux-form-control-wrapper/lux-form-control-wrapper.component';\nexport * from './lib/lux-form/lux-form-control/lux-form-control-subcomponents/lux-form-hint.component';\nexport * from './lib/lux-form/lux-form-control/lux-form-control-subcomponents/lux-form-label.component';\nexport * from './lib/lux-form/lux-form-control/lux-form-directives/lux-maxlength/lux-max-length.directive';\nexport * from './lib/lux-form/lux-form-control/lux-form-directives/lux-name/lux-name-directive.directive';\nexport * from './lib/lux-form/lux-form-model/lux-form-checkable-base.class';\nexport * from './lib/lux-form/lux-form-model/lux-form-component-base.class';\nexport * from './lib/lux-form/lux-form-model/lux-form-file-base.class';\nexport * from './lib/lux-form/lux-form-model/lux-form-input-base.class';\nexport * from './lib/lux-form/lux-form-model/lux-form-selectable-base.class';\nexport * from './lib/lux-form/lux-input-ac/lux-input-ac-subcomponents/lux-input-ac-prefix.component';\nexport * from './lib/lux-form/lux-input-ac/lux-input-ac-subcomponents/lux-input-ac-suffix.component';\nexport * from './lib/lux-form/lux-input-ac/lux-input-ac.component';\nexport * from './lib/lux-form/lux-radio-ac/lux-radio-ac.component';\nexport * from './lib/lux-form/lux-select-ac/lux-select-ac.component';\nexport * from './lib/lux-form/lux-slider-ac/lux-slider-ac.component';\nexport * from './lib/lux-form/lux-textarea-ac/lux-textarea-ac.component';\nexport * from './lib/lux-form/lux-toggle-ac/lux-toggle-ac.component';\n\n/**\n * LUX-Filter\n */\nexport * from './lib/lux-filter/lux-filter-base/lux-filter';\nexport * from './lib/lux-filter/lux-filter-base/lux-filter-item';\nexport * from './lib/lux-filter/lux-filter-base/lux-filter-item.directive';\nexport * from './lib/lux-filter/lux-filter-dialog/lux-filter-load-dialog/lux-filter-load-dialog.component';\nexport * from './lib/lux-filter/lux-filter-dialog/lux-filter-save-dialog/lux-filter-save-dialog.component';\nexport * from './lib/lux-filter/lux-filter-form/lux-filter-form-extended/lux-filter-form-extended.component';\nexport * from './lib/lux-filter/lux-filter-form/lux-filter-form.component';\n\n/**\n * LUX-Consent\n */\nexport * from './lib/lux-consent/lux-consent-config.interface';\nexport * from './lib/lux-consent/lux-consent-dialog-launcher';\nexport * from './lib/lux-consent/lux-consent-dialog-launcher.service';\nexport * from './lib/lux-consent/lux-consent-dialog.component';\nexport * from './lib/lux-consent/lux-consent.model';\nexport * from './lib/lux-consent/lux-consent.service';\n\n/**\n * LUX-Icon\n */\nexport * from './lib/lux-icon/lux-icon/lux-icon-registry.service';\nexport * from './lib/lux-icon/lux-icon/lux-icon.component';\nexport * from './lib/lux-icon/lux-icon/lux-svg-icon';\nexport * from './lib/lux-icon/lux-image/lux-image.component';\n\n/**\n * LUX-Tenant-Logo\n */\nexport * from './lib/lux-tenant-logo/lux-tenant-logo.component';\n\n/**\n * LUX-Layout\n */\nexport { visibilityTrigger } from './lib/lux-common/lux-message-box/lux-message-box-model/lux-message-box.animations';\nexport * from './lib/lux-layout/lux-accordion/lux-accordion.component';\nexport * from './lib/lux-layout/lux-app-content/lux-app-content.component';\nexport * from './lib/lux-layout/lux-app-footer/lux-app-footer-button-info';\nexport * from './lib/lux-layout/lux-app-footer/lux-app-footer-button.service';\nexport * from './lib/lux-layout/lux-app-footer/lux-app-footer-fixed.service';\nexport * from './lib/lux-layout/lux-app-footer/lux-app-footer-link-info';\nexport * from './lib/lux-layout/lux-app-footer/lux-app-footer-link.service';\nexport * from './lib/lux-layout/lux-app-footer/lux-app-footer.component';\nexport * from './lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-action-nav/lux-app-header-ac-action-nav-item/lux-app-header-ac-action-nav-item-custom.component';\nexport * from './lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-action-nav/lux-app-header-ac-action-nav-item/lux-app-header-ac-action-nav-item.component';\nexport * from './lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-action-nav/lux-app-header-ac-action-nav.component';\nexport * from './lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-nav-menu/lux-app-header-ac-nav-menu-item/lux-app-header-ac-nav-menu-item.component';\nexport * from './lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-nav-menu/lux-app-header-ac-nav-menu.component';\nexport * from './lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-session-timer/lux-app-header-ac-session-timer';\nexport * from './lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-session-timer/lux-app-header-ac-session-timer-interceptor';\nexport * from './lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-session-timer/lux-app-header-ac-session-timer-service/lux-app-header-ac-session-timer.service';\nexport * from './lib/lux-layout/lux-app-header-ac/lux-app-header-ac-subcomponents/lux-app-header-ac-user-menu.component';\nexport * from './lib/lux-layout/lux-app-header-ac/lux-app-header-ac.component';\nexport * from './lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-app-header-action-nav/lux-app-header-action-nav-item/lux-app-header-action-nav-item-custom.component';\nexport * from './lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-app-header-action-nav/lux-app-header-action-nav-item/lux-app-header-action-nav-item.component';\nexport * from './lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-app-header-action-nav/lux-app-header-action-nav.component';\nexport * from './lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-app-header-right-nav/lux-app-header-right-nav.component';\nexport * from './lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-lang-select/lux-lang-select.component';\nexport * from './lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-lang-select/lux-locale';\nexport {\n  sideNavAnimation,\n  sideNavOverlayAnimation\n} from './lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav-model/lux-side-nav-animations';\nexport * from './lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav-subcomponents/lux-side-nav-footer.component';\nexport * from './lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav-subcomponents/lux-side-nav-header.component';\nexport * from './lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav-subcomponents/lux-side-nav-item.component';\nexport * from './lib/lux-layout/lux-app-header/lux-app-header-subcomponents/lux-side-nav/lux-side-nav.component';\nexport * from './lib/lux-layout/lux-app-header/lux-app-header.component';\nexport { expansionAnim } from './lib/lux-layout/lux-card/lux-card-model/lux-card-animations';\nexport * from './lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-actions.component';\nexport * from './lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-content-expanded.component';\nexport * from './lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-content.component';\nexport * from './lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-custom-header.component';\nexport * from './lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-heading.component';\nexport * from './lib/lux-layout/lux-card/lux-card-subcomponents/lux-card-info.component';\nexport * from './lib/lux-layout/lux-card/lux-card.component';\nexport * from './lib/lux-layout/lux-checkbox-container-ac/lux-checkbox-container-ac.component';\nexport * from './lib/lux-layout/lux-divider/lux-divider.component';\nexport * from './lib/lux-layout/lux-list/lux-list-subcomponents/lux-list-item-content.component';\nexport * from './lib/lux-layout/lux-list/lux-list-subcomponents/lux-list-item-custom-header.component';\nexport * from './lib/lux-layout/lux-list/lux-list-subcomponents/lux-list-item-icon.component';\nexport * from './lib/lux-layout/lux-list/lux-list-subcomponents/lux-list-item.component';\nexport * from './lib/lux-layout/lux-list/lux-list.component';\nexport * from './lib/lux-layout/lux-master-detail-ac/lux-detail-header-ac/lux-detail-header-ac.component';\nexport * from './lib/lux-layout/lux-master-detail-ac/lux-detail-view-ac/lux-detail-view-ac.component';\nexport * from './lib/lux-layout/lux-master-detail-ac/lux-detail-view-ac/lux-detail-wrapper-ac.component';\nexport * from './lib/lux-layout/lux-master-detail-ac/lux-master-detail-ac.component';\nexport * from './lib/lux-layout/lux-master-detail-ac/lux-master-footer-ac/lux-master-footer-ac.component';\nexport * from './lib/lux-layout/lux-master-detail-ac/lux-master-header-ac/lux-master-header-ac.component';\nexport * from './lib/lux-layout/lux-master-detail-ac/lux-master-header-ac/lux-master-header-content-ac.component';\nexport * from './lib/lux-layout/lux-master-detail-ac/lux-master-list-ac/lux-master-list-ac.component';\nexport * from './lib/lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-action.component';\nexport * from './lib/lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-content.component';\nexport * from './lib/lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-header-description.component';\nexport * from './lib/lux-layout/lux-panel/lux-panel-subcomponents/lux-panel-header-title.component';\nexport * from './lib/lux-layout/lux-panel/lux-panel.component';\nexport * from './lib/lux-layout/lux-stepper-large/lux-stepper-large-model/lux-stepper-large-button-info';\nexport * from './lib/lux-layout/lux-stepper-large/lux-stepper-large-model/lux-stepper-large-click-event';\nexport * from './lib/lux-layout/lux-stepper-large/lux-stepper-large-model/lux-stepper-large-selection-event';\nexport * from './lib/lux-layout/lux-stepper-large/lux-stepper-large-model/lux-stepper-large-step.interface';\nexport * from './lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay-config';\nexport * from './lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay-data';\nexport * from './lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay-ref';\nexport * from './lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay.component';\nexport * from './lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-mobile-overlay/lux-stepper-large-mobile-overlay.service';\nexport * from './lib/lux-layout/lux-stepper-large/lux-stepper-large-subcomponents/lux-stepper-large-step/lux-stepper-large-step.component';\nexport * from './lib/lux-layout/lux-stepper-large/lux-stepper-large.component';\nexport * from './lib/lux-layout/lux-stepper/lux-stepper-helper.service';\nexport * from './lib/lux-layout/lux-stepper/lux-stepper-model/lux-stepper-button-config.interface';\nexport * from './lib/lux-layout/lux-stepper/lux-stepper-model/lux-stepper-parent.class';\nexport * from './lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-step-content.component';\nexport * from './lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-step-header.component';\nexport * from './lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-step.component';\nexport * from './lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-stepper-horizontal/lux-stepper-horizontal.component';\nexport * from './lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-stepper-nav-buttons/lux-stepper-nav-buttons.component';\nexport * from './lib/lux-layout/lux-stepper/lux-stepper-subcomponents/lux-stepper-vertical/lux-stepper-vertical.component';\nexport * from './lib/lux-layout/lux-stepper/lux-stepper.component';\nexport * from './lib/lux-layout/lux-tabs/lux-tabs-subcomponents/lux-tab.component';\nexport * from './lib/lux-layout/lux-tabs/lux-tabs.component';\nexport * from './lib/lux-layout/lux-tile-ac/lux-tile-ac.component';\nexport * from './lib/lux-layout/lux-tile/lux-tile.component';\n\n/**\n * LUX-Lookup\n */\nexport * from './lib/lux-lookup/lux-lookup-autocomplete-ac/lux-autocomplete-error-state-matcher-ac';\nexport * from './lib/lux-lookup/lux-lookup-autocomplete-ac/lux-lookup-autocomplete-ac.component';\nexport * from './lib/lux-lookup/lux-lookup-combobox-ac/lux-lookup-combobox-ac.component';\nexport * from './lib/lux-lookup/lux-lookup-label/lux-lookup-label.component';\nexport * from './lib/lux-lookup/lux-lookup-model/lux-lookup-component';\nexport * from './lib/lux-lookup/lux-lookup-model/lux-lookup-error-state-matcher';\nexport * from './lib/lux-lookup/lux-lookup-model/lux-lookup-parameters';\nexport * from './lib/lux-lookup/lux-lookup-model/lux-lookup-table-entry';\nexport * from './lib/lux-lookup/lux-lookup-service/lux-lookup-handler.service';\nexport * from './lib/lux-lookup/lux-lookup-service/lux-lookup.service';\n\n/**\n * LUX-Pipes\n */\nexport * from './lib/lux-pipes/lux-alphabetically-sorted/lux-alphabetically-sorted.pipe';\nexport * from './lib/lux-pipes/lux-property-from-object/lux-property-from-object.pipe';\nexport * from './lib/lux-pipes/lux-relative-timestamp/lux-relative-timestamp.pipe';\nexport * from './lib/lux-pipes/lux-render-property/lux-render-property.pipe';\n\n/**\n * LUX-Popups\n */\nexport * from './lib/lux-popups/lux-dialog/lux-dialog-model/lux-dialog-action.interface';\nexport * from './lib/lux-popups/lux-dialog/lux-dialog-model/lux-dialog-config.interface';\nexport * from './lib/lux-popups/lux-dialog/lux-dialog-model/lux-dialog-preset-config.interface';\nexport * from './lib/lux-popups/lux-dialog/lux-dialog-model/lux-dialog-ref.class';\nexport * from './lib/lux-popups/lux-dialog/lux-dialog-preset/lux-dialog-preset.component';\nexport * from './lib/lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-actions.component';\nexport * from './lib/lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-content.component';\nexport * from './lib/lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure-subcomponents/lux-dialog-title.component';\nexport * from './lib/lux-popups/lux-dialog/lux-dialog-structure/lux-dialog-structure.component';\nexport * from './lib/lux-popups/lux-dialog/lux-dialog.service';\nexport * from './lib/lux-popups/lux-popup/lux-popup-actions.directive';\nexport * from './lib/lux-popups/lux-popup/lux-popup-trigger.directive';\nexport * from './lib/lux-popups/lux-popup/lux-popup.component';\nexport * from './lib/lux-popups/lux-popup/lux-popup.types';\nexport * from './lib/lux-popups/lux-snackbar/lux-snackbar-component/lux-snackbar.component';\nexport * from './lib/lux-popups/lux-snackbar/lux-snackbar-config';\nexport * from './lib/lux-popups/lux-snackbar/lux-snackbar.service';\n\n/**\n * LUX-Tour-Hint\n */\nexport * from './lib/lux-tour-hint/lux-tour-hint-model/lux-tour-hint-ref.class';\nexport * from './lib/lux-tour-hint/lux-tour-hint-model/lux-tour-hint-step-config.interface';\nexport * from './lib/lux-tour-hint/lux-tour-hint-preset/lux-tour-hint-preset.component';\nexport * from './lib/lux-tour-hint/lux-tour-hint.component';\nexport * from './lib/lux-tour-hint/lux-tour-hint.service';\n\n/**\n * LUX-Breadcrumb\n */\nexport * from './lib/lux-breadcrumb/lux-breadcrumb-model/lux-breadcrumb-entry.interface';\nexport * from './lib/lux-breadcrumb/lux-breadcrumb.component';\n\n/**\n * LUX-Util\n */\nexport * from './lib/lux-util/env-utils';\nexport * from './lib/lux-util/lux-app.service';\nexport * from './lib/lux-util/lux-colors.enum';\nexport * from './lib/lux-util/lux-console.service';\nexport * from './lib/lux-util/lux-media-query-observer.service';\nexport * from './lib/lux-util/lux-paginator-intl';\nexport * from './lib/lux-util/lux-storage.service';\nexport * from './lib/lux-util/lux-util';\nexport * from './lib/lux-util/testing/lux-test-helper';\nexport * from './lib/lux-util/testing/lux-test-overlay-helper';\n\n/**\n * LUX-Theme\n */\nexport * from './lib/lux-theme/lux-theme';\nexport * from './lib/lux-theme/lux-theme.service';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["take","uuidv4","filter","LuxDatetimeOverlayAcComponent_1","map","tap","DOCUMENT","inject"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}